diff options
Diffstat (limited to '')
78 files changed, 53372 insertions, 0 deletions
diff --git a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt new file mode 100644 index 00000000..7e634529 --- /dev/null +++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt @@ -0,0 +1,533 @@ +WEBVTT captioned by mohsen + +00:00:00.000 --> 00:00:04.199 +Thank you for the talk. I mean, it was a fairly long one and we + +00:00:04.200 --> 00:00:07.999 +had two very distinct parts, one which dealt with a + +00:00:08.000 --> 00:00:12.079 +philosophy of Libre-Halaal software and then the application, + +00:00:12.080 --> 00:00:14.279 +obviously, of BISOS. So thank you so much for the + +00:00:14.280 --> 00:00:17.839 +presentation. Before we get started with the question, and + +00:00:17.840 --> 00:00:21.799 +for the record, we have about 14 minutes of question time, is + +00:00:21.800 --> 00:00:25.079 +there anything that you'd like to add on top of your + +00:00:25.080 --> 00:00:27.759 +presentation, something that perhaps would not have fit in + +00:00:27.760 --> 00:00:33.399 +the actual presentation format? Sure, but prior to that, + +00:00:33.400 --> 00:00:37.839 +félicitations à tous les Français pour le rouvrir de + +00:00:37.840 --> 00:00:42.719 +Notre-Dame. Thank you. I'll say thank you because I'm a + +00:00:42.720 --> 00:00:48.039 +Francophone and I'm also French, but OK. + +00:00:48.040 --> 00:00:58.159 +Yeah, so a few things have come up in various other talks, + +00:00:58.160 --> 00:01:04.359 +that kind of EmacsConf 2024 talks, that kind of dovetail + +00:01:04.360 --> 00:01:10.599 +with what I was saying. One idea was Peter Prevos's + +00:01:10.600 --> 00:01:20.639 +observation of working with Emacs versus working on Emacs. + +00:01:20.640 --> 00:01:28.279 +And I'm all for that. So the idea of BLEE is that + +00:01:28.280 --> 00:01:32.599 +Others can package things, and we are seeing this in the form + +00:01:32.600 --> 00:01:38.119 +of redistributions. There is Doom, there is Spacemacs, and + +00:01:38.120 --> 00:01:44.079 +we are seeing the evolution of Emacs into layers. So there is + +00:01:44.080 --> 00:01:50.119 +the core Emacs, and there are layers on top of it. And Peter + +00:01:50.120 --> 00:01:59.799 +also mentioned about too much choice, this notion of + +00:01:59.800 --> 00:02:08.919 +Not always too much choice is the right thing to have. And + +00:02:08.920 --> 00:02:18.279 +packaging Emacs with a layer on top of Debian gives you a + +00:02:18.280 --> 00:02:24.159 +platform and an environment where the choices are a lot + +00:02:24.160 --> 00:02:31.159 +less. And that is not necessarily a bad thing. + +00:02:31.160 --> 00:02:36.719 +So that was one idea. The other idea or the other theme + +00:02:36.720 --> 00:02:42.919 +throughout the various talks that we saw was this concept of + +00:02:42.920 --> 00:02:53.519 +mixing org-mode with programming languages and what Babel + +00:02:53.520 --> 00:03:00.479 +has done is two things. One is it has successfully + +00:03:00.480 --> 00:03:06.799 +integrated org-mode with all kinds of languages. And that + +00:03:06.800 --> 00:03:13.039 +has happened in the context of literate programming. So + +00:03:13.040 --> 00:03:16.839 +a talk coming after mine is literate programming for the + +00:03:16.840 --> 00:03:22.399 +21st century, mixing org mode with program languages. And + +00:03:22.400 --> 00:03:27.359 +what I am saying is that there is an alternative and that's + +00:03:27.360 --> 00:03:33.839 +great, but we should also, consider a traditional + +00:03:33.840 --> 00:03:40.159 +programming mixed with org-mode and, polymode is key to + +00:03:40.160 --> 00:03:49.239 +that. So those were some of the key concepts that I saw a + +00:03:49.240 --> 00:03:55.799 +resonance with as the conference went forward. Yeah, and I + +00:03:55.800 --> 00:03:59.959 +think, if my memory serves me right, we have another talk + +00:03:59.960 --> 00:04:04.199 +about hyperbole this year, right after this Q&A session. + +00:04:04.200 --> 00:04:07.919 +And hyperbole, it's not Org Mode, but I'm not sure if you're + +00:04:07.920 --> 00:04:10.359 +familiar with it, Mohsen, you might have seen it from + +00:04:10.360 --> 00:04:14.639 +various talks last year, but it also tends to have a similar + +00:04:14.640 --> 00:04:18.919 +stance than you, with the fact that text should be embedded + +00:04:18.920 --> 00:04:21.919 +in programming languages rather than having Org-Mode + +00:04:21.920 --> 00:04:25.439 +implement, I mean, integrate other languages. And I found + +00:04:25.440 --> 00:04:28.359 +it funny that we have your talk and this talk which are about + +00:04:28.360 --> 00:04:32.999 +the other direction, which I find very resonating as well. + +00:04:33.000 --> 00:04:40.439 +Right, right, right. So in terms of other things that did not + +00:04:40.440 --> 00:04:46.999 +fit into my talk is that the several concepts that I + +00:04:47.000 --> 00:04:49.599 +introduced, namely + +00:04:49.600 --> 00:04:57.879 +Dynamic Blocks everywhere and COMEEGA. + +00:04:57.880 --> 00:05:07.719 +I'd be happy to expand on those by sharing a screen in due + +00:05:07.720 --> 00:05:12.519 +course, whatever is appropriate. Sure, considering the + +00:05:12.520 --> 00:05:16.119 +time that we have, we only have about 8 minutes 30 and we + +00:05:16.120 --> 00:05:18.999 +already have about four, five questions actually. I + +00:05:19.000 --> 00:05:22.599 +suggest we perhaps leave the screen sharing until later if + +00:05:22.600 --> 00:05:25.399 +people are interested. I mean this Q&A can last as long as you + +00:05:25.400 --> 00:05:30.079 +want. That makes perfect sense. OK, cool. So how about we + +00:05:30.080 --> 00:05:33.279 +focus on the question now and starting with the first one. + +NOTE Q: I'm from Brazil, which edition would you recommend? + +00:05:33.280 --> 00:05:36.279 +You mentioned that there are two editions, one named at + +00:05:36.280 --> 00:05:40.159 +Westerners and one for worldwide readers. I'm from Brazil. + +00:05:40.160 --> 00:05:42.599 +Which edition would you recommend? It's a Western country, + +00:05:42.600 --> 00:05:45.479 +but you didn't make the distinction exclusive for the + +00:05:45.480 --> 00:05:48.199 +second edition. So I thought it would be better to ask. + +00:05:48.200 --> 00:05:56.119 +Right. So definitely, I would say for everybody who is on + +00:05:56.120 --> 00:06:01.959 +this conference, the international edition is the right + +00:06:01.960 --> 00:06:11.639 +choice. In this book, I take some aggressive stances against + +00:06:11.640 --> 00:06:19.279 +intellectual property and I link that specifically to the + +00:06:19.280 --> 00:06:27.439 +American culture. So there are pieces in the book where the + +00:06:27.440 --> 00:06:36.399 +typical American audience may be offended. And if your skin + +00:06:36.400 --> 00:06:43.279 +is thick enough to deal with what I consider reasonable + +00:06:43.280 --> 00:06:48.319 +criticism, then the International Edition is definitely + +00:06:48.320 --> 00:06:54.439 +the better choice. Right. So yeah, I believe you also + +00:06:54.440 --> 00:06:56.959 +mentioned it. Pretty much exactly the same thing in your + +00:06:56.960 --> 00:07:00.239 +talk. So if you need to review, just watch the talk. And I + +00:07:00.240 --> 00:07:03.439 +think Mohsen also provides extra information about this. + +00:07:03.440 --> 00:07:07.079 +Moving on to the second question. Thank you for this talk. + +NOTE Q: Thank you for this talk! How does your perspective interface with works such as Yanis Varoufakis' Technofeudalism? + +00:07:07.080 --> 00:07:10.319 +How does your perspective interface with work such as Yanis + +00:07:10.320 --> 00:07:14.639 +Varoufakis' Technofeudalism? + +00:07:14.640 --> 00:07:24.919 +I haven't read much of that. I think there is a whole lot of + +00:07:24.920 --> 00:07:34.199 +global growth and collective understanding towards this + +00:07:34.200 --> 00:07:42.479 +notion that the direction we are headed in and by that, I mean + +00:07:42.480 --> 00:07:46.879 +American digital ecosystems + +00:07:46.880 --> 00:07:53.159 +are dangerous and that we should revisit + +00:07:53.160 --> 00:08:03.239 +the entirety of the model and strategy. + +00:08:03.240 --> 00:08:10.119 +If the person who asked the question has any additional + +00:08:10.120 --> 00:08:16.119 +information, I'll be happy to hear it. Sure. We'll see if the + +00:08:16.120 --> 00:08:19.559 +person actually comes back to this. All right. In the + +00:08:19.560 --> 00:08:21.979 +meantime, moving on to the next question. + +NOTE Q: To what extent do you agree that the introduction of proprietary systems in education creates an environment for exploitation while at the same time diluting the learning value of the curriculum? + +00:08:21.980 --> 00:08:22.959 +To what extent do + +00:08:22.960 --> 00:08:25.519 +you agree that the introduction of proprietary systems in + +00:08:25.520 --> 00:08:29.279 +education creates an environment for exploitation whilst + +00:08:29.280 --> 00:08:31.679 +at the same time diluting the learning value of the + +00:08:31.680 --> 00:08:34.879 +curriculum? My computing education at school amounted to + +00:08:34.880 --> 00:08:38.399 +learning how to use the Microsoft Office suite, i.e. the + +00:08:38.400 --> 00:08:44.679 +opposite of lasting open knowledge. Yeah, that's right on + +00:08:44.680 --> 00:08:49.719 +the mark. That's right on the mark. So the idea is that + +00:08:49.720 --> 00:08:55.919 +teaching and learning should be unrestricted. In the + +00:08:55.920 --> 00:09:02.479 +Muslim tradition and in Iranian tradition, we say that + +00:09:02.480 --> 00:09:12.919 +passing along the learning is the tax on having learned. So + +00:09:12.920 --> 00:09:20.359 +absolutely. I think it makes very little sense for the + +00:09:20.360 --> 00:09:27.039 +proprietary Microsoft software to be used as part of + +00:09:27.040 --> 00:09:33.519 +education. So the question is right on the mark. Okay, + +00:09:33.520 --> 00:09:38.519 +great. Let me just take a note of this. All right, moving on to + +00:09:38.520 --> 00:09:40.052 +the next question. + +NOTE Q: As a specific example of how "ownership is not clean" ... + +00:09:40.053 --> 00:09:43.359 +As a specific example of how ownership is + +00:09:43.360 --> 00:09:46.239 +not something clean, look at the Star Trek Picard series. + +00:09:46.240 --> 00:09:48.839 +They continuously asked Patrick Stewart to come to do + +00:09:48.840 --> 00:09:52.159 +another Star Trek series, but he couldn't because Star Trek + +00:09:52.160 --> 00:09:54.959 +changed from what it used to be, at least until they came up + +00:09:54.960 --> 00:09:57.999 +with a series that honored what Star Trek used to be. Does + +00:09:58.000 --> 00:10:21.839 +this intersect? Let me read this for a moment. + +00:10:21.840 --> 00:10:30.599 +Yeah, I am not sure I fully get the point, but. Let me make a + +00:10:30.600 --> 00:10:35.959 +point about my criticisms of the FOSS movement + +00:10:35.960 --> 00:10:47.399 +in the presentation and in the book. The idea is that we have + +00:10:47.400 --> 00:10:53.919 +jumped on the FOSS movement and recognize it as an + +00:10:53.920 --> 00:11:02.279 +alternative but we haven't looked deeply enough to see if + +00:11:02.280 --> 00:11:07.759 +our own philosophy and movement have problems. The + +00:11:07.760 --> 00:11:14.959 +problems that I note is that the FOSS movement does not + +00:11:14.960 --> 00:11:21.279 +recognize clearly and explicitly that the entirety of the + +00:11:21.280 --> 00:11:30.399 +intellectual property rights regime is flawed. The second + +00:11:30.400 --> 00:11:37.239 +piece is that it's only now that we are seeing the FOSS + +00:11:37.240 --> 00:11:45.479 +movement is broader than the Western world. The third + +00:11:45.480 --> 00:11:54.919 +problem is that the labels of Free Software and Open Source + +00:11:54.920 --> 00:12:01.159 +are not necessarily correct. The fourth problem is that we + +00:12:01.160 --> 00:12:07.239 +are not paying enough attention to establishing a + +00:12:07.240 --> 00:12:09.999 +relationship with society. + +00:12:10.000 --> 00:12:16.439 +So there's a whole chapter in the book dedicated to this + +00:12:16.440 --> 00:12:23.959 +topic. What I'm not sure about is if I got the point of the + +00:12:23.960 --> 00:12:30.279 +question correctly. So again, if the person who asked the + +00:12:30.280 --> 00:12:35.679 +question could clarify, I'll be happy to further expand. + +00:12:35.680 --> 00:12:40.279 +Okay, considering the time, we only have about one minute to + +00:12:40.280 --> 00:12:42.959 +ten seconds until we go. So what we're going to do, as we + +00:12:42.960 --> 00:12:45.439 +usually do, Mohsen, is that we're going to move the stream + +00:12:45.440 --> 00:12:47.839 +onto the next talk. And if you want to take a little bit of time + +00:12:47.840 --> 00:12:51.799 +in this room to answer the question, I'm putting a link to the + +00:12:51.800 --> 00:12:56.519 +pad in the BBB chat so you can open it on your end. But as we are + +00:12:56.520 --> 00:12:59.319 +still live for 15 more seconds, do you have any last words? + +00:12:59.320 --> 00:13:09.039 +Keep up the good work. Those would be my last words, that the + +00:13:09.040 --> 00:13:14.239 +Free Software and the Open Source and Emacs are a very valid + +00:13:14.240 --> 00:13:24.479 +strategy for inside of IPR resistance. And thank you, Leo + +00:13:24.480 --> 00:13:29.719 +and Sacha and the rest of the folks for this wonderful yearly + +00:13:29.720 --> 00:13:33.559 +event. Well, thank you so much. And it's always a pleasure to + +00:13:33.560 --> 00:13:36.119 +have you. And thank you for your thankings. So we'll be + +00:13:36.120 --> 00:13:38.439 +moving to the next talk in 10 seconds. Mohsen, thank you so + +00:13:38.440 --> 00:13:47.559 +much. And I'll see you later. Thank you. Bye-bye. Bye. + +00:13:47.560 --> 00:13:50.159 +All right. We are off air. So thank you so much, Mohsen. I'll + +00:13:50.160 --> 00:13:52.559 +need to get moving to get ready for the next talk. So again, + +00:13:52.560 --> 00:13:54.519 +feel free to take the time you need to answer the questions. + +00:13:54.520 --> 00:13:56.719 +I'm going to stop sharing my screen because I need to leave. + +00:13:56.720 --> 00:13:59.319 +But take all the time you need. And when you're finished, you + +00:13:59.320 --> 00:14:04.039 +can just leave the room. OK. All right, bye-bye. Thank you. + +00:14:04.040 --> 00:14:23.439 +Great. I see one more person in the room. + +00:14:23.440 --> 00:14:35.679 +Hi, John. + +00:14:35.680 --> 00:14:38.079 +I was looking at the questions. + +00:14:38.080 --> 00:14:46.239 +To see if there is more that I can add. So, + +00:14:46.240 --> 00:14:54.919 +through the regard of societal impacts on ethical, + +00:14:54.920 --> 00:14:58.439 +philosophical and wider FOSS community. I'm involved in + +00:14:58.440 --> 00:15:02.239 +politics in my country, my party is very sympathetic to + +00:15:02.240 --> 00:15:05.277 +FOSS ideas and I have public... + +NOTE Q: Do you have any recommended reading materials designed for such an audience? + +00:15:05.278 --> 00:15:08.039 +Do you have any recommendation + +00:15:08.040 --> 00:15:12.359 +to reading materials designed for such an audience? Um, + +00:15:12.360 --> 00:15:17.999 +yeah, this is with regard to the last question + +00:15:18.000 --> 00:15:24.439 +that's on the etherpad at this moment. The idea is + +00:15:24.440 --> 00:15:32.199 +that my own book would be an excellent resource. I'd + +00:15:32.200 --> 00:15:39.279 +say the bibliography in the book contains various + +00:15:39.280 --> 00:15:43.039 +other pointers that could be quite useful. + +00:15:43.040 --> 00:15:55.399 +I'm reading again. + +00:15:55.400 --> 00:15:57.799 +Yeah. + +00:15:57.800 --> 00:16:20.159 +Very good. If there are no other questions, + +00:16:20.160 --> 00:16:31.839 +I think I'm going to consider this a day and move on. + +00:16:31.840 --> 00:16:43.760 +Thank you. diff --git a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt new file mode 100644 index 00000000..54741ebf --- /dev/null +++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt @@ -0,0 +1,47 @@ +WEBVTT + + +00:00:00.000 --> 00:05:17.450 +Introduction + +00:05:17.550 --> 00:08:02.717 +Blee: A Bigger and Different Vision for Emacs + +00:08:02.817 --> 00:15:49.750 +The ``Nature of Polyexistentials'' Book + +00:15:49.850 --> 00:20:04.500 +Governance of Polyexistentials + +00:20:04.600 --> 00:25:59.983 +Proper Governance of Manner-of-Existence of Software + +00:26:00.083 --> 00:26:24.983 +Blee Overview + +00:26:25.083 --> 00:33:27.567 +Bootstrapping: From Fresh Debian to Raw-BISOS and Raw-Blee + +00:33:27.667 --> 00:35:13.950 +Some Blee Concepts + +00:35:14.050 --> 00:35:59.050 +Blee Org Dynamic Blocks --- Everywhere + +00:35:59.150 --> 00:37:51.750 +COMEEGA -- Collaborative Org-Mode Enhanced Emacs Generalized Authorship + +00:37:51.850 --> 00:38:12.133 +Blee Panels: Active Org-Mode Universal Self-Documentation + +00:38:12.233 --> 00:41:04.850 +Some BISOS and Blee Capability Bundles + +00:41:04.950 --> 00:42:54.167 +Next Steps (2024) + +00:42:54.267 --> 00:43:38.333 +Economics and Business Dimmensions of ByStar Digital Ecosystem + +00:43:38.433 --> 00:45:25.632 +Pointers for Digging Deeper diff --git a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt new file mode 100644 index 00000000..3da4b409 --- /dev/null +++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt @@ -0,0 +1,2395 @@ +WEBVTT captioned by mohsen + +00:00:03.659 --> 00:00:08.399 +Greetings. Salaam. This is Mohsen Banan. + +00:00:08.400 --> 00:00:11.479 +I am a software and internet engineer. + +00:00:11.480 --> 00:00:16.359 +The title of this presentation is "About Blee". + +00:00:16.360 --> 00:00:17.259 +Blee stands for + +00:00:17.260 --> 00:00:22.439 +ByStar Libre-Halaal Emacs Environment. + +00:00:22.440 --> 00:00:24.319 +In this presentation I want to look + +00:00:24.320 --> 00:00:28.319 +at Emacs as a primary ingredient for the usage + +00:00:28.320 --> 00:00:32.599 +environment of an autonomy and morality + +00:00:32.600 --> 00:00:35.799 +directed digital ecosystem. + +00:00:35.800 --> 00:00:38.279 +My focus here is not just Emacs. + +00:00:38.280 --> 00:00:42.319 +This is about augmenting Emacs in the context of + +00:00:42.320 --> 00:00:46.679 +our own specific digital ecosystem. + +00:00:46.716 --> 00:00:48.919 +This presentation is part theoretical + +00:00:48.920 --> 00:00:50.719 +and part practical. + +00:00:50.720 --> 00:00:52.999 +I spend about half of my time on the + +00:00:53.000 --> 00:00:54.999 +theory and the bigger picture. + +00:00:55.000 --> 00:01:01.439 +The second half is hands on and Emacs centric. + +00:01:01.440 --> 00:01:04.959 +Emacs has long been recognized as the ultimate + +00:01:04.960 --> 00:01:09.039 +integration platform, enabling the creation of an + +00:01:09.040 --> 00:01:12.819 +unparalleled user environment. + +00:01:12.820 --> 00:01:16.239 +Tomohiro is right on the mark when he says: + +00:01:16.240 --> 00:01:19.239 +"The reason why Emacs platform is good + +00:01:19.240 --> 00:01:21.919 +is that it cooperates with OS, + +00:01:21.920 --> 00:01:24.999 +not because it is good by itself." + +00:01:25.000 --> 00:01:27.519 +But this recognition has often been in the + +00:01:27.520 --> 00:01:31.679 +context of a generic and abstract "OS" + +00:01:31.680 --> 00:01:36.459 +So, I am updating MATSUYAMA's observation as: + +00:01:36.460 --> 00:01:39.759 +"The reason why Emacs platform is good is that + +00:01:39.760 --> 00:01:43.799 +it facilitates creation of specific integrated + +00:01:43.800 --> 00:01:48.279 +usage environments like Blee, which cooperate + +00:01:48.280 --> 00:01:51.359 +with Debian and BISOS as part of + +00:01:51.360 --> 00:01:57.319 +the Libre-Halaal ByStar Digital Ecosystem." + +00:01:57.320 --> 00:02:01.959 +Emacs is an especially good choice as the universal core of + +00:02:01.960 --> 00:02:07.839 +user environments of a digital ecosystem, because it has an + +00:02:07.840 --> 00:02:12.159 +incredibly powerful display engine, and an incredibly + +00:02:12.160 --> 00:02:16.559 +powerful Elisp engine, and an incredibly powerful input + +00:02:16.560 --> 00:02:20.959 +methods engine, and an incredibly powerful common agents + +00:02:20.960 --> 00:02:26.639 +paradigm, and a very rich set of mature and convivial idioms + +00:02:26.640 --> 00:02:31.159 +and means for absorption and integration of external + +00:02:31.160 --> 00:02:35.879 +software services continuum capabilities. + +00:02:35.880 --> 00:02:39.999 +In our model, we first augment Emacs with a set + +00:02:40.000 --> 00:02:45.079 +of cohesive elisp capabilities and create Blee -- + +00:02:45.080 --> 00:02:48.959 +ByStar Libre-Halaal Emacs Environment. + +00:02:48.960 --> 00:02:52.439 +We then further enhance Blee with an integrated + +00:02:52.440 --> 00:02:57.759 +framework on top of Debian called BISOS --- + +00:02:57.760 --> 00:03:02.079 +ByStar Internet Services Operating System. + +00:03:02.080 --> 00:03:04.959 +Blee is inherently intertwined + +00:03:04.960 --> 00:03:07.559 +and integrated with BISOS. + +00:03:07.560 --> 00:03:12.159 +This combination of the universal BISOS and Blee + +00:03:12.160 --> 00:03:15.719 +then forms a foundation for creation of an + +00:03:15.720 --> 00:03:19.879 +autonomy directed digital ecosystem that we call + +00:03:19.880 --> 00:03:23.639 +ByStar. + +00:03:23.640 --> 00:03:26.879 +Over the past two decades, I have been working on + +00:03:26.880 --> 00:03:30.799 +creating a comprehensive, interdisciplinary, and + +00:03:30.800 --> 00:03:34.239 +non-proprietary digital ecosystem. + +00:03:34.240 --> 00:03:36.359 +We call it ByStar (By*). + +00:03:36.360 --> 00:03:38.439 +ByStar challenges the existing + +00:03:38.440 --> 00:03:41.239 +proprietary American digital ecosystem + +00:03:41.240 --> 00:03:46.119 +while operating concurrently alongside it. + +00:03:46.120 --> 00:03:50.079 +ByStar's primary offerings are tangible autonomy + +00:03:50.472 --> 00:03:54.959 +and genuine privacy on a very large scale. + +00:03:54.960 --> 00:03:59.119 +By* is about redecentralization of internet + +00:03:59.120 --> 00:04:01.759 +application services. + +00:04:01.760 --> 00:04:06.839 +The * in ByStar stands for Unix's globing symbol. + +00:04:06.840 --> 00:04:11.919 +Signifying that our scope is everything. + +00:04:11.920 --> 00:04:16.279 +Blee is a bigger and different vision for Emacs. + +00:04:16.280 --> 00:04:17.799 +Let's compare and contrast + +00:04:17.800 --> 00:04:19.839 +what I am proposing against + +00:04:19.840 --> 00:04:24.499 +common current practices of the Emacs culture. + +00:04:24.500 --> 00:04:28.079 +Please permit me to be slightly cynical. + +00:04:28.080 --> 00:04:30.119 +Much of what we have been seeing in the + +00:04:30.120 --> 00:04:33.879 +Emacs culture and in emacsConf + +00:04:33.880 --> 00:04:35.759 +can be characterized as + +00:04:35.760 --> 00:04:38.719 +stories of tunnel vision engineers + +00:04:38.720 --> 00:04:40.559 +scratching various itches + +00:04:40.560 --> 00:04:43.879 +by integrating various capabilities + +00:04:43.880 --> 00:04:47.719 +and providing DIY recipes. + +00:04:47.720 --> 00:04:50.039 +Emacs and Lisp are so powerful that + +00:04:50.040 --> 00:04:51.839 +people have come up + +00:04:51.840 --> 00:04:53.759 +with catch phrases like the + +00:04:53.760 --> 00:04:56.439 +"Curse of Lisp". + +00:04:56.440 --> 00:04:57.559 +The curse is that + +00:04:57.560 --> 00:05:01.579 +the power of Lisp breeds individualism. + +00:05:01.580 --> 00:05:04.599 +Because you can be so powerful alone, + +00:05:04.600 --> 00:05:06.719 +you work longer alone. + +00:05:06.720 --> 00:05:08.359 +Because it is easy to spin + +00:05:08.360 --> 00:05:10.959 +your own whatever library, + +00:05:10.973 --> 00:05:13.219 +many people do. + +00:05:13.220 --> 00:05:15.679 +I am suggesting that we should raise the bar. + +00:05:15.680 --> 00:05:19.359 +Let's cultivate Emacs in the context + +00:05:19.360 --> 00:05:22.859 +of our own digital ecosystem instead. + +00:05:22.860 --> 00:05:26.839 +Do more and do more outside of Emacs and + +00:05:26.840 --> 00:05:29.599 +recognize that a well integrated + +00:05:29.600 --> 00:05:35.599 +smaller Emacs leads to a better usage environment. + +00:05:35.600 --> 00:05:38.999 +Broadly speaking, digital ecosystems are viewed + +00:05:39.000 --> 00:05:41.799 +as consisting of 4 parts. + +00:05:41.800 --> 00:05:45.559 +Ideology, Software, Services and Content. + +00:05:45.560 --> 00:05:49.519 +Software, Services and Content are polyexistentials + +00:05:49.520 --> 00:05:53.119 +and can be analyzed from 3 different aspects: + +00:05:53.120 --> 00:05:57.279 +Functionality, Usage and Manner-of-Existence. + +00:05:57.280 --> 00:06:00.559 +By "manner-of-existence" of polyexistentials + +00:06:00.560 --> 00:06:03.119 +we mean everything relating to how the + +00:06:03.120 --> 00:06:06.479 +polyexistential exists within society. + +00:06:06.480 --> 00:06:08.879 +This includes for example, + +00:06:08.880 --> 00:06:12.899 +are polyexistentials internally transparent? + +00:06:12.900 --> 00:06:16.679 +Societal ideology determines manner-of-existence + +00:06:16.680 --> 00:06:19.399 +of Software, Services and Content. + +00:06:19.400 --> 00:06:22.799 +And in turn, manner-of-existence of Software, + +00:06:22.800 --> 00:06:26.039 +Services and Content impacts society. + +00:06:26.574 --> 00:06:28.199 +In the American model, + +00:06:28.200 --> 00:06:31.719 +loss of privacy and autonomy are direct + +00:06:31.720 --> 00:06:36.319 +consequences of the IPR regime. + +00:06:36.320 --> 00:06:39.679 +Based on this characterization, let's consider + +00:06:39.680 --> 00:06:42.499 +these three Digital Ecosystems: + +00:06:42.500 --> 00:06:45.879 +the Proprietary American Digital Ecosystem, + +00:06:45.880 --> 00:06:48.479 +FOSS and ByStar. + +00:06:48.480 --> 00:06:51.719 +The 5 big American proprietary tech companies, + +00:06:51.720 --> 00:06:54.639 +Google, Microsoft, Apple, Facebook and Amazon + +00:06:54.640 --> 00:06:59.119 +have created 5 competing enclaves as mostly + +00:06:59.120 --> 00:07:02.239 +separate and isolated digital ecosystem. + +00:07:03.395 --> 00:07:06.159 +In this slide, I am focusing on the first 3 + +00:07:06.160 --> 00:07:08.399 +and each of their OSs, + +00:07:08.400 --> 00:07:09.999 +their usage environments + +00:07:10.000 --> 00:07:12.639 +and their clouds. + +00:07:12.640 --> 00:07:15.759 +Let's clearly recognize that the economic model + +00:07:15.760 --> 00:07:18.599 +of these proprietary digital ecosystems is + +00:07:19.075 --> 00:07:20.919 +"Surveillance Capitalism". + +00:07:21.695 --> 00:07:23.279 +Now, let's focus on + +00:07:23.280 --> 00:07:24.919 +the right side of this picture. + +00:07:24.920 --> 00:07:27.559 +On the non-proprietary side, + +00:07:27.560 --> 00:07:29.119 +based on the FOSS model, + +00:07:29.120 --> 00:07:32.079 +we have ended up with lots of components. + +00:07:32.080 --> 00:07:34.839 +We have Debian as a platform, + +00:07:34.840 --> 00:07:35.759 +we have Emacs as + +00:07:35.760 --> 00:07:38.799 +an editor-centered usage environment. + +00:07:38.890 --> 00:07:42.039 +But on the non-proprietary side we don't have + +00:07:42.040 --> 00:07:43.079 +anything that can + +00:07:43.080 --> 00:07:46.759 +reasonably be considered a digital ecosystem. + +00:07:46.760 --> 00:07:52.139 +I mean, the services aspect is missing. + +00:07:52.140 --> 00:07:54.519 +ByStar aspires to be + +00:07:54.520 --> 00:07:58.679 +a complete non-proprietary digital ecosystem. + +00:07:58.680 --> 00:08:01.639 +We were all born into the belief system of + +00:08:01.640 --> 00:08:03.679 +intellectual property rights, + +00:08:03.680 --> 00:08:07.319 +making it exceedingly difficult for us + +00:08:07.320 --> 00:08:08.719 +to even imagine that this + +00:08:08.720 --> 00:08:12.199 +foundational ownership framework + +00:08:12.200 --> 00:08:14.599 +could be fundamentally flawed. + +00:08:15.759 --> 00:08:19.479 +I am delighted to announce the availability of my + +00:08:19.480 --> 00:08:20.919 +recent book, + +00:08:20.920 --> 00:08:24.099 +"Nature of Polyexistentials". + +00:08:24.100 --> 00:08:26.239 +The full title of my book is: + +00:08:26.743 --> 00:08:28.759 +Nature of Polyexistentials + +00:08:28.760 --> 00:08:31.039 +Basis for Abolishment of the + +00:08:31.040 --> 00:08:35.459 +Western Intellectual Property Rights Regime + +00:08:35.460 --> 00:08:36.999 +And Introduction of + +00:08:37.000 --> 00:08:42.479 +the Libre-Halaal ByStar Digital Ecosystem. + +00:08:42.480 --> 00:08:45.239 +Knowledge, know-how, uses of know-how, ideas, + +00:08:45.240 --> 00:08:48.999 +formulas, software and information are inherently + +00:08:49.000 --> 00:08:50.839 +non-scarce. + +00:08:50.840 --> 00:08:53.679 +They are polyexistentials. + +00:08:53.680 --> 00:08:58.599 +Unlike monoexistentials which exist in singular, + +00:08:58.600 --> 00:09:03.499 +polyexistentials naturally exist in multiples. + +00:09:03.500 --> 00:09:06.839 +What is abundant in nature is being made + +00:09:06.840 --> 00:09:10.639 +artificially scarce through man-made ownership + +00:09:10.640 --> 00:09:14.039 +rules called copyright and patents. + +00:09:15.282 --> 00:09:18.299 +Let me provide a brief overview. + +00:09:18.300 --> 00:09:20.959 +This book is divided into five parts, + +00:09:20.960 --> 00:09:24.399 +each representing a layer of interest to you + +00:09:24.400 --> 00:09:27.559 +and to our societal policymakers. + +00:09:28.351 --> 00:09:31.039 +Part I, the philosophical layer + +00:09:31.040 --> 00:09:34.479 +delves into the concept of polyexistence. + +00:09:34.480 --> 00:09:37.479 +In this part, I introduce, + +00:09:37.480 --> 00:09:39.039 +for the very first time, + +00:09:39.040 --> 00:09:43.839 +the concepts and terminology of "polyexistentials". + +00:09:43.840 --> 00:09:47.479 +The topic of restriction of polyexistentals + +00:09:47.480 --> 00:09:50.799 +and the Western IPR is one and the same. + +00:09:50.800 --> 00:09:55.359 +Comprehending polyexistence invalidates + +00:09:55.360 --> 00:09:56.999 +the Western IPR model. + +00:09:57.633 --> 00:10:00.839 +We are living inside of an ownership fallacy. + +00:10:00.840 --> 00:10:05.319 +The Western IPR regime is a sin of our times. + +00:10:06.147 --> 00:10:09.559 +Part II is the pathology layer. + +00:10:09.560 --> 00:10:12.959 +Over the course of the past two centuries, + +00:10:12.960 --> 00:10:16.599 +numerous theories have been proposed to justify + +00:10:16.600 --> 00:10:18.679 +intellectual property. + +00:10:18.680 --> 00:10:20.759 +In this Part, I offer + +00:10:20.760 --> 00:10:23.839 +my perspective on the weaknesses inherent + +00:10:23.840 --> 00:10:26.699 +in each of these theories. + +00:10:26.700 --> 00:10:29.119 +Part III, the ethics layer, + +00:10:29.120 --> 00:10:31.919 +focuses on contours of cures. + +00:10:32.500 --> 00:10:35.220 +Having dismissed the Western intellectual + +00:10:35.221 --> 00:10:38.640 +property rights regime as an erroneous + +00:10:38.641 --> 00:10:41.999 +governance model for polyexistentials, + +00:10:42.000 --> 00:10:43.439 +I propose the + +00:10:43.440 --> 00:10:48.279 +Libre-Halaal model of governance of polyexistentials + +00:10:48.280 --> 00:10:53.479 +towards facilitating conviviality of tools. + +00:10:53.480 --> 00:10:57.199 +Part IV, the engineering layer, introduces the + +00:10:57.200 --> 00:11:00.199 +Libre-Halaal ByStar Digital Ecosystem. + +00:11:00.200 --> 00:11:04.319 +as an ethical alternative to the prevailing + +00:11:04.320 --> 00:11:07.519 +proprietary American digital ecosystem. + +00:11:08.071 --> 00:11:11.159 +Part V, the sociology layer, + +00:11:11.160 --> 00:11:13.799 +delves into formulation of + +00:11:13.800 --> 00:11:17.559 +Libre-Halaal oriented societal policies. + +00:11:17.560 --> 00:11:21.679 +It is evident that the abolition of intellectual + +00:11:21.680 --> 00:11:25.279 +property carries significant consequences. + +00:11:25.280 --> 00:11:29.119 +In this Part, I present my thoughts on this + +00:11:29.120 --> 00:11:33.079 +particular dimension for Eastern societies. + +00:11:33.080 --> 00:11:37.439 +For Western societies I confine myself to + +00:11:37.440 --> 00:11:41.499 +inside of IPR strategies. + +00:11:41.500 --> 00:11:44.879 +You can think of this book as being in two volumes. + +00:11:44.880 --> 00:11:48.979 +Our focus is Blee in Volume II. + +00:11:48.980 --> 00:11:52.879 +But as our blueprint needs to be interdisciplinary, + +00:11:52.880 --> 00:11:56.839 +there are some key concepts of Volume I that I'll + +00:11:56.840 --> 00:11:59.199 +briefly discuss here. + +00:12:00.359 --> 00:12:03.599 +Volume I deals with the general concept of + +00:12:03.600 --> 00:12:07.599 +polyexistence and invalidity of IPR. + +00:12:07.600 --> 00:12:13.439 +In Chapter 11, I introduce the very sensitive and potent + +00:12:13.440 --> 00:12:17.779 +vocabulary of Halaal and Libre-Halaal. + +00:12:17.780 --> 00:12:20.919 +Volume II is backed by software and internet + +00:12:20.920 --> 00:12:21.839 +services. + +00:12:22.602 --> 00:12:23.799 +The contents of this book + +00:12:23.800 --> 00:12:26.319 +belong to all of humanity + +00:12:26.320 --> 00:12:29.839 +and verbatim copying of it is unrestricted. + +00:12:29.840 --> 00:12:33.199 +If you want to read it, this book is yours. + +00:12:33.681 --> 00:12:36.919 +The "Nature of Polyexistentials" book is + +00:12:36.920 --> 00:12:41.499 +available both online and in print. + +00:12:41.500 --> 00:12:44.159 +This book is available as two editions. + +00:12:44.160 --> 00:12:47.519 +The US Edition and the International edition. + +00:12:48.082 --> 00:12:50.679 +The US Edition is written with + +00:12:50.680 --> 00:12:54.279 +a slightly milder Western unfriendly tone, + +00:12:54.280 --> 00:12:57.159 +while the International Edition + +00:12:57.160 --> 00:13:01.399 +includes additional original content in Farsi. + +00:13:02.324 --> 00:13:05.839 +I consider the International Edition to be the + +00:13:05.840 --> 00:13:07.159 +authoritative version. + +00:13:07.160 --> 00:13:09.959 +However, many readers in + +00:13:09.960 --> 00:13:12.239 +the US and Western countries + +00:13:12.240 --> 00:13:14.319 +may prefer the US Edition. + +00:13:15.614 --> 00:13:18.719 +I maintain separate Git repositories + +00:13:18.720 --> 00:13:21.559 +for each edition on GitHub. + +00:13:21.560 --> 00:13:28.639 +US Edition is at bxplpc/120033 and + +00:13:28.640 --> 00:13:36.139 +International Edition is at bxplpc/120074 + +00:13:36.140 --> 00:13:40.399 +Cloning these repositories will give you access + +00:13:40.400 --> 00:13:45.559 +to the book in PDF format (suitable for both A4 + +00:13:45.560 --> 00:13:50.639 +and US Letter printing) and in EPUB format. + +00:13:50.640 --> 00:13:54.399 +Alternatively, the content can be downloaded + +00:13:54.400 --> 00:13:58.639 +directly from your browser without needing to + +00:13:58.640 --> 00:14:00.159 +clone the repositories. + +00:14:01.948 --> 00:14:05.199 +To ensure broader online availability and + +00:14:05.200 --> 00:14:09.279 +stability, I have also published the book on + +00:14:09.280 --> 00:14:11.879 +Zenodo, complete with a + +00:14:11.880 --> 00:14:16.399 +DOI (Digital Object Identifier). + +00:14:16.400 --> 00:14:20.399 +You can download both the A4 and + +00:14:20.400 --> 00:14:24.359 +8.5 x 11 PDFs from there as well. + +00:14:25.290 --> 00:14:28.919 +The book is also available in print on Amazon and + +00:14:28.920 --> 00:14:30.959 +at most major bookstores in + +00:14:30.960 --> 00:14:34.139 +the US and Western regions. + +00:14:34.140 --> 00:14:36.319 +The ISBNs for both editions + +00:14:36.320 --> 00:14:38.899 +are included in this slide. + +00:14:38.900 --> 00:14:41.079 +Additionally, I have published + +00:14:41.080 --> 00:14:45.519 +this book in Iran through Jangal Publishers. + +00:14:45.520 --> 00:14:47.799 +I did not write this book for profit. + +00:14:47.800 --> 00:14:50.079 +My aim is to share my thoughts + +00:14:50.080 --> 00:14:52.479 +and encourage readers to + +00:14:52.480 --> 00:14:54.799 +engage with my views and ideas. + +00:14:54.800 --> 00:14:57.239 +Your feedback is welcome, and + +00:14:57.240 --> 00:14:59.279 +I am genuinely interested in + +00:14:59.280 --> 00:15:02.039 +hearing your perspectives. + +00:15:02.040 --> 00:15:04.999 +In Western markets, I have priced the print + +00:15:05.000 --> 00:15:09.219 +edition somewhat above production costs. + +00:15:09.220 --> 00:15:10.919 +If you find value in the + +00:15:10.920 --> 00:15:13.399 +book and the ByStar project, + +00:15:13.400 --> 00:15:16.839 +purchasing a copy will help support my work. + +00:15:16.840 --> 00:15:19.759 +Thanks in advance for your support. + +00:15:22.315 --> 00:15:24.199 +And here are the same links + +00:15:24.200 --> 00:15:26.899 +as a native Reveal slide. + +00:15:26.900 --> 00:15:29.519 +If instead of a video, you are viewing this + +00:15:29.520 --> 00:15:32.479 +presentation as a Reveal web page, + +00:15:32.480 --> 00:15:37.679 +you can just click on the pointers and URLs. + +00:15:37.680 --> 00:15:41.519 +The concept of polyexistentials has not appeared + +00:15:41.520 --> 00:15:46.339 +in prior discussions of validity of IPR. + +00:15:46.340 --> 00:15:49.919 +Once you start thinking in terms of monoexistence + +00:15:49.920 --> 00:15:53.759 +and polyexistence, the recognition of + +00:15:53.760 --> 00:15:58.079 +illegitimacy of Western IPR becomes very simple. + +00:15:58.949 --> 00:16:03.059 +I want to very quickly give you a taste of that. + +00:16:03.060 --> 00:16:05.559 +You can of course dig deeper in the book. + +00:16:06.495 --> 00:16:10.619 +Existence and possession are aspects of nature. + +00:16:10.620 --> 00:16:13.779 +Ownership are man-made rules. + +00:16:13.780 --> 00:16:16.759 +All material objects exist in singular + +00:16:16.760 --> 00:16:18.879 +and are monoexistentials. + +00:16:19.481 --> 00:16:22.439 +For monoexistentials, things are simple. + +00:16:22.971 --> 00:16:25.519 +Monoexsitentials, say paper, + +00:16:25.520 --> 00:16:27.599 +exists in singular. + +00:16:27.600 --> 00:16:31.319 +It naturally has a single possessor. + +00:16:31.776 --> 00:16:35.079 +A single owner can be assigned to it + +00:16:35.080 --> 00:16:40.579 +which then makes that single possession lawful. + +00:16:40.580 --> 00:16:45.199 +Polyexistentials naturally exist in multiples. + +00:16:45.200 --> 00:16:48.279 +Much of our world is actually a mixture of + +00:16:48.280 --> 00:16:51.239 +monoexistentials and polyexistentials, + +00:16:51.240 --> 00:16:57.039 +which we call mixed-existentials. + +00:16:57.040 --> 00:17:00.999 +Possession of polyexistentials is naturally + +00:17:01.000 --> 00:17:04.159 +many-to-many. Without any conflict, + +00:17:04.160 --> 00:17:07.879 +polyexistentials can have many possessors. + +00:17:07.880 --> 00:17:13.639 +Polyexistentials are inherently Non-Rivalry. + +00:17:13.640 --> 00:17:17.519 +The requirement for ownership to be in harmony + +00:17:17.520 --> 00:17:20.839 +with the nature of possession and existence is + +00:17:20.840 --> 00:17:26.079 +violated by the Western IPR regime which assigns + +00:17:26.080 --> 00:17:28.639 +a single owner to what exists + +00:17:28.640 --> 00:17:32.339 +and is possessed in multiples. + +00:17:32.340 --> 00:17:33.719 +The end result is + +00:17:33.720 --> 00:17:37.139 +creation of Artificial Scarcity. + +00:17:37.140 --> 00:17:39.599 +Ramification of ownership mistakes + +00:17:39.600 --> 00:17:41.679 +are usually catastrophic. + +00:17:41.680 --> 00:17:45.759 +Consider the previous Western and American + +00:17:45.760 --> 00:17:50.079 +ownership mistake -- that of American Slavery -- + +00:17:50.080 --> 00:17:54.399 +ownership of Africans by Americans and Europeans. + +00:17:55.000 --> 00:17:56.639 +See Chapter 7 - + +00:17:56.640 --> 00:18:00.319 +"Western Slavery and the Western IPR Regime" + +00:18:00.320 --> 00:18:02.959 +of the book for some parallels + +00:18:02.960 --> 00:18:04.479 +between these mistakes. + +00:18:04.480 --> 00:18:09.399 +This time with the Western IPR ownership mistake + +00:18:09.400 --> 00:18:13.779 +all of humanity is in danger. + +00:18:13.780 --> 00:18:15.559 +So, how are we to + +00:18:15.560 --> 00:18:18.739 +correct this catastrophic mistake? + +00:18:18.740 --> 00:18:21.679 +The strategies of Public Licenses and + +00:18:21.680 --> 00:18:24.679 +FOSS are not sufficient. + +00:18:24.680 --> 00:18:26.679 +hese are minor band-aids. + +00:18:26.680 --> 00:18:28.639 +We need to do a lot more. + +00:18:28.640 --> 00:18:31.719 +We need to understand what are we going to + +00:18:31.720 --> 00:18:36.279 +replace the mistaken Western IPR regime with. + +00:18:36.280 --> 00:18:37.559 +My answer is: + +00:18:37.560 --> 00:18:41.359 +"Libre-Halaal Governance of Polyexistentials". + +00:18:41.360 --> 00:18:44.479 +Much of my book revolves around that. + +00:18:44.480 --> 00:18:47.879 +We need to fully reject ownership of + +00:18:47.880 --> 00:18:52.119 +polyexistentals and replace it with attribution + +00:18:52.120 --> 00:18:55.359 +machinaries towards just rewards. + +00:18:56.090 --> 00:19:00.879 +We need to abolish the "Artificial Scarcity" of + +00:19:00.880 --> 00:19:04.039 +polyexistentials that the Western IPR regime + +00:19:04.040 --> 00:19:06.799 +has created and restore + +00:19:06.800 --> 00:19:10.079 +polyexistentals back to their natural state, + +00:19:10.080 --> 00:19:16.199 +that of "Non-Rivalrous Public Goods". + +00:19:16.940 --> 00:19:20.119 +By now many Westerners and many West-Toxicated + +00:19:20.120 --> 00:19:24.039 +are thinking: these are empty slogans that are + +00:19:24.040 --> 00:19:24.999 +going no where. + +00:19:25.000 --> 00:19:26.279 +And they are right. + +00:19:26.280 --> 00:19:28.519 +Copyright and Patents are + +00:19:28.520 --> 00:19:30.679 +fully entrenched in the West. + +00:19:30.680 --> 00:19:33.319 +But what about the rest of the world, + +00:19:33.320 --> 00:19:34.519 +what about the + +00:19:34.520 --> 00:19:37.559 +Chinese, the Iranians, Brazilians, Cubans + +00:19:37.560 --> 00:19:39.239 +and the rest. + +00:19:39.240 --> 00:19:41.239 +The Intellectual Property Rights + +00:19:41.240 --> 00:19:43.879 +regime is not universal. + +00:19:43.880 --> 00:19:47.319 +There is more to the World than the West. + +00:19:47.320 --> 00:19:50.759 +What if the WTO was to be recognized + +00:19:50.760 --> 00:19:51.879 +for what it is: + +00:19:52.320 --> 00:19:56.119 +the Western Trade Organization? + +00:19:56.120 --> 00:19:58.879 +Thus far, I have been discussing the nature of + +00:19:58.880 --> 00:20:04.519 +all polyexistentials -- any formula in any form. + +00:20:04.520 --> 00:20:07.439 +Next, I want to turn our attention to + +00:20:07.440 --> 00:20:11.279 +digitals in general and Software in particular. + +00:20:12.480 --> 00:20:13.359 +Software is a + +00:20:13.360 --> 00:20:16.159 +very special form of polyexistentials. + +00:20:16.160 --> 00:20:18.719 +Software is immediately useful. + +00:20:18.720 --> 00:20:21.119 +Software produces tools. + +00:20:21.120 --> 00:20:25.399 +Digitals as text, music, video, etc. + +00:20:25.400 --> 00:20:28.719 +are pure forms of polyexistentials + +00:20:28.720 --> 00:20:30.799 +that are controlled by software. + +00:20:31.320 --> 00:20:35.679 +As developers we know well that we can best + +00:20:35.680 --> 00:20:38.759 +produce good software through collaboration. + +00:20:38.760 --> 00:20:41.559 +In that collaborative model, + +00:20:41.560 --> 00:20:45.879 +the software itself performs a collaborative role. + +00:20:45.880 --> 00:20:50.359 +Software functions as a vessel for accumulation + +00:20:50.360 --> 00:20:53.759 +of our expert component contributions. + +00:20:54.560 --> 00:20:57.679 +The Western IPR model cultivates + +00:20:57.680 --> 00:21:00.919 +"Artificial Scarcities" and "competition", + +00:21:00.920 --> 00:21:04.279 +but software developers instinctly + +00:21:04.280 --> 00:21:07.039 +recognized the superiority of + +00:21:07.040 --> 00:21:10.439 +the natural collaborative model. + +00:21:10.440 --> 00:21:14.119 +Through Public Licenses, us software developers, + +00:21:14.120 --> 00:21:18.679 +have done a jujitsu on the IPR model and have + +00:21:19.230 --> 00:21:22.719 +created a collaborative framework inside of the + +00:21:22.720 --> 00:21:25.919 +copyright model. Based on that, + +00:21:25.920 --> 00:21:27.719 +Natural Public Goods + +00:21:27.720 --> 00:21:31.679 +have defeated Artificial Scarcity. + +00:21:31.680 --> 00:21:34.479 +Our success with software is proof that the + +00:21:34.480 --> 00:21:38.559 +entirety of the Western IPR regime is flawed. + +00:21:40.240 --> 00:21:44.279 +As a profession, us Software Engineers, need to + +00:21:44.280 --> 00:21:47.379 +create a relationship with society. + +00:21:47.380 --> 00:21:50.519 +We need to demand for societal rules + +00:21:50.520 --> 00:21:53.599 +which establish proper manner-of-existence + +00:21:53.600 --> 00:21:56.999 +of software and internet application services. + +00:21:57.000 --> 00:21:59.359 +In return, based on that, + +00:21:59.360 --> 00:22:03.199 +we should fulfill our guardianship role and make + +00:22:03.200 --> 00:22:07.799 +sure that autonomy and privacy are preserved and + +00:22:07.800 --> 00:22:11.759 +that practiced digital ecosystems are healthy. + +00:22:11.760 --> 00:22:15.239 +To get there we need to come up with the right + +00:22:15.240 --> 00:22:18.079 +label that represents the proper + +00:22:18.080 --> 00:22:20.939 +manner-of-existence of software. + +00:22:20.940 --> 00:22:22.999 +Thus far, two labels + +00:22:23.000 --> 00:22:24.399 +have appeared on the scene: + +00:22:24.400 --> 00:22:28.159 +Free Software and Open Source. + +00:22:28.160 --> 00:22:32.199 +I am saying that both are problematic. + +00:22:32.200 --> 00:22:34.479 +Free Software is ill directed. + +00:22:34.480 --> 00:22:38.199 +It is based on the model of granting users, + +00:22:38.200 --> 00:22:42.839 +freedoms that are irrelevant to most software users. + +00:22:43.610 --> 00:22:46.679 +Perhaps Copyleft or Ethical Software + +00:22:46.680 --> 00:22:49.699 +could have been better labels. + +00:22:49.700 --> 00:22:52.359 +Open Source is a moral compromise. + +00:22:52.360 --> 00:22:58.439 +It rejects the requirement for perpetuity of Copyleft. + +00:22:58.440 --> 00:23:01.999 +It facilitates convergence of corporate interest + +00:23:02.000 --> 00:23:06.599 +and surrogate activities of software developers. + +00:23:06.600 --> 00:23:09.839 +Over time, proprietary corporations too + +00:23:09.840 --> 00:23:11.959 +have come to recognize the + +00:23:11.960 --> 00:23:15.819 +superiority of the collaborative model. + +00:23:15.820 --> 00:23:18.959 +These proprietary corporations then derailed + +00:23:18.960 --> 00:23:21.919 +the original intent that all software + +00:23:21.920 --> 00:23:24.159 +should always remain open-source. + +00:23:24.160 --> 00:23:27.319 +With permissive public licenses which + +00:23:27.320 --> 00:23:31.719 +permit open-source becoming proprietary, + +00:23:31.720 --> 00:23:34.079 +the intent of Free Software has been + +00:23:34.080 --> 00:23:37.679 +marginalized and permissive open-source + +00:23:37.680 --> 00:23:40.119 +has become the norm. + +00:23:40.120 --> 00:23:42.679 +I expand on all of this in Chapter 12, + +00:23:42.680 --> 00:23:46.899 +"Digital Non-Proprietary Movements". + +00:23:46.900 --> 00:23:49.599 +Instead of Free Software and Open Source, + +00:23:49.600 --> 00:23:53.679 +the label that I introduce is: "Libre-Halaal". + +00:23:55.320 --> 00:23:58.319 +The Libre-Halaal label is distinct and + +00:23:58.320 --> 00:24:00.239 +different from FOSS labels. + +00:24:00.240 --> 00:24:03.479 +As an inside-of-IPR strategy, + +00:24:03.480 --> 00:24:06.239 +the Libre-Halaal label maps + +00:24:06.240 --> 00:24:08.439 +to a single public license --- + +00:24:08.440 --> 00:24:11.779 +the Affero GPL (AGPL). + +00:24:11.780 --> 00:24:13.439 +In the Libre-Halaal model, + +00:24:13.440 --> 00:24:15.599 +it is not up to developers to + +00:24:15.600 --> 00:24:17.679 +choose their own licenses. + +00:24:18.230 --> 00:24:21.799 +There is only one correct license that conveys the + +00:24:21.800 --> 00:24:25.319 +Libre-Halaal manner-of-existence of software. + +00:24:25.830 --> 00:24:29.759 +Also, unlike the FOSS labels that dance around + +00:24:29.760 --> 00:24:33.439 +the validity of the Western IPR regime, + +00:24:33.440 --> 00:24:37.039 +the Libre-Halaal label recognizes + +00:24:37.040 --> 00:24:40.199 +the invalidity of the Western IPR regime, + +00:24:40.200 --> 00:24:43.959 +calls for abolishment of Western IPR + +00:24:43.960 --> 00:24:49.779 +and suggests various outside-of-IPR strategies. + +00:24:49.780 --> 00:24:54.199 +See Part V, "Formulation of Societal Policies" + +00:24:54.200 --> 00:24:55.119 +for details. + +00:24:55.860 --> 00:24:59.359 +Furthermore, unlike FOSS which is + +00:24:59.360 --> 00:25:03.519 +just software oriented, the Libre-Halaal label goes + +00:25:03.520 --> 00:25:05.799 +beyond software and also + +00:25:05.800 --> 00:25:11.059 +applies to internet application services. + +00:25:11.060 --> 00:25:14.559 +In many ways, software is yesterday's news. + +00:25:15.010 --> 00:25:17.519 +Much of what we are experiencing + +00:25:17.520 --> 00:25:18.639 +today is in the form of + +00:25:18.640 --> 00:25:20.839 +internet application services. + +00:25:21.610 --> 00:25:24.159 +Internet application services provide + +00:25:24.160 --> 00:25:27.479 +remote access to execution of software. + +00:25:28.140 --> 00:25:31.719 +As such, much of FOSS has become proprietary + +00:25:31.720 --> 00:25:33.679 +internet application services + +00:25:33.680 --> 00:25:37.879 +as AGPL is rarely used. + +00:25:38.900 --> 00:25:42.359 +This is why the Libre-Halaal definitions and labels + +00:25:42.360 --> 00:25:48.559 +span software and Internet Application Services. + +00:25:48.560 --> 00:25:52.319 +Based on the interdisciplinary stage setting that + +00:25:52.320 --> 00:25:55.959 +the "Nature of Polyexistentials" book provided + +00:25:55.960 --> 00:25:59.479 +and the ByStar blueprint that we reviewed, we can + +00:25:59.480 --> 00:26:01.679 +now focus on Blee. + +00:26:01.680 --> 00:26:04.839 +Think of Blee as a layer on top of Emacs and + +00:26:04.840 --> 00:26:07.919 +think of BISOS as a layer on top of Debian. + +00:26:09.590 --> 00:26:13.959 +Let's bootstrap Raw-BISOS and Raw-Blee. + +00:26:13.960 --> 00:26:15.439 +Starting from scratch, + +00:26:15.440 --> 00:26:19.459 +get yourself a fresh copy of Debian 12. + +00:26:19.460 --> 00:26:25.159 +Then go to https://github.com/bxGenesis/start + +00:26:26.220 --> 00:26:29.439 +The README.org file of that github repo is same + +00:26:29.440 --> 00:26:30.479 +as Chapter 18, + +00:26:30.480 --> 00:26:32.879 +"Engineering Adoption of BISOS and ByStar" + +00:26:32.880 --> 00:26:33.999 +of the book. + +00:26:35.160 --> 00:26:41.559 +We will next run "raw-bisos.sh", but prior to + +00:26:41.560 --> 00:26:44.679 +that let's take a quick look. + +00:26:44.680 --> 00:26:46.999 +This bootstrap scripts will + +00:26:47.000 --> 00:26:50.199 +do a lot as root on your Fresh-Debian. + +00:26:50.200 --> 00:26:54.279 +It is best to first try it on a disposable VM. + +00:26:54.950 --> 00:26:58.319 +raw-bisos.sh adds + +00:26:58.320 --> 00:27:00.879 +the current debian user to sudoers. + +00:27:00.880 --> 00:27:04.119 +Then it installs pipx. + +00:27:04.120 --> 00:27:06.679 +And then with pipx + +00:27:06.680 --> 00:27:11.719 +it installs from PyPI bisos.provision. + +00:27:12.710 --> 00:27:15.919 +bisos.provision includes additional + +00:27:15.920 --> 00:27:19.819 +bash scripts that are then executed. + +00:27:19.820 --> 00:27:23.279 +Full installation involves setting up various + +00:27:23.280 --> 00:27:26.959 +accounts, groups, various directory hierarchies, + +00:27:26.960 --> 00:27:31.239 +lots of apt packages and lots of python packages + +00:27:31.240 --> 00:27:35.239 +from the bisos namespace. + +00:27:35.240 --> 00:27:38.719 +If you are ready, copy and paste this line and + +00:27:38.720 --> 00:27:40.459 +run it. + +00:27:40.460 --> 00:27:43.419 +You will be prompted for the root password. + +00:27:43.420 --> 00:27:44.679 +Then be patient. + +00:27:45.170 --> 00:27:48.999 +Full installation can take 15 minutes or so. + +00:27:49.000 --> 00:27:52.599 +The logs of this script are also captured in + +00:27:52.600 --> 00:27:59.839 +~/raw-bisos-${dateTag}-log.org + +00:27:59.840 --> 00:28:02.319 +What has been installed on your system are + +00:28:02.320 --> 00:28:04.799 +Raw-BISOS and Raw-Blee. + +00:28:05.250 --> 00:28:09.079 +The universality of Debian let's us build on + +00:28:09.080 --> 00:28:13.599 +BISOS and Blee both in the usage environment and + +00:28:13.600 --> 00:28:14.959 +the service environment. + +00:28:16.570 --> 00:28:20.759 +With Emacs 30 now available on Android and with + +00:28:20.760 --> 00:28:25.559 +Termux apt packages infrastructure in place, it + +00:28:25.560 --> 00:28:27.039 +will be very viable to + +00:28:27.040 --> 00:28:30.379 +port BISOS and Blee to Android. + +00:28:30.380 --> 00:28:32.579 +We have not done so yet. + +00:28:32.580 --> 00:28:36.239 +We are waiting for Emacs-30 to mature up. + +00:28:36.240 --> 00:28:40.479 +This is ByStar's "Mobile Second" strategy. + +00:28:40.480 --> 00:28:44.039 +Upon completion of the bootstrapping process, you + +00:28:44.040 --> 00:28:47.959 +end up with Raw-BISOS and Raw-Blee. + +00:28:47.960 --> 00:28:49.639 +You then need to relogin. + +00:28:49.640 --> 00:28:52.559 +At which point you notice that a new account + +00:28:52.560 --> 00:28:56.279 +called bystar has been created. + +00:28:56.280 --> 00:28:59.679 +"bystar" is the default usage account. + +00:28:59.680 --> 00:29:01.799 +Let's login into it. + +00:29:01.800 --> 00:29:06.099 +You will see a customized ByStar Gnome Desktop. + +00:29:06.100 --> 00:29:10.319 +You will also notice a "Blee Startup" icon. + +00:29:10.320 --> 00:29:13.619 +Let's use it and start Blee. + +00:29:13.620 --> 00:29:17.039 +Notice that the Emacs splash-screen has been + +00:29:17.040 --> 00:29:20.919 +replaced and also note that the splash-screen is + +00:29:20.920 --> 00:29:23.299 +in org-mode. + +00:29:23.300 --> 00:29:26.639 +All the original Emacs splash-screen + +00:29:26.640 --> 00:29:31.999 +info is kept under "About Emacs". + +00:29:32.000 --> 00:29:34.639 +Let me enlarge the screen. + +00:29:34.640 --> 00:29:37.619 +Now we can live inside of Blee. + +00:29:37.620 --> 00:29:38.959 +Notice that the top + +00:29:38.960 --> 00:29:43.719 +drop down Emacs menus have been augmented. + +00:29:43.720 --> 00:29:48.659 +Everything to the left of the "File" menu, is new. + +00:29:48.660 --> 00:29:51.319 +Notice the "Panels" menus. + +00:29:51.320 --> 00:29:54.019 +More on these later. + +00:29:54.020 --> 00:29:56.559 +Now let me get myself a shell. + +00:29:56.560 --> 00:30:02.659 +And run tail /etc/passwd. + +00:30:02.660 --> 00:30:04.159 +Notice that a number of + +00:30:04.160 --> 00:30:06.839 +new accounts have been created. + +00:30:06.840 --> 00:30:14.879 +Notably: bisos, bystar and bpos-delimiter. + +00:30:14.880 --> 00:30:18.639 +Let's next cd to /bisos. + +00:30:18.640 --> 00:30:21.879 +Everything related to bisos is in here. + +00:30:21.880 --> 00:30:26.319 +The rest is as Debian was. + +00:30:26.320 --> 00:30:33.359 +Let's take a look at /bisos/blee/env3. + +00:30:33.360 --> 00:30:37.139 +All the elisp code for Blee is in here. + +00:30:37.140 --> 00:30:41.299 +For now, Blee is layered on top of Doom. + +00:30:41.300 --> 00:30:45.199 +Raw-BISOS and Raw-Blee are starting points. + +00:30:45.200 --> 00:30:47.959 +They are meant to be customized. + +00:30:47.960 --> 00:30:53.739 +Let's next see how that is done. + +00:30:53.740 --> 00:30:58.359 +Raw-BISOS and Raw-Blee are foundational layers. + +00:30:58.850 --> 00:31:01.719 +They can be augmented in a variety of ways. + +00:31:01.720 --> 00:31:05.599 +The basic unit in the ByStar model is the + +00:31:05.600 --> 00:31:07.959 +"Autonomous Site". + +00:31:07.960 --> 00:31:10.559 +Think of the "Autonomous Site" as the + +00:31:10.560 --> 00:31:13.439 +totality of computing and communication + +00:31:13.440 --> 00:31:16.239 +capabilities in a modern family + +00:31:16.240 --> 00:31:20.399 +home plus the ability of that family to host + +00:31:20.400 --> 00:31:23.559 +their own internet application services. + +00:31:24.280 --> 00:31:28.639 +Let's walk through how Raw-BISOS and Raw-Blee are + +00:31:28.640 --> 00:31:32.879 +used to construct an Autonomous Site. + +00:31:32.880 --> 00:31:36.039 +BISOS augmentation model is based on + +00:31:36.040 --> 00:31:40.299 +"BISOS Capability Bundles" BCBs. + +00:31:40.300 --> 00:31:43.479 +Raw-BISOS can be augmented to + +00:31:43.480 --> 00:31:46.659 +become a Virtual Machines Hosting service. + +00:31:46.660 --> 00:31:50.599 +From there on we can use reproducible images to + +00:31:50.600 --> 00:31:54.199 +implement the infrastructure of sites. + +00:31:54.200 --> 00:31:56.799 +Two key site services are the + +00:31:56.800 --> 00:32:01.219 +"Site BPOs Gitlab Server" + +00:32:01.220 --> 00:32:04.079 +and "Site Registrars". + +00:32:04.080 --> 00:32:06.799 +With these in place we can facilitate + +00:32:06.800 --> 00:32:10.879 +self-hosting, which in the BISOS model is called + +00:32:10.880 --> 00:32:15.439 +Possession Assertable Libre Services (PALS). + +00:32:15.440 --> 00:32:18.639 +These topics and these concepts are described in + +00:32:18.640 --> 00:32:25.219 +Chapter 17, "Technology of ByStar: BISOS". + +00:32:25.220 --> 00:32:28.839 +The concepts of Service Portability, Service + +00:32:28.840 --> 00:32:32.599 +Possession Assertion, Autonomous Site and Inner, + +00:32:32.600 --> 00:32:36.999 +Outer and Exposed Rims of Autonomous Site are + +00:32:37.000 --> 00:32:39.899 +fundamental to ByStar. + +00:32:39.900 --> 00:32:42.279 +These are shown in this figure as + +00:32:42.280 --> 00:32:43.519 +"Network Abodes". + +00:32:43.520 --> 00:32:47.839 +Chapter 17 of the book provides more details. + +00:32:49.490 --> 00:32:52.919 +Blee introduces a number of new concepts that + +00:32:52.920 --> 00:32:57.359 +augment Emacs. Some of these are intertwined with + +00:32:57.360 --> 00:33:01.039 +BISOS and ByStar. But some are not. + +00:33:01.040 --> 00:33:04.199 +Here, I provide some examples of these new + +00:33:04.200 --> 00:33:07.019 +general concepts. + +00:33:07.020 --> 00:33:10.599 +We love Emacs and we love Unix because their + +00:33:10.600 --> 00:33:14.599 +design is convivial. By convivial, I am referring + +00:33:14.600 --> 00:33:17.799 +to Ivan Illich's concept and terminology of + +00:33:17.800 --> 00:33:21.159 +"Tools for Conviviality". It was first + +00:33:21.160 --> 00:33:25.219 +published in 1973. It's a must read. + +00:33:25.220 --> 00:33:28.519 +A goal of the design of the ByStar Digital + +00:33:28.520 --> 00:33:32.639 +Ecosystem is to enlarge aggregated conviviality. + +00:33:32.640 --> 00:33:37.239 +Here, let's start by reviewing the idioms and + +00:33:37.240 --> 00:33:40.559 +means that have made Emacs and Unix so very + +00:33:40.560 --> 00:33:44.639 +convivial and some of the key idioms that have + +00:33:44.640 --> 00:33:48.079 +augmented them over the years -- I am showing + +00:33:48.080 --> 00:33:50.279 +them as "Linux PlusPlus" + +00:33:50.280 --> 00:33:52.919 +and "Emacs PlusPlus". + +00:33:52.920 --> 00:33:54.759 +For the most part these + +00:33:54.760 --> 00:33:57.959 +two philosophies have not been combined. + +00:33:57.960 --> 00:33:59.759 +They were developed and have + +00:33:59.760 --> 00:34:01.719 +evolved mostly separately. + +00:34:01.720 --> 00:34:06.479 +Think of BISOS idioms as an extension of Linux + +00:34:06.480 --> 00:34:10.519 +PlusPlus idioms and think of Blee idioms as an + +00:34:10.520 --> 00:34:14.179 +extension of Emacs PlusPlus. + +00:34:14.180 --> 00:34:16.799 +Then intertwine BISOS and Blee. + +00:34:16.800 --> 00:34:21.519 +This aggregated convivial tools powers ByStar. + +00:34:22.179 --> 00:34:25.479 +Let me first explain what I mean by aggregated + +00:34:25.480 --> 00:34:28.279 +convivial tools, and then + +00:34:28.280 --> 00:34:32.139 +let me give some examples. + +00:34:32.140 --> 00:34:34.759 +Here is a key sentence from Illich's, + +00:34:34.760 --> 00:34:39.719 +"Tools for Conviviality" 1973 essay: + +00:34:39.720 --> 00:34:43.599 +Convivial tools are those which give each person + +00:34:43.600 --> 00:34:47.199 +who uses them the greatest opportunity to enrich + +00:34:47.200 --> 00:34:48.839 +the environment with the + +00:34:48.840 --> 00:34:52.739 +fruits of his or her vision. + +00:34:52.740 --> 00:34:55.559 +Proprietary manner-of-existence of software + +00:34:55.560 --> 00:34:57.999 +makes them industrial. + +00:34:58.000 --> 00:35:00.399 +Libre-Halaal manner-of-existence + +00:35:00.400 --> 00:35:03.319 +of software is a prerequisite for conviviality. + +00:35:03.320 --> 00:35:07.439 +The concept of + +00:35:07.440 --> 00:35:10.639 +"Org Dynamic Blocks" is very powerful. + +00:35:10.640 --> 00:35:14.399 +But, why should they be primarily used + +00:35:14.400 --> 00:35:16.279 +in Org-Mode. + +00:35:16.280 --> 00:35:18.599 +I say let's generalize them to + +00:35:18.600 --> 00:35:20.239 +"Emacs Dynamic Blocks". + +00:35:20.240 --> 00:35:24.279 +Have defaults for org-dblock-start-re in + +00:35:24.280 --> 00:35:29.759 +every relevant mode and use them everywhere. + +00:35:29.760 --> 00:35:30.679 +Blee does that. + +00:35:30.680 --> 00:35:33.239 +In programming languages, Dynamic + +00:35:33.240 --> 00:35:34.879 +Blocks can be used as visible macros. + +00:35:34.880 --> 00:35:38.939 +Let me give you an example of how I use them. + +00:35:38.940 --> 00:35:41.759 +For those of us who live inside of Emacs, + +00:35:41.760 --> 00:35:46.359 +enhancing programming with org-mode capabilities + +00:35:46.360 --> 00:35:47.859 +is awesome. + +00:35:47.860 --> 00:35:50.379 +Incredibly awesome! + +00:35:50.380 --> 00:35:52.819 +This can be done in two ways. + +00:35:52.820 --> 00:35:57.159 +(1) With Literate Programming and org-babel. + +00:35:57.160 --> 00:35:58.799 +and (2) with + +00:35:58.800 --> 00:36:03.459 +Traditional/Surrounded Programming and COMEEGA. + +00:36:03.460 --> 00:36:04.959 +COMEEGA stands for + +00:36:04.960 --> 00:36:08.679 +Collaborative Org-Mode Enhanced Emacs + +00:36:08.680 --> 00:36:10.559 +Generalized Authorship. + +00:36:10.560 --> 00:36:15.259 +It is just an acronym that I have come up with. + +00:36:15.260 --> 00:36:18.319 +Literate Programming and org-babel + +00:36:18.320 --> 00:36:20.059 +are well established. + +00:36:20.060 --> 00:36:25.599 +There is a related talk in EmacsConf-2024 titled: + +00:36:25.600 --> 00:36:30.839 +"Literate Programming for the 21st Century". + +00:36:30.840 --> 00:36:33.559 +COMEEGA is the inverse of org-babel. + +00:36:34.080 --> 00:36:38.479 +I prefer COMEEGA over org-babel, + +00:36:38.480 --> 00:36:39.599 +because I prefer + +00:36:39.600 --> 00:36:41.799 +Traditional/Surrounded Programming + +00:36:41.800 --> 00:36:44.899 +over Literate Programming. + +00:36:44.900 --> 00:36:46.359 +To each his own. + +00:36:46.360 --> 00:36:49.079 +This is not about that debate. + +00:36:49.080 --> 00:36:51.039 +This is about mixing your + +00:36:51.040 --> 00:36:55.019 +programming-mode with org-mode. + +00:36:55.020 --> 00:36:56.799 +Much of Blee and BISOS + +00:36:56.800 --> 00:36:58.719 +are implemented in COMEEGA. + +00:36:58.720 --> 00:37:02.407 +Almost all of our Elisp, Python, Bash + +00:37:02.408 --> 00:37:06.199 +and LaTeX work uses COMEEGA. + +00:37:06.200 --> 00:37:08.174 +Full and proper use of COMEEGA, + +00:37:08.175 --> 00:37:13.279 +requires Polymode. Let's call that Poly-COMEEGA. + +00:37:13.280 --> 00:37:16.739 +But Emacs's Polymode is work-in-progress, + +00:37:16.740 --> 00:37:20.559 +particularly now with the new tree-sitter. + +00:37:20.560 --> 00:37:23.479 +So, in the interim, my usage of + +00:37:23.480 --> 00:37:28.779 +COMEEGA has been in the form of Toggle-COMEEGA. + +00:37:28.780 --> 00:37:30.839 +Where I manually switch between the + +00:37:30.840 --> 00:37:33.799 +programming-mode and org-mode. + +00:37:33.800 --> 00:37:34.839 +For me this has + +00:37:34.840 --> 00:37:41.699 +proved to be a fine interim solution. + +00:37:41.700 --> 00:37:43.639 +In Emacs, the way that we have been + +00:37:43.640 --> 00:37:45.359 +dealing with documentation and + +00:37:45.360 --> 00:37:49.559 +information retrieval is archaic. + +00:37:49.560 --> 00:37:52.239 +Man-pages, TeXInfo, Helpful-Mode and + +00:37:52.730 --> 00:37:56.440 +convention based Doc-Strings are old and + +00:37:56.441 --> 00:37:57.699 +limited. + +00:37:57.700 --> 00:38:01.759 +In BISOS and Blee, we use Blee-Panels for all + +00:38:01.760 --> 00:38:03.779 +kinds of documentation. + +00:38:03.780 --> 00:38:09.359 +Let me show you some examples. + +00:38:09.360 --> 00:38:12.959 +Two fundamental autonomy oriented capabilities + +00:38:12.960 --> 00:38:16.799 +that ByStar offers to individuals are: + +00:38:16.800 --> 00:38:20.739 +Email and Content Generation and Publication. + +00:38:20.740 --> 00:38:22.399 +I'll give a quick overview of + +00:38:22.400 --> 00:38:26.299 +these two important capabilities. + +00:38:26.300 --> 00:38:30.679 +At the EmacsConf-2022, the title of my + +00:38:30.680 --> 00:38:32.439 +presentation was: + +00:38:32.440 --> 00:38:37.679 +"Revisiting the anatomy of Emacs mail user agents". + +00:38:37.680 --> 00:38:39.359 +In that presentation I + +00:38:39.360 --> 00:38:43.119 +gave a brief overview of BISOS-MARMEE + +00:38:43.120 --> 00:38:47.739 +(Multi-Account Resident Mail Exchange Environment) + +00:38:47.740 --> 00:38:49.079 +and Blee-Gnus. + +00:38:49.080 --> 00:38:53.079 +In ByStar, these are typically paired with + +00:38:53.080 --> 00:38:58.039 +byname.net autonomous email services. + +00:38:58.040 --> 00:39:00.879 +Content Production and Self-Publication is a + +00:39:00.880 --> 00:39:06.059 +foundational Blee and BISOS Capability Bundle. + +00:39:06.060 --> 00:39:08.079 +Both this presentation and + +00:39:08.080 --> 00:39:11.739 +the Nature of Polyexistentials book + +00:39:11.740 --> 00:39:15.039 +were developed with Blee LCNT. + +00:39:15.040 --> 00:39:18.919 +The original text is always in COMEEGA-LaTeX -- + +00:39:18.920 --> 00:39:22.299 +LaTeX augmented by Org-Mode. + +00:39:22.300 --> 00:39:23.439 +This is the inverse + +00:39:23.440 --> 00:39:27.159 +direction of exporting LaTeX from Org-Mode. + +00:39:27.160 --> 00:39:28.759 +For typesetting, + +00:39:28.760 --> 00:39:31.279 +the LaTeX syntax is far more + +00:39:31.280 --> 00:39:33.539 +powerful than org-mode. + +00:39:33.540 --> 00:39:35.399 +And with COMEEGA-LaTeX, + +00:39:35.400 --> 00:39:36.999 +you can also benefit from + +00:39:37.000 --> 00:39:41.339 +all that org-mode offers. + +00:39:41.340 --> 00:39:44.319 +For presentation/screen-casting, + +00:39:44.320 --> 00:39:48.679 +the original text is then augmented in layers + +00:39:48.680 --> 00:39:53.839 +by images, audio voice-overs, screen captures, + +00:39:53.840 --> 00:39:56.919 +videos and captions. + +00:39:56.920 --> 00:39:59.799 +The Beamer LaTeX file is then processed + +00:39:59.800 --> 00:40:02.559 +by both LaTeX and HeVeA. + +00:40:02.560 --> 00:40:05.959 +LaTeX produced slides are then + +00:40:05.960 --> 00:40:10.519 +absorbed in html by HeVeA as images. + +00:40:10.520 --> 00:40:13.759 +HeVeA is a LaTeX to html translator. + +00:40:13.760 --> 00:40:19.879 +HeVeA output is destined to be dispensed by Reveal.js. + +00:40:19.880 --> 00:40:25.119 +This video is just a screen capture of the autoplay of + +00:40:25.120 --> 00:40:27.339 +reveal file. + +00:40:27.340 --> 00:40:30.959 +Viewing this presentation in its + +00:40:30.960 --> 00:40:35.479 +original Reveal form is a richer experience. + +00:40:36.010 --> 00:40:39.679 +All of this involves a whole lot of integration + +00:40:39.680 --> 00:40:44.159 +scripting. In Raw-BISOS these scripts are in + +00:40:44.160 --> 00:40:53.319 +file:/bisos/core/lcnt/bin + +00:40:53.320 --> 00:40:57.399 +To say that ByStar, BISOS and Blee are big and + +00:40:57.400 --> 00:41:00.359 +ambitious is an understatement. + +00:41:00.360 --> 00:41:04.039 +And clearly, a small team won't be able to + +00:41:04.040 --> 00:41:07.959 +deliver the outlandish blueprint that is outlined + +00:41:07.960 --> 00:41:12.379 +in the Nature of Polyexistentials book. + +00:41:12.380 --> 00:41:15.959 +We have been at this for over two decades and we + +00:41:15.960 --> 00:41:18.519 +feel that now in 2024, + +00:41:18.520 --> 00:41:23.059 +it makes sense to involve you. + +00:41:23.060 --> 00:41:26.719 +The pointers and instructions for installation + +00:41:26.720 --> 00:41:31.199 +and usage of BISOS and Blee that I have provided, + +00:41:31.200 --> 00:41:34.679 +produce systems that are minimally functional, + +00:41:34.680 --> 00:41:37.399 +but are not clean. + +00:41:37.400 --> 00:41:40.079 +At this time don't expect software and services + +00:41:40.080 --> 00:41:42.759 +stability and support. + +00:41:42.760 --> 00:41:45.319 +Throughout this presentation, I have been + +00:41:45.320 --> 00:41:49.399 +emphasizing Service Portability and Possession + +00:41:49.400 --> 00:41:52.679 +Assertable Libre Services (PALS). + +00:41:52.680 --> 00:41:58.359 +But, a complete digital ecosystem includes various other types of + +00:41:58.360 --> 00:42:01.759 +internet application services as well. + +00:42:01.760 --> 00:42:05.799 +In this slide PALS are the center and are then + +00:42:05.800 --> 00:42:09.119 +augmented by different other type of services. + +00:42:09.120 --> 00:42:13.639 +In the ByStar model, equivalent of Facebook style + +00:42:13.640 --> 00:42:16.359 +application services are called: + +00:42:16.360 --> 00:42:19.619 +"Inter-Autonomous Interactions". + +00:42:19.620 --> 00:42:23.679 +With individual oriented PALS in place, using + +00:42:23.680 --> 00:42:28.279 +OAuth of PALS, resources can be shared. + +00:42:28.280 --> 00:42:32.479 +Based on that we can then structure Inter-Autonomous + +00:42:32.480 --> 00:42:37.319 +Interactions while preserving much privacy. + +00:42:37.320 --> 00:42:41.719 +Any blueprint for a digital ecosystem must also + +00:42:41.720 --> 00:42:46.039 +consider the economic and business dimensions. + +00:42:46.040 --> 00:42:50.379 +Chapter 13, "Polyexistential Capitalism", + +00:42:50.380 --> 00:42:52.959 +delves into proper economic models for + +00:42:52.960 --> 00:42:55.579 +polyexsitentials. + +00:42:55.580 --> 00:42:57.879 +The concept of Attribution + +00:42:57.880 --> 00:43:02.399 +Based Economics (ABE) which has been discussed in + +00:43:02.400 --> 00:43:05.719 +this forum before is included. + +00:43:05.720 --> 00:43:06.839 +Chapter 21, + +00:43:06.840 --> 00:43:09.159 +"Private Sector Strategies: + +00:43:09.160 --> 00:43:12.899 +ByStar Open Business Plan" + +00:43:12.900 --> 00:43:17.079 +deals with the business dimension of ByStar. + +00:43:17.080 --> 00:43:20.659 +What if in addition to being ethics oriented, + +00:43:20.660 --> 00:43:24.079 +the entirety of this book could also be + +00:43:24.080 --> 00:43:28.739 +considered a sophisticated business plan? + +00:43:28.740 --> 00:43:34.139 +Are there any Venture Capitalists that use Emacs? + +00:43:34.140 --> 00:43:37.639 +Here is a set of relatively complete domains and + +00:43:37.640 --> 00:43:41.919 +links for digging deeper. These pointers are + +00:43:41.920 --> 00:43:46.119 +structured in 4 layers. Ideology, Software, + +00:43:46.120 --> 00:43:50.159 +Services and Guardianship. + +00:43:50.160 --> 00:43:53.679 +If Blee, BISOS, ByStar, Libre-Halaal and + +00:43:53.680 --> 00:43:57.879 +Polyexistentials have piqued your interest and if + +00:43:57.880 --> 00:44:00.599 +you wish to participate in making these ideas + +00:44:00.600 --> 00:44:04.199 +more widespread and want to further cultivate + +00:44:04.200 --> 00:44:06.919 +them, here are some suggestions. + +00:44:06.920 --> 00:44:11.719 +The examples of the Blee concepts that I chose + +00:44:11.720 --> 00:44:15.179 +were purposeful and targeted. + +00:44:15.180 --> 00:44:18.599 +I am hopeful that org-mode developers and emacs + +00:44:18.600 --> 00:44:22.319 +developers would recognize that it makes good + +00:44:22.320 --> 00:44:25.599 +sense to expand the scope of org dynamic blocks + +00:44:25.600 --> 00:44:28.779 +to the entirety of emacs. + +00:44:28.780 --> 00:44:31.399 +I am hopeful that the concept of polymode -- a + +00:44:31.400 --> 00:44:35.279 +single buffer with regions in different modes and + +00:44:35.280 --> 00:44:39.759 +org-mode in particular -- would receive a high + +00:44:39.760 --> 00:44:44.559 +priority in our tree-sitter transition. I am + +00:44:44.560 --> 00:44:47.799 +hopeful that Blee-COMEEGA can become a + +00:44:47.800 --> 00:44:52.259 +generalized form of polymode. + +00:44:52.260 --> 00:44:55.559 +I am hopeful that we can build on Blee-Panels and + +00:44:55.560 --> 00:44:59.439 +move towards having a richer base for a universal + +00:44:59.440 --> 00:45:03.879 +Emacs documentation framework. + +00:45:03.880 --> 00:45:07.079 +If participation in any of these is of interest + +00:45:07.080 --> 00:45:10.659 +to you, please feel welcome to contact me. + +00:45:10.660 --> 00:45:13.519 +Emacs Conferences have proven to be + +00:45:13.520 --> 00:45:16.659 +very useful and productive. + +00:45:16.660 --> 00:45:21.539 +I look forward to your thoughts, feedback and questions. + +00:45:21.540 --> 00:45:24.799 +I want to thank all the EmacsConf Organizers for + +00:45:24.800 --> 00:45:26.139 +their great work. + +00:45:26.140 --> 00:45:29.960 +And Sacha, Leo and Amin in particular. diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt new file mode 100644 index 00000000..7c6db8c8 --- /dev/null +++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt @@ -0,0 +1,966 @@ +WEBVTT + +NOTE Opening + +00:00:00.000 --> 00:00:05.239 +Leo? I'm doing well as well and I'm so happy to have seen your + +00:00:05.240 --> 00:00:10.719 +talk because the interaction with Emacs is always + +00:00:10.720 --> 00:00:13.719 +something that I find very interesting, and stuff like + +00:00:13.720 --> 00:00:18.839 +Transient, stuff like Hydra before, I think they really + +00:00:18.840 --> 00:00:22.119 +improve the user experience of users, and I'm really glad + +00:00:22.120 --> 00:00:24.479 +that I've seen you talk. Perhaps just starting with the + +00:00:24.480 --> 00:00:27.639 +first question, do you have anything else that you'd like to + +00:00:27.640 --> 00:00:30.719 +add on your talk? Because we are pretty stringent with the + +00:00:30.720 --> 00:00:33.199 +amount of time that we give for talks, but is there anything + +00:00:33.200 --> 00:00:35.639 +that you would have liked to mention to people that you + +00:00:35.640 --> 00:00:42.719 +weren't able to fit into the talk? I think probably one of the + +00:00:42.720 --> 00:00:46.599 +design considerations I've done is that many of the + +00:00:46.600 --> 00:00:49.359 +commands that I've exposed through my casual interfaces + +00:00:49.360 --> 00:00:56.399 +have been in Emacs. They've been in there forever, but very + +00:00:56.400 --> 00:01:00.439 +few people uh, myself included really know that they're + +00:01:00.440 --> 00:01:05.999 +there, uh, because they're just not discoverable through, + +00:01:06.000 --> 00:01:09.559 +uh, basically the existing mechanisms, you know, prior to + +00:01:09.560 --> 00:01:13.479 +transient and which key to, to even know that those, those + +00:01:13.480 --> 00:01:19.399 +functions are there. Yeah. So I think I'm going to start + +00:01:19.400 --> 00:01:21.519 +asking you questions whilst people start writing them in a + +00:01:21.520 --> 00:01:25.759 +pad. But yeah, I also think that discoverability is a very + +00:01:25.760 --> 00:01:29.559 +huge point that having stuff like the stuff that you've + +00:01:29.560 --> 00:01:32.679 +showed today actually allows. One example that I'd like to + +00:01:32.680 --> 00:01:35.759 +give that many people tend to forget, and you've already + +00:01:35.760 --> 00:01:39.559 +mentioned it in your presentation, is that I've learned so + +00:01:39.560 --> 00:01:43.479 +much about using git in general thanks to Magit, for the + +00:01:43.480 --> 00:01:46.719 +reason that it shows you so many options that you might not be + +00:01:46.720 --> 00:01:50.799 +aware of. For instance, I like to really think about when + +00:01:50.800 --> 00:01:54.519 +you think about logging in git, Magit allows you to + +00:01:54.520 --> 00:01:58.119 +discover so many of the finer options, like I only want to + +00:01:58.120 --> 00:02:01.519 +see the first commit since the merge, or I only want to + +00:02:01.520 --> 00:02:05.999 +consider this subsection of commits going from master or + +00:02:06.000 --> 00:02:08.999 +main to the point of your branch. So many things like this + +00:02:09.000 --> 00:02:11.759 +that you get to discover thanks to Transient. So do you have + +00:02:11.760 --> 00:02:16.879 +any similar experience on your end? Oh yeah, far too + +00:02:16.880 --> 00:02:22.359 +many, particularly with EditKit, + +00:02:22.360 --> 00:02:28.279 +having access to these commands, + +00:02:28.280 --> 00:02:31.771 +particularly with different granularity on + +00:02:31.772 --> 00:02:34.773 +S-expressions, sentences, words... + +00:02:34.774 --> 00:02:37.395 +Probably the most surprising thing I found + +00:02:37.396 --> 00:02:43.021 +was just how how compelling the + +00:02:43.022 --> 00:02:49.054 +S-expression would be as a unit of text for working with. + +00:02:49.055 --> 00:02:53.988 +I found that in most contexts, or in many places, + +00:02:53.989 --> 00:03:02.719 +it did what I wanted. I found that to be very surprising. + +00:03:02.720 --> 00:03:06.159 +So unless you've got anything else to add, I think we can just + +00:03:06.160 --> 00:03:10.639 +jump into questions. Okay, certainly. I'll be reading them + +00:03:10.640 --> 00:03:13.599 +for you so that it's easier for you. So the first question is, + +NOTE Q: I wonder whether casual can only be used with the packages you + +00:03:13.600 --> 00:03:17.599 +I wonder whether casual can only be used with the packages + +00:03:17.600 --> 00:03:19.599 +you mentioned or whether it can be used with whatever + +00:03:19.600 --> 00:03:25.399 +packages you like. I think it's really the latter. I'm not + +00:03:25.400 --> 00:03:29.879 +quite sure what the... What the question was really + +00:03:29.880 --> 00:03:35.039 +pointing at, you know, is the question asking for why I chose + +00:03:35.040 --> 00:03:41.679 +the packages or the different modes that I did? Or is it, are + +00:03:41.680 --> 00:03:45.519 +they looking at it from a developer perspective of, can we + +00:03:45.520 --> 00:03:50.399 +integrate casual with other packages? I mean, since we've + +00:03:50.400 --> 00:03:52.839 +got a little bit of time ahead of us, feel free to answer both + +00:03:52.840 --> 00:03:59.279 +questions. Um, I think the answer is, uh. Well, for the 1st, + +00:03:59.280 --> 00:04:05.599 +1, I've, I've generally tried to stick with using. The modes + +00:04:05.600 --> 00:04:11.039 +that are already packaged in, um, and so there was a. A big + +00:04:11.040 --> 00:04:16.759 +refactoring of it where. Initially, I made separate repos + +00:04:16.760 --> 00:04:20.879 +for the different modes that I supported. And then through a + +00:04:20.880 --> 00:04:24.959 +discussion, which I won't go into here, that got changed + +00:04:24.960 --> 00:04:30.239 +where I consolidated all of the different transient menus + +00:04:30.240 --> 00:04:35.039 +for modes that are built in for behavior that's built into + +00:04:35.040 --> 00:04:39.199 +the Emacs. I put that into a single package called casual. + +00:04:39.200 --> 00:04:44.799 +And then integrations with other third party packages that + +00:04:44.800 --> 00:04:49.879 +are not built in were given the same standalone repo here. In + +00:04:49.880 --> 00:04:55.719 +terms of folks wanting to integrate that, it's the beauty of + +00:04:55.720 --> 00:05:01.159 +open source. They can get the repo and uh, and basically + +00:05:01.160 --> 00:05:05.199 +study that the code base, uh, actually, if they even install + +00:05:05.200 --> 00:05:08.599 +it through, uh, you know, the package manager in this case, + +00:05:08.600 --> 00:05:12.679 +uh, coming from the Melbourne distribution, um, they can + +00:05:12.680 --> 00:05:17.919 +inspect that code and, and, um, make modifications or even. + +00:05:17.920 --> 00:05:21.519 +uh, you know, integrate that with their other packages and, + +00:05:21.520 --> 00:05:25.279 +uh, do that to their heart's content. Um, I think one of the + +00:05:25.280 --> 00:05:29.639 +things that I need to, or at least, uh, you know, that I, I, I + +00:05:29.640 --> 00:05:32.519 +planned on sort of elaborating further on in the + +00:05:32.520 --> 00:05:36.399 +documentation is, is that transient already has built in + +00:05:36.400 --> 00:05:41.279 +mechanisms for modifying an existing transient. So you can + +00:05:41.280 --> 00:05:47.279 +add commands or, uh, re redefine the bindings. And so. That + +00:05:47.280 --> 00:05:51.959 +mechanism is available for users if they're not happy with + +00:05:51.960 --> 00:05:57.159 +those bindings or they want to add their own commands to a + +00:05:57.160 --> 00:06:01.959 +menu. Yeah, and people are... I'm personally familiar with + +00:06:01.960 --> 00:06:05.119 +this, again, with Magit, because sometimes, even though + +00:06:05.120 --> 00:06:07.479 +you have a lot of discoverability for functions that you may + +00:06:07.480 --> 00:06:10.359 +not know, sometimes you also happen to realize that + +00:06:10.360 --> 00:06:13.999 +something is missing in the list of available options. I'm + +00:06:14.000 --> 00:06:16.919 +not sure if Casual actually supports something similar to + +00:06:16.920 --> 00:06:21.559 +Magit, which is levels of options being displayed. + +00:06:21.560 --> 00:06:24.039 +Actually, I'm not sure if it's transient native or if it's + +00:06:24.040 --> 00:06:27.439 +just something that Magit adds over this. No, transient + +00:06:27.440 --> 00:06:30.599 +supports levels. I've decided + +00:06:30.600 --> 00:06:36.799 +in large part, I've tried to avoid that just to avoid the + +00:06:36.800 --> 00:06:43.119 +added complexity of trying to define those levels. Yeah, I + +00:06:43.120 --> 00:06:47.479 +was going to say that perhaps it doesn't gel very well with + +00:06:47.480 --> 00:06:49.839 +the notion of casualness that you seem to be introducing the + +00:06:49.840 --> 00:06:52.439 +package. On one end, you've got something that is supposed + +00:06:52.440 --> 00:06:56.639 +to be very casual, very easy to use, and on the other end, you + +00:06:56.640 --> 00:06:59.599 +add levels for stuff that is fairly advanced. So advanced + +00:06:59.600 --> 00:07:05.759 +versus casual, kind of makes sense that you check this over. + +00:07:05.760 --> 00:07:09.359 +Alright, moving to the second question which is related to + +00:07:09.360 --> 00:07:10.853 +the previous one. + +NOTE Q: Are there any patterns emerging, such that it would seem possible to 1) systematize 2) automate(?) the mapping of mode commands to keyboard-driven menus? Possibly even have an auto casual wrapper for an uncovered mode? + +00:07:10.854 --> 00:07:13.159 +Are there any patterns emerging such that + +00:07:13.160 --> 00:07:15.639 +it would be impossible, sorry, such that it would be + +00:07:15.640 --> 00:07:19.719 +possible to once systematize and to automate the mapping of + +00:07:19.720 --> 00:07:23.519 +mode commands to keyboard-driven menus, possibly even + +00:07:23.520 --> 00:07:26.559 +have an auto-casual wrapper for an uncovered mode? Does it + +00:07:26.560 --> 00:07:35.519 +make sense to you? Yes, and I've gotten these comments from a + +00:07:35.520 --> 00:07:42.799 +number of different folks who really want to see some sort + +00:07:42.800 --> 00:07:49.639 +of design rule to, or basically, what is it? Some sort of + +00:07:49.640 --> 00:07:54.679 +design system to be able to generate the UI. + +00:07:54.680 --> 00:08:01.399 +Conceptually, I think it's doable, but on the flip side, it + +00:08:01.400 --> 00:08:05.319 +just requires so much coordination that it makes it really + +00:08:05.320 --> 00:08:11.199 +untenable. In this case, I have very strong opinions. I + +00:08:11.200 --> 00:08:15.719 +think we're better off trying to handcraft the user + +00:08:15.720 --> 00:08:20.759 +interface to get basically the best user experience. To try + +00:08:20.760 --> 00:08:26.399 +to emulate that with a design system, good luck, but I'm not + +00:08:26.400 --> 00:08:31.519 +I'm not interested in working on that. Right, yeah. I think + +00:08:31.520 --> 00:08:34.119 +if I try to think a little more about this, it feels like + +00:08:34.120 --> 00:08:36.559 +there's a notion of intention that is very important when + +00:08:36.560 --> 00:08:41.479 +you are designing UI and UX. And to have this intention, it + +00:08:41.480 --> 00:08:45.319 +feels like you cannot just base yourself of a design idea to + +00:08:45.320 --> 00:08:48.799 +organize the options. You cannot just work off a pattern. I + +00:08:48.800 --> 00:08:53.599 +think you need to have the trace of human understanding in + +00:08:53.600 --> 00:08:56.679 +order to have a UX that really works. And judging by the + +00:08:56.680 --> 00:08:58.999 +option that you've picked in the demos that you've showed + +00:08:59.000 --> 00:09:04.039 +today, I don't think it'd be particularly easy to organize + +00:09:04.040 --> 00:09:07.959 +them in a UX just casually for any mode. I think you need some + +00:09:07.960 --> 00:09:14.159 +human introspection to understand this, if that makes + +00:09:14.160 --> 00:09:14.679 +sense. + +00:09:14.680 --> 00:09:17.279 +Moving to the next question, which is related to something + +00:09:17.280 --> 00:09:19.605 +we discussed about with Magit. + +NOTE Q: Does Casual have a log where you can see what commands were invoked? + +00:09:19.606 --> 00:09:21.079 +Does Casual have a log where + +00:09:21.080 --> 00:09:23.759 +you can see what commands were invoked? This is always + +00:09:23.760 --> 00:09:27.479 +available via M-x view-lossage or via the command-log-mode, + +00:09:27.480 --> 00:09:30.993 +but I'm wondering if it can do for Emacs command what + +00:09:30.994 --> 00:09:34.479 +magit-process-buffer does for learning Git commands. And for + +00:09:34.480 --> 00:09:37.439 +everyone who's currently in Emacs, whenever you're + +00:09:37.440 --> 00:09:40.639 +running a command in Magit, it's always printing the exact + +00:09:40.640 --> 00:09:44.799 +command that was run in a shell, inside this $ + +00:09:44.800 --> 00:09:47.399 +menu. So does Casual actually provide something similar, + +00:09:47.400 --> 00:09:52.599 +Charles? I don't know. In general, because I'm building off + +00:09:52.600 --> 00:09:55.199 +of transient, it would have to be a mechanism that's + +00:09:55.200 --> 00:10:01.519 +available through transient. And You know, I would let + +00:10:01.520 --> 00:10:06.799 +Jonas speak more on that capability, because to be honest, I + +00:10:06.800 --> 00:10:14.879 +mean, even to my knowledge of transient is not that deep, + +00:10:14.880 --> 00:10:16.839 +actually. + +00:10:16.840 --> 00:10:21.399 +Well, it's funny that you say this because even though you + +00:10:21.400 --> 00:10:23.759 +say your knowledge might not be that big, you still managed + +00:10:23.760 --> 00:10:27.239 +to develop a whole suite of tools on top of it. So as far as + +00:10:27.240 --> 00:10:29.599 +people who do not know transient a whole lot, you're doing a + +00:10:29.600 --> 00:10:33.159 +pretty damn good job. Let me tell you that much. Thank you. + +00:10:33.160 --> 00:10:37.719 +Yeah, I think sort of what I bring to the table is, you know, + +00:10:37.720 --> 00:10:41.919 +quite a considerable career in software development on + +00:10:41.920 --> 00:10:47.879 +other software ecosystems. And as of late, I've spent + +00:10:47.880 --> 00:10:52.439 +basically the past decade working on iOS apps. Right. I + +00:10:52.440 --> 00:10:55.199 +think it's refreshing to be able to go back to something that + +00:10:55.200 --> 00:10:56.839 +looks like Emacs after iOS. + +00:10:56.840 --> 00:11:03.879 +Well, that's perhaps another longer conversation there. + +00:11:03.880 --> 00:11:08.599 +Speaking of longer conversation, we have only about 10 + +00:11:08.600 --> 00:11:11.599 +minutes left until we need to move on to the next talk. But + +00:11:11.600 --> 00:11:13.759 +thank you everyone for all the questions you're asking. I'm + +00:11:13.760 --> 00:11:17.239 +not saying this because we finished, but it's good to see so + +00:11:17.240 --> 00:11:19.919 +many people writing in the chat and asking questions. It + +00:11:19.920 --> 00:11:23.079 +always shows that you're interested and that's always + +00:11:23.080 --> 00:11:26.079 +lovely to us. And you've mentioned Jonas. Obviously, we're + +00:11:26.080 --> 00:11:29.359 +talking about Jonas Bernoulli, i.e. Tarsius, the + +00:11:29.360 --> 00:11:33.439 +maintainer of transient. And what Charles just mentioned + +00:11:33.440 --> 00:11:37.559 +about having a transient tooling to print the lossage, + +00:11:37.560 --> 00:11:43.039 +basically, of which sex were run by which command, feels + +00:11:43.040 --> 00:11:44.839 +like this is something that would be interesting. So, + +00:11:44.840 --> 00:11:50.239 +perhaps, I'm not sure if Tarsius is still on the chat + +00:11:50.240 --> 00:11:52.639 +currently, but he was definitely around earlier today, so + +00:11:52.640 --> 00:11:55.839 +we'll make sure that the ID lands on his lap later on. All + +00:11:55.840 --> 00:12:00.203 +right, moving to the next question. + +NOTE Q: Is there a setting to close menu after executing command? + +00:12:00.204 --> 00:12:00.919 +Is there a setting to + +00:12:00.920 --> 00:12:07.479 +close menu after executing a command? By default, it will. + +00:12:07.480 --> 00:12:10.879 +There's a slot that you can define in a transient + +00:12:10.880 --> 00:12:17.199 +prefix called :transient. And if you set that to true, + +00:12:17.200 --> 00:12:20.639 +then it will persist the menu after executing the command. + +00:12:20.640 --> 00:12:26.159 +But by default, it will actually dismiss the menu. This + +00:12:26.160 --> 00:12:29.359 +feels... Did you actually get to play with Hydra before + +00:12:29.360 --> 00:12:36.279 +playing with transients? To be honest, no. Yeah, I kind of + +00:12:36.280 --> 00:12:41.719 +slept on Hydra or at least, you know, I really wasn't all that + +00:12:41.720 --> 00:12:44.639 +ambitious with working with different packages until + +00:12:44.640 --> 00:12:48.639 +about like, a little less than 2 years ago or so. + +00:12:48.640 --> 00:12:57.639 +And then the other part was also, um. You know, not not really + +00:12:57.640 --> 00:13:01.999 +a technical. Start a comparison because I really don't want + +00:13:02.000 --> 00:13:05.759 +to upset folks here, but, uh. But more along the lines of just + +00:13:05.760 --> 00:13:09.559 +going with the notion that transient was being built in or + +00:13:09.560 --> 00:13:15.279 +packaged as a built in package for Emacs. I went with using + +00:13:15.280 --> 00:13:20.679 +that for my implementation. Cool. And I don't think there's + +00:13:20.680 --> 00:13:23.199 +anything controversial with what you're saying right now + +00:13:23.200 --> 00:13:28.839 +because, you know, we had earlier today, Euro Rechenko, the + +00:13:28.840 --> 00:13:32.439 +new maintainer of Augment, mentioning that he'd like to + +00:13:32.440 --> 00:13:34.319 +have a better integration with Transient because + +00:13:34.320 --> 00:13:39.159 +Transient is, it looks like it's here to stay for a long time + +00:13:39.160 --> 00:13:42.879 +and might even land in core at some point. So, it definitely + +00:13:42.880 --> 00:13:49.519 +feels comparing Hydra because for me, most of my UI needs in + +00:13:49.520 --> 00:13:54.439 +Emacs prior to Transient were done via Hydra because it was a + +00:13:54.440 --> 00:13:57.799 +very convenient tooling. For people who do not know, Hydra + +00:13:57.800 --> 00:14:02.919 +is written by AboAbo. who's also authored packages like + +00:14:02.920 --> 00:14:08.639 +Lispy, an interactive Lisp mode, also for Ivy, which you + +00:14:08.640 --> 00:14:14.239 +might know as the counterpart of Helm, maybe five years ago. + +00:14:14.240 --> 00:14:17.959 +So all those packages, they were very innovative for the + +00:14:17.960 --> 00:14:21.199 +time and it's cool to see that some of the ideas which were + +00:14:21.200 --> 00:14:28.039 +introduced by IV and Helm and all this are then taken by tools + +00:14:28.040 --> 00:14:30.279 +like Transient and done perhaps with a little more + +00:14:30.280 --> 00:14:33.639 +hindsight now that people have experienced a little more of + +00:14:33.640 --> 00:14:38.359 +it. Okay, we have still a little bit of time. Moving on to the + +00:14:38.360 --> 00:14:40.281 +next question. + +NOTE Q: What modes are you working on at the moment for casual / are excited to explore? + +00:14:40.282 --> 00:14:41.919 +What modes are you working on at the moment + +00:14:41.920 --> 00:14:44.159 +for Casual or are you excited to explore? + +00:14:44.160 --> 00:14:53.999 +Well, so I just recently published one for calendar. And so I + +00:14:54.000 --> 00:14:56.839 +think the calendar interface has a lot of really + +00:14:56.840 --> 00:15:00.479 +interesting behavior, particularly its support for + +00:15:00.480 --> 00:15:07.479 +non-Gregorian events, which is, you know, for folks who'd + +00:15:07.480 --> 00:15:13.079 +like, in my case, looking at the lunar calendar, it's great + +00:15:13.080 --> 00:15:17.799 +to have tooling to be able to not have to leave Emacs to figure + +00:15:17.800 --> 00:15:19.759 +out when a lunar date is. + +00:15:19.760 --> 00:15:29.599 +Then, I think, you know, for the most part, My work on casual + +00:15:29.600 --> 00:15:34.959 +was really kind of my summer of code for Emacs here. And so in + +00:15:34.960 --> 00:15:41.519 +many ways, the velocity of casual development is going to + +00:15:41.520 --> 00:15:48.919 +slow down where I've got a big bulk of the modes that I really + +00:15:48.920 --> 00:15:57.519 +wanted to take care of. Um, I think one experimental thing + +00:15:57.520 --> 00:16:00.999 +that I think is very unbaked, but I would, you know, if folks + +00:16:01.000 --> 00:16:06.879 +are interested, uh, maybe looking at it is, uh, taking a look + +00:16:06.880 --> 00:16:13.079 +at edebug and trying to make that an easier thing to do. Um, + +00:16:13.080 --> 00:16:18.359 +that is ambitious. Uh, yeah, so maybe too ambitious. + +00:16:18.360 --> 00:16:23.713 +Uh, other things are like really scary projects. + +00:16:23.714 --> 00:16:25.195 +And so, not to say that + +00:16:25.196 --> 00:16:28.319 +I really have a desire to do it, but another + +00:16:28.320 --> 00:16:33.239 +one would be ediff. Right. Okay. Relitigating it's + +00:16:33.240 --> 00:16:43.639 +interface, um, to have a transient menu. I say + +00:16:43.640 --> 00:16:47.919 +these things, but I'm also scared of those things. Yeah, I + +00:16:47.920 --> 00:16:50.719 +mean, I think it's a lovely way to tackle the project, + +00:16:50.720 --> 00:16:55.479 +really, because you are fully aware that edebug and ediffs + +00:16:55.480 --> 00:16:59.399 +are mastodons when it comes to Emacs. They work very well. If + +00:16:59.400 --> 00:17:02.639 +you've ever tried to do a conflict resolution in Magit and + +00:17:02.640 --> 00:17:07.199 +you've pressed e, that usually opens ediff for you. If you + +00:17:07.200 --> 00:17:09.959 +happen to know how it works, it's amazing, but if you do not know + +00:17:09.960 --> 00:17:13.719 +it works, the interface is a little... It's a lot to take in + +00:17:13.720 --> 00:17:20.879 +at the moment. You have to know a, b, w... I can, and I + +00:17:20.880 --> 00:17:24.439 +can never remember which one is the lower and which one is the + +00:17:24.440 --> 00:17:27.359 +upper. Like, it constantly goes in different directions. I + +00:17:27.360 --> 00:17:29.719 +can never remember which is the commit I'm trying to merge, + +00:17:29.720 --> 00:17:32.759 +which is the commit I'm currently being on. It has nothing to + +00:17:32.760 --> 00:17:36.839 +do with Magit. It's merely Git and the way they conceive + +00:17:36.840 --> 00:17:39.719 +this. And probably, there might be a very nice way to + +00:17:39.720 --> 00:17:42.079 +remember it, but I still haven't found it after 10 years as a + +00:17:42.080 --> 00:17:44.919 +software developer. So, I guess I need to dig a little + +00:17:44.920 --> 00:17:48.519 +deeper. But what I find lovely about the approach is that for + +00:17:48.520 --> 00:17:52.599 +you, working on the interface to those tools is actually + +00:17:52.600 --> 00:17:55.159 +something that allows you to discover how they work, but + +00:17:55.160 --> 00:17:59.119 +also how to make it more easy for people to understand how + +00:17:59.120 --> 00:18:02.039 +those tools work. So you're doing the work of + +00:18:02.040 --> 00:18:05.399 +understanding, of digesting a lot of the commands, so that + +00:18:05.400 --> 00:18:08.599 +people do not have to go through the same pain as you have. So I + +00:18:08.600 --> 00:18:14.279 +find this a very noble endeavor in a way. + +NOTE Getting older + +00:18:14.280 --> 00:18:18.559 +In so many ways, as perhaps I've mentioned + +00:18:18.560 --> 00:18:23.639 +in my talk, I'm getting older. I can't remember all + +00:18:23.640 --> 00:18:28.759 +these damn commands and my hand dexterity is failing. I + +00:18:28.760 --> 00:18:33.199 +mean, there's so many. Like multiple keystroke + +00:18:33.200 --> 00:18:37.479 +bindings, which I absolutely loathe. At most, + +00:18:37.480 --> 00:18:40.799 +like I can, I can only physically handle like, two + +00:18:40.800 --> 00:18:47.799 +characters, three maybe, at a time. So maybe + +00:18:47.800 --> 00:18:51.239 +that's just me, and others may + +00:18:51.240 --> 00:18:55.999 +feel differently, but at the same time, + +00:18:56.000 --> 00:19:01.519 +the work that I've invested here is has been very personal + +00:19:01.520 --> 00:19:06.239 +for me because I just don't want to work that hard, and I want to + +00:19:06.240 --> 00:19:11.159 +keep using Emacs. Yeah, and that's again a very good + +00:19:11.160 --> 00:19:13.719 +endeavor, I think, to have. And there's one last thing that + +00:19:13.720 --> 00:19:16.039 +I'd like to mention, because you've mentioned this project + +00:19:16.040 --> 00:19:19.879 +of yours, Casual, being some kind of summer of code, with the + +00:19:19.880 --> 00:19:22.399 +implication that you've worked a whole lot of it during the + +00:19:22.400 --> 00:19:26.919 +summer or during this period. and perhaps investment will + +00:19:26.920 --> 00:19:31.119 +die down a little bit now. But I think it's completely fine to + +00:19:31.120 --> 00:19:33.879 +have moments when you feel particularly excited and you do a + +00:19:33.880 --> 00:19:36.959 +lot of work, and sometimes it dies down a little bit. + +00:19:36.960 --> 00:19:41.439 +Personally, I've been... Four years ago, I was working a lot + +00:19:41.440 --> 00:19:44.679 +on Org Roam and I had my Summer of Code on Org Roam. And that was + +00:19:44.680 --> 00:19:47.159 +great. I was able to do a lot of things, to get a lot of things + +00:19:47.160 --> 00:19:50.559 +out of my head. But eventually, you know, you have to go make + +00:19:50.560 --> 00:19:53.279 +some money to survive or you have to take care of family and + +00:19:53.280 --> 00:19:56.399 +stuff like this. So, life tends to get in the way of your + +00:19:56.400 --> 00:20:00.519 +hobbies, especially when, you know, it's so... It's + +00:20:00.520 --> 00:20:03.239 +hobbies that involve so much of your time to get things + +00:20:03.240 --> 00:20:07.879 +right, like programming does. But, you know, we appreciate + +00:20:07.880 --> 00:20:09.799 +all the work you've done, Charles, and the fact that you've + +00:20:09.800 --> 00:20:12.679 +put it out there for people to enjoy. It's already a victory. + +00:20:12.680 --> 00:20:14.999 +You don't need to feel compelled to keep working on it + +00:20:15.000 --> 00:20:18.159 +because ultimately, as you said, the beauty of open source + +00:20:18.160 --> 00:20:21.759 +is that people can just send PRs and get the project going + +00:20:21.760 --> 00:20:28.519 +again. Yeah. I mean, and if anything, you know, folks have + +00:20:28.520 --> 00:20:33.319 +expressed to me that, you know, in many ways, a lot of this + +00:20:33.320 --> 00:20:37.959 +stuff should be, you know, sort of folded in the core. And, + +00:20:37.960 --> 00:20:45.159 +you know, I would love to see at least the ideals of, or at + +00:20:45.160 --> 00:20:49.319 +least an openness into thinking, rethinking the interface + +00:20:49.320 --> 00:20:54.119 +for Emacs. So, you know, it doesn't have to be, basically + +00:20:54.120 --> 00:20:59.119 +work the way it worked for basically the last half of the 20th + +00:20:59.120 --> 00:21:03.519 +century here. Yeah, Emacs is flexible enough to have + +00:21:03.520 --> 00:21:10.279 +different approaches and, you know, transient is one + +00:21:10.280 --> 00:21:17.759 +approach, but at the same time, you know, the ability to + +00:21:17.760 --> 00:21:22.559 +reimagine the user interface for, you know, the computing + +00:21:22.560 --> 00:21:28.159 +needs, you know, for basically users needs today, whether + +00:21:28.160 --> 00:21:33.119 +you write or code or anything of that nature, I think is an + +00:21:33.120 --> 00:21:39.039 +exciting and great thing. Yeah, well, thank you so much for + +00:21:39.040 --> 00:21:41.639 +this conclusion. So I'm a little sorry, because sadly, we + +00:21:41.640 --> 00:21:45.919 +needed to move the stream to the next talk. So we've lost + +00:21:45.920 --> 00:21:49.639 +about 20 seconds of what you said. But don't worry, whatever + +00:21:49.640 --> 00:21:51.999 +you've said will be available on the website. I didn't want + +00:21:52.000 --> 00:21:55.759 +to interrupt, sadly, because I didn't want to be rude. But I + +00:21:55.760 --> 00:21:58.679 +think we did a great job answering the questions. So thank + +00:21:58.680 --> 00:22:01.199 +you so much for taking the time. I'll need to get going, + +00:22:01.200 --> 00:22:02.759 +because we might have a problem with the next talk. So thank + +00:22:02.760 --> 00:22:05.919 +you so much, Charles. Certainly. Take care. Thank you. + +00:22:05.920 --> 00:22:12.120 +Appreciate it. Bye. diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt new file mode 100644 index 00000000..307d693b --- /dev/null +++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt @@ -0,0 +1,56 @@ +WEBVTT + + +00:00:00.000 --> 00:00:43.799 +introduction + +00:00:43.800 --> 00:02:34.799 +Recall vs recognition + +00:02:34.800 --> 00:03:43.399 +Emacs with keyboard-driven menus + +00:03:43.400 --> 00:04:08.199 +Transient + +00:04:08.200 --> 00:04:29.302 +A Transient menu can be pinned + +00:04:29.303 --> 00:04:59.526 +Modes are apps, really + +00:04:59.527 --> 00:05:28.039 +Transient all the modes! + +00:05:28.040 --> 00:06:17.959 +Casual design principles + +00:06:17.960 --> 00:07:04.365 +Casual design conventions + +00:07:04.366 --> 00:09:06.639 +Casual Dired + +00:09:06.640 --> 00:10:36.199 +Casual EditKit + +00:10:36.200 --> 00:11:31.996 +EditKit demo + +00:11:31.997 --> 00:12:53.139 +Marking and moving + +00:12:53.140 --> 00:14:04.975 +Rectangles + +00:14:04.976 --> 00:14:36.599 +Numbering + +00:14:36.600 --> 00:17:02.639 +Sorting + +00:17:02.640 --> 00:17:34.450 +Casual has transformed my user experience with Emacs + +00:17:34.451 --> 00:18:23.720 +Thanks and acknowledgements diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt new file mode 100644 index 00000000..26187e17 --- /dev/null +++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt @@ -0,0 +1,757 @@ +WEBVTT captioned by sachac, checked by bhavin + +NOTE introduction + +00:00:00.000 --> 00:00:05.079 +Hello, my name is Charles Choi and welcome to my talk: + +00:00:05.080 --> 00:00:11.359 +"Reimagining the Emacs user experience with Casual Suite." + +00:00:11.360 --> 00:00:14.919 +Casual Suite is a set of opinionated user interfaces to + +00:00:14.920 --> 00:00:18.399 +different modes offered in Emacs. Before I get into + +00:00:18.400 --> 00:00:22.199 +describing Casual in detail, let's first talk about the + +00:00:22.200 --> 00:00:27.039 +existing Emacs user experience. To make Emacs go, people + +00:00:27.040 --> 00:00:31.079 +can either invoke commands by name with + +00:00:31.080 --> 00:00:34.081 +execute-extended-command, + +00:00:34.082 --> 00:00:36.403 +run a command directly with a pre-assigned + +00:00:36.404 --> 00:00:43.799 +key binding, finally, use a mouse menu if it's available. + +NOTE Recall vs recognition + +00:00:43.800 --> 00:00:46.719 +From human-computer interface research, there is a + +00:00:46.720 --> 00:00:50.799 +concept of recall versus recognition in user interface + +00:00:50.800 --> 00:00:56.599 +design. Let's show their distinction by example. A common + +00:00:56.600 --> 00:01:00.839 +recall interface is password entry. Absent any historical + +00:01:00.840 --> 00:01:04.639 +affordances, a user must directly remember information to + +00:01:04.640 --> 00:01:09.839 +succeed with this interface. In contrast, menus offer + +00:01:09.840 --> 00:01:13.439 +immediate visual cues on what commands are available. This + +00:01:13.440 --> 00:01:16.839 +allows a user to recognize familiar behavior to support + +00:01:16.840 --> 00:01:21.879 +successful selection of it. From user interface research, + +00:01:21.880 --> 00:01:26.119 +the key finding is this. Interfaces emphasizing + +00:01:26.120 --> 00:01:29.999 +recognition are much easier to use than those relying on + +00:01:30.000 --> 00:01:35.799 +recall. In this light, we see that the Emacs user experience + +00:01:35.800 --> 00:01:41.279 +leans too much towards recall. Completion in history can + +00:01:41.280 --> 00:01:44.479 +help tip the scales towards recognition, but only by a + +00:01:44.480 --> 00:01:47.959 +little bit. + +00:01:47.960 --> 00:01:52.399 +This reliance on recall is discouraging to users both new + +00:01:52.400 --> 00:01:56.839 +and old, and that's a shame because Emacs has so many useful + +00:01:56.840 --> 00:02:00.759 +commands. But the kicker is that most of them are + +00:02:00.760 --> 00:02:05.239 +infrequently used. You can't recall them all. At least I + +00:02:05.240 --> 00:02:11.239 +can't. So, a conundrum. While I've been using Emacs since + +00:02:11.240 --> 00:02:15.159 +the early 90s, truthfully, it's been only in this past + +00:02:15.160 --> 00:02:19.679 +decade that I've leveled up in using it. Org Mode, Magit, + +00:02:19.680 --> 00:02:23.199 +Eglot, Avy, and many other packages have transformed how I + +00:02:23.200 --> 00:02:28.639 +use it. I can only deal with so much cognitive load and + +00:02:28.640 --> 00:02:34.799 +physically straining key bindings. So, what to do about it? + +NOTE Emacs with keyboard-driven menus + +00:02:34.800 --> 00:02:36.159 +Let's bring back an old ideal. + +00:02:36.160 --> 00:02:42.359 +Keyboard-driven menus have been around since TTY video + +00:02:42.360 --> 00:02:47.359 +terminals with mainframes. If you're old enough to recall + +00:02:47.360 --> 00:02:50.079 +working with such interfaces, these terms will seem + +00:02:50.080 --> 00:02:53.239 +familiar. They all worked with the limitations of + +00:02:53.240 --> 00:02:57.639 +text-based video displays. + +00:02:57.640 --> 00:03:01.599 +With keyboard-driven menus, if a command exists but nobody + +00:03:01.600 --> 00:03:05.519 +can find it, it's not really useful. A well-designed menu + +00:03:05.520 --> 00:03:09.719 +can make a command discoverable. If the command is + +00:03:09.720 --> 00:03:15.199 +infrequently used, making it recognizable helps a lot. And + +00:03:15.200 --> 00:03:18.679 +for working primarily with text, having keyboard-only + +00:03:18.680 --> 00:03:24.119 +interactions encourages flow. Given the above, the next + +00:03:24.120 --> 00:03:28.479 +steps seem natural: + +00:03:28.480 --> 00:03:32.759 +augment Emacs with keyboard-driven menus. This is not + +00:03:32.760 --> 00:03:36.639 +saying that I want to obsolete name commands, keybindings, + +00:03:36.640 --> 00:03:41.079 +and mouse menus. They all can happily coexist. Emacs is + +00:03:41.080 --> 00:03:43.399 +large. It can contain multitudes. + +NOTE Transient + +00:03:43.400 --> 00:03:49.879 +Conveniently, Emacs has a built-in library for building + +00:03:49.880 --> 00:03:53.839 +such menus. It's called Transient, and it's been around + +00:03:53.840 --> 00:03:59.319 +since Emacs 28. Developed primarily by Jonas Bernoulli as a + +00:03:59.320 --> 00:04:03.199 +UI toolkit for Magit, Transient has an essential feature + +00:04:03.200 --> 00:04:08.199 +for building great keyboard-driven interfaces. + +NOTE A Transient menu can be pinned + +00:04:08.200 --> 00:04:11.919 +A transient menu can be pinned and their state updated as + +00:04:11.920 --> 00:04:15.239 +commands are issued from them. This lets us build + +00:04:15.240 --> 00:04:18.399 +interfaces that reflect internal state changes made by + +00:04:18.400 --> 00:04:21.919 +commands issued from the user. This is great because many + +00:04:21.920 --> 00:04:26.599 +modes have stateful behavior, and guess what? Emacs has a lot + +00:04:26.600 --> 00:04:29.302 +of modes. + +NOTE Modes are apps, really + +00:04:29.303 --> 00:04:31.999 +If you think about it, Emacs modes are akin to the + +00:04:32.000 --> 00:04:35.079 +ecosystem of apps that we see today, but with far less + +00:04:35.080 --> 00:04:39.319 +structure and packaging. A mode, like an app, focuses on + +00:04:39.320 --> 00:04:42.959 +delivering specific behavior to the user. There are many + +00:04:42.960 --> 00:04:45.999 +built-in modes in Emacs, and these modes are complex with + +00:04:46.000 --> 00:04:50.679 +dozens, if not hundreds, of commands. Calc itself has over + +00:04:50.680 --> 00:04:54.879 +1,000 of them. It's frustrating to know that these commands + +00:04:54.880 --> 00:04:59.526 +are there, but I really can't access them via recall. + +NOTE Transient all the modes! + +00:04:59.527 --> 00:05:05.079 +So I decided to do something about it, and that was to transient + +00:05:05.080 --> 00:05:09.999 +all the modes, or at least the most major ones. This past + +00:05:10.000 --> 00:05:12.679 +summer, I had the time and resources to start building + +00:05:12.680 --> 00:05:15.799 +Transient interfaces for modes that I wanted to more + +00:05:15.800 --> 00:05:22.319 +elegantly use. I decided to call this work Casual. Given its + +00:05:22.320 --> 00:05:25.519 +definition, it seemed like a good fit for the vibe that I + +00:05:25.520 --> 00:05:28.039 +wanted these interfaces to embody. + +NOTE Casual design principles + +00:05:28.040 --> 00:05:34.999 +Design principles that I embraced up front were + +00:05:35.000 --> 00:05:38.239 +handcrafted information architecture and layout. This is + +00:05:38.240 --> 00:05:41.799 +largely an exercise in mapping a mode's command set to a + +00:05:41.800 --> 00:05:47.119 +hierarchical menu structure. I wanted these menus to make + +00:05:47.120 --> 00:05:50.719 +sense to most people. Ideally, users would not have to read + +00:05:50.720 --> 00:05:55.839 +documentation to get at the command that they wanted. Early + +00:05:55.840 --> 00:05:59.359 +on, I quickly learned that it was impossible to maintain the + +00:05:59.360 --> 00:06:02.479 +existing default key bindings when mapping them over to a + +00:06:02.480 --> 00:06:06.759 +hierarchical menu. Also, some bindings I just flat out + +00:06:06.760 --> 00:06:10.199 +disagreed with. I resolved to be friendly, but not + +00:06:10.200 --> 00:06:14.919 +beholden to them. In all of the above, I've gone out of my way + +00:06:14.920 --> 00:06:17.959 +to make clear that my design decisions are opinionated. + +NOTE Casual design conventions + +00:06:17.960 --> 00:06:21.719 +Using casual. + +00:06:21.720 --> 00:06:30.039 +To reinforce habit, a common key binding is used per mode to + +00:06:30.040 --> 00:06:33.799 +raise a main menu. This key binding is left to user + +00:06:33.800 --> 00:06:36.719 +preference. For me, that binding is C-o. + +00:06:36.720 --> 00:06:44.639 +Command bindings are mnemonic when possible. + +00:06:44.640 --> 00:06:49.559 +Mode-specific settings are given their own menu. Since + +00:06:49.560 --> 00:06:53.319 +transient menus can be pinned, we can support repeat or + +00:06:53.320 --> 00:06:58.479 +stateful behavior in a mode. + +00:06:58.480 --> 00:07:02.319 +As of this writing, there are 11 modes supported by Casual, + +00:07:02.320 --> 00:07:04.365 +with several more on the way. + +NOTE Casual Dired + +00:07:04.366 --> 00:07:05.719 +Let's look at the Casual menu + +00:07:05.720 --> 00:07:12.479 +for Dired to highlight the design conventions previously + +00:07:12.480 --> 00:07:13.559 +mentioned. + +00:07:13.560 --> 00:07:17.719 +In a Dired Emacs window, the user can invoke their preferred + +00:07:17.720 --> 00:07:22.279 +key binding to call a top-level Casual main menu. This main + +00:07:22.280 --> 00:07:27.919 +menu is displayed at the bottom of the Emacs frame. Zooming + +00:07:27.920 --> 00:07:30.839 +into this menu, we see the commands offered in it + +00:07:30.840 --> 00:07:34.559 +categorized into different sections. Each command has a + +00:07:34.560 --> 00:07:38.039 +key binding, usually a single character shown before its + +00:07:38.040 --> 00:07:42.599 +label. The File section holds commands that act upon the + +00:07:42.600 --> 00:07:47.559 +currently selected item or marked items. The Directory + +00:07:47.560 --> 00:07:50.319 +section holds commands that affect the current directory + +00:07:50.320 --> 00:07:55.599 +or its subdirs within it. The Mark section has marking + +00:07:55.600 --> 00:08:00.279 +commands that allow for aggregate operations. The + +00:08:00.280 --> 00:08:03.399 +Navigation section shows commands that move the point in a + +00:08:03.400 --> 00:08:09.559 +direct buffer. The quick section provides access to + +00:08:09.560 --> 00:08:14.519 +bookmark and buffer list commands. Search and replace + +00:08:14.520 --> 00:08:19.119 +commands are grouped in the search section. New directory + +00:08:19.120 --> 00:08:24.079 +and file creation are given their own section. Finally, at + +00:08:24.080 --> 00:08:27.599 +the bottom of the menu are commands dedicated to Casual menu + +00:08:27.600 --> 00:08:28.439 +navigation. + +00:08:28.440 --> 00:08:34.079 +Casual is conformant to Transient conventions where the + +00:08:34.080 --> 00:08:39.479 +key binding C-g for dismiss one and C-q to dismiss all + +00:08:39.480 --> 00:08:43.639 +menus are honored. Another transient convention is to + +00:08:43.640 --> 00:08:49.519 +reserve the key binding q to quit the current mode. For most + +00:08:49.520 --> 00:08:53.959 +main menus, casual uses the , key binding to invoke a + +00:08:53.960 --> 00:08:58.999 +mode-specific settings menu. Casual also adopts the + +00:08:59.000 --> 00:09:02.039 +common UI convention of using ... > + +00:09:02.040 --> 00:09:05.879 +symbols to denote required input and submenus + +00:09:05.880 --> 00:09:06.639 +respectively. + +NOTE Casual EditKit + +00:09:06.640 --> 00:09:13.919 +Some commands are more global or non-mode specific in + +00:09:13.920 --> 00:09:18.039 +nature. A great deal of these commands relate to editing, + +00:09:18.040 --> 00:09:23.239 +which I find to be a prime motivation for using Emacs. Let's + +00:09:23.240 --> 00:09:25.559 +examine one such menu that supports this. + +00:09:25.560 --> 00:09:31.599 +The main menu for Casual EditKit is designed to provide easy + +00:09:31.600 --> 00:09:36.279 +access to editing and editing-related commands. Like the + +00:09:36.280 --> 00:09:39.959 +previous Dired menu, it organizes commands into different + +00:09:39.960 --> 00:09:40.679 +sections. + +00:09:40.680 --> 00:09:45.999 +Commands related to file and buffer operations are in the + +00:09:46.000 --> 00:09:50.519 +File section. Commands for editing text are in the Edit + +00:09:50.520 --> 00:09:55.599 +section. S- or balanced expression commands are given a + +00:09:55.600 --> 00:09:59.439 +dedicated section for their own. More often than not, in + +00:09:59.440 --> 00:10:02.159 +many modes, I find them to do what I want. + +00:10:02.160 --> 00:10:08.879 +The tools section provides access to common tools. + +00:10:08.880 --> 00:10:13.719 +Bookmarks I consider to be an essential feature. If you + +00:10:13.720 --> 00:10:18.439 +haven't used them, it's never too late to start. Emacs + +00:10:18.440 --> 00:10:20.799 +window management commands are given this section. + +00:10:20.800 --> 00:10:25.799 +Commands for search and replace, macros, and projects can + +00:10:25.800 --> 00:10:32.199 +be accessed from here. Finally, the menu navigation + +00:10:32.200 --> 00:10:35.719 +section. Note that register commands can be accessed from + +00:10:35.720 --> 00:10:36.199 +here. + +NOTE EditKit demo + +00:10:36.200 --> 00:10:42.439 +Okay, enough screenshots. Let's look at Casual in action + +00:10:42.440 --> 00:10:48.439 +with a demo of the EditKit menus. Let's start our demo of + +00:10:48.440 --> 00:10:54.439 +casual-editkit with raising the menu, which is bound to + +00:10:54.440 --> 00:10:58.919 +C-o. You'll see the menu pop up here. In + +00:10:58.920 --> 00:11:02.519 +particular, we want to look at the edit operation. We'll + +00:11:02.520 --> 00:11:08.679 +press e and we'll see a number of menu items that allow you to + +00:11:08.680 --> 00:11:16.239 +make editing transformations to the text, be it marking, + +00:11:16.240 --> 00:11:20.239 +copying, killing, transposing, transforming, moving, or + +00:11:20.240 --> 00:11:24.279 +deleting the text. You'll see also that there is a submenu + +00:11:24.280 --> 00:11:31.996 +for rectangle operations. Let's first... + +NOTE Marking and moving + +00:11:31.997 --> 00:11:37.406 +Let's actually dig through and look at what's in the Mark submenu. + +00:11:37.407 --> 00:11:42.039 +You'll see that there are increments of text in which you can + +00:11:42.040 --> 00:11:45.239 +mark. You can mark a word, a sentence, a paragraph, and + +00:11:45.240 --> 00:11:49.559 +balanced expression. If we go back, you'll see a similar + +00:11:49.560 --> 00:11:57.339 +pattern for copying as well as killing. Transposing. + +00:11:57.340 --> 00:12:02.879 +Let's go and try to move a sentence. We have the point there at + +00:12:02.880 --> 00:12:07.119 +hello there. We'll move that sentence around. If we + +00:12:07.120 --> 00:12:12.119 +press s, we can move it backward or forward. In this case, + +00:12:12.120 --> 00:12:16.279 +let's move it forward. We'll press f. You'll see hello + +00:12:16.280 --> 00:12:21.639 +there move up a sentence. Then we can also press b to move + +00:12:21.640 --> 00:12:29.879 +it back. Then press RET to dismiss. Also, if we wanted + +00:12:29.880 --> 00:12:35.199 +to, we can... In this menu particularly, you'll see that we + +00:12:35.200 --> 00:12:38.839 +also have cursor navigation, so we can move the point there. + +00:12:38.840 --> 00:12:43.039 +That's not in all the menus, but in a good part number of the + +00:12:43.040 --> 00:12:47.919 +menus in Casual Edit Kit, you'll see that here. Let's press + +00:12:47.920 --> 00:12:53.139 +RET to dismiss that. + +NOTE Rectangles + +00:12:53.140 --> 00:12:58.643 +Let's actually look at some rectangle operations here. + +00:12:58.644 --> 00:13:01.759 +In this case, we have a list with + +00:13:01.760 --> 00:13:08.519 +items x, y, and z. Let's say we wanted to prefix each item + +00:13:08.520 --> 00:13:14.239 +here with a string. We'll say we want to put in there + +00:13:14.240 --> 00:13:21.159 +hello. One way of doing that is to make a rectangle. So + +00:13:21.160 --> 00:13:25.719 +if we go into our rectangle menu, first off, what we need to do + +00:13:25.720 --> 00:13:31.199 +is define that rectangle region. We'll press m to mark + +00:13:31.200 --> 00:13:35.439 +where the point is right there. Then we can use our cursor + +00:13:35.440 --> 00:13:39.559 +operation to move the point to define the rectangle. In this + +00:13:39.560 --> 00:13:43.839 +case, it's right at the start there. We can use the string + +00:13:43.840 --> 00:13:49.679 +insert command, i, to insert hello, colon, and then we'll + +00:13:49.680 --> 00:13:54.799 +put a space there to make it look a little nicer. Sure + +00:13:54.800 --> 00:13:58.119 +enough, that's in there. + +00:13:58.120 --> 00:14:04.975 +We can have access to a number of rectangle commands here. + +NOTE Numbering + +00:14:04.976 --> 00:14:11.599 +If we wanted to, let's say, number, we can go through that same + +00:14:11.600 --> 00:14:16.719 +operation here, define a region, a rectangle region that + +00:14:16.720 --> 00:14:22.679 +is, and press n. You'll see that it has incremented a + +00:14:22.680 --> 00:14:28.639 +number for each item in that rectangle region. We can also + +00:14:28.640 --> 00:14:32.468 +tap u to undo these operations + +00:14:32.469 --> 00:14:36.599 +and leave that at that. + +NOTE Sorting + +00:14:36.600 --> 00:14:47.239 +Sorting. If we select a region here, And we go back. You'll + +00:14:47.240 --> 00:14:52.399 +see that the sort submenu is now enabled. Sorting won't work + +00:14:52.400 --> 00:14:56.239 +unless you have a region started. That's one of the nice + +00:14:56.240 --> 00:15:01.679 +things about transient is that it allows you to visually + +00:15:01.680 --> 00:15:09.079 +enable or disable command items with regards to whatever + +00:15:09.080 --> 00:15:12.559 +the current state or context is here. In this case is + +00:15:12.560 --> 00:15:17.359 +whether or not you have a region highlighted. Let's say we + +00:15:17.360 --> 00:15:22.879 +want to sort these two columns of numbers and so there's a + +00:15:22.880 --> 00:15:29.759 +command called n here which is numeric fields. Let's choose that + +00:15:29.760 --> 00:15:35.919 +here. Sure enough we get that. But there's a nice twist + +00:15:35.920 --> 00:15:39.679 +there. Let's say we wanted to sort on the second column. + +00:15:39.680 --> 00:15:48.919 +Let's move our point back up to here and we'll mark that. + +00:15:48.920 --> 00:15:52.799 +Since everything is in a continuous line, we can sort of + +00:15:52.800 --> 00:15:55.948 +pretend that this region is actually a paragraph + +00:15:55.949 --> 00:15:59.359 +and mark that. + +00:15:59.360 --> 00:16:06.999 +We'll go and select our sorting routine. But now we need to + +00:16:07.000 --> 00:16:11.319 +figure out how to make numeric fields sort on the second + +00:16:11.320 --> 00:16:16.359 +column. In transient, if we press a ?, that + +00:16:16.360 --> 00:16:21.439 +gives us basically a intermediate help section where, if we + +00:16:21.440 --> 00:16:27.279 +press a key binding, it will tell us or load the docstring for + +00:16:27.280 --> 00:16:33.039 +the command that's there. That command in this case is + +00:16:33.040 --> 00:16:40.039 +sort-numeric-fields. It requires an argument. That + +00:16:40.040 --> 00:16:44.079 +argument can be passed using the prefix argument, + +00:16:44.080 --> 00:16:52.119 +C-u. Press q. Let's do that. In this case, we + +00:16:52.120 --> 00:16:58.679 +want to check or use the value 2 and press n. Sure enough, + +00:16:58.680 --> 00:17:04.339 +that region is sorted with respect to the second column. + +NOTE Casual has transformed my user experience with Emacs + +00:17:04.340 --> 00:17:12.159 +Before Casual, so many powerful Emacs commands were not + +00:17:12.160 --> 00:17:15.559 +available to me because they were too hard to recall or I + +00:17:15.560 --> 00:17:19.879 +could not discover them. Making Casual has changed that, + +00:17:19.880 --> 00:17:24.359 +letting me reimagine more positively my user experience + +00:17:24.360 --> 00:17:29.199 +with Emacs. If you're interested in any of what I've shown + +00:17:29.200 --> 00:17:34.450 +today, I invite you to try out Casual. + +NOTE Thanks and acknowledgements + +00:17:34.451 --> 00:17:37.032 +Before I leave, my thanks and acknowledgments + +00:17:37.033 --> 00:17:38.679 +go out to the following people. + +00:17:38.680 --> 00:17:43.399 +First, to Jonas Bernoulli for making Transient and Magit. + +00:17:43.400 --> 00:17:49.319 +Casual would not be possible without your work. Next, to + +00:17:49.320 --> 00:17:54.399 +Psionic-k for writing Transient Showcase. It showed me how I + +00:17:54.400 --> 00:17:59.439 +could build casual. To all the casual users and their + +00:17:59.440 --> 00:18:05.319 +support, I am genuinely appreciative. Finally, to Jon + +00:18:05.320 --> 00:18:08.759 +Snader for writing the kind posts on Casual on the Irreal + +00:18:08.760 --> 00:18:10.519 +website. Thank you. + +00:18:10.520 --> 00:18:15.797 +Casual can be found on MELPA, + +00:18:15.798 --> 00:18:23.720 +and its repository is hosted on GitHub. diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt new file mode 100644 index 00000000..3266d254 --- /dev/null +++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt @@ -0,0 +1,748 @@ +WEBVTT + +00:00:00.000 --> 00:00:06.039 +... Org mode and kind of note taking. And that meant that it wasn't + +00:00:06.040 --> 00:00:10.679 +too difficult to get started with. But when I started more on + +00:00:10.680 --> 00:00:14.959 +the coding side, because I'm a software engineer, you know, + +00:00:14.960 --> 00:00:20.679 +on the day job. That kind of got me to think that the colors and + +00:00:20.680 --> 00:00:26.479 +how themes look, how Emacs looks, was affecting. And that's + +00:00:26.480 --> 00:00:30.719 +how it kind of came to picture. So I could have kind of gone + +00:00:30.720 --> 00:00:34.919 +into a little bit more coding side of things, but I didn't + +00:00:34.920 --> 00:00:38.319 +want to stress too much on the talk. So that's why I kind of + +00:00:38.320 --> 00:00:43.439 +stuck to a very small bits of Org Mode and Elisp. And yeah, I + +00:00:43.440 --> 00:00:48.159 +think that's how it came about. Yeah, but that's perfectly + +00:00:48.160 --> 00:00:52.119 +fine. That's one of the chief reasons why we have two tracks + +00:00:52.120 --> 00:00:54.799 +for Emacs content. We've had those for the last four years, I + +00:00:54.800 --> 00:00:57.279 +think. It's because we have a general track, which is more + +00:00:57.280 --> 00:00:59.239 +geared towards people who want a general... well, + +00:00:59.240 --> 00:01:01.799 +generally people who are highly interested into org mode + +00:01:01.800 --> 00:01:03.999 +and not necessarily into coding, but just to whet their + +00:01:04.000 --> 00:01:08.399 +appetite to what can be done. And on the DevTrack, we have, + +00:01:08.400 --> 00:01:11.519 +well, this year we have talked about Rust and about other + +00:01:11.520 --> 00:01:13.559 +fancy things that people can do with Emacs. But, you know, + +00:01:13.560 --> 00:01:15.559 +I'm also a software engineer, you know, we do this all the + +00:01:15.560 --> 00:01:18.079 +time. Sometimes it's just fine to just chat about colors and + +00:01:18.080 --> 00:01:20.959 +just the results of what we develop rather than how the + +00:01:20.960 --> 00:01:24.839 +sausage is made. So that's completely fine too. I'm not sure + +NOTE Why colour? + +00:01:24.840 --> 00:01:28.879 +if you mentioned it in your presentation, but why color, out + +00:01:28.880 --> 00:01:31.479 +of all the things you could be ricing on your setup, why were + +00:01:31.480 --> 00:01:37.559 +you so interested about colors? I think it was just that + +00:01:37.560 --> 00:01:40.239 +mainly that I had to do a lot of context switch between + +00:01:40.240 --> 00:01:44.119 +different languages. Elisp is not the one because Elisp is + +00:01:44.120 --> 00:01:48.079 +something that I would do for Emacs editing. But for day job, + +00:01:48.080 --> 00:01:52.999 +I had to use mainly Go as I work with Kubernetes quite a bit. So + +00:01:53.000 --> 00:01:58.119 +Go and also web languages like TypeScript, JavaScript, you + +00:01:58.120 --> 00:02:01.519 +know, those languages, where I felt that whenever I was + +00:02:01.520 --> 00:02:05.359 +switching context to a different language, I felt that it's + +00:02:05.360 --> 00:02:08.839 +kind of annoying to see all the different colors in + +00:02:08.840 --> 00:02:11.999 +languages like TypeScript, where, you know, VS Code way + +00:02:12.000 --> 00:02:15.799 +would be very full of colors. which I felt that, okay, like, + +00:02:15.800 --> 00:02:18.759 +why do I have to have that many different colors on let and + +00:02:18.760 --> 00:02:23.759 +constant or the keywords where it could be just a white text? + +00:02:23.760 --> 00:02:27.679 +It didn't have to be that colorful. So that was the bit, the + +00:02:27.680 --> 00:02:31.399 +most annoying bit when it came to context switching. And I + +00:02:31.400 --> 00:02:34.759 +felt that that just didn't happen in the Org Mode or writing + +00:02:34.760 --> 00:02:40.799 +in general. So I had to find a way to make it work, make more + +00:02:40.800 --> 00:02:46.199 +coding make my coding more kind of friendly to me and that's + +00:02:46.200 --> 00:02:50.039 +when I thought maybe just the colors are something that's + +00:02:50.040 --> 00:02:54.039 +bothering me and it actually was the case and that's how I got + +00:02:54.040 --> 00:02:59.359 +to more into the color kind of journey and got too much into it + +00:02:59.360 --> 00:03:04.039 +I guess. Right, and was it what eventually motivated you to + +NOTE What motivated you to learn Elisp and get into the Emacs core? + +00:03:04.040 --> 00:03:06.999 +learn Elisp and to get into the Emacs core? Because it's + +00:03:07.000 --> 00:03:09.399 +funny how you find plenty of people using Emacs in Org Mode + +00:03:09.400 --> 00:03:11.399 +and then they find something that they take particular + +00:03:11.400 --> 00:03:15.039 +issue with, for you it's the color, and then they just go all + +00:03:15.040 --> 00:03:18.039 +in trying to pull the rope as far as they can to try to + +00:03:18.040 --> 00:03:21.359 +understand as much as possible about what code is managing + +00:03:21.360 --> 00:03:23.879 +this part of the application. Like for you it was color, for + +00:03:23.880 --> 00:03:27.999 +me it was the org agenda, I desperately wanted to make Org + +00:03:28.000 --> 00:03:32.439 +Agenda do something that it wasn't able to do. And five + +00:03:32.440 --> 00:03:35.199 +years, well, actually, no, 10 years later, I find myself + +00:03:35.200 --> 00:03:38.199 +hosting Emacs Cons. So, you never know just how far you're + +00:03:38.200 --> 00:03:40.399 +going to be pulling this rope. So, it's really interesting + +00:03:40.400 --> 00:03:44.679 +for me that my call was this. But back to the question, is this + +00:03:44.680 --> 00:03:47.759 +what eventually motivated you to get into Elisp and the core + +00:03:47.760 --> 00:03:53.439 +of Emacs? I think that the original journey to move to Emacs + +00:03:53.440 --> 00:03:56.959 +was around keybindings that I got annoyed with with other + +00:03:56.960 --> 00:03:59.839 +solutions, not just, you know, not speaking of Emacs + +00:03:59.840 --> 00:04:02.879 +keybinding or anything, like anything in general. The main + +00:04:02.880 --> 00:04:07.519 +reason was that I used Dovrak keyboard layout, and that + +00:04:07.520 --> 00:04:10.799 +meant that all the C-c, C-v, C-p, whatever, It just is + +00:04:10.800 --> 00:04:13.919 +all over the place. So I had to find something that could work + +00:04:13.920 --> 00:04:17.039 +for me. And Emacs was a solution that allowed me to do + +00:04:17.040 --> 00:04:20.479 +anything. And that's the kind of the journey that it + +00:04:20.480 --> 00:04:24.039 +originally started. And from there, started tweaking org + +00:04:24.040 --> 00:04:28.439 +mode and writing experience to be tuned to my liking. Color + +00:04:28.440 --> 00:04:32.559 +was another thing that I thought, OK, maybe I could do it + +00:04:32.560 --> 00:04:36.239 +easily with org mode. And when I started to use more of the + +00:04:36.240 --> 00:04:40.799 +coding side of things on Emacs, I felt that, okay, that was + +00:04:40.800 --> 00:04:45.159 +something I needed to solve. So Elisp was always kind of + +00:04:45.160 --> 00:04:48.439 +just a toolkit that, you know, I knew that it was available. I + +00:04:48.440 --> 00:04:52.199 +knew that it would be something that I want to be able to use. + +00:04:52.200 --> 00:04:57.159 +So I think in a way color was a good segue to understand how I + +00:04:57.160 --> 00:05:03.359 +can kind of work out more of a complex logic with the editor + +00:05:03.360 --> 00:05:06.359 +without having to write JavaScript or things that I don't + +00:05:06.360 --> 00:05:09.399 +particularly like. So yeah, I think the journey around the + +00:05:09.400 --> 00:05:11.879 +functional languages, functional kind of programming was + +00:05:11.880 --> 00:05:15.439 +always something that I was keen about. And yeah, the whole + +00:05:15.440 --> 00:05:18.479 +journey kind of made sense for me. And then moving on to the + +00:05:18.480 --> 00:05:21.999 +color was just one way to get more involved in. So I can + +00:05:22.000 --> 00:05:26.279 +totally see that this journey kind of making to a little bit + +00:05:26.280 --> 00:05:30.759 +different angle But yeah, we shall see how that really turns + +00:05:30.760 --> 00:05:33.799 +out. But for now, I think I'm happy with the color setup. Now I + +00:05:33.800 --> 00:05:37.599 +can really focus on the coding. Well, that's all good. And + +00:05:37.600 --> 00:05:40.839 +I'm sure plenty of people listening to you now, you know, + +00:05:40.840 --> 00:05:43.639 +find this relatable, how they eventually got into + +00:05:43.640 --> 00:05:46.879 +programming. Like for you, you did say that you were a + +00:05:46.880 --> 00:05:50.519 +software engineer now. But I found plenty of people, + +00:05:50.520 --> 00:05:54.679 +especially doing workshops, that just started you know, + +00:05:54.680 --> 00:05:57.639 +their software engineering journey just with Emacs and + +00:05:57.640 --> 00:05:59.239 +they just realized they were doing something completely + +00:05:59.240 --> 00:06:01.999 +different, like I was studying humanities. But then you + +00:06:02.000 --> 00:06:05.079 +touch Emacs and you realize, yeah, this whole programming + +00:06:05.080 --> 00:06:06.679 +shtick is actually pretty damn cool. + +00:06:06.680 --> 00:06:09.079 +And then you find yourself again, + +00:06:09.080 --> 00:06:10.999 +five to 10 years later, becoming a software + +00:06:11.000 --> 00:06:12.999 +engineer. So yeah, that's all good. + +00:06:13.000 --> 00:06:13.919 +So we do have a couple of + +00:06:13.920 --> 00:06:18.439 +questions and I'd like to move into them so that I, I mean, + +00:06:18.440 --> 00:06:22.399 +people have questions and for me it's okay for me to chat with + +00:06:22.400 --> 00:06:25.119 +you but obviously it's better if people ask you the question + +00:06:25.120 --> 00:06:27.639 +themselves. And again, if you want to ask questions to Ryota + +00:06:27.640 --> 00:06:31.039 +directly, feel free to join us on BBB and whenever we're done + +00:06:31.040 --> 00:06:33.519 +with the questions on the pad, I'm more than happy + +00:06:33.520 --> 00:06:35.319 +to let you ask your questions live. + +NOTE Q: Is there any intention to create a library for working with more experimental color spaces? Pulling code out of Hasliberg for this purpose, perhaps? + +00:06:35.320 --> 00:06:37.799 +All right, so starting with the first question, + +00:06:37.800 --> 00:06:39.999 +is there any intention to create a library + +00:06:40.000 --> 00:06:42.559 +for working with more experimental color spaces, pulling + +00:06:42.560 --> 00:06:45.679 +code out of Hasliberg for this purpose, perhaps? Although I + +00:06:45.680 --> 00:06:50.479 +do not know. Hasliberg, you might? Yeah, Hasliberg. And to + +00:06:50.480 --> 00:06:55.119 +answer the question, started the journey just for myself + +00:06:55.120 --> 00:06:58.479 +and I didn't think that it would be actually useful for other + +00:06:58.480 --> 00:07:03.319 +use cases and this conference talk just came about kind of + +00:07:03.320 --> 00:07:08.079 +out of sheer luck really. So the idea I think I can definitely + +00:07:08.080 --> 00:07:12.199 +work it out and I don't think there will be too, the original + +00:07:12.200 --> 00:07:17.639 +code that I started with was I had to use some color space and I + +00:07:17.640 --> 00:07:22.479 +started with sRGB and then went to HSL and then went to LCH. So + +00:07:22.480 --> 00:07:25.479 +I think there has been quite a bit that I learned from it. At + +00:07:25.480 --> 00:07:29.999 +the same time, I may be tempted to actually maybe perhaps + +00:07:30.000 --> 00:07:34.159 +contribute back to ct.el rather than creating my own. I + +00:07:34.160 --> 00:07:36.279 +think that would make more sense perhaps. + +00:07:36.280 --> 00:07:39.479 +But for my own kind of taste that I thought + +00:07:39.480 --> 00:07:42.839 +that it would be something I can work out in my theme, + +00:07:42.840 --> 00:07:46.879 +but I don't have any I think, you know, making a + +00:07:46.880 --> 00:07:49.999 +library is definitely something that I can think about, but + +00:07:50.000 --> 00:07:53.679 +perhaps maybe making it too many packages isn't exactly + +00:07:53.680 --> 00:07:57.319 +what I want. But for my own use case, I think I just wanted to + +00:07:57.320 --> 00:07:59.919 +have something that just didn't have any external + +00:07:59.920 --> 00:08:04.119 +dependency so that I can use the vanilla Emacs with my + +00:08:04.120 --> 00:08:09.639 +colors. I think that's how it started, but I'm definitely up + +00:08:09.640 --> 00:08:13.719 +for it if there is interest about it. Yeah, well, thank you + +00:08:13.720 --> 00:08:15.279 +for this. It's always good to contribute. + +00:08:15.280 --> 00:08:16.399 +I'm tempted to say + +00:08:16.400 --> 00:08:18.279 +that's how they get you. You know, you do something really + +00:08:18.280 --> 00:08:23.639 +cool and you share it with people and they have the, you know, + +00:08:23.640 --> 00:08:27.239 +they just ask you, oh, do you have your code online? And you + +00:08:27.240 --> 00:08:29.399 +realize, no, I haven't pushed it. And then they start + +00:08:29.400 --> 00:08:32.359 +pressing you on. well, you need to do this, this is amazing + +00:08:32.360 --> 00:08:35.879 +and you need to share it. You know, I had plenty of people ask + +00:08:35.880 --> 00:08:40.519 +me to share my dot files when I was tackling the org agenda + +00:08:40.520 --> 00:08:44.039 +issue that I mentioned earlier. And yeah, eventually when + +00:08:44.040 --> 00:08:47.479 +you get to publishing your stuff, you also feel great + +00:08:47.480 --> 00:08:50.279 +because you're putting a little bit of your intelligence + +00:08:50.280 --> 00:08:53.679 +into the world and it can be the start of the journey for + +00:08:53.680 --> 00:08:56.239 +someone else. You know, maybe someone will find your + +00:08:56.240 --> 00:08:58.679 +library at some point and realize, yeah, I wanted to do + +00:08:58.680 --> 00:09:01.239 +something slightly differently. and then they either + +00:09:01.240 --> 00:09:04.439 +contribute to a library or they make their own but it's a + +00:09:04.440 --> 00:09:07.359 +complete journey that starts with just people taking the + +00:09:07.360 --> 00:09:12.039 +time to publish the content of the brain basically. Yeah, + +00:09:12.040 --> 00:09:15.519 +that's the power of open source now. It's just how we really + +00:09:15.520 --> 00:09:19.119 +appreciate the open source culture being cultivated + +00:09:19.120 --> 00:09:23.159 +throughout so many years. And yeah, this is something that + +00:09:23.160 --> 00:09:26.999 +I'm definitely keen about. So yeah, open for suggestions. + +00:09:27.000 --> 00:09:30.079 +And exactly, that's how I started with the journey. And + +00:09:30.080 --> 00:09:33.519 +yeah, while this is very experimental and very personal, + +00:09:33.520 --> 00:09:38.199 +yeah, I'm not, you know, tied down to one particular way + +00:09:38.200 --> 00:09:41.399 +only. So yeah we'll be open to suggestions like this one + +00:09:41.400 --> 00:09:44.719 +which I would definitely think about. Yeah that's amazing + +00:09:44.720 --> 00:09:46.999 +and just to be clear you know this is not a there's no + +00:09:47.000 --> 00:09:50.639 +incentive one. I'm not pushing you to publish your library. + +00:09:50.640 --> 00:09:53.799 +You know it was very personal for you and at the end if you + +00:09:53.800 --> 00:09:56.199 +believe it might be useful for others it's a nice thing to + +00:09:56.200 --> 00:09:58.799 +eventually think about publishing it. But just the fact + +00:09:58.800 --> 00:10:01.439 +that you showed up at EmacsConf... Sorry, I'm + +00:10:01.440 --> 00:10:02.639 +starting to lose my voice on the morning + +00:10:02.640 --> 00:10:03.839 +of the first day. That's + +00:10:03.840 --> 00:10:07.639 +not boding well for the two next days. I mean, just one day. + +00:10:07.640 --> 00:10:09.159 +But just the + +00:10:09.160 --> 00:10:13.199 +fact that you're showing up at EmacsConf and sharing about + +00:10:13.200 --> 00:10:17.039 +all of this, the process, how you got to it eventually, it's + +00:10:17.040 --> 00:10:19.639 +also a part of sharing. And I think it's also amazing in its + +00:10:19.640 --> 00:10:26.039 +own way. Absolutely. Okay, I'm going to try to read the next + +00:10:26.040 --> 00:10:31.639 +question and then try to cough a little bit. So can we have... + +00:10:31.640 --> 00:10:36.759 +Oh, sorry, Bala. Sorry. I was the one who asked the question. + +00:10:36.760 --> 00:10:40.279 +I thought I could ask it live here rather than... Thank you. + +00:10:40.280 --> 00:10:46.039 +I'll go cough a little bit. So here I am. Thanks, Ryota, for + +00:10:46.040 --> 00:10:50.519 +the nice talk. This is great. I loved it. Your attention to + +00:10:50.520 --> 00:10:51.519 +detail was awesome. + +NOTE Q: Can we have a dark as well as light theme variations made from your theme? + +00:10:51.520 --> 00:10:54.959 +So I was just looking at the code and I was + +00:10:54.960 --> 00:10:58.759 +wondering, do you have a dark and a light theme variation + +00:10:58.760 --> 00:11:02.599 +which can be made from your theme? Or do you have to customize + +00:11:02.600 --> 00:11:06.199 +it every time? That was my question. And thanks for that. + +00:11:06.200 --> 00:11:09.679 +Thank you very much. I appreciate your feedback and + +00:11:09.680 --> 00:11:15.039 +questions. So to answer the question, the short answer is + +00:11:15.040 --> 00:11:18.439 +that I do have both dark and light themes with some sorts of + +00:11:18.440 --> 00:11:22.199 +standard colors that I personally liked. And there were a + +00:11:22.200 --> 00:11:26.679 +few things that I showed in the demo. where I showed, I think, + +00:11:26.680 --> 00:11:29.999 +three different dark theme colors. So light theme is + +00:11:30.000 --> 00:11:31.559 +definitely something that I can do. + +00:11:31.560 --> 00:11:33.759 +And the idea around Hasliberg theme + +00:11:33.760 --> 00:11:36.279 +and just my theming in general was that + +00:11:36.280 --> 00:11:39.599 +when I feel like I want to work in dark theme and when I want to + +00:11:39.600 --> 00:11:42.159 +work in the standard way, I would just use the standard color. + +00:11:42.160 --> 00:11:44.919 +But when I feel like maybe it's just so cold that I want + +00:11:44.920 --> 00:11:48.519 +to have a bit of a warm colors near me, I would use the orange + +00:11:48.520 --> 00:11:52.279 +theme, without changing too much of the kind of general + +00:11:52.280 --> 00:11:55.639 +feeling and experience. So that can be said for the light + +00:11:55.640 --> 00:11:58.959 +theme as well. So there is something and the kind of + +00:11:58.960 --> 00:12:04.839 +customization isn't that difficult to extend. So I do have + +00:12:04.840 --> 00:12:09.359 +both dark and light, but primarily I'm just looking at the + +00:12:09.360 --> 00:12:12.839 +dark theme as my main driver. But yeah, they are both + +00:12:12.840 --> 00:12:18.239 +available. Great. Thank you so much. I will definitely try + +00:12:18.240 --> 00:12:21.719 +your theme out. I'm definitely on the lookout for a nice, + +00:12:21.720 --> 00:12:26.119 +friendly theme. Thank you very much. As I said, this is a + +00:12:26.120 --> 00:12:31.279 +personal theme. I'm not sure if it really fits everyone's + +00:12:31.280 --> 00:12:37.159 +need, but it is one inspiration that I hope that can lead to + +00:12:37.160 --> 00:12:40.639 +another nice theming that could work for someone + +00:12:40.640 --> 00:12:44.199 +specifically for some use cases. I don't have to solve + +00:12:44.200 --> 00:12:48.719 +everyone's problem. Yeah, and I mean, it was sufficient to + +00:12:48.720 --> 00:12:50.719 +be inspirational to people. I mean, just Bala just + +00:12:50.720 --> 00:12:53.759 +mentioned it right now, but I'm sure plenty of people who + +00:12:53.760 --> 00:12:55.999 +watched live, but also people will be watching in the + +00:12:56.000 --> 00:12:58.599 +future, will have the interest to speak by what you've done. + +00:12:58.600 --> 00:13:05.079 +So thank you again so much for this. Yep. All right, well, I + +00:13:05.080 --> 00:13:09.719 +don't see any further questions. So I suggest we move + +00:13:09.720 --> 00:13:14.279 +towards closure. Ryota, do you have any last words? No, I + +00:13:14.280 --> 00:13:17.079 +don't. So yeah, thank you very much for attending. And it was + +00:13:17.080 --> 00:13:20.519 +great fun putting this together. And I really didn't think + +00:13:20.520 --> 00:13:24.759 +that I would be talking about my personal colors and + +00:13:24.760 --> 00:13:27.759 +personal favorites, like orange being my favorite color. + +00:13:27.760 --> 00:13:30.119 +This wouldn't be something that I would say out in any + +00:13:30.120 --> 00:13:34.159 +conference, to be honest. But it just came out to be. And + +00:13:34.160 --> 00:13:37.479 +happy that I had a chance. So thank you very much for giving me + +00:13:37.480 --> 00:13:41.439 +the opportunity to talk. in this amazing conference and + +00:13:41.440 --> 00:13:44.319 +yeah I can't just wait to check out other talks which you know + +00:13:44.320 --> 00:13:46.919 +I know that there isn't you know other talks that are + +00:13:46.920 --> 00:13:50.199 +happening right now I was actually wanted to to join them and + +00:13:50.200 --> 00:13:52.759 +check check that out so I will probably do that right now. + +00:13:52.760 --> 00:13:56.839 +Well, sure. Well, I won't hold you any longer then. Thank + +00:13:56.840 --> 00:13:59.759 +you. For me, it was just amazing to, you know, generally when + +00:13:59.760 --> 00:14:01.639 +you ask someone what their favorite color, you know, they + +00:14:01.640 --> 00:14:04.399 +just tell you orange or blue or whatever. They don't go then + +00:14:04.400 --> 00:14:07.039 +to chat about 20 minutes about their favorite color and how + +00:14:07.040 --> 00:14:10.079 +they tuned their entire editor to work exactly around their + +00:14:10.080 --> 00:14:14.759 +favorite colors. So it was inspiring. And I also want to try + +00:14:14.760 --> 00:14:17.999 +it out, frankly, because my theme has been utterly bad for + +00:14:18.000 --> 00:14:20.639 +the last five years and I need some change into my life. All + +00:14:20.640 --> 00:14:24.319 +right. Thank you so much for your time. Thank you very much, + +00:14:24.320 --> 00:14:30.640 +everyone. Cheers. Bye-bye. + diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt new file mode 100644 index 00000000..8ea4ab36 --- /dev/null +++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt @@ -0,0 +1,20 @@ +WEBVTT + + +00:00:00.000 --> 00:00:58.667 +Introduction + +00:00:58.668 --> 00:03:42.119 +What colour do you like? + +00:03:42.120 --> 00:06:25.884 +Colour spaces: HSL, LCH , and more + +00:06:25.885 --> 00:08:08.399 +color.el and ct.el + +00:08:08.400 --> 00:11:06.239 +Hasliberg theme + +00:11:06.240 --> 00:11:48.400 +Wrap up diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt new file mode 100644 index 00000000..e9bbd7ca --- /dev/null +++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt @@ -0,0 +1,541 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:11.327 +Hi, EmacsConf. This is "Colour your Emacs with ease". + +00:00:11.328 --> 00:00:14.848 +I'm Ryota Sawada, and today's agenda is: + +00:00:14.849 --> 00:00:16.649 +start with a brief introduction. + +00:00:16.650 --> 00:00:19.719 +I will be talking about colours quite a bit. + +00:00:19.720 --> 00:00:21.452 +What colours do you like? + +00:00:21.453 --> 00:00:23.599 +Colour spaces and some packages such + +00:00:23.600 --> 00:00:27.879 +as color.el, ct.el. I'll be touching on a theme called + +00:00:27.880 --> 00:00:31.056 +Hasliberg theme, which I created, + +00:00:31.057 --> 00:00:34.139 +before wrapping up the talk. + +00:00:34.140 --> 00:00:36.959 +A quick introduction about the talk. The slide is + +00:00:36.960 --> 00:00:40.559 +available as an Org mode file at Codeberg. If you're + +00:00:40.560 --> 00:00:43.519 +looking at it from Org mode, you probably want to have + +00:00:43.520 --> 00:00:47.639 +rainbow mode turned on for the best viewing. This is the + +00:00:47.640 --> 00:00:52.559 +case with the presentation today. I'm Ryota Sawada and I'm + +00:00:52.560 --> 00:00:58.667 +available at rytswd at usual places. + +NOTE What colour do you like? + +00:00:58.668 --> 00:01:01.290 +What colour do you like? + +00:01:01.291 --> 00:01:04.999 +You might be able to tell I like orange. That's + +00:01:05.000 --> 00:01:07.856 +the colour that I use often. + +00:01:07.857 --> 00:01:09.958 +Emacs gives me all the control I want, + +00:01:09.959 --> 00:01:13.119 +so naturally I wanted to make it aesthetically + +00:01:13.120 --> 00:01:16.023 +pleasing to my taste, which meant that + +00:01:16.024 --> 00:01:19.725 +I would like to have a dark theme, subtle theme + +00:01:19.726 --> 00:01:23.767 +with orange as a main accent colour, but not + +00:01:23.768 --> 00:01:26.803 +too orange, so not everything very orange. + +00:01:26.804 --> 00:01:29.673 +Maybe use another blue-ish colour + +00:01:29.674 --> 00:01:32.929 +as another accent. Note that this presentation is + +00:01:32.930 --> 00:01:36.199 +based on the Hasliberg theme, more on that + +00:01:36.200 --> 00:01:40.599 +later. But when I started my Emacs journey, I didn't start + +00:01:40.600 --> 00:01:45.199 +with creating a new theme from get-go. I started with a theme + +00:01:45.200 --> 00:01:49.479 +called Nova Theme. I really liked it. I made a few tweaks + +00:01:49.480 --> 00:01:55.039 +around Org Mode and headings, so that they were a bit more was + +00:01:55.040 --> 00:02:00.759 +my liking, which was around orange being sprinkled across. + +00:02:00.760 --> 00:02:07.959 +I got to it very nice looking and I really liked it, but when + +00:02:07.960 --> 00:02:13.839 +I started a lot of coding tasks with it, I realized one + +00:02:13.840 --> 00:02:19.799 +thing: that it was very colourful, and in a way, distracting. + +00:02:19.800 --> 00:02:24.039 +it actually wasn't about Nova Theme's fault. It was just + +00:02:24.040 --> 00:02:27.479 +many editors, including Emacs and VS Code and other editors + +00:02:27.480 --> 00:02:31.679 +and modern themes, are filled with colours. Let's have a + +00:02:31.680 --> 00:02:38.039 +look. At the top left, you can see Nova theme with a bit of a + +00:02:38.040 --> 00:02:42.239 +pale greenish background with a few colours. Purple, + +00:02:42.240 --> 00:02:47.399 +pink, blue, green. You can see some colours like that with + +00:02:47.400 --> 00:02:51.519 +Nova theme. Nice looking colours, but still colourful. Modus + +00:02:51.520 --> 00:02:56.079 +Vivendi Tinted, bottom left, is also very nice looking + +00:02:56.080 --> 00:02:59.360 +modern theme, but quite colourful. The same can be said + +00:02:59.361 --> 00:03:03.134 +for ef-themes, owl edition at top right, + +00:03:03.135 --> 00:03:07.979 +and Doom Noe as another, bottom right. + +00:03:07.980 --> 00:03:13.759 +That led me to think: how can I make my code editing + +00:03:13.760 --> 00:03:18.599 +and coding tasks not too distracting, and I can focus on + +00:03:18.600 --> 00:03:22.759 +writing code. That was something I could manage with Org + +00:03:22.760 --> 00:03:26.399 +Mode, where I just specifically, basically used orange + +00:03:26.400 --> 00:03:29.399 +shades and not too much more. That's what you're seeing at + +00:03:29.400 --> 00:03:33.519 +the moment. I wanted to do something similar with coding + +00:03:33.520 --> 00:03:37.959 +and any general code. That led me to the journey of + +00:03:37.960 --> 00:03:42.119 +creating my own theme. + +NOTE Colour spaces: HSL, LCH , and more + +00:03:42.120 --> 00:03:44.679 +But before going to the theme, I need to talk about colour + +00:03:44.680 --> 00:03:49.079 +spaces. sRGB, standard RGB, is probably something that + +00:03:49.080 --> 00:03:53.439 +many people are familiar with. HSL is for hue, saturation, + +00:03:53.440 --> 00:03:58.359 +lightness. LCH is for luminance or lightness, chroma, and + +00:03:58.360 --> 00:04:03.319 +hue. Those are the colour spaces probably common used in + +00:04:03.320 --> 00:04:07.999 +various spaces, but when it comes to perceptual uniformity, + +00:04:08.000 --> 00:04:11.599 +there is an important difference between the colour + +00:04:11.600 --> 00:04:14.799 +spaces. Human perception of colour is not very + +00:04:14.800 --> 00:04:17.879 +straightforward. We can see in the reference here... + +00:04:17.880 --> 00:04:19.506 +Let's have a look. + +00:04:19.507 --> 00:04:23.159 +At the top you can see the shade coming from left + +00:04:23.160 --> 00:04:26.370 +green to the right blue, + +00:04:26.371 --> 00:04:30.959 +and in the top image, you can see half of + +00:04:30.960 --> 00:04:34.520 +it, perhaps, is very similar green colour + +00:04:34.521 --> 00:04:36.141 +and then when it comes to blue, + +00:04:36.142 --> 00:04:40.239 +you can see more of the different colour gradients + +00:04:40.240 --> 00:04:45.559 +coming into play. The bottom colour space is based on a + +00:04:45.560 --> 00:04:50.479 +perceptually uniform colour space, which gives us a bit more + +00:04:50.480 --> 00:04:55.039 +evenly distributed colour gradient, which will be + +00:04:55.040 --> 00:04:59.039 +something more suitable for deciding on the theme setup and + +00:04:59.040 --> 00:05:03.999 +the colour setup, where you can have various themes that are + +00:05:04.000 --> 00:05:10.439 +defined for human perceptions. + +00:05:10.440 --> 00:05:14.319 +Perceptual uniformity is important. For that, it is + +00:05:14.320 --> 00:05:17.879 +important to mention about CIE, or "International + +00:05:17.880 --> 00:05:23.479 +Commission of Illumination" in English. They created + +00:05:23.480 --> 00:05:29.479 +important colour spaces called CIE XYZ which was from 1931, + +00:05:29.480 --> 00:05:33.319 +CIELAB, and LUV, 1976, + +00:05:33.320 --> 00:05:37.519 +respectively. Those are the colour spaces used in various + +00:05:37.520 --> 00:05:41.839 +fields and industries and still relevant. There is a + +00:05:41.840 --> 00:05:44.898 +quite a bit that you can read up on. + +00:05:44.899 --> 00:05:48.960 +I'm not a colour expert so have some references here, + +00:05:48.961 --> 00:05:52.519 +but the TLDR of all of that is + +00:05:52.520 --> 00:05:57.525 +consider using LCH variants over RGB or HSL + +00:05:57.526 --> 00:06:00.606 +for better perceptual uniformity. + +00:06:00.607 --> 00:06:03.959 +Specifically CIE Lab-based LCH, + +00:06:03.960 --> 00:06:06.709 +which is often called Lab LCH + +00:06:06.710 --> 00:06:10.359 +or just LCH. CIELUV-based LCH + +00:06:10.360 --> 00:06:16.519 +is called LUV LCH. There is a new rather modern LCH setup + +00:06:16.520 --> 00:06:19.996 +called OK LCH which is based on OK Lab. + +00:06:19.997 --> 00:06:22.099 +So those are the colour spaces + +00:06:22.100 --> 00:06:24.279 +that are worth looking at when it comes to creating + +00:06:24.280 --> 00:06:25.884 +shades. + +NOTE color.el and ct.el + +00:06:25.885 --> 00:06:29.759 +How do you create shades? Color.el and ct.el are + +00:06:29.760 --> 00:06:33.199 +great solutions. You can create shades and different + +00:06:33.200 --> 00:06:37.799 +colours based on RGB and hex. You can see in the red example + +00:06:37.800 --> 00:06:43.839 +here, FF0000 is a bright red. You can darken it by providing + +00:06:43.840 --> 00:06:48.639 +less red values like CC or 88. You can see that the colours + +00:06:48.640 --> 00:06:52.839 +are slightly darker than the FF0000. But what if you are + +00:06:52.840 --> 00:06:57.439 +working with the complex colours such as FBB151, this + +00:06:57.440 --> 00:07:01.879 +particular orange? That's where color.el, ct.el come + +00:07:01.880 --> 00:07:05.743 +into play. Color.el is a built-in package in Emacs, + +00:07:05.744 --> 00:07:08.340 +so you can use it by just requiring it. + +00:07:08.341 --> 00:07:10.399 +color-darken-name and + +00:07:10.400 --> 00:07:13.905 +providing the colour with the hex value with 40% + +00:07:13.906 --> 00:07:16.886 +gives you a darker orange + +00:07:16.887 --> 00:07:20.039 +without doing too much of a colour computation + +00:07:20.040 --> 00:07:23.839 +by hand. This hex value is something that Emacs + +00:07:23.840 --> 00:07:27.319 +understands and rainbow mode does as well. When it comes + +00:07:27.320 --> 00:07:30.839 +to ct.el, it's not a built-in solution, but it's more + +00:07:30.840 --> 00:07:34.839 +versatile. It works with various colour spaces so you can + +00:07:34.840 --> 00:07:41.239 +see that ct-edit-hsl-l-dec by 40% would give + +00:07:41.240 --> 00:07:47.759 +us a darker colour by 40%. We can also use LCH variant which + +00:07:47.760 --> 00:07:53.479 +can use the LCH colour spaces for darkening the colour. This + +00:07:53.480 --> 00:07:56.919 +results in slightly different colours for this particular + +00:07:56.920 --> 00:08:00.199 +orange, but if you're working with the green or blue or some + +00:08:00.200 --> 00:08:04.177 +other colours, it might be worth looking at LCH variant + +00:08:04.178 --> 00:08:08.399 +rather than other colour spaces. + +NOTE Hasliberg theme + +00:08:08.400 --> 00:08:11.203 +With that, let's have a look at Hasliberg theme. + +00:08:11.204 --> 00:08:13.707 +This is a theme that I created personally + +00:08:13.708 --> 00:08:16.409 +and the name is based on the Swiss Alps + +00:08:16.410 --> 00:08:20.479 +and with the following ideas in mind. It focuses + +00:08:20.480 --> 00:08:25.031 +on setting up shades. Shades, by that... + +00:08:25.032 --> 00:08:26.999 +You can see how the top + +00:08:27.000 --> 00:08:31.839 +of the heading here is a bright orange colour, and + +00:08:31.840 --> 00:08:35.758 +other orange colours, this heading and this heading + +00:08:35.759 --> 00:08:37.719 +are based on the top + +00:08:37.720 --> 00:08:40.839 +orange colour and then giving some shade and the luminance + +00:08:40.840 --> 00:08:44.639 +adjustment essentially. It follows a pattern from web + +00:08:44.640 --> 00:08:49.039 +design and tailwind colour shades are a great example that + +00:08:49.040 --> 00:08:50.815 +you can have a look. + +00:08:50.816 --> 00:08:54.439 +It does not use ct.el as it aims to be fully + +00:08:54.440 --> 00:08:57.999 +dependency free and does not consider colour contrast for + +00:08:58.000 --> 00:09:02.119 +accessibility. This is because it's personal and I + +00:09:02.120 --> 00:09:04.746 +don't have that particular need. + +00:09:04.747 --> 00:09:06.839 +This is based on LuvLCh rather + +00:09:06.840 --> 00:09:08.788 +than LAB LCH, and that's another reason + +00:09:08.789 --> 00:09:11.049 +why I didn't use ct.el, + +00:09:11.050 --> 00:09:14.119 +and it is highly experimental. But the code is + +00:09:14.120 --> 00:09:18.279 +available at Codeberg and GitHub just for your reference. + +00:09:18.280 --> 00:09:23.719 +Let's see Hasliberg theme in action. This is the theme + +00:09:23.720 --> 00:09:27.159 +that we were looking at for org-mode as well, but for the + +00:09:27.160 --> 00:09:32.199 +code, in this case Elisp. You can see that the colour is + +00:09:32.200 --> 00:09:37.559 +mostly white and blue with orange sprinkled across for + +00:09:37.560 --> 00:09:41.559 +string input. You can see some pink showing up as well. + +00:09:41.560 --> 00:09:46.399 +Essentially, all the colour setup is done by shades, so most of + +00:09:46.400 --> 00:09:51.319 +it is based on white or neutral, and there will be lighter and + +00:09:51.320 --> 00:09:56.159 +darker variants that can be set for the primary colour of blue. + +00:09:56.160 --> 00:09:59.959 +You can see the darker and brighter and lighter colours + +00:09:59.960 --> 00:10:05.279 +being used. With that shade setup, I only have to provide a + +00:10:05.280 --> 00:10:09.599 +few colours as the base colours. From there, I can define the + +00:10:09.600 --> 00:10:15.959 +shades for the theme setup, which leads to creating a more + +00:10:15.960 --> 00:10:20.359 +monotonic colour setup, where this one is a very monotonic, + +00:10:20.360 --> 00:10:25.059 +very subtle difference of white colours used for the base + +00:10:25.060 --> 00:10:29.039 +colours. I don't have to make too many changes to the colour + +00:10:29.040 --> 00:10:32.079 +setup. I just have to provide the base colours that are + +00:10:32.080 --> 00:10:36.399 +different. The same can be said for this orange, very orange + +00:10:36.400 --> 00:10:39.359 +colour theme, which is based on the base colours of + +00:10:39.360 --> 00:10:43.639 +orange-like colours and gives the shade of various + +00:10:43.640 --> 00:10:50.719 +different setup. This means that I can use Hasliberg + +00:10:50.720 --> 00:10:56.159 +Theme Nature colour palette, and that gives me more of a green + +00:10:56.160 --> 00:11:00.839 +based colour where all the base colours are set up with a + +00:11:00.840 --> 00:11:06.239 +greenish colour setup. + +NOTE Wrap up + +00:11:06.240 --> 00:11:10.399 +With that, I would like to wrap up with a few ideas when + +00:11:10.400 --> 00:11:13.759 +adjusting themes and working with colours. Maybe consider + +00:11:13.760 --> 00:11:19.359 +using CIELAB, CIELUV, or OKLab-based colour spaces that + +00:11:19.360 --> 00:11:24.719 +would give you different shades which are easier to work + +00:11:24.720 --> 00:11:29.199 +with for human perceptions. color.el and ct.el can be a + +00:11:29.200 --> 00:11:32.559 +great tool for making shades and working with colour spaces. + +00:11:32.560 --> 00:11:36.239 +Hasliberg theme is yet another theme, highly personal + +00:11:36.240 --> 00:11:38.999 +and experimental, but could be an inspiration for your + +00:11:39.000 --> 00:11:44.119 +theme journey. With that, why not sprinkle your Emacs with + +00:11:44.120 --> 00:11:48.400 +your favourite colours? Thank you. diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt new file mode 100644 index 00000000..74b1254c --- /dev/null +++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt @@ -0,0 +1,957 @@ +WEBVTT + +00:00:00.000 --> 00:00:05.079 +You sound great. And on the stream, my eyeball says it looks + +00:00:05.080 --> 00:00:08.239 +great with Leo doing the streaming. So I say let's dive right + +00:00:08.240 --> 00:00:12.639 +in. You got a long, huge line. And in order to be a little more + +00:00:12.640 --> 00:00:16.279 +dialectical, I'll be reading the questions. So first + +NOTE Q: which-key was a third-party package for a long time. Is there work to bring any other popular packages into core Emacs for Emacs 31+? (magit, counsel, etc) + +00:00:16.280 --> 00:00:18.559 +question, which key was a third party package for a long + +00:00:18.560 --> 00:00:21.879 +time? Is there work to bring any other popular packages into + +00:00:21.880 --> 00:00:25.399 +the core of Emacs for Emacs 31 plus, like Magit or Counsel? + +00:00:25.400 --> 00:00:30.279 +Uh, right. I already answered that one on the, as you can see, + +00:00:30.280 --> 00:00:33.999 +uh, right. Yeah. Do you want to quickly read the answer so + +00:00:34.000 --> 00:00:38.439 +that everyone, I just can read it out again. Um, as far as I + +00:00:38.440 --> 00:00:41.159 +remember, the one package that was being discussed just + +00:00:41.160 --> 00:00:43.999 +around the time that the Emacs 30 branch was cut was macro + +00:00:44.000 --> 00:00:47.599 +step. That's the package that was like, does an overlay, uh, + +00:00:47.600 --> 00:00:51.479 +replaces a macro with the macro expansion using overlays. + +00:00:51.480 --> 00:00:53.799 +So you don't have to pop up another buffer, modified, + +00:00:53.800 --> 00:00:57.599 +modified current buffer. But we didn't manage to address + +00:00:57.600 --> 00:01:00.759 +all the concerns in time for the Emacs 30 cuts and I believe + +00:01:00.760 --> 00:01:03.799 +it's sort of stagnated around that but it might be picked up + +00:01:03.800 --> 00:01:07.399 +anytime someone mentions it on Emacs Devil again. Another + +00:01:07.400 --> 00:01:11.519 +package question mentioned was Magit. That's a constant + +00:01:11.520 --> 00:01:14.959 +discussion regarding Magit. And actually, from the top of + +00:01:14.960 --> 00:01:19.039 +my head, I can't recall if Magit is on NonGNU ELPA or GNU ELPA + +00:01:19.040 --> 00:01:22.999 +right now. It's still on NonGNU ELPA. + +00:01:23.000 --> 00:01:29.039 +For those who don't know, only packages which are in ELPA are + +00:01:29.040 --> 00:01:33.039 +considered for addition, considered to be added to the + +00:01:33.040 --> 00:01:36.119 +Emacs core, to be bundled along with Emacs. And then there's + +00:01:36.120 --> 00:01:40.519 +another totally parallel discussion about having a sort of + +00:01:40.520 --> 00:01:43.519 +fat Emacs distribution, I call it fat Emacs distribution, + +00:01:43.520 --> 00:01:48.119 +where Emacs comes with a lot of ELPA packages or the + +00:01:48.120 --> 00:01:55.039 +pre-installed by default. Part of Emacs itself. Yeah. + +00:01:55.040 --> 00:01:59.159 +Maybe I could jump in with an active listening style, + +00:01:59.160 --> 00:02:03.359 +you know, kind of follow up question almost. You know, I + +00:02:03.360 --> 00:02:07.159 +understand the kind of different repositories. We have + +00:02:07.160 --> 00:02:13.799 +things that aren't maintained by GNU at all, you know, most + +00:02:13.800 --> 00:02:17.919 +notably MELPA. And then we have kind of NonGNU ELPA, which + +00:02:17.920 --> 00:02:21.639 +is sort of an entryway project where it's not necessarily + +00:02:21.640 --> 00:02:24.759 +curated, but there'll be some advice given, which you can + +00:02:24.760 --> 00:02:28.159 +take or leave. And that's the repository where anything + +00:02:28.160 --> 00:02:32.519 +that was the newer repository that represents, you know, + +00:02:32.520 --> 00:02:36.319 +help, you know, help, help supplied from GNU. And then + +00:02:36.320 --> 00:02:41.319 +there's the, actually the GNU, the GNU ELPA, what most of us + +00:02:41.320 --> 00:02:46.479 +are used to calling just ELPA. And that's what you're + +00:02:46.480 --> 00:02:50.839 +talking about there when you say, + +00:02:50.840 --> 00:02:53.959 +I mean, all packages on ELPA are officially considered to be + +00:02:53.960 --> 00:02:56.959 +part of Emacs, they're licensed under the same conditions + +00:02:56.960 --> 00:03:00.359 +as Emacs itself, same license, same everything. And + +00:03:00.360 --> 00:03:03.719 +they're more likely to be, to drop, to kind of be dropping + +00:03:03.720 --> 00:03:07.839 +patched. Oh yeah, it's time for this to move to core. Is that + +00:03:07.840 --> 00:03:12.559 +right? They have the legal conditions for that to be done. + +00:03:12.560 --> 00:03:15.039 +Everything's necessary from a paperwork standpoint. I + +00:03:15.040 --> 00:03:17.959 +mean, but other than that, there's not really a big + +00:03:17.960 --> 00:03:21.159 +difference between GNU ELPA and NonGNU ELPA. It's + +00:03:21.160 --> 00:03:23.839 +really just the main thing is this copyrights notice. So if + +00:03:23.840 --> 00:03:28.519 +you want to add a package to ELPA, to GNU ELPA, then all + +00:03:28.520 --> 00:03:32.359 +significance contributors have to have signed the FSF + +00:03:32.360 --> 00:03:36.399 +copyright assignment and the package script, actually the + +00:03:36.400 --> 00:03:41.519 +ELPA build script, checks if the copyright lines are all + +00:03:41.520 --> 00:03:43.879 +attributed to the Free Software Foundation. + +00:03:43.880 --> 00:03:52.119 +But that's not going to attach, right? So because that's not + +00:03:52.120 --> 00:03:57.799 +in place, it'd be a lot more work to merge it to core. I didn't + +00:03:57.800 --> 00:04:01.039 +hear the beginning. Nevermind. I think I understood. You + +00:04:01.040 --> 00:04:05.559 +made your point well. Okay. All right, moving on to the + +00:04:05.560 --> 00:04:06.466 +second question. + +NOTE Q: Any way to get the goodness of Emacs for android with this other stuff? + +00:04:06.467 --> 00:04:08.279 +When thinking about using Emacs on + +00:04:08.280 --> 00:04:11.279 +Android, I started realizing all the other software I also + +00:04:11.280 --> 00:04:15.279 +want on it. For example, PDF Tools wants a small additional + +00:04:15.280 --> 00:04:18.519 +Emacs-specific program to be installed on, and notmuch + +00:04:18.520 --> 00:04:21.359 +obviously wants notmuch. Any way to get the goodness of + +00:04:21.360 --> 00:04:25.639 +Emacs for Android with this other stuff, using either Nix OS + +00:04:25.640 --> 00:04:29.279 +or Guix or nix-on-droid to make an APK with extra stuff? Are you + +00:04:29.280 --> 00:04:34.439 +familiar with this topic? Absolutely not. The extent to + +00:04:34.440 --> 00:04:39.319 +which I have used Emacs on Android was entirely + +00:04:39.320 --> 00:04:43.719 +demonstrated in this video, I think. In my previous video. I + +00:04:43.720 --> 00:04:48.719 +mean, I know it does a few scrolling stuff, but I have no idea + +00:04:48.720 --> 00:04:52.719 +how external stuff, because I mean, Android is, it's a Unix + +00:04:52.720 --> 00:04:55.439 +or it's a Linux based system, but it's really heavily + +00:04:55.440 --> 00:05:01.439 +modified to the preferences of Google, which includes not + +00:05:01.440 --> 00:05:04.719 +being able to have your own software on it. Yeah, + +00:05:04.720 --> 00:05:08.799 +definitely. All right, moving on to the next question. Does + +00:05:08.800 --> 00:05:12.239 +package-vc... Oh, no, that's fine. I mean, you can't answer + +00:05:12.240 --> 00:05:15.199 +all the questions. I mean, it wouldn't be fun for me + +00:05:15.200 --> 00:05:15.753 +otherwise. + +NOTE Q: Does package-vc download a tarball from the specified git repository or clone the repository itself? + +00:05:15.754 --> 00:05:17.919 +Does package-vc download a tarball from the + +00:05:17.920 --> 00:05:21.759 +specified Git repository or clone the repository itself? + +00:05:21.760 --> 00:05:25.439 +It clones the repository. That's the VC part in the name. + +00:05:25.440 --> 00:05:33.719 +package-vc uses VC, the C-x v stuff. In Emacs 29, there's a + +00:05:33.720 --> 00:05:37.679 +new command called vc-clone, which in Emacs 31, it was + +00:05:37.680 --> 00:05:42.479 +actually exposed as an interactive command. And when you + +00:05:42.480 --> 00:05:47.319 +clone the repository, or when you, you can give it any URL of a + +00:05:47.320 --> 00:05:50.559 +Git repository or a CVS repository or subversion + +00:05:50.560 --> 00:05:53.519 +repository. Interestingly enough, most people only use + +00:05:53.520 --> 00:05:57.559 +Git, but anything that's, that implements this clone + +00:05:57.560 --> 00:06:01.519 +command for VC, and it could download it. So there's no + +00:06:01.520 --> 00:06:05.119 +tarballs involved. Which is also, one should emphasize, + +00:06:05.120 --> 00:06:07.879 +part of the difficulty of VC packages because when you have + +00:06:07.880 --> 00:06:10.759 +version control and you want to upgrade it, it might be that + +00:06:10.760 --> 00:06:14.399 +the upstream did a force push. For that, you make local + +00:06:14.400 --> 00:06:17.519 +changes and then you have to merge them upstream with the + +00:06:17.520 --> 00:06:21.239 +upstream changes when fetching stuff. It's one of the big + +00:06:21.240 --> 00:06:23.559 +downsides of version-controlled stuff, and I'm saying + +00:06:23.560 --> 00:06:26.999 +this as the guy who actually wrote package-vc. There's + +00:06:27.000 --> 00:06:29.719 +times to use it, there's advantages to it, but that's + +00:06:29.720 --> 00:06:32.959 +something you should keep in mind, why tarballs are + +00:06:32.960 --> 00:06:37.969 +interesting to have, in my opinion. Okay. + +NOTE How is the new behavior of M-q in prog-mode (prog-fill-reindent-defun or something like that) different from the behavior of C-M-q (indent-pp-sexp) in older Emacs versions? + +00:06:37.970 --> 00:06:39.639 +How is the new + +00:06:39.640 --> 00:06:42.439 +behavior of M-q in prog mode, prog-fill-reindent-defun + +00:06:42.440 --> 00:06:45.159 +or something like that, different from the behavior + +00:06:45.160 --> 00:06:48.799 +of C-M-q, i.e. indent-pp-sexp in older Emacs + +00:06:48.800 --> 00:06:52.199 +version? My apologies if indent-pp-sexp, it's really tough to + +00:06:52.200 --> 00:06:55.959 +read M-x commands out loud. It's not bound to + +00:06:55.960 --> 00:07:01.519 +C-M-q by default, I can't tell. Let me try that command + +00:07:01.520 --> 00:07:05.599 +out because I've never tried it, never used it before. + +00:07:05.600 --> 00:07:09.079 +You know, that isn't bound by default. I bind that up myself + +00:07:09.080 --> 00:07:11.759 +and I have that binding. I think that's, that's not right. It + +00:07:11.760 --> 00:07:15.119 +says so. I mean, I'm currently executing it here in Emacs and + +00:07:15.120 --> 00:07:20.839 +it says you can also run the commands indent-pp-sexp with + +00:07:20.840 --> 00:07:26.359 +M-q, C-M-q. Apparently it is. I mean, I + +00:07:26.360 --> 00:07:31.359 +didn't set it myself. I don't know what's up with that. to try + +00:07:31.360 --> 00:07:35.439 +and move it. And then each line started with points or pretty + +00:07:35.440 --> 00:07:37.239 +printed. I mean, the difference, the main difference + +00:07:37.240 --> 00:07:41.279 +between that and the command highlighted, what's the name + +00:07:41.280 --> 00:07:47.479 +again? I forget it all the time. The prog-mode command. + +00:07:47.480 --> 00:07:50.359 +prog-fill-reindent-defun is that + +00:07:50.360 --> 00:07:56.319 +it checks if it's in a string or not. If it's in a string or if + +00:07:56.320 --> 00:07:58.959 +it's in a comma, then it will refill. Otherwise, it's going + +00:07:58.960 --> 00:07:59.799 +to re-indent. + +00:07:59.800 --> 00:08:05.679 +That's, I think, as far as I see, that's going to be the main + +00:08:05.680 --> 00:08:09.599 +difference. If we have some long comments somewhere. Let's + +00:08:09.600 --> 00:08:15.439 +try that out. Yeah, that's the difference. I just, you can't + +00:08:15.440 --> 00:08:19.679 +see it, but I did try it. Okay, good. Thank you. You did a + +00:08:19.680 --> 00:08:22.119 +wonderful job describing visually what you're doing. All + +00:08:22.120 --> 00:08:26.759 +right, moving on to the next question, and we have about, we + +00:08:26.760 --> 00:08:28.759 +have just enough time to cover the last three questions, + +00:08:28.760 --> 00:08:32.239 +especially because the next one, I can pretty much surmise + +00:08:32.240 --> 00:08:33.143 +the answer. + +NOTE Q: Any plans for Emacs running in iOS? + +00:08:33.144 --> 00:08:36.759 +Any plans for Emacs running on iOS? Probably not + +00:08:36.760 --> 00:08:40.319 +because it's not, I mean, as I emphasized in the video, the + +00:08:40.320 --> 00:08:43.639 +Emacs port in Android is completely free. And to my + +00:08:43.640 --> 00:08:45.319 +knowledge, that's not something that's currently + +00:08:45.320 --> 00:08:49.799 +possible with iOS. You need Xcode or something like that to + +00:08:49.800 --> 00:08:56.639 +build iOS stuff. So that's a big no-no. I mean, maybe Apple's + +00:08:56.640 --> 00:09:00.919 +going to change their mind on that one. Well, I won't be the + +00:09:00.920 --> 00:09:04.039 +one liaising with Apple to make sure that they do, but PR + +00:09:04.040 --> 00:09:07.599 +welcomes, I guess, or motivated folks welcome. Second to + +00:09:07.600 --> 00:09:08.647 +last question. + +NOTE Q: I am worried about the situation on non-free systems. There was talk about the Windows and the macOS versions being as good as unmaintained. Where do we go from here? + +00:09:08.648 --> 00:09:11.719 +I am worried about the situation on non-free + +00:09:11.720 --> 00:09:14.519 +systems. There was talk about the Windows and the macOS + +00:09:14.520 --> 00:09:17.039 +versions being as good as unmaintained. Where do we go from + +00:09:17.040 --> 00:09:20.399 +here? I gather that most users of Emacs are still on non-free + +00:09:20.400 --> 00:09:24.799 +platforms and will remain to be there. I don't know about the + +00:09:24.800 --> 00:09:28.279 +last point, if that's true, because there's no statistics + +00:09:28.280 --> 00:09:35.039 +on that matter. But the main, I mean, someone has to, I know + +00:09:35.040 --> 00:09:37.959 +that Corwin is involved with the Mac, with the Windows + +00:09:37.960 --> 00:09:43.199 +stuff. Modestly. Sure, I'd love to jump in, but I'm far more + +00:09:43.200 --> 00:09:45.839 +interested in your thoughts than mine. Please, please + +00:09:45.840 --> 00:09:51.039 +continue. Someone has to do the work. Eli uses, as far as I + +00:09:51.040 --> 00:09:58.719 +know, Eli's on the Windows XP system. So as long as he's doing + +00:09:58.720 --> 00:10:02.519 +that, there's going to be Windows support for one form or + +00:10:02.520 --> 00:10:07.959 +another, or at least DOS. All right. And now you put a quarter + +00:10:07.960 --> 00:10:12.439 +in me, so I'll jump right back in. That's perfect for where I + +00:10:12.440 --> 00:10:14.519 +guess I would take the question. To me, it's an + +00:10:14.520 --> 00:10:17.439 +accessibility issue. Think about it this way. Maybe that + +00:10:17.440 --> 00:10:23.319 +Windows XP system is what someone can afford. Likewise, + +00:10:23.320 --> 00:10:27.679 +from a freedom versus I have to do my job and I have to use + +00:10:27.680 --> 00:10:31.679 +certain technology to do my job. Maybe Emacs is what + +00:10:31.680 --> 00:10:35.559 +somebody can afford right? It might be the only free tool + +00:10:35.560 --> 00:10:37.439 +that they use and they don't have a lot of choice about the + +00:10:37.440 --> 00:10:40.039 +operating system that they're in most of the day. In fact, + +00:10:40.040 --> 00:10:42.279 +somebody could be in the situation where their computing + +00:10:42.280 --> 00:10:45.839 +device at work is really their internet access, right? All + +00:10:45.840 --> 00:10:48.279 +of those situations are possible. Therefore, I tend to + +00:10:48.280 --> 00:10:53.479 +assume they all exist and when I ask, you know, how much It + +00:10:53.480 --> 00:10:58.039 +definitely is concerning when we hear about kind of black + +00:10:58.040 --> 00:11:02.079 +holes in the brain trust of something like support for the + +00:11:02.080 --> 00:11:06.359 +Windows port. I feel like I've heard a lot of people + +00:11:06.360 --> 00:11:10.959 +answering that call, but the importance of that is that it + +00:11:10.960 --> 00:11:14.119 +doesn't stop echoing, right? Free software goes as long as + +00:11:14.120 --> 00:11:16.399 +there are people that are irritated enough about something + +00:11:16.400 --> 00:11:20.839 +to sort of come hack on it. Yeah. And the same applies to Mac + +00:11:20.840 --> 00:11:25.199 +OS. But I don't know any concrete details about who's + +00:11:25.200 --> 00:11:28.079 +currently working on it. I can't recollect any details on + +00:11:28.080 --> 00:11:29.439 +who's currently working on what. + +00:11:29.440 --> 00:11:35.279 +Okay. And that leaves us with the last question of the day. + +NOTE Q: Is there a best practice on what Org to use when following emacs-latest? + +00:11:35.280 --> 00:11:38.159 +I'm a bit confused about what version of Org that I should + +00:11:38.160 --> 00:11:40.919 +write towards because there's Org in Emacs, the one that + +00:11:40.920 --> 00:11:44.279 +ships built-in. There's the one in ELPA. There's the one in + +00:11:44.280 --> 00:11:48.519 +Org, probably the Org ELPA, I assume. Is there a best + +00:11:48.520 --> 00:11:51.959 +practice on what Org to use when following Emacs latest? + +00:11:51.960 --> 00:11:58.919 +when following us latest. It depends on, I think, my rough + +00:11:58.920 --> 00:12:02.559 +heuristic is if you do use Org a lot and if you follow the + +00:12:02.560 --> 00:12:06.279 +newest features, then use the version on Elpa, because the + +00:12:06.280 --> 00:12:09.959 +Elpa version should be the most up-to-date one. The Org Elpa + +00:12:09.960 --> 00:12:14.999 +was deprecated, to my knowledge. If that seems true, please + +00:12:15.000 --> 00:12:18.319 +someone interrupt me before I make a fool of myself. + +00:12:18.320 --> 00:12:24.519 +No one's done that yet. + +00:12:24.520 --> 00:12:29.519 +I think a couple of years ago there were chats and then we + +00:12:29.520 --> 00:12:33.999 +deprecated the all contrib ELPA, but I think all the ELPA is + +00:12:34.000 --> 00:12:40.759 +still alive. I didn't know that about that. Okay, in that + +00:12:40.760 --> 00:12:44.839 +case, that relativizes how absolute my answer is. + +00:12:44.840 --> 00:12:49.559 +Personally, I just use the version in Emacs, which is + +00:12:49.560 --> 00:12:53.399 +bundled with Emacs, which is regularly updated on master + +00:12:53.400 --> 00:12:58.319 +whenever there's a release. But that might take maybe, it + +00:12:58.320 --> 00:13:03.559 +might be a short time behind the ELPA version, or the other + +00:13:03.560 --> 00:13:11.879 +ELPA, the Org ELPA, which we mentioned. But I'm a very light + +00:13:11.880 --> 00:13:16.119 +Org mode user, so please don't take my word for that one. No, + +00:13:16.120 --> 00:13:23.439 +and I'm happy to come to you. Yeah. I + +00:13:23.440 --> 00:13:27.719 +feel like we lost Leo again. OK. Well, that's all right. I + +00:13:27.720 --> 00:13:31.279 +wanted a bite at that, Apple. I'm a little bit. Yeah, I also + +00:13:31.280 --> 00:13:34.239 +describe myself as a light org user, but somehow your + +00:13:34.240 --> 00:13:37.159 +comment made me think, well, maybe I do use it just a little + +00:13:37.160 --> 00:13:41.719 +bit more than you, Philip. + +00:13:41.720 --> 00:13:45.359 +From my standpoint, I'm using it as a technical basis for + +00:13:45.360 --> 00:13:49.959 +dungeon mode in order to keep the game notes for the games + +00:13:49.960 --> 00:13:52.479 +that are made using this game engine I'm making that I talked + +00:13:52.480 --> 00:13:56.079 +about a few years ago. As soon as you said technical grounds, + +00:13:56.080 --> 00:13:59.319 +you definitely use it more. Right, right. So I've studied + +00:13:59.320 --> 00:14:04.159 +its internals a bit, and I have my own thoughts about this or + +00:14:04.160 --> 00:14:06.959 +that. But of course, I'm rolling with the punches because + +00:14:06.960 --> 00:14:10.119 +I'm just grateful that the bear dances. What an amazing + +00:14:10.120 --> 00:14:14.519 +thing is Org Mode. But Leo knows far more than me, + +00:14:14.520 --> 00:14:18.359 +conveniently having his stage right here, so he can't + +00:14:18.360 --> 00:14:22.359 +defend himself from this. But I've had thoughts around this + +00:14:22.360 --> 00:14:28.559 +space. Are you back, Leo? Yeah, sorry, I'm back. You save us + +00:14:28.560 --> 00:14:33.479 +all. Maybe closing remarks. I was trying to clear my throat + +00:14:33.480 --> 00:14:36.079 +to be very inconspicuous about me coming back, but + +00:14:36.080 --> 00:14:39.319 +apparently I was ousted. Yeah, I was trying to answer the + +00:14:39.320 --> 00:14:42.239 +question and I was trying to desperately save you from + +00:14:42.240 --> 00:14:45.999 +answering, Philip, because yes, the thing about Org Mode is + +00:14:46.000 --> 00:14:48.879 +that if you are the kind of people who tend to check out master + +00:14:48.880 --> 00:14:51.919 +on Org Mode, generally it's roughly pretty stable. Like + +00:14:51.920 --> 00:14:54.319 +when we were working with Org Element and stuff like this, + +00:14:54.320 --> 00:14:56.479 +Perhaps there were some elements of stability which + +00:14:56.480 --> 00:14:59.199 +weren't there quite yet, but usually now it's pretty + +00:14:59.200 --> 00:15:02.039 +stable. So I think that if you are really excited about + +00:15:02.040 --> 00:15:04.639 +contributing to Org Mode and stuff like this, I think there + +00:15:04.640 --> 00:15:08.199 +isn't all that many risks to just checking out Org Mode + +00:15:08.200 --> 00:15:10.999 +Master, so cloning the repository and just keeping up to + +00:15:11.000 --> 00:15:15.119 +date. Otherwise, ELPA is a fairly safe bet if you want to have + +00:15:15.120 --> 00:15:19.839 +the latest stable version. And we've got a question about + +00:15:19.840 --> 00:15:24.759 +[??] as with Emacs itself. You can follow whatever is + +00:15:24.760 --> 00:15:28.519 +published in your package archives or in your system + +00:15:28.520 --> 00:15:32.399 +distribution package manager. You can build it yourself if + +00:15:32.400 --> 00:15:36.839 +you want to contribute and fix bugs, add features, and so on. + +00:15:36.840 --> 00:15:40.399 +Yeah, and I don't think perhaps a little more with Emacs, + +00:15:40.400 --> 00:15:43.439 +because the features that tends to get introduced in Emacs + +00:15:43.440 --> 00:15:48.039 +are slightly more wild. Not wild in the sense that they are + +00:15:48.040 --> 00:15:50.679 +less stable, but wild in the sense that they tend to change a + +00:15:50.680 --> 00:15:54.119 +lot more stuff. The core of Org, at least during Bastien's + +00:15:54.120 --> 00:15:56.879 +maintenance ship, was very stable when you think about it. + +00:15:56.880 --> 00:15:59.719 +So things might change with Ihor right now in terms of how he + +00:15:59.720 --> 00:16:02.839 +wants to change some of the core behaviors, but it's usually + +00:16:02.840 --> 00:16:06.079 +pretty stable. And whether you use the latest major + +00:16:06.080 --> 00:16:09.159 +version, the latest minor version, things are probably + +00:16:09.160 --> 00:16:11.679 +going to be pretty stable. It's like you heard me while you + +00:16:11.680 --> 00:16:16.199 +were offline. And I do agree with that, in case you might have + +00:16:16.200 --> 00:16:18.319 +heard both our remarks and think we're talking different + +00:16:18.320 --> 00:16:22.439 +angles. Actually, I think we would tend to agree on this, Leo + +00:16:22.440 --> 00:16:26.759 +and I. For the record, when I'm saying, oh, I have to go keep up + +00:16:26.760 --> 00:16:30.719 +with org, that's because org grows behaviors that I've got + +00:16:30.720 --> 00:16:34.639 +my own. I had to figure out at some point my own way to do it, and + +00:16:34.640 --> 00:16:38.119 +now I'm learning how it's done, right? So I'm like, in my + +00:16:38.120 --> 00:16:41.279 +abstraction, blah, right? And those conversations + +00:16:41.280 --> 00:16:44.279 +usually end at, and somebody else took the time to figure out + +00:16:44.280 --> 00:16:48.039 +how to actually make Emacs do that. Go be quiet. And I do, and I + +00:16:48.040 --> 00:16:52.999 +do consider that under Bastien's tenure, it has been quite + +00:16:53.000 --> 00:16:57.039 +stable. We might notice the occasional like, oh, this + +00:16:57.040 --> 00:17:00.519 +highlights now and that didn't, right? But very often, very + +00:17:00.520 --> 00:17:03.599 +infrequently is it breaking my workflow as a user, any of it. + +00:17:03.600 --> 00:17:07.799 +It's interesting to me that this mirrors my experience with + +00:17:07.800 --> 00:17:12.679 +Emacs itself, where I think, in my perception, Emacs master + +00:17:12.680 --> 00:17:17.199 +is very stable and I might notice the slight changes between + +00:17:17.200 --> 00:17:21.839 +git pulls. But otherwise, in my experience, Org mode + +00:17:21.840 --> 00:17:24.879 +suddenly changes something, I don't know what changed or + +00:17:24.880 --> 00:17:29.439 +what's going on or what caused it, and it seemed... I + +00:17:29.440 --> 00:17:33.719 +perceive it as being a sudden uncontrolled change or + +00:17:33.720 --> 00:17:36.239 +something. I think that's apt. Right. That gets + +00:17:36.240 --> 00:17:40.159 +right at it. If we're following, if we're pulling for more + +00:17:40.160 --> 00:17:42.759 +pretty regularly, cronjob every night or pulling a few + +00:17:42.760 --> 00:17:44.639 +times a day or something like that, we're going to the + +00:17:44.640 --> 00:17:48.639 +internals yeah, we'll have a different experience than, + +00:17:48.640 --> 00:17:51.959 +you know, if we only remember to update Org once every four + +00:17:51.960 --> 00:17:54.759 +months. It really pays to stick with everything. And + +00:17:54.760 --> 00:17:59.199 +suddenly lots of things might change. Whatever broke in my + +00:17:59.200 --> 00:18:03.439 +own config, right? And so a lot of, like a lot of things within + +00:18:03.440 --> 00:18:06.759 +Emacs, but also within the free software tool chain, it's + +00:18:06.760 --> 00:18:09.559 +how much you're going to invent in the config, invest in the + +00:18:09.560 --> 00:18:14.199 +config, might limit you know, and maintaining your config + +00:18:14.200 --> 00:18:17.199 +may limit the depth of how far it makes sense for you to go with + +00:18:17.200 --> 00:18:21.759 +the tool at any given point in time. Actually just looked up + +00:18:21.760 --> 00:18:25.279 +my org config and it's four, I said four options, user + +00:18:25.280 --> 00:18:29.239 +options. So that's, if that's the measurements of org + +00:18:29.240 --> 00:18:32.119 +expertise, that's my level, it's four. + +00:18:32.120 --> 00:18:38.559 +That's all good then. Four of four, I'm assuming that is, + +00:18:38.560 --> 00:18:44.279 +right? Four of what? What was the metric there, four of like a + +00:18:44.280 --> 00:18:48.119 +thousand? Four out of the number of user options that Word + +00:18:48.120 --> 00:18:54.239 +provides. Oh, okay, I see. Four, yeah, more like 10,000. I'm + +00:18:54.240 --> 00:18:59.079 +there. Yeah. All right. On that note, I suggest we move to + +00:18:59.080 --> 00:19:00.999 +what's close because it's fairly late for me and I need to + +00:19:01.000 --> 00:19:03.119 +sleep. And Philip, I think it's pretty late for you as well, + +00:19:03.120 --> 00:19:07.239 +isn't it? I'm in Germany, so it's about... So it is pretty + +00:19:07.240 --> 00:19:09.799 +late. It's the same time zone as me. It's 11 p.m. for you. + +00:19:09.800 --> 00:19:16.399 +Truly, yeah. Yeah, so I suggest we both take the chance to go + +00:19:16.400 --> 00:19:20.359 +to bed as soon as we can. But Philip, thank you so much for + +00:19:20.360 --> 00:19:22.759 +both the presentation and also the answers that you + +00:19:22.760 --> 00:19:26.119 +provided to us and the nice little chat we had at the end. We + +00:19:26.120 --> 00:19:29.519 +look forward to seeing you again next year, perhaps for + +00:19:29.520 --> 00:19:34.159 +Emacs 31. I'm not sure. I was chatting with wasamasa + +00:19:34.160 --> 00:19:37.679 +trying to make prognostics about when Emacs 30 is going to be + +00:19:37.680 --> 00:19:40.839 +released. There's a pre-release coming soon. I should have + +00:19:40.840 --> 00:19:46.719 +mentioned that earlier. Well, there you go. Gone. + +00:19:46.720 --> 00:19:51.839 +All right. Well, thank you so much, Philip. We'll be moving + +00:19:51.840 --> 00:19:54.479 +towards close. Give us about two minutes to get set up in the + +00:19:54.480 --> 00:19:58.439 +other room. And Philip, we'll see you next time. Goodbye. + +00:19:58.440 --> 00:20:02.160 +Bye-bye. Thank you. diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt new file mode 100644 index 00000000..57ef14d3 --- /dev/null +++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt @@ -0,0 +1,35 @@ +WEBVTT + + +00:00:00.000 --> 00:01:41.759 +Introduction + +00:01:41.760 --> 00:07:44.699 +Android + +00:07:44.700 --> 00:09:30.239 +EditorConfig + +00:09:30.240 --> 00:13:11.399 +use-package integration with package-vc + +00:13:11.400 --> 00:15:56.839 +JSON + +00:15:56.840 --> 00:17:30.719 +Native compilation + +00:17:30.720 --> 00:18:16.819 +Tree-sitter + +00:18:16.820 --> 00:19:34.219 +Completion preview mode + +00:19:34.220 --> 00:21:16.779 +package-isolate + +00:21:16.780 --> 00:23:17.879 +Reindenting + +00:23:17.880 --> 00:24:43.120 +Wrapping up diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt new file mode 100644 index 00000000..feebc2ed --- /dev/null +++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt @@ -0,0 +1,1361 @@ +WEBVTT captioned by anush + +NOTE Introduction + +00:00:00.000 --> 00:00:06.119 +Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024. + +00:00:06.120 --> 00:00:08.839 +Before I begin, I'd like to thank the organizers + +00:00:08.840 --> 00:00:11.799 +and everyone involved for putting this all together. + +00:00:11.800 --> 00:00:13.759 +While this talk is being pre-recorded, + +00:00:13.760 --> 00:00:15.239 +my experience from the last few years + +00:00:15.240 --> 00:00:19.159 +assures me that it will be a great experience for everyone. + +00:00:19.160 --> 00:00:21.359 +My name is Philip Kaludercic. + +00:00:21.360 --> 00:00:24.479 +I am a core contributor and ELPA co-maintainer. + +00:00:24.480 --> 00:00:26.079 +I was honored when Sacha asked me + +00:00:26.080 --> 00:00:28.359 +to take over the slot for this year. + +00:00:28.360 --> 00:00:29.879 +In the past few iterations, + +00:00:29.880 --> 00:00:32.199 +John Wiegley has filled a similar presentation + +00:00:32.200 --> 00:00:35.679 +focusing on more general Emacs development updates. + +00:00:35.680 --> 00:00:38.519 +This year, I will specifically focus on + +00:00:38.520 --> 00:00:41.919 +highlight features from the upcoming Emacs 30 release, + +00:00:41.920 --> 00:00:43.919 +which might or might not have been released + +00:00:43.920 --> 00:00:48.079 +by the time you are seeing this. + +00:00:48.080 --> 00:00:51.079 +As you can imagine, everything new about Emacs + +00:00:51.080 --> 00:00:55.059 +can always be found in the Emacs NEWS file. + +00:00:55.060 --> 00:00:57.079 +Or, alternatively, + +00:00:57.080 --> 00:01:01.919 +if one doesn't want to read through the 3,000 lines here, + +00:01:01.920 --> 00:01:05.279 +one can also take a look at the Emacs FAQ + +00:01:05.280 --> 00:01:07.999 +and then go to the what's new about + +00:01:08.000 --> 00:01:12.219 +or what's different about Emacs 30 node. + +00:01:12.220 --> 00:01:14.759 +Next to these two official options, + +00:01:14.760 --> 00:01:18.599 +I also have a page on Emacs Wiki + +00:01:18.600 --> 00:01:21.439 +called EmacsThirtyHighlights, + +00:01:21.440 --> 00:01:24.279 +highlighting some of the interesting features + +00:01:24.280 --> 00:01:28.439 +with some context and suggestions on how to try them out. + +00:01:28.440 --> 00:01:30.039 +This is more of a collaborative effort. + +00:01:30.040 --> 00:01:32.719 +So if you see this and think something is missing, + +00:01:32.720 --> 00:01:34.519 +feel free to add it. + +00:01:34.520 --> 00:01:36.839 +So without further ado, + +00:01:36.840 --> 00:01:41.759 +let's begin taking a look at new features in Emacs 30. + +NOTE Android + +00:01:41.760 --> 00:01:44.679 +The biggest one, and the one I want to mention first, + +00:01:44.680 --> 00:01:49.039 +is Android support, native Android support. + +00:01:49.040 --> 00:01:51.879 +As you can see here, Emacs has been ported + +00:01:51.880 --> 00:01:53.639 +to the Android operating system. + +00:01:53.640 --> 00:01:56.479 +What this means is that from Emacs 30 onwards, + +00:01:56.480 --> 00:02:01.279 +you can build Android to target Android devices natively + +00:02:01.280 --> 00:02:06.759 +and using a graphical interface. + +00:02:06.760 --> 00:02:08.799 +While it has been possible to run Emacs + +00:02:08.800 --> 00:02:11.159 +inside of terminal emulators on Android for a while, + +00:02:11.160 --> 00:02:13.919 +this actually means that you can use Emacs + +00:02:13.920 --> 00:02:17.519 +on an Android device, a phone or a tablet, + +00:02:17.520 --> 00:02:20.959 +and have all the usual advantages from GUI Emacs, + +00:02:20.960 --> 00:02:23.479 +such as the ability to bind all commands + +00:02:23.480 --> 00:02:25.479 +without having to worry about-- + +00:02:25.480 --> 00:02:27.279 +all keys without having to worry + +00:02:27.280 --> 00:02:29.359 +about terminal compatibility issues, + +00:02:29.360 --> 00:02:32.759 +displaying images and multiple fonts + +00:02:32.760 --> 00:02:35.359 +on the same display of different sizes. + +00:02:35.360 --> 00:02:37.279 +I should have a recording + +00:02:37.280 --> 00:02:42.199 +of that somewhere here--here we are-- + +00:02:42.200 --> 00:02:44.439 +which I made earlier on my phone, + +00:02:44.440 --> 00:02:47.319 +because I'm recording this on a laptop-- + +00:02:47.320 --> 00:02:50.479 +where we can see how touch interaction works + +00:02:50.480 --> 00:02:53.199 +on an Android phone. I can switch between buffers. + +00:02:53.200 --> 00:02:56.119 +Here I've connected an external keyboard, + +00:02:56.120 --> 00:02:58.559 +opening the Emacs website. + +00:02:58.560 --> 00:03:02.679 +We have images that we can interact with. + +00:03:02.680 --> 00:03:05.319 +We could resize them if we wanted to + +00:03:05.320 --> 00:03:07.559 +with the image resizing commands. + +00:03:07.560 --> 00:03:10.359 +Pinch-to-zoom works, so it + +00:03:10.360 --> 00:03:12.759 +does realize what touchscreen interactions are. + +00:03:12.760 --> 00:03:15.239 +With an external mouse, and for example, + +00:03:15.240 --> 00:03:17.799 +enabling context menu mode, + +00:03:17.800 --> 00:03:22.679 +I can even pop up little interaction windows, + +00:03:22.680 --> 00:03:27.239 +which one you would usually also know from GUI Emacs. + +00:03:27.240 --> 00:03:32.959 +TUI Emacs actually also supports them since a while now. + +00:03:32.960 --> 00:03:34.639 +And in this case, I'm demonstrating + +00:03:34.640 --> 00:03:35.999 +how even the touchscreen events + +00:03:36.000 --> 00:03:39.119 +can be inspected using the usual help system, + +00:03:39.120 --> 00:03:43.359 +and how context-mode notices + +00:03:43.360 --> 00:03:45.239 +where we are and allows me to, for example, + +00:03:45.240 --> 00:03:47.799 +evaluate this specific region, + +00:03:47.800 --> 00:03:49.079 +which I've highlighted down there, + +00:03:49.080 --> 00:03:58.319 +binding a command to touch-screen-scroll. Yeah. + +00:03:58.320 --> 00:04:00.479 +One should note that these additions, + +00:04:00.480 --> 00:04:02.359 +for example touchscreen interaction, + +00:04:02.360 --> 00:04:04.159 +are not specific to Android, + +00:04:04.160 --> 00:04:06.839 +but they also are supported in other operating systems, + +00:04:06.840 --> 00:04:12.279 +such as Wayland and Xorg, which are not operating systems, + +00:04:12.280 --> 00:04:15.279 +and Windows, insofar as they have touchscreen, + +00:04:15.280 --> 00:04:18.419 +and devices have touchscreen support. + +00:04:18.420 --> 00:04:21.239 +One should mention, or I want to mention, + +00:04:21.240 --> 00:04:24.039 +that the main developer behind this feature, Po Lu, + +00:04:24.040 --> 00:04:27.319 +should be complimented for the additional effort he put + +00:04:27.320 --> 00:04:30.979 +into making sure that Emacs for Android + +00:04:30.980 --> 00:04:33.719 +can be built using only a free software toolchain, + +00:04:33.720 --> 00:04:36.999 +which is certainly not something one has come to expect + +00:04:37.000 --> 00:04:40.759 +from working on Android applications, + +00:04:40.760 --> 00:04:43.839 +as usually you have to agree to some terms and conditions + +00:04:43.840 --> 00:04:46.479 +for Google-specific software. + +00:04:46.480 --> 00:04:49.639 +Final note is that if you try and look for this online, + +00:04:49.640 --> 00:04:52.119 +there are APKs you can find, + +00:04:52.120 --> 00:04:54.679 +but some of them might be outdated. + +00:04:54.680 --> 00:04:59.359 +To the best of my knowledge, Po Lu has... + +00:04:59.360 --> 00:05:02.399 +Emacs 30 Android Sourceforge... + +00:05:02.400 --> 00:05:06.759 +He has set up some system where here in Sourceforge, + +00:05:06.760 --> 00:05:12.799 +there are regular and updated + +00:05:12.800 --> 00:05:14.519 +APK files which you can download + +00:05:14.520 --> 00:05:17.039 +to avoid having to build it yourself, + +00:05:17.040 --> 00:05:18.559 +testing out the newest version + +00:05:18.560 --> 00:05:27.619 +in case there are some bugs which you'd like to report. + +00:05:27.620 --> 00:05:33.119 +Which-key is a package which has now been moved + +00:05:33.120 --> 00:05:34.719 +from ELPA to the core. + +00:05:34.720 --> 00:05:38.879 +If you haven't heard of which-key before, the idea is, + +00:05:38.880 --> 00:05:41.399 +or the general pitch is that which-key + +00:05:41.400 --> 00:05:45.279 +is a additional documentation interface for Emacs + +00:05:45.280 --> 00:05:49.639 +for displaying various keys which you could input, + +00:05:49.640 --> 00:05:53.479 +or various keys and key maps + +00:05:53.480 --> 00:05:55.479 +that have been partially inputted. + +00:05:55.480 --> 00:05:57.639 +A better way to demonstrate this + +00:05:57.640 --> 00:05:59.319 +or to explain this is just to show it. + +00:05:59.320 --> 00:06:03.519 +If we enable the which-key mode--it's a global minor mode-- + +00:06:03.520 --> 00:06:06.399 +then I can press, for example, C-x, + +00:06:06.400 --> 00:06:08.719 +which is a prefix for the C-x keymap. + +00:06:08.720 --> 00:06:11.719 +Then down here in the buffer, in this window down here, + +00:06:11.720 --> 00:06:15.599 +we see various commands which we could invoke + +00:06:15.600 --> 00:06:17.919 +and the keys to invoke them with. + +00:06:17.920 --> 00:06:23.039 +For example, if I wanted to say C-x i for insert-file, + +00:06:23.040 --> 00:06:27.319 +then I just have to press i to highlight it once again. + +00:06:27.320 --> 00:06:32.559 +It should be down here. Pressing i without having to repeat + +00:06:32.560 --> 00:06:34.759 +the entire key code again, + +00:06:34.760 --> 00:06:37.719 +the partial key code again, just works. + +00:06:37.720 --> 00:06:41.679 +This is different from the feature which Emacs has already, + +00:06:41.680 --> 00:06:45.519 +which is if you have input the partial keychord, + +00:06:45.520 --> 00:06:47.039 +you can press C-h + +00:06:47.040 --> 00:06:50.959 +and then a help buffer pops up with a listing + +00:06:50.960 --> 00:06:54.159 +of all keybindings that start with C-x. + +00:06:54.160 --> 00:06:56.639 +The information is the same, the presentation is different, + +00:06:56.640 --> 00:06:59.159 +because now if I wanted to do C-x i, + +00:06:59.160 --> 00:07:03.319 +I have to repeat the entire keychord again. + +00:07:03.320 --> 00:07:09.479 +So it's a matter of personal preference, which you prefer. + +00:07:09.480 --> 00:07:12.519 +This is more of a traditional static approach + +00:07:12.520 --> 00:07:19.639 +because I get a help buffer which I can search + +00:07:19.640 --> 00:07:21.119 +using usual key commands, + +00:07:21.120 --> 00:07:28.159 +while which-key is more of a transient and modern. + +00:07:28.160 --> 00:07:31.299 +Some might prefer that approach + +00:07:31.300 --> 00:07:35.519 +to solving the same problem. + +00:07:35.520 --> 00:07:39.119 +Also, don't forget to check out the customization group + +00:07:39.120 --> 00:07:41.959 +for which-key which has a number of options + +00:07:41.960 --> 00:07:44.699 +which you might or might not be interested in. + +NOTE EditorConfig + +00:07:44.700 --> 00:07:50.879 +Next up, Emacs 30 has built-in EditorConfig support. + +00:07:50.880 --> 00:07:53.679 +If you have not heard of EditorConfig before, + +00:07:53.680 --> 00:07:56.379 +I believe I've linked to it down here somewhere. + +00:07:56.380 --> 00:08:00.160 +Ah, there it is, EditorConfig. + +00:08:00.161 --> 00:08:05.260 +This is a file format used to specify + +00:08:05.261 --> 00:08:11.959 +common formatting rules in an editor-agnostic way. + +00:08:11.960 --> 00:08:16.319 +You might compare it to .dir-locals.el files, + +00:08:16.320 --> 00:08:19.159 +which is a sort of an s-expression + +00:08:19.160 --> 00:08:22.159 +for setting file-local variables in Emacs. + +00:08:22.160 --> 00:08:26.559 +Of course, this is restricted to the common subset + +00:08:26.560 --> 00:08:29.299 +of what all editors should understand. + +00:08:29.300 --> 00:08:31.839 +For example, indentation styles, + +00:08:31.840 --> 00:08:36.699 +whether you prefer tabs or spaces, + +00:08:36.700 --> 00:08:38.759 +tab width, file encoding, and so on. + +00:08:38.760 --> 00:08:43.959 +So it's nothing too advanced, but it's something... + +00:08:43.960 --> 00:08:48.559 +It is a file format which one sees popping up more + +00:08:48.560 --> 00:08:50.439 +and more often in lots of projects + +00:08:50.440 --> 00:08:53.479 +which want to enforce a consistent indentation style + +00:08:53.480 --> 00:08:56.639 +or formatting rules for all editors in a project. + +00:08:56.640 --> 00:09:00.159 +Having this built in is certainly useful in Emacs. + +00:09:00.160 --> 00:09:03.579 +Though one should note that it's not enabled by default. + +00:09:03.580 --> 00:09:11.039 +You still have to enable the global minor mode, + +00:09:11.040 --> 00:09:14.239 +which is simply turning on this one option. + +00:09:14.240 --> 00:09:15.599 +Shouldn't be more than that, + +00:09:15.600 --> 00:09:18.759 +and then Emacs will respect the rules. + +00:09:18.760 --> 00:09:22.999 +If it finds a .editorconfig file in the project directory, + +00:09:23.000 --> 00:09:25.319 +then it will respect those rules + +00:09:25.320 --> 00:09:30.239 +without having to do anything else. + +NOTE use-package integration with package-vc + +00:09:30.240 --> 00:09:34.599 +Next up, use-package integration with package-vc. + +00:09:34.600 --> 00:09:36.519 +For those not familiar with either of the two, + +00:09:36.520 --> 00:09:38.119 +or at least one of the two, + +00:09:38.120 --> 00:09:41.079 +use-package is a popular configuration macro. + +00:09:41.080 --> 00:09:43.119 +What it does is it allows + +00:09:43.120 --> 00:09:46.274 +users to declaratively specify packages + +00:09:46.275 --> 00:09:48.879 +they would like to have installed and configured + +00:09:48.880 --> 00:09:51.539 +in their configuration file, + +00:09:51.540 --> 00:09:54.359 +so that, for example, if you copy your init.el + +00:09:54.360 --> 00:09:55.959 +from one system to another, + +00:09:55.960 --> 00:09:58.519 +it could bootstrap the entire configuration, + +00:09:58.520 --> 00:10:00.719 +downloading all the packages you want + +00:10:00.720 --> 00:10:02.239 +without having to manually do this + +00:10:02.240 --> 00:10:05.039 +on every system you'd like to use. + +00:10:05.040 --> 00:10:07.559 +This allows configurations + +00:10:07.560 --> 00:10:11.039 +to be self-encapsulated and portable. + +00:10:11.040 --> 00:10:15.959 +package-vc is an extension of package.el, + +00:10:15.960 --> 00:10:19.679 +which allows installing packages from an alternative. + +00:10:19.680 --> 00:10:22.279 +Instead of using the standard way to install packages, + +00:10:22.280 --> 00:10:26.239 +which is just download tarball and unpack it, + +00:10:26.240 --> 00:10:28.359 +byte compile, and so on, + +00:10:28.360 --> 00:10:32.759 +it will fetch the files for a package + +00:10:32.760 --> 00:10:35.279 +directly from the source code repository + +00:10:35.280 --> 00:10:37.239 +and initialize it in such a way + +00:10:37.240 --> 00:10:39.119 +that package.el can work with it. + +00:10:39.120 --> 00:10:44.319 +So it's just a front-end for installing packages. + +00:10:44.320 --> 00:10:46.519 +Even though these two were added to Emacs 29, + +00:10:46.520 --> 00:10:48.399 +we didn't have the time to work on the + +00:10:48.400 --> 00:10:52.639 +use-package integration of package-vc into use-package, + +00:10:52.640 --> 00:10:55.359 +which has been changed now. + +00:10:55.360 --> 00:11:00.119 +What we have with Emacs 30 is that + +00:11:00.120 --> 00:11:02.839 +there is a :vc keyword for use-package + +00:11:02.840 --> 00:11:05.319 +with which we can instruct use-package + +00:11:05.320 --> 00:11:10.760 +to not download a package using tarball, + +00:11:10.774 --> 00:11:12.519 +but instead to fetch the source code + +00:11:12.520 --> 00:11:13.799 +from a source code repository. + +00:11:13.800 --> 00:11:15.919 +This is useful if you, for example, + +00:11:15.920 --> 00:11:18.319 +have packages which you yourself work on + +00:11:18.320 --> 00:11:19.959 +and know that you always want to have + +00:11:19.960 --> 00:11:21.919 +the development version of the package + +00:11:21.920 --> 00:11:26.639 +where you can directly commit changes you've made + +00:11:26.640 --> 00:11:29.159 +to the repository and push them upstream. + +00:11:29.160 --> 00:11:32.399 +Or, if you know that you want to contribute to a package, + +00:11:32.400 --> 00:11:35.559 +you can use package-vc to download the source code, + +00:11:35.560 --> 00:11:37.319 +have all the version control information, + +00:11:37.320 --> 00:11:41.759 +prepare a patch and send it upstream. + +00:11:41.760 --> 00:11:44.119 +In these examples here, + +00:11:44.120 --> 00:11:49.119 +the first example Lisp instructs package-vc + +00:11:49.120 --> 00:11:52.959 +to download the source code from a URL. + +00:11:52.960 --> 00:11:55.119 +So this is a git URL where it will download + +00:11:55.120 --> 00:11:57.399 +the source code from, and in this case, + +00:11:57.400 --> 00:12:00.399 +choose the newest checkout of the source code, + +00:12:00.400 --> 00:12:05.680 +not the latest release. Down here, we have another example. + +00:12:05.060 --> 00:12:09.159 +I prefer to consider the following example here. + +00:12:09.160 --> 00:12:10.879 +If we just had written this, + +00:12:10.880 --> 00:12:13.159 +then package-vc would use the metadata + +00:12:13.160 --> 00:12:16.279 +which an ELPA server provides + +00:12:16.280 --> 00:12:19.799 +to fetch the URL from the official repository of, + +00:12:19.800 --> 00:12:22.839 +in this case, BBDB, without having to... + +00:12:22.840 --> 00:12:28.239 +It would be more or less the same like this up here, + +00:12:28.240 --> 00:12:32.639 +with the simple difference that package-vc integration + +00:12:32.640 --> 00:12:36.359 +into use-package doesn't check out the latest commit, + +00:12:36.360 --> 00:12:38.359 +but the latest release, + +00:12:38.360 --> 00:12:44.159 +just to keep configurations more deterministic by default. + +00:12:44.160 --> 00:12:47.879 +Of course, if you prefer to use latest commit, + +00:12:47.880 --> 00:12:52.439 +you can use a package-vc install command + +00:12:52.440 --> 00:12:54.879 +or just update the package manually yourself, + +00:12:54.880 --> 00:13:01.739 +which you can use using package-vc-upgrade. + +00:13:01.740 --> 00:13:04.319 +Next, I'd like to focus on a few features + +00:13:04.320 --> 00:13:07.740 +which one might not necessarily realize directly, + +00:13:07.741 --> 00:13:11.399 +but will hopefully improve your experience with Emacs. + +NOTE JSON + +00:13:11.400 --> 00:13:15.119 +First up in this list is a new JSON parser. + +00:13:15.120 --> 00:13:21.399 +Let's maybe show the source code for that one: + +00:13:21.400 --> 00:13:39.319 +not json.el, json.c. The history of JSON parsing in Emacs + +00:13:39.320 --> 00:13:43.279 +started with Emacs 23 with the addition of json.el. + +00:13:43.280 --> 00:13:46.919 +This was the file which we had just opened a moment ago. + +00:13:46.920 --> 00:13:50.959 +This is a JSON parser in Emacs Lisp. + +00:13:50.960 --> 00:13:53.199 +It's fine, it does the job, but it can get slow + +00:13:53.200 --> 00:13:55.479 +if we have a situation like where + +00:13:55.480 --> 00:14:00.479 +Eglot uses a LSP server to communicate with + +00:14:00.480 --> 00:14:02.959 +and the LSP server can get a bit chatty, + +00:14:02.960 --> 00:14:05.479 +sending a lot of JSON data, + +00:14:05.480 --> 00:14:08.199 +which all has to be parsed and garbage collected, + +00:14:08.200 --> 00:14:10.199 +which can slow down Emacs a bit. + +00:14:10.200 --> 00:14:14.119 +The situation was improved upon in Emacs 29 + +00:14:14.120 --> 00:14:17.959 +when JSON parsing was added to the core. + +00:14:17.960 --> 00:14:21.039 +This was the json.c file, which we see on this side, + +00:14:21.040 --> 00:14:23.279 +the old version of the json.c file, + +00:14:23.280 --> 00:14:27.119 +which employed the Jansson library (it's the C library) + +00:14:27.120 --> 00:14:33.159 +for parsing and accelerating JSON parsing in Emacs. + +00:14:33.160 --> 00:14:33.999 +This was good enough, + +00:14:34.000 --> 00:14:36.159 +or it certainly improved the situation + +00:14:36.160 --> 00:14:38.559 +for a lot of LSP clients. + +00:14:38.560 --> 00:14:45.479 +But in Emacs 30, the situation has been improved once more + +00:14:45.480 --> 00:14:50.359 +with the addition of a JSON parser directly in Emacs. + +00:14:50.360 --> 00:14:52.999 +So instead of using an external library, + +00:14:53.000 --> 00:14:57.719 +there's a custom JSON parser written in C in the Emacs core, + +00:14:57.720 --> 00:15:01.559 +which directly generates Elisp objects. + +00:15:01.560 --> 00:15:04.999 +The advantage to this approach + +00:15:05.000 --> 00:15:06.359 +compared to the Jansson approach + +00:15:06.360 --> 00:15:07.919 +is that there's no intermediate format + +00:15:07.920 --> 00:15:09.199 +which has to be allocated + +00:15:09.200 --> 00:15:11.559 +and memory managed and freed again, + +00:15:11.560 --> 00:15:19.479 +which of course incurs an additional performance overhead. + +00:15:19.480 --> 00:15:22.659 +Next to this, there's also a custom serializer + +00:15:22.660 --> 00:15:27.119 +for JSON contents translating a JSON object into a string. + +00:15:27.120 --> 00:15:30.279 +... The consequence of this is that + +00:15:30.280 --> 00:15:35.600 +there is absolutely no dependency on Jansson anymore. + +00:15:35.640 --> 00:15:38.559 +This in turn means that now all Emacs users + +00:15:38.560 --> 00:15:39.799 +from Emacs 30 onwards + +00:15:39.800 --> 00:15:43.119 +can take advantage of this new JSON parser + +00:15:43.120 --> 00:15:44.879 +and don't have to worry about whether + +00:15:44.880 --> 00:15:47.799 +or not they have Jansson, this JSON parsing library, + +00:15:47.800 --> 00:15:50.999 +installed on their system or not when they want + +00:15:51.000 --> 00:15:56.839 +to take advantage of this accelerated JSON parsing. + +NOTE Native compilation + +00:15:56.840 --> 00:16:00.639 +Next up, another behind-the-scenes feature + +00:16:00.640 --> 00:16:04.559 +is that if you build Emacs on your own from source, + +00:16:04.560 --> 00:16:07.879 +you might know that if you wanted + +00:16:07.880 --> 00:16:09.559 +to use native compilation, + +00:16:09.560 --> 00:16:12.319 +so the translation of Elisp bytecodes + +00:16:12.320 --> 00:16:15.559 +to whatever the native assembly + +00:16:15.560 --> 00:16:19.319 +or native instruction set is on your system, + +00:16:19.320 --> 00:16:24.359 +you have to specify with native compilation. + +00:16:24.360 --> 00:16:25.879 +when invoking the configure script, + +00:16:25.880 --> 00:16:28.879 +otherwise it would not have been enabled at all. + +00:16:28.880 --> 00:16:34.119 +With Emacs 30, this step is not necessary anymore. + +00:16:34.120 --> 00:16:36.719 +The configure script will automatically check + +00:16:36.720 --> 00:16:41.759 +if you have the libgccjit library installed on your system, + +00:16:41.760 --> 00:16:42.879 +and if that is so, + +00:16:42.880 --> 00:16:45.999 +then native compilation will be enabled by default. + +00:16:46.000 --> 00:16:49.559 +In other words, if you have an issue with native compilation + +00:16:49.560 --> 00:16:52.799 +or prefer not to use it for whatever reason, + +00:16:52.800 --> 00:16:55.559 +you now have to type --without-native-compilation + +00:16:55.560 --> 00:16:58.199 +when compiling Emacs to prevent this from happening. + +00:16:58.200 --> 00:17:02.279 +But native compilation was added in Emacs 28 + +00:17:02.280 --> 00:17:04.399 +and has proven to be a very stable + +00:17:04.400 --> 00:17:06.199 +and useful feature for most people, + +00:17:06.200 --> 00:17:10.199 +so there's probably no reason to do this + +00:17:10.200 --> 00:17:10.939 +and you can just invoke the configure script + +00:17:10.940 --> 00:17:16.239 +with one argument less. Right, and I'd like to finish up + +00:17:16.240 --> 00:17:19.399 +with a few smaller features, a few smaller highlights. + +00:17:19.400 --> 00:17:30.719 +Maybe we can go back to the listing here. Here we have it. + +NOTE Tree-sitter + +00:17:30.720 --> 00:17:32.839 +There are a few new major modes + +00:17:32.840 --> 00:17:34.239 +based on the tree-sitter library. + +00:17:34.240 --> 00:17:37.739 +tree-sitter is this parser library + +00:17:37.740 --> 00:17:42.879 +which has been integrated into Emacs 29. + +00:17:42.880 --> 00:17:44.079 +It allows the integration + +00:17:44.080 --> 00:17:48.359 +of external, specialized, and quick parsers into Emacs, + +00:17:48.360 --> 00:17:52.119 +which improve stuff like syntax highlighting, indentation, + +00:17:52.120 --> 00:17:55.279 +structural navigation, imenu support, + +00:17:55.280 --> 00:18:00.839 +by simply having a better understanding of, for example, + +00:18:00.840 --> 00:18:03.919 +a HTML file, or a Lua file, a PHP file, + +00:18:03.920 --> 00:18:06.239 +than what people usually implement + +00:18:06.240 --> 00:18:10.319 +using regular expressions in traditional major modes. + +00:18:10.320 --> 00:18:16.819 +So, a few new major modes which you can try out here. + +NOTE Completion preview mode + +00:18:16.820 --> 00:18:19.959 +Another interesting feature is the completion-preview-mode. + +00:18:19.960 --> 00:18:23.319 +We can maybe try it out here in the scratch buffer. + +00:18:23.320 --> 00:18:28.199 +If I enable completion-preview-mode... + +00:18:28.200 --> 00:18:32.719 +This is a non-global minor mode, + +00:18:32.720 --> 00:18:38.479 +which will display completion options inline using overlays. + +00:18:38.480 --> 00:18:43.199 +For example, if I start typing a longer symbol like define, + +00:18:43.200 --> 00:18:48.119 +now we have a derived mode. It suggests me to... + +00:18:48.120 --> 00:18:51.039 +I can just press TAB and then it completes the option here, + +00:18:51.040 --> 00:18:51.839 +but it didn't actually... + +00:18:51.840 --> 00:18:55.279 +It's not actually modifying the buffer, it's not pressing, + +00:18:55.280 --> 00:18:57.039 +these are just overlays, + +00:18:57.040 --> 00:18:59.519 +so if I move around, it gets deleted. + +00:18:59.520 --> 00:19:02.539 +It wouldn't get saved if I were to save the buffer. + +00:19:02.540 --> 00:19:04.999 +The same also should work in a shell buffer. + +00:19:05.000 --> 00:19:09.239 +If I enable completion preview mode here and start... + +00:19:09.240 --> 00:19:12.759 +In this case, I'm using the bash completion package, + +00:19:12.760 --> 00:19:15.199 +which provides additional completion information. + +00:19:15.200 --> 00:19:17.839 +This is not only limited to programming systems, + +00:19:17.840 --> 00:19:22.919 +but anywhere where you have completion at point in Emacs. + +00:19:22.920 --> 00:19:26.059 +I can start typing here, ignore, and put ignore-backups, + +00:19:26.060 --> 00:19:29.919 +and it hints to the options which I have + +00:19:29.920 --> 00:19:34.219 +and allows me to complete them quickly. + +NOTE package-isolate + +00:19:34.220 --> 00:19:37.879 +Another small feature is the package-isolate command. + +00:19:37.880 --> 00:19:39.959 +What this does is it will start + +00:19:39.960 --> 00:19:42.759 +or it will prompt me for packages + +00:19:42.760 --> 00:19:44.119 +I have installed in my system + +00:19:44.120 --> 00:19:46.439 +and will start an isolated + +00:19:46.440 --> 00:19:51.079 +or like "emacs -Q"-ish instance of emacs + +00:19:51.080 --> 00:19:53.639 +with only these packages installed. + +00:19:53.640 --> 00:20:00.279 +So for example, if I said I want slime and I want diff-hl, + +00:20:00.280 --> 00:20:02.279 +then this is a new Emacs window. + +00:20:02.280 --> 00:20:04.439 +It's unrelated to the one around. + +00:20:04.440 --> 00:20:06.839 +It uses the same executable, of course, + +00:20:06.840 --> 00:20:09.939 +but will not load your configuration file + +00:20:09.940 --> 00:20:13.619 +or any other further customizations on your system. + +00:20:13.620 --> 00:20:15.159 +All it does, it will ensure + +00:20:15.160 --> 00:20:17.919 +that these packages, which are listed here, + +00:20:17.920 --> 00:20:24.499 +so in our case SLIME and dependencies of SLIME and diff-hl, + +00:20:24.500 --> 00:20:25.239 +in the system + +00:20:25.240 --> 00:20:29.039 +so that I could, for example, as you can see here, + +00:20:29.040 --> 00:20:31.959 +diff-hl-mode works. + +00:20:31.960 --> 00:20:35.479 +Okay, this is not a version-controlled file. + +00:20:35.480 --> 00:20:41.119 +Maybe if we take a look at, have I enabled diff-hl-mode? + +00:20:41.120 --> 00:20:44.559 +It's enabled in this case. What diff-hl-mode does + +00:20:44.560 --> 00:20:48.479 +is it displays these version control changes + +00:20:48.480 --> 00:20:49.999 +in the fringe of a buffer. + +00:20:50.000 --> 00:20:54.079 +And even though this is a uncustomized version of Emacs, + +00:20:54.080 --> 00:20:56.319 +or an uncustomized instance of Emacs, + +00:20:56.320 --> 00:20:58.959 +it was easy for me to load this one package, + +00:20:58.960 --> 00:21:01.959 +or these two packages and all the dependencies necessary. + +00:21:01.960 --> 00:21:05.319 +As you can imagine, the main purpose for this + +00:21:05.320 --> 00:21:07.719 +is to make debugging issues easier. + +00:21:07.720 --> 00:21:10.519 +If you want to report about an issue + +00:21:10.520 --> 00:21:14.519 +you have with a package. And if I close this, it's closed + +00:21:14.520 --> 00:21:16.779 +and everything's thrown away. + +NOTE Reindenting + +00:21:16.780 --> 00:21:18.959 +Last up, a nice feature I think + +00:21:18.960 --> 00:21:21.199 +a lot of people will appreciate is, + +00:21:21.200 --> 00:21:24.239 +if you are familiar with... Let's open a text buffer. + +00:21:24.240 --> 00:21:30.079 +The M-q key is traditionally bound to fill-paragraph. + +00:21:30.080 --> 00:21:32.119 +What this means is that... + +00:21:32.120 --> 00:21:34.999 +Let's, for example, copy this text from here + +00:21:35.000 --> 00:21:40.359 +and squash it all into one line. If I press M-q here, + +00:21:40.360 --> 00:21:42.399 +then the lines will be broken + +00:21:42.400 --> 00:21:49.479 +according to the fill column indicator up here. + +00:21:49.480 --> 00:21:52.399 +This is the traditional usage of M-q, + +00:21:52.400 --> 00:21:54.119 +and it still works in text-mode buffers, + +00:21:54.120 --> 00:21:56.639 +but in prog-mode buffers-- + +00:21:56.640 --> 00:22:00.079 +so any major mode inheriting prog-mode-- + +00:22:00.080 --> 00:22:02.199 +M-q will now by default be bound + +00:22:02.200 --> 00:22:09.719 +to prog-fill-reindent-defun. To summarize the point, + +00:22:09.720 --> 00:22:13.479 +if you are editing a string or a comment, + +00:22:13.480 --> 00:22:15.919 +then the comment will be filled. + +00:22:15.920 --> 00:22:19.159 +But if you are outside of a comment or outside of a string, + +00:22:19.160 --> 00:22:22.919 +then the defun or the top-level construct + +00:22:22.920 --> 00:22:26.119 +in the programming language will be re-indented. + +00:22:26.120 --> 00:22:33.859 +Let's try that out with maybe some file I have open here. + +00:22:33.860 --> 00:22:38.819 +If I'm in this... Let's choose some function, + +00:22:38.820 --> 00:22:41.279 +let's take this for example. + +00:22:41.280 --> 00:22:43.879 +If we followed all of this again, + +00:22:43.880 --> 00:22:47.619 +and I press M-q in on this paragraph, + +00:22:47.620 --> 00:22:50.039 +then the paragraph gets re-indented. + +00:22:50.040 --> 00:22:54.859 +But if I'm down here and I choose to break the indentation + +00:22:54.860 --> 00:22:56.180 +and then press M-q, + +00:22:56.181 --> 00:23:02.399 +then as you see, it practically selected the defun + +00:23:02.400 --> 00:23:03.559 +and re-indented everything + +00:23:03.560 --> 00:23:05.959 +without having need to move the point around in the buffer. + +00:23:06.800 --> 00:23:08.679 +So I think that's a really nice feature, + +00:23:08.680 --> 00:23:11.039 +which a lot of people can appreciate. + +00:23:11.040 --> 00:23:17.879 +It's one of those niceties which comes from time to time. + +NOTE Wrapping up + +00:23:17.880 --> 00:23:20.679 +Right, so that was my overview + +00:23:20.680 --> 00:23:22.559 +of what's going to be new in Emacs 30. + +00:23:22.560 --> 00:23:24.359 +I hope that most people could take away + +00:23:24.360 --> 00:23:25.659 +something from this presentation + +00:23:25.660 --> 00:23:29.419 +and have something to look forward + +00:23:29.420 --> 00:23:31.599 +to try out after upgrading. + +00:23:31.600 --> 00:23:33.839 +As mentioned initially, as of recording, + +00:23:33.840 --> 00:23:36.939 +this release has not been completed yet. + +00:23:36.940 --> 00:23:38.879 +If this is still not the case + +00:23:38.880 --> 00:23:40.199 +when you're seeing this video, + +00:23:40.200 --> 00:23:43.799 +please consider downloading and building Emacs 30 yourself. + +00:23:43.800 --> 00:23:48.319 +If you have any issues, which is always the case, + +00:23:48.320 --> 00:23:56.339 +please report them to using report-emacs-bug. + +00:23:56.340 --> 00:23:57.740 +That will pop up a mail buffer, + +00:23:57.741 --> 00:23:59.519 +and then you can describe your issue and send them out. + +00:23:59.520 --> 00:24:01.839 +All bug reports are valuable, + +00:24:01.840 --> 00:24:03.999 +even if they are false positives or duplicates-- + +00:24:04.000 --> 00:24:05.239 +it doesn't matter-- + +00:24:05.240 --> 00:24:08.919 +because when you take the time to submit a bug report, + +00:24:08.920 --> 00:24:12.359 +which describes something that's specific to your setup, + +00:24:12.360 --> 00:24:16.839 +which the developers might not have noticed or known about, + +00:24:16.840 --> 00:24:19.079 +then you are certainly helping out a lot of other people + +00:24:19.080 --> 00:24:21.679 +which might run into the same issue in the future. + +00:24:21.680 --> 00:24:23.359 +Especially with upgrades, + +00:24:23.360 --> 00:24:26.559 +it would be nice to figure out small problems + +00:24:26.560 --> 00:24:30.879 +which make upgrading difficult for some people. + +00:24:30.880 --> 00:24:34.559 +The ideal is, of course, to have no issues + +00:24:34.560 --> 00:24:37.199 +when upgrading from one version to another. + +00:24:37.200 --> 00:24:41.939 +Having said that, I thank you for your attention, + +00:24:41.940 --> 00:24:43.120 +and I'm saying goodbye. diff --git a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt new file mode 100644 index 00000000..510e556e --- /dev/null +++ b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt @@ -0,0 +1,720 @@ +WEBVTT + +00:00:00.000 --> 00:00:08.119 +All right. Hey, thanks for bearing with us there. We had a + +00:00:08.120 --> 00:00:11.239 +couple of bumps in the road, a cross between a couple of + +00:00:11.240 --> 00:00:13.479 +different versions of our program that we deliver here, + +00:00:13.480 --> 00:00:17.959 +different ways that we bring this stream together between + +00:00:17.960 --> 00:00:22.359 +the recorded content that that speakers are putting + +00:00:22.360 --> 00:00:26.879 +together in advance in the live content, such as what you're + +00:00:26.880 --> 00:00:31.039 +seeing right here. So thanks go to Sacha and Leo, and + +00:00:31.040 --> 00:00:34.359 +everybody behind the stages gluing it all together. And + +00:00:34.360 --> 00:00:40.199 +we're back here now, and I'm speaking with Robin, who us + +00:00:40.200 --> 00:00:42.799 +ready to take on some of your questions and address some of + +00:00:42.800 --> 00:00:46.879 +the comments over here on the etherpad. If you want to jump in + +00:00:46.880 --> 00:00:51.319 +there, there's links in the chat. And thanks so much, Robin, + +00:00:51.320 --> 00:00:53.999 +for your talk. And it's also been a pleasure chatting with + +00:00:54.000 --> 00:00:57.919 +you just a little bit over the last couple of months on IRC. + +00:00:57.920 --> 00:01:33.319 +Yeah, absolutely. Great meeting you. + +00:01:33.320 --> 00:01:37.679 +All right. All right, everyone. I think I am streaming now. + +00:01:37.680 --> 00:01:42.439 +So let's look at it. Let's see. I see the IRC scrolling. So + +00:01:42.440 --> 00:01:47.199 +let's see where that's going. Yes, the Common Lisp is what I + +00:01:47.200 --> 00:01:50.519 +thought would piss people off. And because it's not part of + +00:01:50.520 --> 00:01:54.239 +either community, but I think it would be a good compromise + +00:01:54.240 --> 00:01:57.839 +for building a Lisp into a language that's more suitable for + +00:01:57.840 --> 00:02:01.879 +building large systems like the kind that we are building in + +00:02:01.880 --> 00:02:07.279 +Emacs today. I also left out an important part of the talk, + +00:02:07.280 --> 00:02:12.079 +which is part of the motivation for transitioning from C to + +00:02:12.080 --> 00:02:15.599 +Lisp. And that's the performance characteristics + +00:02:15.600 --> 00:02:19.399 +fundamentally change when you get a modern and high + +00:02:19.400 --> 00:02:23.559 +performance Lisp system involved. it starts getting less + +00:02:23.560 --> 00:02:27.799 +practical to just call out to C to speed up every operation. + +00:02:27.800 --> 00:02:31.559 +Among other things, you lose the ability to use more + +00:02:31.560 --> 00:02:34.759 +advanced control structures, like the limited + +00:02:34.760 --> 00:02:40.039 +continuations. And you also have to pay the overhead of + +00:02:40.040 --> 00:02:43.879 +calling out to our foreign function. So it gets to be an + +00:02:43.880 --> 00:02:47.879 +increasingly better deal to optimize your list + +00:02:47.880 --> 00:02:52.719 +implementation and provide ways for building faster list + +00:02:52.720 --> 00:02:55.879 +programs, such as type annotations, once you've gotten + +00:02:55.880 --> 00:03:01.479 +over a certain threshold of performance. + +NOTE Q: About fibers: My understanding is that the problem with making Elisp concurrent is that none of the data structures (buffer, cons, vector, window etc) are concurrency-safe. How do fibers help with this? + +00:03:01.480 --> 00:03:07.359 +I'm going to look at the pad. Here we go. The first question is + +00:03:07.360 --> 00:03:12.519 +about fibers and whether they help with making Elisp + +00:03:12.520 --> 00:03:18.279 +concurrent in terms of its data structures. Yes, that's + +00:03:18.280 --> 00:03:23.879 +absolutely correct. Fibers by themselves do not provide + +00:03:23.880 --> 00:03:26.799 +thread safety for any of the existing Emacs data + +00:03:26.800 --> 00:03:32.879 +structures. What they are useful for is building things + +00:03:32.880 --> 00:03:38.199 +that don't use Emacs data structures, say a network client + +00:03:38.200 --> 00:03:44.559 +that reads input from a stream or in scheme, a port or a stream + +00:03:44.560 --> 00:03:49.679 +instead of a buffer. And we can also take a look at options for + +00:03:49.680 --> 00:03:54.199 +making more Emacs features concurrency safe or thread + +00:03:54.200 --> 00:03:58.079 +safe. For example, we could introduce the idea of a thread + +00:03:58.080 --> 00:04:03.039 +local buffer that didn't require locks for sharing between + +00:04:03.040 --> 00:04:09.239 +different threads. And I'm not sure how that would develop, + +00:04:09.240 --> 00:04:12.319 +but I'm sure the Emacs maintainers already have some ideas + +00:04:12.320 --> 00:04:17.519 +in this direction. Fibers will basically provide a + +00:04:17.520 --> 00:04:22.159 +high-performance system that you can use apart from + +00:04:22.160 --> 00:04:28.079 +ordinary Emacs-less constructs. + +NOTE Q: Do you have a rough idea of how much of Guile is written in C? + +00:04:28.080 --> 00:04:34.839 +Let's see. We have another question. Emacs is roughly 25% C. + +00:04:34.840 --> 00:04:38.839 +How much of Guile is in C? + +00:04:38.840 --> 00:04:45.679 +Well, part of my point about C is not so much that there, well, + +00:04:45.680 --> 00:04:50.279 +obviously, I phrased it a little provocatively, but the + +00:04:50.280 --> 00:04:54.719 +problem is not so much that there is C, but that there is so + +00:04:54.720 --> 00:05:00.279 +much C involved in every single layer of the application. + +00:05:00.280 --> 00:05:04.559 +So, for example, we're limited in our ability to use tools + +00:05:04.560 --> 00:05:08.159 +like limit continuations, which can be used to express + +00:05:08.160 --> 00:05:13.599 +buffer local variable binding in a few dozen lines, because + +00:05:13.600 --> 00:05:21.839 +Emacs has so much calling back and forth between guile and C, + +00:05:21.840 --> 00:05:26.599 +due to so much basic functionality being in primitive C + +00:05:26.600 --> 00:05:34.119 +subroutines. So that's one issue apart from the question of + +00:05:34.120 --> 00:05:38.359 +how much is in a particular language. To answer the question + +00:05:38.360 --> 00:05:45.879 +about Guile, Guile has about 165,000 lines of scheme code + +00:05:45.880 --> 00:05:51.599 +and about 160,000 lines of C code, so it's about half and + +00:05:51.600 --> 00:05:55.879 +half. And that shouldn't really be surprising given that it + +00:05:55.880 --> 00:06:00.359 +is actually focused on low-level things like building a + +00:06:00.360 --> 00:06:05.079 +high-performance bytecode compiler, and a just-in-time + +00:06:05.080 --> 00:06:09.719 +compiler, and so on, as well as providing its own fairly + +00:06:09.720 --> 00:06:14.999 +rich, but still far less complete than Emacs's standard + +00:06:15.000 --> 00:06:19.239 +library, in terms of Ice9 and other system libraries + +NOTE Q: A Common Lisp implementation for Guile sounds really cool! Is there already work on this underway? + +00:06:19.240 --> 00:06:24.359 +shipped with Guile. The next question is on a Common Lisp + +00:06:24.360 --> 00:06:27.759 +implementation for Guile, and whether work on it is + +00:06:27.760 --> 00:06:33.079 +underway. In fact, work on it is already underway. I've been + +00:06:33.080 --> 00:06:36.399 +working on it on and off in my spare time for a couple of years + +00:06:36.400 --> 00:06:40.039 +now. I've gotten, I think, a couple of chapters of the + +00:06:40.040 --> 00:06:43.519 +hyperspectin, if you want to measure it that way. But I've + +00:06:43.520 --> 00:06:51.719 +been focusing my work more on research and on what we need to + +00:06:51.720 --> 00:06:57.399 +do to have a LISP environment, a polyglot LISP environment, + +00:06:57.400 --> 00:07:02.759 +wherein the features of Common Lisp and Scheme and Emacs + +00:07:02.760 --> 00:07:08.919 +Lisp can all work easily and ergonomically together. So + +00:07:08.920 --> 00:07:13.879 +this involves things like the question of Lisps having + +00:07:13.880 --> 00:07:22.079 +Lisp1s versus Lisp2s. That is, a Lisp1-like scheme has one + +00:07:22.080 --> 00:07:27.599 +namespace, like every variable is a single name that can + +00:07:27.600 --> 00:07:31.999 +refer to one value, whereas in Lisp2s like EmacsLisp, + +00:07:32.000 --> 00:07:37.399 +symbols can have different definitions as functions and as + +00:07:37.400 --> 00:07:41.119 +variables, as well as other namespaces like property + +00:07:41.120 --> 00:07:45.719 +lists. So Kent Pittman has some interesting thoughts on + +00:07:45.720 --> 00:07:51.039 +this that I've been looking into. Another issue is the + +00:07:51.040 --> 00:07:57.519 +interaction between package and module systems. So I don't + +00:07:57.520 --> 00:08:01.839 +have really anything ready to publish just yet on this, but I + +00:08:01.840 --> 00:08:05.279 +have been looking into the background issues of + +00:08:05.280 --> 00:08:08.119 +integrating this into Guile in a useful way. + +00:08:08.120 --> 00:08:15.719 +And let's see, one other thing I was going to mention. + +00:08:15.720 --> 00:08:27.679 +Okay, I've lost it. But yeah, there is some work already. And + +00:08:27.680 --> 00:08:30.399 +if people are interested in moving Emacs in this direction, + +00:08:30.400 --> 00:08:34.479 +then we'll certainly start working on it in earnest. + +NOTE Q: Did switching from guile 2 to 3 give any performance benefits? + +00:08:34.480 --> 00:08:41.119 +Another question, did switching from Guile 2 to 3 give any + +00:08:41.120 --> 00:08:46.279 +performance benefits? Well, honestly, we're not really + +00:08:46.280 --> 00:08:50.759 +benchmarking stuff here because Guile Emacs has so much + +00:08:50.760 --> 00:08:55.759 +overhead from structuring the compiler to closely conform + +00:08:55.760 --> 00:08:59.879 +to Emacs in terms of like even things as simple as metadata + +00:08:59.880 --> 00:09:03.879 +layout for variable information. + +00:09:03.880 --> 00:09:11.999 +So I haven't actually noticed a perceptual change. I would + +00:09:12.000 --> 00:09:15.359 +guess based on the Gabriel benchmark results that is + +00:09:15.360 --> 00:09:21.399 +benefited from what somewhat from Gal 3's performance + +00:09:21.400 --> 00:09:27.479 +improvements but for Emacs I just don't know yet and working + +00:09:27.480 --> 00:09:30.199 +on the compiler's code generation and lowering the + +00:09:30.200 --> 00:09:33.719 +overhead is going to be the thing that provides the most + +00:09:33.720 --> 00:09:37.319 +return for improving that aspect of Gal Emacs. + +00:09:37.320 --> 00:09:54.079 +Let's see, I see SICL mentioned here, as well as SPCL. And it + +00:09:54.080 --> 00:09:56.919 +could certainly help with the implementation of + +00:09:56.920 --> 00:10:01.519 +Commonwealth and Guile, because a lot of the basic stuff is + +00:10:01.520 --> 00:10:05.559 +just providing a new interface to some bit of + +00:10:05.560 --> 00:10:08.879 +functionality. Like the sequence library, it's mostly + +00:10:08.880 --> 00:10:13.279 +stuff that we already have through SR5 and so on. The + +00:10:13.280 --> 00:10:16.879 +difficult, well, not the difficult but the time consuming + +00:10:16.880 --> 00:10:21.599 +parts are going to be all the little DSL sitcom on this path + +00:10:21.600 --> 00:10:26.999 +packed up inside it like pretty printing format loop and so + +00:10:27.000 --> 00:10:32.359 +on. It's for those high-level features that I think we could + +00:10:32.360 --> 00:10:34.959 +potentially share code with other Common Lisp + +00:10:34.960 --> 00:10:39.039 +implementations. And Common Lisp implementations do tend + +00:10:39.040 --> 00:10:43.239 +to be permissively licensed, SPCL's public domain, for + +00:10:43.240 --> 00:10:46.439 +example, so there's no barrier to sharing code with them. + +NOTE Q: Do you know if the Emacs maintainers are interested in switching to Guile as the engine for Emacs Lisp? + +00:10:46.440 --> 00:10:52.719 +There's another question about whether the Emacs + +00:10:52.720 --> 00:10:55.679 +maintainers are interested in switching to Guile as the + +00:10:55.680 --> 00:10:59.199 +engine for Emacs Lisp. I can't speak for the current + +00:10:59.200 --> 00:11:05.439 +maintainers. I can say that people have talked to previous + +00:11:05.440 --> 00:11:10.439 +Emacs maintainers about the whole idea, and their attitude + +00:11:10.440 --> 00:11:15.479 +was generally cautiously optimistic. As in, it's not + +00:11:15.480 --> 00:11:18.799 +something they, it's somewhat political, they didn't want + +00:11:18.800 --> 00:11:23.479 +to get into it, but they didn't think that it was a bad idea, + +00:11:23.480 --> 00:11:25.919 +and they wanted to know more about how it might evolve in the + +00:11:25.920 --> 00:11:31.879 +future. I can comment that Eli Zaretsky, who I believe is the + +00:11:31.880 --> 00:11:36.879 +current Emacs maintainer, is very concerned about + +00:11:36.880 --> 00:11:44.679 +cross-platform compatibility. And so if I can guess at his + +00:11:44.680 --> 00:11:48.519 +priorities correctly, I think that that's something that + +00:11:48.520 --> 00:11:52.599 +we'll have to make sure is rock solid before we propose any + +00:11:52.600 --> 00:11:58.359 +kind of upstreaming of Gala Emacs. but in general + +00:11:58.360 --> 00:12:03.719 +maintainers have been cautious but curious. So I just + +00:12:03.720 --> 00:12:06.719 +wanted to break in and note at this point that as lives I + +00:12:06.720 --> 00:12:09.519 +didn't sorry I couldn't do so more gracefully while we were + +00:12:09.520 --> 00:12:13.439 +still on stream but I wanted to let you know that just as of 10 + +00:12:13.440 --> 00:12:17.399 +seconds ago or so we've had to cut away into our next talk but + +00:12:17.400 --> 00:12:22.199 +we can keep going here as long as we like. Okay, let's wrap up. + +00:12:22.200 --> 00:12:25.399 +There's only a couple questions left on the pad, so I'll + +00:12:25.400 --> 00:12:29.999 +answer those, and then I'll be available on IRC. So, the next + +NOTE Q: Do you think guile-emacs will be able to use or (collaborate with) some of the other awesome projects around Emacs Lisp? + +00:12:30.000 --> 00:12:33.319 +question is whether Guile Emacs will be able to collaborate + +00:12:33.320 --> 00:12:35.959 +with projects like Gypsum and + +00:12:35.960 --> 00:12:44.319 +the native compilation projects or the pre-scheme + +00:12:44.320 --> 00:12:48.039 +efforts. Oh, yes, that is one of the things I forgot to bring + +00:12:48.040 --> 00:12:53.199 +up in my talk. So, first of all, Gypsum is approaching a + +00:12:53.200 --> 00:12:58.199 +similar idea from a different direction. And we clearly + +00:12:58.200 --> 00:13:03.919 +have a different focus. My focus is on improving Emacs Lisp + +00:13:03.920 --> 00:13:09.279 +and making Emacs itself better by integrating Guile Elisp + +00:13:09.280 --> 00:13:15.159 +and Emacs, rather than replacing eLisp or deprecating it in + +00:13:15.160 --> 00:13:20.159 +any way. But given gypsum's requirements, I do think that we + +00:13:20.160 --> 00:13:26.439 +could share a lot of code required for emulating basic Emacs + +00:13:26.440 --> 00:13:29.839 +functionality. And this could even become interesting if + +00:13:29.840 --> 00:13:35.799 +we get to the point of rewriting parts of Emacs in Lisp. With + +00:13:35.800 --> 00:13:41.279 +respect to the native compilation effort, I'm familiar + +00:13:41.280 --> 00:13:45.879 +with it. I'm not that impressed with the results of it. It's a + +00:13:45.880 --> 00:13:52.359 +very impressive effort, but as far as I can tell, it's + +00:13:52.360 --> 00:13:57.239 +accelerating a bytecode interpreter that just simply has + +00:13:57.240 --> 00:14:02.719 +an out-of-date design, to be quite blunt. It's possible + +00:14:02.720 --> 00:14:08.919 +that Emacs's JIT has ideas that Guile should adopt, like + +00:14:08.920 --> 00:14:14.039 +perhaps libgccjit might perhaps be better than GNU + +00:14:14.040 --> 00:14:16.999 +Lightning, which is a relatively simple JIT that Guile + +00:14:17.000 --> 00:14:17.639 +uses. + +00:14:17.640 --> 00:14:25.839 +But it doesn't have to have a direct relationship to Guile + +00:14:25.840 --> 00:14:31.159 +Emacs. And as far as pre-scheme goes, I have been watching + +00:14:31.160 --> 00:14:36.199 +Flat Watson's work on pre-scheme with great interest + +00:14:36.200 --> 00:14:39.999 +because Scheme 48 used to be my favorite implementation. + +00:14:40.000 --> 00:14:44.919 +And I do think that it could be, it's a tool that we should look + +00:14:44.920 --> 00:14:47.879 +at when we're thinking about moving functionality into + +00:14:47.880 --> 00:14:53.199 +Lisp and could certainly make it easier to upstream some of + +00:14:53.200 --> 00:14:54.519 +the work we may end up doing. + +00:14:54.520 --> 00:15:04.199 +All right, do we have more questions? + +NOTE Q: SBCL, ...You mentioned Robert Strandh's SICL along with SBCL---does that work help with the implementation of CL in Guile? + +00:15:04.200 --> 00:15:13.159 +There's a question about SICL and SBCL. I think I answered + +00:15:13.160 --> 00:15:17.519 +that earlier. It should help us implement Common Lisp when + +00:15:17.520 --> 00:15:24.999 +it comes to high-level features and the various large + +00:15:25.000 --> 00:15:28.759 +subcomponents of Common Lisp. Another important factor is + +00:15:28.760 --> 00:15:32.279 +that Guile already has decent support for the Common Lisp + +00:15:32.280 --> 00:15:35.799 +object system. Without that, it would be far more + +00:15:35.800 --> 00:15:41.919 +difficult. But I do expect that we can share code with other + +00:15:41.920 --> 00:15:44.799 +Common Lisp implementations. I've personally rated + +00:15:44.800 --> 00:15:49.199 +Common Lisp compiler code when working on Guile Hoot, for + +00:15:49.200 --> 00:15:52.959 +example. So there are definitely places where they can + +00:15:52.960 --> 00:15:54.039 +contribute. + +00:15:54.040 --> 00:16:02.839 +Regarding the Hoot project and its relationship to + +00:16:02.840 --> 00:16:11.079 +Galimax, it's a purely speculative thing. First of all, + +00:16:11.080 --> 00:16:17.079 +Hoot is only tested on Scheme-to-WebAssembly + +00:16:17.080 --> 00:16:22.599 +compilations. I've heard some suggestions that some uses + +00:16:22.600 --> 00:16:26.439 +of Tree.io may not be compatible with the Hoot compiler. I'm + +00:16:26.440 --> 00:16:29.999 +not sure if that's the case or not. + +00:16:30.000 --> 00:16:41.199 +But it is a complete enough project that if Emacs is, say, 90% + +00:16:41.200 --> 00:16:45.119 +Lisp, there's only a few thousand lines of C code to + +00:16:45.120 --> 00:16:49.159 +implement, then it would be entirely practical to compile + +00:16:49.160 --> 00:16:54.159 +Emacs WebAssembly, as long as we had a back end, like one + +00:16:54.160 --> 00:16:58.119 +based on the browser's document object model, or some sort + +00:16:58.120 --> 00:17:04.439 +of graphical interface through WASI. And that may have some + +00:17:04.440 --> 00:17:07.359 +interesting applications for portability to unusual + +00:17:07.360 --> 00:17:11.359 +platforms. It may even bring performance advantages in + +00:17:11.360 --> 00:17:18.959 +cases where the WebAssembly implementation is connected + +00:17:18.960 --> 00:17:22.759 +to a tracing just-in-time compiler, because that may be + +00:17:22.760 --> 00:17:26.839 +more appropriate to the high level of dynamism the Emacs + +00:17:26.840 --> 00:17:32.439 +list has than the kind of simple template JITs that both + +00:17:32.440 --> 00:17:34.519 +Emacs and Guile are using. + +00:17:34.520 --> 00:17:39.799 +What a fascinating point. Just to break into active + +00:17:39.800 --> 00:17:43.999 +listening a little so this doesn't, to you, feel like you're + +00:17:44.000 --> 00:17:46.919 +talking to yourself. I can see from chat and the questions + +00:17:46.920 --> 00:17:51.439 +still coming in, you know, comments. You know, it isn't, but + +00:17:51.440 --> 00:17:54.999 +I just want you to be able to hear and feel that. Yeah, great, + +00:17:55.000 --> 00:18:00.679 +great point there. All right. Thank you. And yes, if there + +00:18:00.680 --> 00:18:04.679 +are more questions, keep throwing them at me. I should + +00:18:04.680 --> 00:18:07.999 +probably also mention I will have to jump out myself, but the + +00:18:08.000 --> 00:18:10.799 +recording will automatically end when we all jump out or + +00:18:10.800 --> 00:18:15.199 +just drop a note anywhere, ping me, whatever. And I'll come + +00:18:15.200 --> 00:18:18.439 +along and shut off the recording and we'll trim it up before + +00:18:18.440 --> 00:18:21.879 +we publish it. I'm looking forward to reading through + +00:18:21.880 --> 00:18:30.199 +anything I do miss. Thank you. Sounds good. + +00:18:30.200 --> 00:19:08.439 +All right, I'm not seeing changes in the etherpad. So I'm + +00:19:08.440 --> 00:19:14.999 +going to close this in maybe 30 seconds if there are no more + +00:19:15.000 --> 00:19:21.159 +additions. Thanks, everyone, for the interesting and very + +00:19:21.160 --> 00:19:26.399 +pointed questions on some of the most significant areas. I + +00:19:26.400 --> 00:19:31.919 +appreciate everyone's feedback. I'm glad this provoked so + +00:19:31.920 --> 00:19:33.679 +much curiosity in people. + +00:19:33.680 --> 00:19:44.519 +Thank you, janneke. + +00:19:44.520 --> 00:19:51.439 +All right, I think we are done with the Q&A session, so I'm + +00:19:51.440 --> 00:19:57.199 +going to close this BBB and we can continue with the rest of + +00:19:57.200 --> 00:19:58.719 +EmacsConf. + +00:19:58.720 --> 00:20:10.160 +You are currently the only person in this conference. diff --git a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt new file mode 100644 index 00000000..35cf8ccd --- /dev/null +++ b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt @@ -0,0 +1,808 @@ +WEBVTT captioned by anush, checked by robin + +00:00.000 --> 00:03.066 +Hello everyone. I'm Robin Templeton, + +00:03.083 --> 00:05.750 +and I'm going to talk about Emacs Beguiled + +00:05.766 --> 00:13.866 +and recent progress on the Guile-Emacs project. + +00:13.883 --> 00:16.433 +First of all, if you're not familiar with Guile, + +00:16.450 --> 00:19.716 +it's an implementation of the Scheme programming language, + +00:19.733 --> 00:22.150 +which is a dialect of Lisp, + +00:22.166 --> 00:24.550 +and in the same family as Emacs Lisp, + +00:24.566 --> 00:28.150 +and Guile is GNU's official extension language. + +00:28.166 --> 00:30.400 +The goal of the Guile-Emacs project + +00:30.400 --> 00:34.950 +is to use Guile as the basis for Emacs's Lisp support. + +00:34.966 --> 00:37.116 +It has two main components: + +00:37.133 --> 00:41.033 +a new Emacs Lisp compiler built on top of Guile, + +00:41.050 --> 00:42.550 +and a variant of Emacs + +00:42.566 --> 00:45.316 +in which the built-in Lisp implementation + +00:45.333 --> 00:49.716 +is entirely replaced with Guile Elisp. + +00:49.733 --> 00:52.800 +We expect the combination of these two projects + +00:52.800 --> 00:57.350 +to have several benefits. One is improved performance. + +00:57.366 --> 01:00.200 +Another is increased expressiveness for Elisp + +01:00.200 --> 01:04.350 +and making it easier to extend + +01:04.366 --> 01:07.200 +and experiment with the language. + +01:07.200 --> 01:08.550 +Finally, it will reduce + +01:08.566 --> 01:12.316 +Emacs's reliance on C for two reasons. + +01:12.333 --> 01:16.316 +Guile will be responsible for the language implementation, + +01:16.333 --> 01:21.350 +so Emacs will no longer have to include a Lisp interpreter. + +01:21.366 --> 01:23.200 +It will also become possible + +01:23.200 --> 01:25.666 +to implement much more of Emacs in Lisp + +01:25.683 --> 01:29.233 +than is currently feasible. + +01:29.250 --> 01:31.116 +Of course, this raises the question of + +01:31.133 --> 01:34.033 +why Guile is suitable for this project. + +01:34.050 --> 01:36.666 +And we chose Guile for a few reasons. + +01:36.683 --> 01:39.400 +Guile is primarily a Scheme implementation, + +01:39.400 --> 01:42.150 +but it also has built-in support for multiple languages + +01:42.166 --> 01:43.466 +using its compiler tower. + +01:43.483 --> 01:46.866 +To add support for a new language to Guile, + +01:46.883 --> 01:50.066 +you only have to write a compiler + +01:50.083 --> 01:52.550 +from the source language to Tree-IL, + +01:52.566 --> 01:55.800 +which is essentially a low-level, + +01:55.800 --> 01:58.866 +minimal representation of Scheme. + +01:58.883 --> 02:01.800 +All of Guile's compiler optimizations + +02:01.800 --> 02:04.433 +occur at the Tree-IL layer or lower, + +02:04.450 --> 02:06.033 +so you don't need to worry + +02:06.050 --> 02:09.633 +about the lower-level details of the compiler + +02:09.650 --> 02:12.350 +when initially implementing your language. + +02:12.366 --> 02:14.633 +Guile also has some Lisp features + +02:14.650 --> 02:18.316 +that are very rare in Scheme implementations. + +02:18.333 --> 02:20.033 +For example, it has a nil value + +02:20.050 --> 02:23.916 +that counts as both false and an empty list, + +02:23.933 --> 02:25.633 +just like in Elisp, + +02:25.650 --> 02:30.466 +and it also has a version of the Common Lisp Object System + +02:30.483 --> 02:37.200 +and its metaobject protocol, which is called GOOPS. + +02:37.200 --> 02:40.150 +The idea of Guile-Emacs has a pretty long history, + +02:40.166 --> 02:43.866 +going back at least three decades. + +02:43.883 --> 02:44.550 +There have been about + +02:44.566 --> 02:48.000 +half a dozen previous implementation attempts. + +02:48.000 --> 02:49.950 +But the current iteration began with + +02:49.966 --> 02:52.866 +a series of six Summer of Code internships: + +02:52.883 --> 02:56.033 +Daniel Kraft's in 2009, + +02:56.050 --> 03:01.200 +and then my internships from 2010 to 2014. + +03:01.200 --> 03:03.000 +My basic implementation strategy + +03:03.000 --> 03:05.316 +was pretty straightforward. + +03:05.333 --> 03:07.466 +I implemented a core subset of Elisp, + +03:07.483 --> 03:10.400 +which was enough to run some batch mode programs + +03:10.400 --> 03:12.833 +outside of Emacs. + +03:12.850 --> 03:15.266 +In Emacs, I modified the garbage collector + +03:15.283 --> 03:18.600 +and the data structures for Lisp objects + +03:18.600 --> 03:23.033 +to use their libguile equivalents. + +03:23.050 --> 03:26.950 +I replaced Emacs' Lisp evaluator + +03:26.966 --> 03:32.200 +with the one provided by Guile Elisp. + +03:32.200 --> 03:34.033 +After a little over a year of work, + +03:34.050 --> 03:37.950 +at the end of the 2014 internship, + +03:37.966 --> 03:44.316 +I ended up with a fully functional prototype of Guile-Emacs. + +03:44.333 --> 03:48.916 +It used Guile Elisp alone as its Lisp implementation + +03:48.933 --> 03:53.916 +and was completely compatible with Emacs functionality + +03:53.933 --> 03:56.716 +and with external extensions. + +03:56.733 --> 03:59.433 +One caveat was that performance was pretty bad, + +03:59.450 --> 04:03.033 +because I was focused on correctness, + +04:03.050 --> 04:07.600 +as well as ease of integration with the Emacs C code. + +04:07.600 --> 04:11.550 +But it was nonetheless a major milestone for the project. + +04:11.566 --> 04:19.600 +Let's take just a moment to look at Guile-Elisp. + +04:19.600 --> 04:23.233 +For starters, we have access to Guile modules. + +04:23.250 --> 04:25.116 +If we call Guile's <i>version</i> function, + +04:25.133 --> 04:30.516 +we can see that we're running under Guile 3.0. + +04:30.533 --> 04:33.233 +We have access to some of the numeric tower + +04:33.250 --> 04:39.516 +via the arithmetic functions. We also have multiple values. + +04:39.533 --> 04:43.950 +We have to be careful to use Guile's <i>values</i> procedure here, + +04:43.966 --> 04:46.666 +not the CL library's, + +04:46.683 --> 04:48.833 +but you can see that this works properly + +04:48.850 --> 04:51.550 +rather than being an emulation. + +04:51.566 --> 04:54.033 +Finally, we have tail call elimination. + +04:54.050 --> 05:02.866 +Naturally, we're going to use factorial to demonstrate it. + +05:02.883 --> 05:05.633 +If <i>n</i> is zero, return the answer, + +05:05.650 --> 05:14.266 +else recurse with <i>n</i> less one and <i>n</i> times <i>a</i>. + +05:14.283 --> 05:16.150 +Of course, this definition works correctly, + +05:16.166 --> 05:18.950 +but it gets more interesting + +05:18.966 --> 00:05:25.000 +if we communicate the answer with an error, + +00:05:25.100 --> 05:29.633 +in order to look at a backtrace. + +05:29.650 --> 05:32.350 +You can see here that there are + +05:32.366 --> 05:35.516 +no calls to <i>fact</i> visible in between + +05:35.533 --> 05:37.833 +the request to evaluate + +05:37.850 --> 05:42.200 +and the error communicating the answer. + +05:42.200 --> 05:44.200 +That's because this tail call + +05:44.200 --> 05:48.350 +has been optimized into effectively a goto. + +05:48.366 --> 05:54.916 +This is essential for any kind + +05:54.933 --> 00:05:59.916 +of serious functional programming. + +00:06:00.116 --> 06:03.033 +That's a peek at Guile-Elisp. + +06:03.050 --> 06:08.066 +In 2015, I left university to go work on web technologies, + +06:08.083 --> 06:11.316 +and the project was dormant for a very long time. + +06:11.333 --> 06:13.433 +But that's been changing recently. + +06:13.450 --> 06:16.066 +During the last few months, + +06:16.083 --> 06:17.633 +I've been working with Larry Valkama + +06:17.650 --> 06:20.716 +to rebase Guile-Emacs + +06:20.733 --> 06:24.833 +onto the development branch of upstream Emacs, + +06:24.850 --> 06:29.666 +including the past decade's worth of upstream development. + +06:29.683 --> 00:06:33.967 +What we've ended up with is a series of + +00:06:34.267 --> 00:06:37.550 +rebases onto different versions of Emacs. + +06:37.566 --> 06:39.516 +The older ones tend to work pretty well. + +06:39.533 --> 06:46.866 +The newer ones have increasingly bad problems + +06:46.883 --> 06:49.800 +where they haven't been properly adjusted + +06:49.800 --> 06:52.200 +for changes in the Emacs implementation. + +06:52.200 --> 06:56.833 +But we do have by now a version of Emacs 30 + +06:56.850 --> 06:57.800 +which boots correctly + +06:57.800 --> 06:59.833 +and can be used for interactive debugging, + +06:59.850 --> 07:06.150 +as well as the ability to bisect the revisions of Emacs + +07:06.166 --> 07:10.516 +and find out where regressions were introduced. + +07:10.533 --> 07:14.033 +Our immediate goal is of course to complete the rebase. + +07:14.050 --> 07:16.233 +At the same time, + +07:16.250 --> 07:20.633 +we want to improve Guile Elisp's performance + +07:20.650 --> 07:24.350 +to at least be competitive with ordinary Emacs Lisp. + +07:24.366 --> 07:29.266 +Just to characterize the performance situation, + +07:29.283 --> 07:32.750 +Guile Elisp is usually about half + +07:32.766 --> 07:34.466 +as fast as ordinary Elisp, + +07:34.483 --> 07:37.833 +while Guile Scheme is quite often + +07:37.850 --> 00:07:41.250 +an order of magnitude faster than ordinary Elisp, + +00:07:41.350 --> 07:43.916 +and that's based on micro benchmarks + +07:43.933 --> 00:07:46.133 +like the Gabriel benchmarks. + +00:07:46.233 --> 00:07:50.900 +But there's clearly a lot of room + +00:07:50.900 --> 00:07:53.150 +to improve our compiler's output. + +00:07:53.350 --> 07:56.633 +If you want to mark your calendars, + +07:56.650 --> 08:00.150 +we're expecting to have a usable version of Guile-Emacs 30 + +08:00.166 --> 00:08:03.016 +out sometime next spring. + +00:08:03.116 --> 08:05.433 +We're also going to put some effort + +08:05.450 --> 00:08:09.000 +into either extracting old work + +00:08:09.100 --> 08:12.600 +or doing new work that could be contributed upstream. + +08:12.600 --> 00:08:16.650 +On the Guile side, we'll probably start out with + +00:08:16.750 --> 00:08:21.033 +optimizing the dynamic binding facilities, + +00:08:21.233 --> 08:23.433 +which are used very seldom in Scheme, + +08:23.450 --> 08:27.833 +but are used all the time in traditional Lisp dialects. + +08:27.850 --> 08:31.400 +On the Emacs side, we'll be working initially + +08:31.400 --> 08:35.316 +on abstracting away the details of the Lisp implementation + +08:35.333 --> 00:08:37.433 +where they're not relevant. + +00:08:37.533 --> 08:40.716 +And that will clean up the Emacs code base a bit. + +08:40.733 --> 08:45.000 +It'll make it easier to integrate Emacs and Guile Elisp. + +08:45.000 --> 08:47.916 +It will probably be helpful for anyone + +08:47.933 --> 08:51.550 +who is working on ordinary Elisp on their own. + +08:51.566 --> 08:57.200 +We're also going to be adding new features to Emacs Lisp. + +08:57.200 --> 08:59.316 +We've seen a few of them already. + +08:59.333 --> 09:02.633 +The numeric tower, tail call optimization, + +09:02.650 --> 09:04.550 +Common Lisp compatibility. + +09:04.566 --> 09:07.950 +We're also going to provide access to Fibers, + +09:07.966 --> 09:12.466 +which is a Guile library based on ideas from Concurrent ML + +09:12.483 --> 09:15.716 +that provides much more powerful facilities + +09:15.733 --> 09:18.266 +for concurrent and parallel programming + +09:18.283 --> 00:09:24.566 +than what Emacs currently offers. + +00:09:24.666 --> 09:32.233 +This plan meets Guile-Emacs' basic goals, + +09:32.250 --> 09:36.316 +and it's work that we could maybe get integrated upstream + +09:36.333 --> 00:09:38.100 +in a reasonable amount of time. + +00:09:38.200 --> 00:09:42.500 +But it's also worth considering what more we can do, + +00:09:42.600 --> 09:46.600 +and what effect Guile-Emacs might have on Emacs + +09:46.600 --> 00:09:50.566 +if it becomes simply Emacs. + +00:09:50.666 --> 09:54.033 +For context, the amount of C code in Emacs + +09:54.050 --> 09:57.400 +has increased by around 50% in the last decade, + +09:57.400 --> 09:59.950 +and now it constitutes around a quarter of the code base. + +09:59.966 --> 10:06.400 +C can be a bit of a barrier + +10:06.400 --> 00:10:10.900 +to customizing and extending Emacs. + +00:10:11.000 --> 10:15.516 +For example, there are about 1500 C subroutines. + +10:15.533 --> 10:19.633 +Around 500 are used in C code, + +10:19.650 --> 10:23.150 +as well as available to Lisp code, + +10:23.166 --> 10:25.800 +and being written in C means + +10:25.800 --> 10:28.066 +that they can't be practically redefined. + +10:28.083 --> 10:34.433 +The use of C can become a barrier to extending Emacs + +10:34.450 --> 10:36.233 +or customizing its behavior. + +10:36.250 --> 10:39.200 +We might consider writing + +10:39.200 --> 00:10:42.816 +as much of Emacs as possible in Lisp. + +00:10:42.916 --> 10:46.033 +One way to speed up this process + +10:46.050 --> 10:49.400 +would be to provide a Common Lisp implementation for Guile. + +10:49.400 --> 10:54.833 +Note that between Guile Elisp and Guile Scheme, + +10:54.850 --> 10:57.516 +we have all of the essential ingredients + +10:57.533 --> 11:03.200 +for a Common Lisp environment. We can also share code + +11:03.200 --> 00:11:06.016 +with other Common Lisp implementations + +11:06.016 --> 11:10.200 +such as SBCL and SICL. + +11:10.200 --> 11:13.800 +Overall, the duration of the project + +11:13.800 --> 11:16.916 +will be better measured in months rather than years, + +11:16.933 --> 11:19.466 +despite Common Lisp's reputation + +11:19.483 --> 00:11:21.116 +for being a large language. + +00:11:21.216 --> 11:24.466 +This could have multiple uses, of course. + +11:24.483 --> 11:29.633 +It could be a model for future improvements to Elisp, + +11:29.650 --> 11:34.866 +because Elisp and CL can interact directly without problems. + +11:34.883 --> 11:38.400 +And it would be very easy for Elisp + +11:38.400 --> 11:41.466 +to borrow language features from Common Lisp. + +11:41.483 --> 11:46.600 +But for the purpose of a C to Lisp transition, + +11:46.600 --> 11:50.066 +it would also provide us with instant access + +11:50.083 --> 11:52.600 +to a huge number of high-quality libraries + +11:52.600 --> 11:54.833 +for things that + +11:54.850 --> 11:58.116 +Guile is not necessarily equipped to deal with, + +11:58.133 --> 12:01.350 +such as access to low-level Windows APIs, + +12:01.366 --> 12:05.150 +as well as lots of other libraries, + +12:05.166 --> 12:10.000 +such as interfaces to GUI toolkits + +12:10.000 --> 00:12:13.766 +for a variety of operating systems. + +00:12:13.866 --> 12:20.550 +At a certain point, this has technical advantages. + +12:20.566 --> 00:12:24.216 +If most of Emacs is written in Lisp, + +00:12:24.216 --> 12:27.233 +then we could consider using Guile Hoot + +12:27.250 --> 12:29.666 +to compile Emacs to WebAssembly, + +12:29.683 --> 12:33.200 +making it available perhaps in web browsers + +12:33.200 --> 12:37.233 +or on systems with the WebAssembly System Interface. + +12:37.250 --> 12:41.266 +But it would also be a great victory + +12:41.283 --> 12:43.033 +for practical software freedom. + +12:43.050 --> 12:45.866 +That's the idea that Freedom One, + +12:45.883 --> 12:48.350 +the freedom to study and modify programs, + +12:48.366 --> 12:51.633 +should not just be legally and technically possible, + +12:51.650 --> 12:53.316 +but should be actively encouraged + +12:53.333 --> 12:57.066 +by our computing environments. + +12:57.083 --> 13:00.116 +Emacs is really one of the archetypal examples of this, + +13:00.133 --> 00:13:03.116 +but we can and should go further. + +00:13:03.216 --> 13:08.400 +When Emacs is implemented primarily in Lisp, + +13:08.400 --> 13:11.466 +the entirety of the system + +13:11.483 --> 13:14.600 +will be transparent to examination + +13:14.600 --> 13:16.066 +and open to modification. + +13:16.083 --> 13:21.200 +Every part of Emacs will be instantaneously inspectable, + +13:21.200 --> 00:13:24.916 +redefinable, and debuggable. + +00:13:25.016 --> 13:28.266 +This will be a fundamental change + +13:28.283 --> 13:32.800 +in what is possible to do with Emacs extensions. + +13:32.800 --> 13:37.000 +For example, one experiment I'd be interested in + +13:37.000 --> 13:40.316 +is using the Common Lisp Interface Manager + +13:40.333 --> 13:43.233 +as the basis for Emacs's user interface. + +13:43.250 --> 13:48.516 +Screwlisp is giving a talk about McCLIM later today, + +13:48.533 --> 13:53.233 +but for present purposes, + +13:53.250 --> 13:55.633 +just think of it as a super-powered version + +13:55.650 --> 13:58.350 +of Emacs's concept of interactive functions. + +13:58.366 --> 14:02.800 +It would be a pretty long-term project + +14:02.800 --> 14:04.800 +in Emacs as it currently exists, + +14:04.800 --> 14:06.600 +but it would be almost trivial + +14:06.600 --> 14:12.633 +if Emacs were customizable at the lowest layers via Lisp. + +14:12.650 --> 14:19.150 +We'll certainly be looking at the practicality + +14:19.166 --> 14:20.950 +of these kinds of changes + +14:20.966 --> 00:14:25.033 +as we continue developing Guile-Emacs. + +00:14:25.133 --> 00:14:29.933 +Finally, how can you get involved + +00:14:30.033 --> 00:14:32.400 +with and support Guile Emacs? + +00:14:32.500 --> 14:35.316 +One way to help is just by trying it out + +14:35.333 --> 00:14:37.716 +and letting us know what your experiences are like. + +00:14:37.816 --> 14:41.466 +There will be a snapshot available + +14:41.483 --> 00:14:44.166 +on the Codeberg project site + +00:14:44.266 --> 14:47.000 +of the version that I'm using to give this presentation. + +14:47.000 --> 14:51.116 +It will be available both as a Guix package + +14:51.133 --> 14:55.916 +and as a portable tarball. This will be more interesting + +14:55.933 --> 00:15:00.266 +as we get closer to a complete rebase. + +00:15:00.366 --> 15:06.516 +We're also always happy to talk to potential contributors + +15:06.533 --> 00:15:12.100 +or potential collaborators from other projects. + +00:15:12.200 --> 15:16.433 +We can always use bug reports, + +15:16.450 --> 15:18.866 +and we're interested in what kind of features + +15:18.883 --> 15:21.716 +people actually want to see in Guile-Emacs. + +15:21.733 --> 00:15:25.200 +Guile-Emacs is also being developed + +00:15:25.300 --> 00:15:27.816 +by a small worker cooperative, + +00:15:27.916 --> 00:15:33.100 +so donations are a pretty direct way to support the project. + +00:15:33.200 --> 15:37.150 +If you do nothing else, I recommend going to the website + +15:37.166 --> 15:40.716 +and subscribing to our mailing lists + +15:40.733 --> 15:45.600 +so that you can keep up with news on the project. + +15:45.600 --> 15:47.316 +If you're watching this at EmacsConf, + +15:47.333 --> 15:50.466 +there will be a Q&A session immediately following this, + +15:50.483 --> 15:57.066 +and thanks for watching! diff --git a/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt new file mode 100644 index 00000000..7c2708d9 --- /dev/null +++ b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt @@ -0,0 +1,725 @@ +WEBVTT + +00:00:00.000 --> 00:00:02.999 +...Troy Hinckley's project that I'm talking about. I was going + +00:00:03.000 --> 00:00:08.799 +to mention this in my presentation, but it's possible, + +00:00:08.800 --> 00:00:16.359 +theoretically, that Troy Hinckley, his project could be + +00:00:16.360 --> 00:00:18.559 +used as a scheme of limitation that actually runs my own + +00:00:18.560 --> 00:00:23.759 +version of Emacs. And although, you know, This is + +00:00:23.760 --> 00:00:30.719 +completely theoretical, and I don't know how difficult + +00:00:30.720 --> 00:00:34.079 +that would be. But if Troy Hinckley implemented enough of + +00:00:34.080 --> 00:00:39.879 +the R7-RS standard in Rust, it would theoretically be + +00:00:39.880 --> 00:00:46.719 +possible to run the Gypsum editor in Troy Hinckley's own + +00:00:46.720 --> 00:00:50.239 +editor. I thought that was kind of interesting, and I + +00:00:50.240 --> 00:00:59.119 +thought it was worth mentioning, at least in the questions + +00:00:59.120 --> 00:01:12.159 +and answers. + +00:01:12.160 --> 00:01:16.199 +I also mentioned this in the presentation. I wanted to see + +00:01:16.200 --> 00:01:20.119 +Robin Templeton's project presentation, but + +00:01:20.120 --> 00:01:22.399 +unfortunately it's going to be at like four in the morning + +00:01:22.400 --> 00:01:26.239 +for me. So I'm going to try and watch that tomorrow, but + +00:01:26.240 --> 00:01:29.559 +that's also going to be a very interesting project to keep an + +00:01:29.560 --> 00:01:34.039 +eye on if you're interested in Scheme. That's the project + +00:01:34.040 --> 00:01:37.519 +where you've got the Guylain interpreter running inside of + +00:01:37.520 --> 00:02:04.679 +the Emacs process. It's dynamically linked as a library. + +00:02:04.680 --> 00:02:08.759 +I'm ready for questions from anybody. You can ask or you can + +00:02:08.760 --> 00:02:32.079 +type. It's up to you. + +00:02:32.080 --> 00:02:37.319 +Okay, let me check the etherpad. + +00:02:37.320 --> 00:02:41.159 +Let's see here. + +00:02:41.160 --> 00:02:42.719 +I'm not sure if I'm doing that right. + +00:02:42.720 --> 00:02:54.199 +Let me check one more time. Oh, there it goes. + +00:02:54.200 --> 00:03:00.079 +Let's see, so this is... + +00:03:00.080 --> 00:03:02.239 +I didn't know about that first bit of history. Oh, I've heard + +00:03:02.240 --> 00:03:06.119 +RMS say that Scheme Guile is just a nicer Lisp, but I didn't + +00:03:06.120 --> 00:03:09.079 +know there were concrete talks attempts to use Guile for + +00:03:09.080 --> 00:03:14.319 +Emacs that early. Let's see, that was from janneke. + +NOTE Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff? + +00:03:14.320 --> 00:03:17.439 +I'm curious to know how the hell Guile Emacs deals with all the + +00:03:17.440 --> 00:03:21.359 +dynamically scoped modules out there. Is there any effort + +00:03:21.360 --> 00:03:29.759 +to automatically modularize and name? Let's see. + +00:03:29.760 --> 00:03:40.919 +That might be a better question for Robin Templeton. In my + +00:03:40.920 --> 00:03:44.639 +own project, + +00:03:44.640 --> 00:03:49.399 +there's no module system for Emacs Lisp. There is a module + +00:03:49.400 --> 00:03:55.559 +system for Scheme. And the Emacs Lisp interpreter runs in + +00:03:55.560 --> 00:04:01.599 +its own environment. the require system or whatever module + +00:04:01.600 --> 00:04:06.359 +system that Emacs has, once it's implemented, all of that + +00:04:06.360 --> 00:04:09.759 +would just happen inside of the Emacs Lisp environment, + +00:04:09.760 --> 00:04:12.399 +which is inside of the Scheme environment. And + +00:04:12.400 --> 00:04:21.479 +environments are objects in Scheme. + +00:04:21.480 --> 00:04:26.399 +I think a more difficult question is how to handle + +00:04:26.400 --> 00:04:33.279 +threading, and Scheme has very good threading built in, in + +00:04:33.280 --> 00:04:34.839 +Serphe-18[??]. + +00:04:34.840 --> 00:04:43.399 +But I don't think it will be easy to write Emacs Lisp form + +00:04:43.400 --> 00:04:48.479 +bindings to the Scheme multi-threading implementation. + +00:04:48.480 --> 00:04:52.279 +Emacs Lisp was just not cut out for that kind of thing. So I + +00:04:52.280 --> 00:04:56.559 +think each Emacs Lisp, you could, I suppose, have multiple + +00:04:56.560 --> 00:05:00.039 +threads each running their own Emacs Lisp environment. + +00:05:00.040 --> 00:05:04.999 +Scheme would make that very simple to do. + +00:05:05.000 --> 00:05:08.759 +And then there'd just be a question of how you would get those + +00:05:08.760 --> 00:05:11.679 +different interpreters to communicate with each other, + +00:05:11.680 --> 00:05:16.279 +perhaps using the same protocol that's used by the Emacs + +00:05:16.280 --> 00:05:23.639 +server. But I haven't thought that far ahead yet. + +NOTE Q: Would it be possible to support a GUI toolkit other than GTK? + +00:05:23.640 --> 00:05:26.839 +Would it be possible to support a GUI toolkit other than the + +00:05:26.840 --> 00:05:31.319 +GTK? Like, how is it still supports Lucid? Yes, this is + +00:05:31.320 --> 00:05:36.999 +absolutely a goal of the project. I'm trying to keep the back + +00:05:37.000 --> 00:05:41.599 +end separate as possible. The scheme has what you call + +00:05:41.600 --> 00:05:45.239 +parameters. And these are like global variables that are + +00:05:45.240 --> 00:05:50.519 +still somewhat thread safe. And every call to the GUI goes + +00:05:50.520 --> 00:05:58.199 +through a parameter. So the Emacs, the interpreter and the + +00:05:58.200 --> 00:06:01.679 +editor logic is all in one module. And then that module calls + +00:06:01.680 --> 00:06:06.319 +out into a separate GUI module. And then you can implement + +00:06:06.320 --> 00:06:11.599 +different GUI modules. So you could have one for GTK3, one + +00:06:11.600 --> 00:06:16.879 +for GTK4, if you want to write the extern C bindings around Qt + +00:06:16.880 --> 00:06:21.199 +or full tick, that would certainly be possible as well. It + +00:06:21.200 --> 00:06:25.919 +would be nice maybe to have an SDL implementation based + +00:06:25.920 --> 00:06:30.999 +maybe on Chikiti or some kind of immediate mode GUI, + +00:06:31.000 --> 00:06:37.399 +something like that. But definitely GTK3 through Guile GI + +00:06:37.400 --> 00:06:41.319 +is the reference implementation. Things start there. But + +00:06:41.320 --> 00:06:43.999 +I'm very interested in supporting other GUIs, yes. Let's + +00:06:44.000 --> 00:06:46.039 +see. + +NOTE Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme? + +00:06:46.040 --> 00:06:50.759 +Question, do you plan to provide improvements to ELisp + +00:06:50.760 --> 00:06:54.519 +as a language or focus on a compatibility layer to + +00:06:54.520 --> 00:06:57.999 +facilitate all new extensions in Scheme? Yeah, the second + +00:06:58.000 --> 00:07:04.719 +one. I want to move off to Scheme. I would like for this + +00:07:04.720 --> 00:07:08.999 +project to try and keep up to date with each new release of + +00:07:09.000 --> 00:07:13.799 +Emacs and Emacs Lisp. That's a difficult moving target to + +00:07:13.800 --> 00:07:18.639 +follow, I realize. But to the greatest extent possible, any + +00:07:18.640 --> 00:07:25.239 +new features to Emacs Lisp will be pulled in from GNU Emacs. + +00:07:25.240 --> 00:07:28.599 +If we happen to be able to implement something cool in + +00:07:28.600 --> 00:07:31.639 +Scheme, and be able to port it over to Emacs Lisp, then sure, + +00:07:31.640 --> 00:07:35.799 +it'd be nice to be able to upload or to submit that upstream to + +00:07:35.800 --> 00:07:43.079 +the GNU Emacs. But I think I would prefer to have new features + +00:07:43.080 --> 00:07:47.799 +written in Scheme. I would like this gypsum to be more of a + +00:07:47.800 --> 00:07:51.479 +Scheme app platform that just happens to be able to also run + +00:07:51.480 --> 00:07:56.199 +Emacs Lisp. That's how I see it. Of course, this will be a + +00:07:56.200 --> 00:08:00.799 +community project. I'm open to debate about that if anybody + +00:08:00.800 --> 00:08:02.079 +wants to convince me otherwise. + +00:08:02.080 --> 00:08:11.759 +Why is being able to interpret all of that EL a useful goal? + +00:08:11.760 --> 00:08:15.519 +Sure, there is a lot of code written in Elisp. Can we + +00:08:15.520 --> 00:08:18.959 +consider... Oh, it's still being written. Please go ahead + +00:08:18.960 --> 00:08:19.439 +and finish writing. + +NOTE Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality? + +00:08:19.440 --> 00:08:32.519 +Can we consider a translator like utility to convert eLisp + +00:08:32.520 --> 00:08:37.519 +to Scheme once Guile-Emacs has become a reality? + +00:08:37.520 --> 00:08:42.119 +Certainly. For the time being, I just wanted to get the + +00:08:42.120 --> 00:08:47.559 +interpreter running. So the actual, the Guile-Emacs Lisp, + +00:08:47.560 --> 00:08:51.919 +the one that was written in 2011 that I didn't write, that + +00:08:51.920 --> 00:08:57.599 +actually does compile to, I think it's the tree + +00:08:57.600 --> 00:08:59.239 +intermediate representation It's one of the intermediate + +00:08:59.240 --> 00:09:03.759 +languages that Guile uses to compile Guile scheme itself. + +00:09:03.760 --> 00:09:09.079 +So the Emacs lisp that was written before actually does + +00:09:09.080 --> 00:09:13.119 +that. It actually compiles and makes use of the entire Guile + +00:09:13.120 --> 00:09:17.479 +compiler tool chain and actually produces like JIT + +00:09:17.480 --> 00:09:21.719 +compilable binaries, which is really cool. Like I said, + +00:09:21.720 --> 00:09:27.519 +that's the one that I had trouble getting to work properly. + +00:09:27.520 --> 00:09:34.399 +Maybe we can follow that architecture. I'm not sure how to do + +00:09:34.400 --> 00:09:37.919 +that, but I would like to be able to do some kind of + +00:09:37.920 --> 00:09:41.999 +translating, keeping in mind that we want to have this be + +00:09:42.000 --> 00:09:48.919 +portable, do various schemes. And so Guile makes this very + +00:09:48.920 --> 00:09:52.719 +easy, but other schemes don't. Gambit might do this pretty + +00:09:52.720 --> 00:09:57.919 +well as well. It compiles to C and then compiles C down to a + +00:09:57.920 --> 00:10:06.159 +dynamically linkable library. So yeah, I think probably + +00:10:06.160 --> 00:10:09.559 +the most portable, I'm just thinking out loud right now, + +00:10:09.560 --> 00:10:13.239 +most portable implementation will just be able to + +00:10:13.240 --> 00:10:17.119 +translate Emacs Lisp directly to Scheme, which is not what + +00:10:17.120 --> 00:10:22.439 +the old Guile Emacs Lisp implementation does. That goes to + +00:10:22.440 --> 00:10:26.439 +TreeIL, so it's very, very Guile-specific, can't be + +00:10:26.440 --> 00:10:30.799 +ported. But yeah, if we could somehow get Emacs Lisp + +00:10:30.800 --> 00:10:36.999 +translated to Scheme and then compiled, say, in Shea Scheme + +00:10:37.000 --> 00:10:40.879 +or Gambit or MIT Scheme or one of those other compilers, that + +00:10:40.880 --> 00:10:44.919 +would be very cool. And I would absolutely love to do that. + +00:10:44.920 --> 00:10:49.279 +And I would very quickly accept any code into the code base + +00:10:49.280 --> 00:10:50.599 +that would do that. + +NOTE Q: Why is being able to interpret all of \`init.el\` an useful goal? + +00:10:50.600 --> 00:10:59.119 +Oh, and to answer the question about init.el, + +00:10:59.120 --> 00:11:02.839 +It's just because people spend a lot of time on their configs + +00:11:02.840 --> 00:11:06.959 +and it would be nice if, you know, you're starting to use this + +00:11:06.960 --> 00:11:14.079 +new editor and want it to be similar to Emacs users, just the + +00:11:14.080 --> 00:11:16.519 +Emacs community in general and people who are familiar with + +00:11:16.520 --> 00:11:20.879 +using Emacs. It would be more useful to everybody in the + +00:11:20.880 --> 00:11:25.119 +Emacs community if this were more compatible with GNU + +00:11:25.120 --> 00:11:35.999 +Emacs. And so that's why that's, I think that's an important + +00:11:36.000 --> 00:11:38.559 +goal. + +00:11:38.560 --> 00:12:01.839 +Question is not yet. Great. Oh, here comes another + +00:12:01.840 --> 00:12:02.279 +question. + +NOTE Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)? + +00:12:02.280 --> 00:12:11.879 +Okay, what is the plan to handle elisp packages that depend + +00:12:11.880 --> 00:12:16.119 +on third-party or external libraries like git or magit + +00:12:16.120 --> 00:12:22.719 +or ripgrep? So that's going to be tricky. It depends on how + +00:12:22.720 --> 00:12:27.079 +these external packages are linked into emacs. If it's + +00:12:27.080 --> 00:12:32.879 +going to be a dynamic library like Robin Templeton's + +00:12:32.880 --> 00:12:38.039 +project which you load the libgit library into the Emacs + +00:12:38.040 --> 00:12:43.159 +process, that is going to be extremely difficult. So if you + +00:12:43.160 --> 00:12:49.359 +have an external library like, I don't know, libgit or + +00:12:49.360 --> 00:12:59.279 +what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo + +00:12:59.280 --> 00:13:01.439 +to do SVG graphics and so on. + +00:13:01.440 --> 00:13:09.719 +You can do that very easily with Guile, but then on top of + +00:13:09.720 --> 00:13:14.719 +that, implementing Emacs list bindings to it, I mean, + +00:13:14.720 --> 00:13:17.199 +you've got two layers there, and that makes things pretty + +00:13:17.200 --> 00:13:23.119 +difficult. So it's possible. And to some degree, maybe + +00:13:23.120 --> 00:13:27.799 +necessary for example, Cairo, if we want to do SVG graphics + +00:13:27.800 --> 00:13:30.599 +the way that Emacs Lisp does, we're going to have to have + +00:13:30.600 --> 00:13:33.959 +that. So that would be necessary. We would have to have those + +00:13:33.960 --> 00:13:39.199 +two layers. Yes, let's do that. But if it's like for Magit, + +00:13:39.200 --> 00:13:45.479 +you can just call out to your git process, and then you're + +00:13:45.480 --> 00:13:50.719 +just using the regular process APIs that Emacs Lisp has. And + +00:13:50.720 --> 00:13:57.119 +that can be, already we, like Guile has some very good + +00:13:57.120 --> 00:14:08.079 +implementations for process management. And so it would + +00:14:08.080 --> 00:14:12.439 +just be a matter of wrapping up those in the Emacs lisp form + +00:14:12.440 --> 00:14:24.919 +bindings. So yeah, dynamic libraries, I wanna try to avoid. + +00:14:24.920 --> 00:14:32.799 +And I would prefer to do things more through, you know, + +00:14:32.800 --> 00:14:40.399 +launching a child process in the Emacs process. and then + +00:14:40.400 --> 00:14:47.239 +communicating over the standard in, standard out + +00:14:47.240 --> 00:14:47.959 +channels. + +00:14:47.960 --> 00:14:52.799 +That's the easier way to do things, I think, because then you + +00:14:52.800 --> 00:14:58.519 +can just use the process library that Emacs already has, and + +00:14:58.520 --> 00:15:03.239 +you can just reuse all of that code. + +00:15:03.240 --> 00:15:09.079 +I'm not sure how ripgrep works, unfortunately, but I + +00:15:09.080 --> 00:15:15.279 +believe that's also a process, a child process. So, we can + +00:15:15.280 --> 00:15:23.479 +just reuse all of the Emacs Lisp code that does that already. + +00:15:23.480 --> 00:15:30.399 +We just need to make sure that the process management + +00:15:30.400 --> 00:15:35.119 +implementation and scheme is properly bound to Emacs Lisp, + +00:15:35.120 --> 00:15:43.359 +and it works the same as GNU Emacs does. Once that's all set, + +00:15:43.360 --> 00:15:48.399 +then these porcelains, like around git, should fall into + +00:15:48.400 --> 00:15:55.279 +place. without too much difficulty, hopefully. + +NOTE Q: Not really a question, but how about Schemacs as a name? + +00:15:55.280 --> 00:15:59.199 +How about Schemax as a name? I like the name. I like that name. + +00:15:59.200 --> 00:16:03.119 +I haven't really looked into like, is that already used or is + +00:16:03.120 --> 00:16:09.759 +that going to be confusing? But certainly something we can + +00:16:09.760 --> 00:16:10.959 +discuss. + +00:16:10.960 --> 00:16:13.039 +Another thing I should mention, + +00:16:13.040 --> 00:16:18.759 +I should probably set up a server or something like Discord + +00:16:18.760 --> 00:16:25.359 +or something like that. Discourse, not Discord. + +00:16:25.360 --> 00:16:31.599 +Discourse, the open source one, where we could actually + +00:16:31.600 --> 00:16:49.239 +chat about this stuff. For the time being, ActivityPub, + +00:16:49.240 --> 00:16:52.399 +mostly Mastodon, is how I communicate with people in real + +00:16:52.400 --> 00:16:57.279 +time, that or email. So if you want to get a hold of me, check + +00:16:57.280 --> 00:17:02.439 +the notes for this presentation and just send me an email. + +00:17:02.440 --> 00:17:09.039 +Any question at all is fine. If you want to contribute code, + +00:17:09.040 --> 00:17:12.799 +if you want to just learn how to contribute code, send me any + +00:17:12.800 --> 00:17:22.199 +questions. It's fine. I'm happy to answer them. And we can + +00:17:22.200 --> 00:17:25.879 +talk about the name as well. + +NOTE Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile? + +00:17:25.880 --> 00:17:30.239 +Okay, why is it not feasible for the Emacs layer that + +00:17:30.240 --> 00:17:34.319 +interprets Emacs Lisp, the core in C, have a Scheme + +00:17:34.320 --> 00:17:39.799 +interpreter instead of using Guile? Let's see, I have to, + +00:17:39.800 --> 00:17:48.799 +okay. Emacs layer interprets Emacs Lisp, the core in C, have + +00:17:48.800 --> 00:17:54.079 +a Scheme interpreter instead of using Guile. Okay, so that, + +00:17:54.080 --> 00:17:59.959 +the question xlarsx is asking, xlars, x, So Lars is asking, + +00:17:59.960 --> 00:18:02.319 +is it not feasible for there to be an + +00:18:02.320 --> 00:18:06.839 +Emacs layer that interprets Emacs Lisp have a scheme + +00:18:06.840 --> 00:18:33.079 +interpreter? This is Robin Templeton's project. And + +00:18:33.080 --> 00:18:39.839 +they're presenting later today. So check the roster and be + +00:18:39.840 --> 00:18:45.199 +sure to see that presentation because that's exactly what + +00:18:45.200 --> 00:18:52.119 +Robin Templeton is doing. That's not what I'm doing though. + +00:18:52.120 --> 00:18:57.239 +I'm trying to create something in Scheme. But yes, there is + +00:18:57.240 --> 00:19:02.959 +an attempt to get an Scheme interpreter to run inside of + +00:19:02.960 --> 00:19:07.159 +Emacs itself. And it has its own method of binding to Emacs + +00:19:07.160 --> 00:19:11.199 +Lisp functions and translating data like Lisp structures + +00:19:11.200 --> 00:19:14.439 +between Guile Scheme and Emacs Lisp. Robin will explain all + +00:19:14.440 --> 00:19:15.799 +of that in their presentation. + +00:19:15.800 --> 00:19:18.919 +OK, I think I've got through all the questions on Etherpad. + +00:19:18.920 --> 00:19:23.879 +But I'm going to hang out here for a bit longer. And yeah, feel + +00:19:23.880 --> 00:19:28.239 +free to do a video chat with me or send me more questions on + +00:19:28.240 --> 00:19:33.839 +Etherpad or here in the big blue button. And so I'm just going + +00:19:33.840 --> 00:21:49.119 +to hang out. And thanks for asking all your questions. And + +00:21:49.120 --> 00:21:50.839 +yeah, I look forward to working with all of you if you're + +00:21:50.840 --> 00:21:51.799 +interested. take it easy. Thanks so much for the talk and + +00:21:51.800 --> 00:21:53.199 +looking forward to seeing some of your progress as this + +00:21:53.200 --> 00:21:54.359 +moves forward, exciting space. We'll go ahead and leave the + +00:21:54.360 --> 00:21:54.879 +room open for you and thanks for offering to hang out and chat + +00:21:54.880 --> 00:21:55.639 +with other people that come by. Feel free to throw something + +00:21:55.640 --> 00:21:56.719 +in the chat if you want to remind people you're still here. + +00:21:56.720 --> 00:21:57.919 +Meanwhile, on the stream, we have moved along to our next + +00:21:57.920 --> 00:21:59.599 +talk on Rust, and that is just getting started. But again, + +00:21:59.600 --> 00:22:00.479 +we're continuing to record this, and I'll just keep an eye on + +00:22:00.480 --> 00:22:01.239 +it to stop the recording. Thank you. Thank you. It was + +00:22:01.240 --> 00:22:01.559 +awesome. + +00:22:01.560 --> 00:22:03.959 +So it seems like it's slowed down here for the Q&A. I don't see + +00:22:03.960 --> 00:22:05.439 +anybody else on BBB, so I'm going to go ahead and stop the + +00:22:05.440 --> 00:22:08.479 +recording. We can start it back up. I would say, yes, there's + +00:22:08.480 --> 00:22:09.519 +a lot of things you can do with this. You can handle + +00:22:09.520 --> 00:22:11.239 +processing. Yeah, I'm going to try and join over the chat for + +00:22:11.240 --> 00:22:14.679 +the next talk. I'm not sure if I can do both big blue buttons at + +00:22:14.680 --> 00:22:15.759 +the same time. You should be able to just watch your mute + +00:22:15.760 --> 00:22:19.159 +settings and mute tab settings and whatever all you have to + +00:22:19.160 --> 00:23:37.800 +avoid bleed through. Okay. diff --git a/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt new file mode 100644 index 00000000..6d214518 --- /dev/null +++ b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt @@ -0,0 +1,1108 @@ +WEBVTT timed by sachac, captioned by ramin + +00:00:00.000 --> 00:00:02.780 +Hi, my name is Ramin Honary, + +00:00:02.781 --> 00:00:04.480 +and I'm here to talk to you today + +00:00:04.481 --> 00:00:08.940 +about my clone of Emacs and Emacs Lisp that I've written in + +00:00:08.941 --> 00:00:12.980 +Scheme so far. + +00:00:12.981 --> 00:00:19.102 +So I am an Emacs enthusiast since 2017, + +00:00:19.103 --> 00:00:22.664 +currently employed as a full stack developer, + +00:00:22.665 --> 00:00:25.225 +mostly working with Python and JavaScript, + +00:00:25.226 --> 00:00:27.079 +although my true love is functional + +00:00:27.080 --> 00:00:30.559 +programming, especially Haskell, and Scheme. I started + +00:00:30.560 --> 00:00:33.679 +learning Scheme about two years ago. And for the past year, + +00:00:33.680 --> 00:00:36.279 +I've been working on a project that I'm tentatively calling + +00:00:36.280 --> 00:00:40.794 +Gypsum. Naming things is hard. It's not a great name. + +00:00:40.795 --> 00:00:43.376 +I'm open to suggestions. + +00:00:43.377 --> 00:00:45.897 +But yes, this is the project in which + +00:00:45.898 --> 00:00:53.319 +I am trying to write an Emacs Lisp interpreter in Scheme. + +00:00:53.320 --> 00:00:58.199 +There are many clones already of Emacs. You've probably + +00:00:58.200 --> 00:01:04.799 +heard of Edwin, Jed, Jedit, Jove, Lem, MG, Yi, Zile. Edwin + +00:01:04.800 --> 00:01:10.519 +itself is also written in Scheme--MIT Scheme. These only + +00:01:10.520 --> 00:01:16.159 +clone the key bindings of Emacs and not Emacs Lisp itself. + +00:01:16.160 --> 00:01:21.199 +The only alternative to GNU Emacs that I'm aware of is + +00:01:21.200 --> 00:01:26.679 +XEmacs, which is a fork of GNU Emacs. + +00:01:26.680 --> 00:01:30.359 +Most people don't use Emacs for the key bindings. I mean, + +00:01:30.360 --> 00:01:34.039 +this is anecdotally speaking, but the people who I've + +00:01:34.040 --> 00:01:39.519 +talked to, I would say don't use Emacs for the key bindings. + +00:01:39.520 --> 00:01:42.679 +They use it really more because of the power of Emacs Lisp. + +00:01:42.680 --> 00:01:48.439 +Emacs is as powerful as any system shell, perhaps even more + +00:01:48.440 --> 00:01:53.105 +powerful than system shells like Bash. + +00:01:53.106 --> 00:01:55.207 +The reason why it's so powerful is because + +00:01:55.208 --> 00:01:56.959 +there's a good programming language + +00:01:56.960 --> 00:02:00.039 +which you can use to control everything on your system. You + +00:02:00.040 --> 00:02:01.732 +can control processes. You can load and save files. + +00:02:01.733 --> 00:02:06.416 +You can create files. You can configure things. + +00:02:06.417 --> 00:02:10.219 +You can capture the output of processes in buffers. + +00:02:10.220 --> 00:02:13.421 +You can filter text through buffers. + +00:02:13.422 --> 00:02:17.839 +And a good programming language is what + +00:02:17.840 --> 00:02:23.479 +you need in order to do all of this. So one big goal of this + +00:02:23.480 --> 00:02:29.239 +project is to try to stick as closely as possible to the R7RS + +00:02:29.240 --> 00:02:33.859 +standard Scheme definition. That is the latest Scheme + +00:02:33.860 --> 00:02:38.919 +standard: R7. And this is just because I want my project to + +00:02:38.920 --> 00:02:43.519 +work on many scheme implementations, not just Guile. + +00:02:43.520 --> 00:02:45.499 +Although Guile certainly is the reference + +00:02:45.500 --> 00:02:50.239 +implementation. + +00:02:50.240 --> 00:02:56.459 +So another goal is to be able to run any "init.el". + +00:02:56.460 --> 00:02:59.740 +So you can take your existing "init.el" + +00:02:59.741 --> 00:03:01.720 +and run it in my program without + +00:03:01.721 --> 00:03:05.340 +significant changes. That's one of my goals in the end. + +00:03:05.341 --> 00:03:07.315 +I should be able to do that. + +00:03:07.316 --> 00:03:09.119 +A lot of people invest significant + +00:03:09.120 --> 00:03:12.717 +time in their configs, and it's kind of disruptive + +00:03:12.718 --> 00:03:14.300 +if you want to change editors, + +00:03:14.301 --> 00:03:16.500 +not be able to use your Emacs Lisp + +00:03:16.501 --> 00:03:21.646 +config. And so I think a useful Emacs clone + +00:03:21.647 --> 00:03:25.127 +would be able to clone Emacs Lisp well enough + +00:03:25.128 --> 00:03:29.799 +that you can run your "init.el". + +00:03:29.800 --> 00:03:33.879 +And so overall, why am I doing this? It's just because I like + +00:03:33.880 --> 00:03:37.999 +the Scheme programming language. I love its simplicity and + +00:03:38.000 --> 00:03:42.439 +its power. It's an extremely well thought-out language. + +00:03:42.440 --> 00:03:46.159 +It's one of those languages where you can understand the + +00:03:46.160 --> 00:03:48.739 +entire language from top to bottom. You can read the entire + +00:03:48.740 --> 00:03:52.879 +specification and understand it yourself. + +00:03:52.880 --> 00:03:57.239 +It's like the computers I grew up with when I was a kid. + +00:03:57.240 --> 00:03:59.319 +They were all very simple computers + +00:03:59.320 --> 00:04:02.559 +in the late 80s, early 90s. And back then, + +00:04:02.560 --> 00:04:05.579 +theoretically, an engineer could understand the entire + +00:04:05.580 --> 00:04:07.959 +system at the software level all the way down to the circuit + +00:04:07.960 --> 00:04:12.159 +level. You can't do that nowadays. And so nowadays, my + +00:04:12.160 --> 00:04:16.859 +computer is not really a physical computer anymore. It's + +00:04:16.860 --> 00:04:21.079 +the Scheme language standard itself. That is the core of + +00:04:21.080 --> 00:04:25.599 +computation, of all of computation for me. And I would like + +00:04:25.600 --> 00:04:30.579 +to use it as more than just an academic curiosity. It was + +00:04:30.580 --> 00:04:36.359 +originally designed for teaching at MIT, but it's found use + +00:04:36.360 --> 00:04:41.399 +in industry. And the R7RS standard is still + +00:04:41.400 --> 00:04:44.270 +relatively new. It's over 10 years old at this point, + +00:04:44.271 --> 00:04:47.999 +but hasn't, I mean, the + +00:04:48.000 --> 00:04:52.980 +Scheme ecosystem itself is already fairly small. + +00:04:52.981 --> 00:04:54.341 +There still, I don't think, + +00:04:54.342 --> 00:04:56.359 +has been a whole lot of adoption of R7RS + +00:04:56.360 --> 00:04:58.785 +quite yet. Kind of a shame. + +00:04:58.786 --> 00:05:01.119 +So I'd like a project like this, a + +00:05:01.120 --> 00:05:04.009 +very large scale, kind of a killer-app-like project + +00:05:04.010 --> 00:05:05.920 +where you're developing a text editor + +00:05:05.921 --> 00:05:09.060 +and perhaps even an integrated development environment + +00:05:09.061 --> 00:05:11.920 +in Scheme, I think would be very useful + +00:05:11.921 --> 00:05:13.799 +just even as a study of, you know, what + +00:05:13.800 --> 00:05:18.461 +can this language do? And just overall, + +00:05:18.462 --> 00:05:21.220 +there seems to be a lot of interest in + +00:05:21.221 --> 00:05:24.320 +Guile-based Emacs and well, maybe a + +00:05:24.321 --> 00:05:27.163 +Scheme-based Emacs, but Guile in particular. + +00:05:27.164 --> 00:05:28.220 +There has been talk of + +00:05:28.221 --> 00:05:33.660 +changing Emacs Lisp or the core of the Emacs Lisp over to + +00:05:33.661 --> 00:05:38.469 +Guile for about 30 years or so, + +00:05:38.470 --> 00:05:41.199 +talks originally in the early + +00:05:41.200 --> 00:05:44.799 +mid 90s. There were discussions between Richard Stallman, + +00:05:44.800 --> 00:05:49.919 +Tom Lord, and Aubrey Jaffer. They considered + +00:05:49.920 --> 00:05:53.219 +actually replacing Emacs Lisp with Scheme. + +00:05:53.220 --> 00:05:56.827 +In 1999, and going for about 10 years, + +00:05:56.828 --> 00:06:01.079 +someone named Ken Raeburn actually started + +00:06:01.080 --> 00:06:07.240 +a project where he started writing Emacs in Guile. + +00:06:07.241 --> 00:06:11.859 +My project is very similar to this. + +00:06:11.860 --> 00:06:15.120 +Here's a quote from his webpage, which is still up, even + +00:06:15.121 --> 00:06:18.399 +though it hasn't been updated in 15 years. + +00:06:18.400 --> 00:06:20.519 +This project that I have started + +00:06:20.520 --> 00:06:23.101 +is for converting GNU Emacs to Guile + +00:06:23.102 --> 00:06:24.121 +as its programming language. + +00:06:24.122 --> 00:06:26.082 +Support for Emacs Lisp will continue to exist, + +00:06:26.083 --> 00:06:27.760 +of course, but it may be through + +00:06:27.761 --> 00:06:29.244 +translation and/or interpretation. + +00:06:29.245 --> 00:06:30.339 +The Lisp engine itself + +00:06:30.340 --> 00:06:32.906 +may no longer be the core of the program. + +00:06:32.907 --> 00:06:38.538 +And this is my goal as well. In 2010, + +00:06:38.539 --> 00:06:41.879 +Andy Wingo and Ludovic Courtes + +00:06:41.880 --> 00:06:46.402 +took maintainership of the Guile project. + +00:06:46.403 --> 00:06:52.719 +From 2009, so while Andy... 2009 + +00:06:52.720 --> 00:06:59.399 +to 2011, the first Emacs Lisp interpreter was already being + +00:06:59.400 --> 00:07:02.089 +implemented in Guile. And even to this day, + +00:07:02.090 --> 00:07:05.651 +this Emacs Lisp interpreter ships with Guile. + +00:07:05.652 --> 00:07:06.599 +And so this was happening + +00:07:06.600 --> 00:07:10.112 +while Andy Wingo took control of the project. + +00:07:10.113 --> 00:07:13.833 +In 2011, so shortly after Andy Wingo + +00:07:13.834 --> 00:07:15.119 +took control of the project, + +00:07:15.120 --> 00:07:22.279 +Guile 2.0 was released. And also in 2011, in the summertime, + +00:07:22.280 --> 00:07:27.279 +someone named Robin Templeton, I believe it was a Google + +00:07:27.280 --> 00:07:33.519 +Summer of Code project, started actually trying to + +00:07:33.520 --> 00:07:38.719 +incorporate libguile, that's the guile interpreter, as a + +00:07:38.720 --> 00:07:45.199 +linkable or loadable library, linking it to the Emacs + +00:07:45.200 --> 00:07:49.179 +executable, and then providing some built-in functions in + +00:07:49.180 --> 00:07:54.759 +Emacs that allows you to call the scheme + +00:07:54.760 --> 00:07:58.739 +interpreter, the Guile Scheme interpreter, from Emacs. + +00:07:58.740 --> 00:08:02.239 +And so it's not like a wrapper around the REPL like Geiser or + +00:08:02.240 --> 00:08:08.959 +SLIME. It's actually the whole Scheme interpreter loaded + +00:08:08.960 --> 00:08:13.939 +into your Emacs process. And that means your Emacs will have + +00:08:13.940 --> 00:08:20.079 +the ability to actually load compiled Scheme programs and + +00:08:20.080 --> 00:08:25.879 +actually run them and share memory with Emacs Lisp + +00:08:25.880 --> 00:08:29.799 +processes. And, well, Robin Templeton will explain all of + +00:08:29.800 --> 00:08:33.039 +this. They're presenting today, and I'm very excited to + +00:08:33.040 --> 00:08:37.079 +actually see their presentation. They'll explain + +00:08:37.080 --> 00:08:40.179 +everything. + +00:08:40.180 --> 00:08:45.679 +So, let's see. Moving on. 2020, someone named Vasilij + +00:08:45.680 --> 00:08:49.039 +Schneidermann, I'm not sure how you pronounce that, published + +00:08:49.040 --> 00:08:53.639 +an overview called The State of Emacs Lisp on Guile. Let's see + +00:08:53.640 --> 00:08:58.399 +if I have that here. Yep, it's this page right here. He goes + +00:08:58.400 --> 00:09:04.879 +into detail about who has done what so far, and what can you do + +00:09:04.880 --> 00:09:09.759 +in Guile with Emacs Lisp so far, and so on. Like, what is the + +00:09:09.760 --> 00:09:12.717 +state of the project overall? + +00:09:12.718 --> 00:09:15.899 +And so (speak of the devil) + +00:09:15.900 --> 00:09:20.960 +(Andy Wingo on social media). + +00:09:20.961 --> 00:09:24.339 +So, 2020 to present. Guile Emacs + +00:09:24.340 --> 00:09:32.071 +is dead? So there's GCC Emacs now. + +00:09:32.072 --> 00:09:35.752 +Emacs Lisp now has its own JIT compiler. + +00:09:35.753 --> 00:09:39.259 +And it seems like over the past few years, + +00:09:39.260 --> 00:09:44.319 +Emacs Lisp has kind of moved off into the direction of + +00:09:44.320 --> 00:09:48.439 +becoming its own programming language in its own right, + +00:09:48.440 --> 00:09:51.839 +and it is decidedly Common Lisp-flavored. It is + +00:09:51.840 --> 00:09:54.166 +very similar to Common Lisp, + +00:09:54.167 --> 00:09:56.519 +and that seems to be the direction + +00:09:56.520 --> 00:10:00.719 +that it's headed now, and I don't know if there's really any + +00:10:00.720 --> 00:10:05.559 +interest anymore amongst the Emacs maintainers of + +00:10:05.560 --> 00:10:09.799 +continuing with a Guile-based Emacs. + +00:10:09.800 --> 00:10:13.319 +But as far as I know, there's still a lot of interest in the + +00:10:13.320 --> 00:10:19.599 +community amongst Scheme and Lisp and Emacs users who are + +00:10:19.600 --> 00:10:24.779 +interested in maybe continuing to try to get Guile to become + +00:10:24.780 --> 00:10:28.079 +the core of Emacs, or if not, you know, what Robin Templeton + +00:10:28.080 --> 00:10:31.639 +has been doing, at least trying to get Guile a + +00:10:31.640 --> 00:10:37.279 +language, a first class supported language in Emacs. So + +00:10:37.280 --> 00:10:39.999 +that's enough talking. Let me just show you what I have so + +00:10:40.000 --> 00:10:45.239 +far. The GUI is barely working, because I have very little + +00:10:45.240 --> 00:10:50.039 +experience with GTK or GObject Introspection. It's very + +00:10:50.040 --> 00:10:53.639 +difficult to debug, so it's very slow to develop. Any crash + +00:10:53.640 --> 00:10:58.199 +at C level produces no stack traces. So far, most of the + +00:10:58.200 --> 00:11:03.199 +crashes that I've experienced are due to simple mistakes + +00:11:03.200 --> 00:11:09.399 +like passing the wrong data type. So, so far, no, not a whole + +00:11:09.400 --> 00:11:14.174 +lot of need for GDB or rebuilding all GTK, glib, + +00:11:14.175 --> 00:11:17.877 +and so on with the debugging symbols. + +00:11:17.878 --> 00:11:19.319 +But yes, still development's been + +00:11:19.320 --> 00:11:25.499 +very slow. I'm learning as I go. I've chosen to use Guile GI as + +00:11:25.500 --> 00:11:30.499 +the foundation for the GUI. Let me just load it up quick here. + +00:11:30.600 --> 00:11:39.899 +"load main-guile.scm". And this will launch the GUI. I also + +00:11:39.900 --> 00:11:44.199 +happen to have a REPL that runs in a separate thread and + +00:11:44.200 --> 00:11:49.759 +submits any form that you type to be evaluated inside of the + +00:11:49.760 --> 00:11:57.079 +running GUI environment. But you can just type stuff. So + +00:11:57.080 --> 00:12:02.903 +"hello world." And of course there is... + +00:12:02.904 --> 00:12:08.059 +as you can see, it's not quite rendering correctly. + +00:12:08.060 --> 00:12:11.090 +This "*Messages*" thing here, + +00:12:11.091 --> 00:12:13.760 +that should be over here, obviously. I haven't been able to + +00:12:13.761 --> 00:12:17.820 +figure out how to get those little details down. But yeah, + +00:12:17.821 --> 00:12:23.215 +you can do M-:, and you get your eval, + +00:12:23.216 --> 00:12:26.637 +and you can just evaluate, like (what's an emacs,) + +00:12:26.638 --> 00:12:29.280 +(or what's a Scheme-specific thing?) + +00:12:29.281 --> 00:12:37.679 +Like "(import (srfi 1))", and + +00:12:37.680 --> 00:12:44.888 +let's see, do "(iota 20)", for example. + +00:12:44.889 --> 00:12:46.780 +And so that is the procedure + +00:12:46.781 --> 00:12:52.900 +that iterates and produces some 20 elements of a + +00:12:52.901 --> 00:12:58.419 +list. Or you can do something like, let's see, + +00:12:58.420 --> 00:13:08.114 +string-append "hello" with space "world". + +00:13:08.115 --> 00:13:10.259 +And you get the result and so on. And, + +00:13:10.260 --> 00:13:13.039 +you know, scheme allows you to return multiple values. So + +00:13:13.040 --> 00:13:14.998 +what I have done here is just + +00:13:14.999 --> 00:13:17.979 +every value is captured in a list + +00:13:17.980 --> 00:13:21.001 +and it prints all of the return values in the list. + +00:13:21.002 --> 00:13:23.462 +So if a procedure returns no values, + +00:13:23.463 --> 00:13:26.144 +you get an empty list. + +00:13:26.145 --> 00:13:29.405 +And that's that. It's still quite buggy. + +00:13:29.406 --> 00:13:31.519 +So like, here's a bug + +00:13:31.520 --> 00:13:37.319 +that I can reproduce fairly consistently. + +00:13:37.320 --> 00:13:41.407 +I can, yeah, if you do... + +00:13:41.408 --> 00:13:46.199 +there seems to be a problem with a + +00:13:46.200 --> 00:13:49.719 +widget being freed too soon, so it will crash. I'm going to + +00:13:49.720 --> 00:13:53.319 +try and solve that, hopefully, before this presentation + +00:13:53.320 --> 00:13:57.109 +goes live. Let's see here. + +00:13:57.110 --> 00:13:59.839 +The Emacs Lisp parser is based on + +00:13:59.840 --> 00:14:04.399 +Guile Emacs Lisp. So the Guile Emacs Lisp interpreter that + +00:14:04.400 --> 00:14:09.039 +ships with Guile, that is what I am using. I've actually + +00:14:09.040 --> 00:14:15.719 +copied and pasted the source code from the Guile source base + +00:14:15.720 --> 00:14:20.639 +into my own project so that I can iterate on it more quickly. + +00:14:20.640 --> 00:14:25.799 +And I've already had to make some modifications to the + +00:14:25.800 --> 00:14:29.899 +Emacs Lisp interpreter in Guile. So here's the evaluator. + +00:14:29.900 --> 00:14:33.079 +I've actually already modified the parser and the lexer a + +00:14:33.080 --> 00:14:37.858 +little bit. And it's at least able to parse + +00:14:37.859 --> 00:14:43.149 +all of the "subr.el" program, the Emacs Lisp program. + +00:14:43.150 --> 00:14:44.599 +It can actually load that, but not + +00:14:44.600 --> 00:14:47.570 +evaluate it, or parse it, but not evaluate it... + +00:14:47.571 --> 00:14:51.719 +Read, not eval. + +00:14:51.720 --> 00:14:53.959 +By the time this goes live, I will have submitted a patch + +00:14:53.960 --> 00:14:57.559 +upstream. And that's another goal of this project, + +00:14:57.560 --> 00:15:01.199 +incidentally, is that anything that we can contribute to + +00:15:01.200 --> 00:15:08.359 +Guile and any built-in functions that we can implement + +00:15:08.360 --> 00:15:10.999 +I would like to, for this project, I would like to try and + +00:15:11.000 --> 00:15:15.679 +contribute upstream to Guile. The Emacs Lisp interpreter + +00:15:15.680 --> 00:15:21.359 +is not working well, unfortunately. So this copy, this is + +00:15:21.360 --> 00:15:29.479 +the copy of the code base (from this commit in particular) + +00:15:29.480 --> 00:15:34.979 +and well, I can't get it working. I can't actually get the + +00:15:34.980 --> 00:15:37.759 +non-copy, the actual built-in version of + +00:15:37.760 --> 00:15:41.211 +the Emacs Lisp interpreter to work properly quite yet. + +00:15:41.212 --> 00:15:47.033 +So let me quick go to, (what is this here?) + +00:15:47.034 --> 00:15:51.879 +Guile Elisp. So suppose you have this + +00:15:51.880 --> 00:15:55.999 +"eval-elisp" procedure here and it takes + +00:15:56.000 --> 00:16:00.639 +an Elisp environment and then it evaluates an expression in that + +00:16:00.640 --> 00:16:03.599 +environment. And evaluates to a value. So this + +00:16:03.600 --> 00:16:05.084 +is the standard way of doing it in Guile. + +00:16:05.085 --> 00:16:06.039 +If you can see here, + +00:16:06.040 --> 00:16:09.946 +you've got this expression, "compile" expression. + +00:16:09.947 --> 00:16:16.859 +This is like "eval". And so actually trying to load this. + +00:16:16.860 --> 00:16:24.672 +So let's do "load gypsum". (Let's see here. This is, no), + +00:16:24.673 --> 00:16:35.759 +I wanted to "import gypsum backend guile Elisp". + +00:16:35.760 --> 00:16:39.039 +And if I actually want to do this... So elisp eval, first of all, + +00:16:39.040 --> 00:16:42.879 +it says it failed because there's an unbound variable + +00:16:42.880 --> 00:16:45.348 +"elisp-eval". Don't know what it's talking about. + +00:16:45.349 --> 00:16:48.229 +There's no such variable in any of my programs. + +00:16:48.230 --> 00:16:51.151 +I have no idea what's going on here. + +00:16:51.152 --> 00:16:59.279 +You can try to run eval elisp on some simple form like + +00:16:59.280 --> 00:17:04.759 +(+ 1 2). And it gives you this exception. This works. + +00:17:04.760 --> 00:17:09.579 +This is the same issue that I have with all of the, + +00:17:09.580 --> 00:17:13.200 +every version of the Emacs Lisp Interpreter in Guile. + +00:17:13.201 --> 00:17:18.751 +I can get it to work with this big ",L" mode. + +00:17:18.752 --> 00:17:21.593 +So I can actually do (+ 1 2) here. + +00:17:21.594 --> 00:17:26.816 +I can do "princ" like here. + +00:17:26.817 --> 00:17:30.119 +That all works fine. It gives me, for some reason, + +00:17:30.120 --> 00:17:34.940 +a stack trace here. + +00:17:34.941 --> 00:17:43.926 +And yeah, so it's a bit, it's not well-documented. + +00:17:43.927 --> 00:17:45.887 +The code base is fairly old. + +00:17:45.888 --> 00:17:50.399 +As I said, it was developed around 2011, + +00:17:50.400 --> 00:17:53.239 +and it's fairly opaque, and I have not been able to figure out + +00:17:53.240 --> 00:17:57.959 +how to get Emacs Lisp in Guile working smoothly. So I have + +00:17:57.960 --> 00:18:04.539 +started writing my own Emacs Lisp interpreter. And, uh, + +00:18:04.540 --> 00:18:13.399 +"gypsum/elisp/eval-tests.scm". + +00:18:13.400 --> 00:18:18.269 +It's, uh, not entirely ready. + +00:18:18.270 --> 00:18:21.695 +I can show you some of the tests at least. + +00:18:21.696 --> 00:18:25.036 +Here is a simple Emacs Lisp program + +00:18:25.037 --> 00:18:25.856 +that you can evaluate. + +00:18:25.857 --> 00:18:31.139 +You got "progn", "setq" a to 3, "setq" b to 5, + +00:18:31.140 --> 00:18:35.839 +"setq" c to the sum of a and b, return c. + +00:18:35.840 --> 00:18:39.059 +And this at least works correctly. + +00:18:39.060 --> 00:18:43.279 +As you can see here, the result is eight. Um, but + +00:18:43.280 --> 00:18:46.520 +the "let*" semantics are not completed yet. + +00:18:46.521 --> 00:18:51.103 +Lots of work left to do there. + +00:18:51.104 --> 00:18:54.464 +So in the time I have left, I guess I can just, + +00:18:54.465 --> 00:18:56.759 +talk a little bit about what my plans + +00:18:56.760 --> 00:18:59.387 +are for the future. + +00:18:59.388 --> 00:19:02.599 +I would like to begin by evaluating or + +00:19:02.600 --> 00:19:06.759 +actually loading the "subr.el" into my Emacs Lisp + +00:19:06.760 --> 00:19:09.639 +interpreter. I actually have tests set up for that as well, + +00:19:09.640 --> 00:19:15.909 +so I can actually select any form I want from "subr.el". + +00:19:15.910 --> 00:19:18.832 +I can just run this through my interpreter + +00:19:18.833 --> 00:19:21.593 +and test to see if everything is working + +00:19:21.594 --> 00:19:28.779 +once I get that far. + +00:19:28.780 --> 00:19:33.239 +And yeah, let me just say that this is my formal appeal to the + +00:19:33.240 --> 00:19:37.799 +community for help on this project. Emacs Lisp has + +00:19:37.800 --> 00:19:41.179 +1,393 built-in functions. + +00:19:41.180 --> 00:19:45.039 +I could never implement that many functions on my own, so if + +00:19:45.040 --> 00:19:47.599 +this project is going to be useful to anybody in any + +00:19:47.600 --> 00:19:51.114 +reasonable amount of time, I'm going to need help. + +00:19:51.115 --> 00:19:53.476 +And I know that there are people out there + +00:19:53.477 --> 00:19:56.398 +who are very interested in a Guile-based Emacs, + +00:19:56.399 --> 00:19:58.999 +and so if you're watching this, + +00:19:59.000 --> 00:20:00.521 +please feel free to contact me + +00:20:00.522 --> 00:20:05.699 +on social media or over e-mail. + +00:20:05.700 --> 00:20:09.647 +My job, the way I see it, is if there's enough interest, + +00:20:09.648 --> 00:20:12.064 +and I do get a lot of people interested in + +00:20:12.065 --> 00:20:13.199 +starting to contribute, + +00:20:13.200 --> 00:20:17.919 +my job will be to document the building and testing process + +00:20:17.920 --> 00:20:21.039 +and make sure that it is as easy as possible to contribute + +00:20:21.040 --> 00:20:24.079 +code to this project. I want to document the system + +00:20:24.080 --> 00:20:27.599 +architecture. I'll write blog posts. I'll do videos on + +00:20:27.600 --> 00:20:31.879 +PeerTube explaining how everything works. And I will + +00:20:31.880 --> 00:20:34.199 +prioritize which built-in functions + +00:20:34.200 --> 00:20:36.462 +I think are probably going to be the most necessary, + +00:20:36.463 --> 00:20:40.878 +the most essential to get the interpreter running, + +00:20:40.879 --> 00:20:42.559 +and then find low-hanging fruit, + +00:20:42.560 --> 00:20:46.519 +functions that are easy for people to implement + +00:20:46.520 --> 00:20:50.845 +as a good introduction to getting them started + +00:20:50.846 --> 00:20:53.947 +on contributing to the project. + +00:20:53.948 --> 00:20:56.679 +And then, of course, I will take + +00:20:56.680 --> 00:21:01.719 +responsibility myself of making sure that we can + +00:21:01.720 --> 00:21:03.774 +get the Elisp interpreter to the point + +00:21:03.775 --> 00:21:09.079 +where it can run the Emacs regression tests. + +00:21:09.080 --> 00:21:13.333 +These are the test suites that are used + +00:21:13.334 --> 00:21:20.359 +to test Emacs Lisp itself in the GNU Emacs code base. And so + +00:21:20.360 --> 00:21:24.559 +ERT is itself written in Emacs Lisp. And so + +00:21:24.560 --> 00:21:27.033 +I think if we implement enough of the built-in functions + +00:21:27.034 --> 00:21:29.933 +to be able to run ERT, + +00:21:29.934 --> 00:21:31.195 +then we can actually start + +00:21:31.196 --> 00:21:33.617 +using the GNU Emacs regression tests + +00:21:33.618 --> 00:21:39.248 +to test our own interpreter, our own Emacs clone. + +00:21:39.249 --> 00:21:41.199 +And of course, I'll make sure that there's at least + +00:21:41.200 --> 00:21:45.833 +one usable GUI. I'm currently working on Guile GI + +00:21:45.834 --> 00:21:51.396 +and GTK. It would be great to have an... + +00:21:51.397 --> 00:21:53.879 +ANSI terminal based... + +00:21:53.880 --> 00:21:58.219 +something that works in your terminal emulator. + +00:21:58.220 --> 00:22:00.283 +And yeah, it would be great if someday soon, + +00:22:00.284 --> 00:22:03.159 +hopefully, we get enough done + +00:22:03.160 --> 00:22:06.094 +that you can actually contribute a patch to this project + +00:22:06.095 --> 00:22:11.778 +from within the Gypsum editor itself. + +00:22:11.779 --> 00:22:13.380 +I was going to do an overview, + +00:22:13.381 --> 00:22:19.679 +but that would be for more of an hour-long presentation. + +00:22:19.680 --> 00:22:22.927 +So I'm out of time. I guess the last thing + +00:22:22.928 --> 00:22:25.449 +I should quickly say is there's no + +00:22:25.450 --> 00:22:27.159 +meta object protocol in this + +00:22:27.160 --> 00:22:29.001 +project. I think that's a little bit too difficult + +00:22:29.002 --> 00:22:30.962 +to port to various scheme implementations. + +00:22:30.963 --> 00:22:33.739 +So I've created a substitute, which I'm + +00:22:33.740 --> 00:22:36.959 +calling "functional lenses", which is inspired by the + +00:22:36.960 --> 00:22:42.059 +Haskell project of the same name. + +00:22:42.060 --> 00:22:47.511 +Everything in this project is based on functional lenses. + +00:22:47.512 --> 00:22:52.603 +Yeah, also a lot a work went into the keymaps data structure. + +00:22:52.604 --> 00:22:55.206 +The point being that I think I have + +00:22:55.207 --> 00:22:58.589 +a pretty good foundation here upon which we can build, + +00:22:58.590 --> 00:23:00.839 +even though there isn't an actual, there isn't + +00:23:00.840 --> 00:23:04.699 +a lot done in the actual prototype itself, not yet anyway, + +00:23:04.700 --> 00:23:08.419 +but I made sure to get the fundamentals down + +00:23:08.420 --> 00:23:11.080 +from the beginning. And so I think we have something + +00:23:11.081 --> 00:23:16.308 +like a solid foundation on which to build. + +00:23:16.309 --> 00:23:21.230 +So, I'm going to conclude it there. + +00:23:21.231 --> 00:23:24.599 +And here's my contact details. Like I said, + +00:23:24.600 --> 00:23:29.319 +this is a project, I'm appealing to the community of all + +00:23:29.320 --> 00:23:31.899 +people who are interested in Guile and Emacs to help + +00:23:31.900 --> 00:23:35.839 +contribute to this project. I see myself as just getting the + +00:23:35.840 --> 00:23:40.600 +ball rolling. Again, taking-off from the work + +00:23:40.601 --> 00:23:46.278 +that Ken Raeburn left behind, with my own + +00:23:46.279 --> 00:23:50.637 +from-the-ground-up implementation. So yeah, + +00:23:50.638 --> 00:23:53.858 +contact me: e-mail, you can take a look at my blog + +00:23:53.859 --> 00:23:57.419 +where I talk about what I have done. + +00:23:57.420 --> 00:24:00.759 +My source code, the code for this project, is up on + +00:24:00.760 --> 00:24:06.139 +Codeberg... The presentation... this + +00:24:06.140 --> 00:24:09.379 +presentation, the home page for this presentation, you + +00:24:09.380 --> 00:24:15.559 +can find more details there. Oh, I'm on + +00:24:15.560 --> 00:24:19.139 +ActivityPub as well, so my handle is + +00:24:19.140 --> 00:24:27.119 +@ramin_hal9001@fe.disroot.org, and I'm on everyday. + +00:24:27.120 --> 00:24:30.939 +So yeah, please feel free to contact me if you're interested, + +00:24:30.940 --> 00:24:35.640 +and thank you for your attention. diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt new file mode 100644 index 00000000..f1425353 --- /dev/null +++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt @@ -0,0 +1,690 @@ +WEBVTT + +00:00:00.000 --> 00:00:12.919 +And I believe we are live. Hi, Mats, how are you doing? Oh, I'm + +00:00:12.920 --> 00:00:17.319 +fine. It's a pleasure to see you again after last year. And I + +00:00:17.320 --> 00:00:20.519 +was trying to think about it. We saw you last year, but didn't + +00:00:20.520 --> 00:00:26.919 +we see you as well in 2022? Yes. This is my third year. Yeah, + +00:00:26.920 --> 00:00:29.559 +well, thank you for being a regular at EmacsConf. It's + +00:00:29.560 --> 00:00:31.919 +always a pleasure to have you chat about hyperbole. + +00:00:31.920 --> 00:00:33.559 +Although I think you're the only one chatting about + +00:00:33.560 --> 00:00:37.159 +hyperbole this year compared to last year. Yes, + +00:00:37.160 --> 00:00:41.879 +unfortunately, that's, yeah, Bob has some family issues. + +00:00:41.880 --> 00:00:45.839 +So yeah, I'm here, but I'm here. Yeah, but we are happy to have + +00:00:45.840 --> 00:00:49.199 +you here. And as I was saying before, I'm not sure if you were, + +00:00:49.200 --> 00:00:52.519 +you had the time to watch the previous talk by Mohsen, you + +00:00:52.520 --> 00:00:56.239 +know, you had, there were plenty of ideas, I think that were + +00:00:56.240 --> 00:00:58.999 +very similar to what Hyperbole is trying to do by having + +00:00:59.000 --> 00:01:04.399 +buttons and having stuff that can be in any other mode that + +00:01:04.400 --> 00:01:08.399 +would allow you to supplement a coding file with extra + +00:01:08.400 --> 00:01:11.879 +information. So the ideas are living on. And even though + +00:01:11.880 --> 00:01:15.239 +hyperbole is one thing, I feel like other packages are also + +00:01:15.240 --> 00:01:17.759 +taking a lot of inspiration for it. So congratulations on + +00:01:17.760 --> 00:01:21.439 +being an inspiration, I suppose. Oh, thanks. + +00:01:21.440 --> 00:01:24.839 +Unfortunately, I have not had any time to watch anything of + +00:01:24.840 --> 00:01:29.759 +the Emacs conference since apparently my life is like every + +00:01:29.760 --> 00:01:33.559 +time it's Emacs conference, I do something else. So I've been + +00:01:33.560 --> 00:01:37.919 +just moving this weekend. So, I'm in a new apartment, but I'm + +00:01:37.920 --> 00:01:42.479 +connected and everything seems to work okay. So, I can't + +00:01:42.480 --> 00:01:45.199 +relate to what we said in any of the other talks, I'm afraid. + +00:01:45.200 --> 00:01:48.199 +So, sorry about that. No, that's okay. No, but that's + +00:01:48.200 --> 00:01:51.559 +completely fine, because you may be able to watch the talks + +00:01:51.560 --> 00:01:54.599 +at any point later on, because I'll remind the viewers that + +00:01:54.600 --> 00:01:57.319 +the talks are currently available on EmacsConf or the + +00:01:57.320 --> 00:02:01.199 +pre-recorded one. And I think we only had one live talk + +00:02:01.200 --> 00:02:04.239 +yesterday. All of them are already available with + +00:02:04.240 --> 00:02:08.039 +subtitles and all the funny stuff that we usually put. So + +00:02:08.040 --> 00:02:11.359 +that's an invitation for people to watch it. All right. So, + +00:02:11.360 --> 00:02:14.439 +Mats, before we start with the questions, I see people in the + +00:02:14.440 --> 00:02:17.959 +process of writing them. Was there anything else you wanted + +00:02:17.960 --> 00:02:21.159 +to add on top of your presentation? Maybe some supplements + +00:02:21.160 --> 00:02:29.039 +or whatnot? No, no. Nothing to add. Right. I mean, this year + +00:02:29.040 --> 00:02:31.519 +was more a bag of tricks, some new stuff that you've + +00:02:31.520 --> 00:02:36.159 +implemented in Hyperbole. And it's fun because I see the UI + +00:02:36.160 --> 00:02:40.159 +that you have for some of those modes. And earlier, you + +00:02:40.160 --> 00:02:42.399 +weren't able to watch those talks, but we were talking a lot + +00:02:42.400 --> 00:02:46.119 +about Transient and about what it allows you to do in terms of + +00:02:46.120 --> 00:02:51.039 +interactivity. I'm actually familiar with Transient. No, + +00:02:51.040 --> 00:02:56.279 +no, no. It's a mode written by Tarsius, so Jonas Bernoulli, + +00:02:56.280 --> 00:03:01.599 +the person behind Magit, and it's a very nice way to create + +00:03:01.600 --> 00:03:06.319 +menus for interactive setups. So, if you are interested in + +00:03:06.320 --> 00:03:10.039 +perhaps augmenting what you currently have with + +00:03:10.040 --> 00:03:12.959 +Hyperbole, it might be nice to look into Transient because I + +00:03:12.960 --> 00:03:16.359 +think this is heading towards eventually being merged into + +00:03:16.360 --> 00:03:18.879 +the core of Emacs. I mean, don't quote me on this. and I'm not + +00:03:18.880 --> 00:03:21.719 +sure how Tarsius feels about it, but because of the + +00:03:21.720 --> 00:03:25.879 +adoption, because Magit obviously uses transient, Org is + +00:03:25.880 --> 00:03:28.839 +trying to make a move towards adopting transient, it feels + +00:03:28.840 --> 00:03:32.479 +like Hyperbole would do well as well to adopt it because it's + +00:03:32.480 --> 00:03:36.799 +starting to become a grammar of general UI at this point. + +00:03:36.800 --> 00:03:40.839 +Yeah, now when you mention it, I remember because I'm a heavy + +00:03:40.840 --> 00:03:47.519 +user of Magic, of course. So I know Transient that way. I know + +00:03:47.520 --> 00:03:50.999 +also that people have been complaining about Hyperbole's + +00:03:51.000 --> 00:03:56.079 +menu system. You know that Hyperbole reach back to + +00:03:56.080 --> 00:04:02.639 +something like 1993, so it has some maybe things that are not + +00:04:02.640 --> 00:04:07.279 +modern in that sense. So we have it on the plate to maybe look + +00:04:07.280 --> 00:04:11.479 +into these things and how we can sort of make things modern, + +00:04:11.480 --> 00:04:16.279 +etc. Sure, but it's completely fine to take your time. You + +00:04:16.280 --> 00:04:19.359 +don't necessarily have to follow the latest fads when it + +00:04:19.360 --> 00:04:24.439 +comes to completion engines or interactive engines like + +00:04:24.440 --> 00:04:26.879 +Transient is. I'm not actually sure how you would call + +00:04:26.880 --> 00:04:31.519 +Transient. Is this a UI maker, an interaction engine? I + +00:04:31.520 --> 00:04:36.559 +don't know. I'll need to ask Tarsius at some point. All + +00:04:36.560 --> 00:04:41.439 +right. Okay. Okay so let's move on to the questions. We've + +00:04:41.440 --> 00:04:45.719 +got a couple of them and for the Q&A we'll have about five + +00:04:45.720 --> 00:04:49.199 +minutes and 30 seconds until we got to lunch. So starting + +00:04:49.200 --> 00:04:51.193 +with the first question. + +NOTE Q: How is the log buffer generated? + +00:04:51.194 --> 00:04:52.679 +How is the log buffer generated in + +00:04:52.680 --> 00:04:56.719 +your presentation? But it's a very quick answer to this. + +00:04:56.720 --> 00:04:59.839 +We recommend at EmacsConf that speakers use the + +00:04:59.840 --> 00:05:02.679 +interaction-log package, which allows you to have a + +00:05:02.680 --> 00:05:07.879 +slightly prettier lossage. Lossage being in Emacs how you + +00:05:07.880 --> 00:05:10.359 +call the comments that you've used. And so if you're + +00:05:10.360 --> 00:05:12.439 +interested in using this for your own presentation, + +00:05:12.440 --> 00:05:17.519 +interaction log, and you'll be able to find it fairly + +00:05:17.520 --> 00:05:18.999 +easily. + +00:05:19.000 --> 00:05:21.050 +Moving to the next question. + +NOTE Q: So, the "select a thing" C-c RET is similar to expand-region? How does it behave in codes (functions, class, ...) + +00:05:21.051 --> 00:05:23.651 +So the selector thing C-c RET + +00:05:23.652 --> 00:05:26.479 +is similar to expand-region. How does it behave in + +00:05:26.480 --> 00:05:31.999 +codes i.e functions or class? + +00:05:32.000 --> 00:05:45.319 +Well I think it behaves exactly the same. I mean in the + +00:05:45.320 --> 00:05:50.079 +In any sort of buffer, it might depend on what + +00:05:50.080 --> 00:05:54.679 +constitutes a word, et cetera, and a sentence in the mood. + +00:05:54.680 --> 00:06:00.799 +That's how I would say it. Right. + +00:06:00.800 --> 00:06:09.279 +I'm just, in that sense, I'm just a user of the function. I + +00:06:09.280 --> 00:06:12.359 +haven't implemented it. I haven't tested it more than that. + +00:06:12.360 --> 00:06:17.959 +We can do this as a demo that you start with maybe select a + +00:06:17.960 --> 00:06:21.999 +small thing and by hitting it over and over again, you select + +00:06:22.000 --> 00:06:26.399 +more and more. Yeah, but it's completely fine sometimes to + +00:06:26.400 --> 00:06:30.199 +merely be a user of something, you know. It's easy. It's a + +00:06:30.200 --> 00:06:33.079 +testament to how amazing Emacs is because everything is + +00:06:33.080 --> 00:06:35.759 +written in Lisp in the background, that as soon as you start + +00:06:35.760 --> 00:06:38.119 +becoming a maintainer of something, you kind of expect it to + +00:06:38.120 --> 00:06:40.639 +just be able to understand everything else. And whilst it's + +00:06:40.640 --> 00:06:43.919 +technically true, the limiter here is the amount of time + +00:06:43.920 --> 00:06:47.199 +that you can invest looking at the definitions, + +00:06:47.200 --> 00:06:50.359 +understanding what they do, and sadly we don't have the time + +00:06:50.360 --> 00:06:53.319 +to do all of this. And especially with Hyperbole, which is + +00:06:53.320 --> 00:06:55.959 +obviously interacting with major modes in something that + +00:06:55.960 --> 00:07:01.239 +is more involved than Org mode, for instance. We do have + +00:07:01.240 --> 00:07:05.879 +another question. So, I know you Hyperbole devs are active + +00:07:05.880 --> 00:07:08.919 +and interested in sharing and interoperating with other + +00:07:08.920 --> 00:07:09.971 +Emacs tools. + +NOTE Q: What is a recent tool that you find exciting to think about using in combination with Hyperbole, or would like to suggest using in combination with it? + +00:07:09.972 --> 00:07:11.839 +What is a recent tool that you find exciting to + +00:07:11.840 --> 00:07:14.799 +think about using in combination with Hyperbole or would + +00:07:14.800 --> 00:07:21.599 +like to suggest using in combination with it? Well, lately + +00:07:21.600 --> 00:07:24.519 +we've been focusing a lot of sort of trying to make Hyperbole + +00:07:24.520 --> 00:07:29.639 +work together with Org Mode and in in a good way so they can + +00:07:29.640 --> 00:07:36.119 +sort of, I mean... The idea with Hyperbole is not to be better + +00:07:36.120 --> 00:07:40.119 +than everything else, but more to be like the glue or spider + +00:07:40.120 --> 00:07:46.349 +that could integrate different modes in a good way together. + +00:07:46.350 --> 00:07:51.359 +So that being top of everything. And Org is a very + +00:07:51.360 --> 00:07:55.559 +popular mode, and there are a lot of sub-modes, or whatever + +00:07:55.560 --> 00:07:59.519 +you can call it, with Org for information management. And we + +00:07:59.520 --> 00:08:03.119 +would want Hyperbole to work together with Org in a good way, + +00:08:03.120 --> 00:08:09.119 +so Org users could benefit from Hyperbole as well. So we put + +00:08:09.120 --> 00:08:13.319 +in some effort in that. But I think there's a lot of way to go. + +00:08:13.320 --> 00:08:17.319 +There's much more that can be done there as well because + +00:08:17.320 --> 00:08:21.559 +different modes can easily compete in a bad way in the + +00:08:21.560 --> 00:08:26.519 +details. So it's a little bit of a tricky thing, especially + +00:08:26.520 --> 00:08:32.839 +like we have this and how probably we have this M-RET + +00:08:32.840 --> 00:08:36.319 +for the action production key and that's also used in many + +00:08:36.320 --> 00:08:40.639 +modes. So we would really, in the best of words, we would like + +00:08:40.640 --> 00:08:46.388 +Emacs to sort of come to some agreement on using of the + +00:08:46.389 --> 00:08:52.759 +M-RET in a good way for modes to sort of be able to work and + +00:08:52.760 --> 00:08:58.119 +live together. Yeah, I mean it's a tough thing to share the + +00:08:58.120 --> 00:09:01.759 +key bindings and the grammar of interaction between + +00:09:01.760 --> 00:09:04.719 +packages because you tell me M-RET, I don't want you + +00:09:04.720 --> 00:09:07.759 +to touch M-RET. For me it's just inserting a new line + +00:09:07.760 --> 00:09:10.639 +and not adding indentation at the start and everyone is + +00:09:10.640 --> 00:09:14.639 +going to have their own you know, feelings and thoughts about + +00:09:14.640 --> 00:09:17.959 +this, so it's really hard to impose any kind of system on + +00:09:17.960 --> 00:09:20.559 +this. But I'm glad to hear that you're looking into + +00:09:20.560 --> 00:09:23.239 +interaction with Org Mode because I remember the questions + +00:09:23.240 --> 00:09:26.359 +we were having on your first conference when people were + +00:09:26.360 --> 00:09:28.959 +asking, oh I'm so glad that you're talking about Hyperbole + +00:09:28.960 --> 00:09:31.719 +because the only way I'm interacting with it is when people + +00:09:31.720 --> 00:09:35.599 +chat about Org Mode and then whenever we had announcements + +00:09:35.600 --> 00:09:39.039 +about Hyperbole, be it on Reddit, be it on Hacker News, + +00:09:39.040 --> 00:09:41.999 +people would say, but don't we already have Org Mode? And we + +00:09:42.000 --> 00:09:44.879 +won't get into the topic again, because I think you've done a + +00:09:44.880 --> 00:09:47.279 +wonderful job of explaining the differences in previous + +00:09:47.280 --> 00:09:51.359 +years. And today, the conference, your talk at the + +00:09:51.360 --> 00:09:54.199 +conference also made it obvious that it's doing something + +00:09:54.200 --> 00:09:58.039 +that Org Mode is not able to do. But ultimately, being able to + +00:09:58.040 --> 00:10:00.254 +interface between the two is something great. + +NOTE On Ihor as the new maintainer for Org Mode + +00:10:00.255 --> 00:10:02.676 +And I kind of wanted to ask you as well the question, + +00:10:02.677 --> 00:10:04.719 +because you haven't + +00:10:04.720 --> 00:10:10.199 +seen the talk, but yesterday we had the announcement that + +00:10:10.200 --> 00:10:13.879 +Ihor Radchenko was becoming the new maintainer of Org Mode. + +00:10:13.880 --> 00:10:18.799 +So obviously, a new maintainer introduces idea of changes + +00:10:18.800 --> 00:10:23.719 +of, you know, philosophy and strategy and all this. Is this + +00:10:23.720 --> 00:10:28.199 +somehow on your end with Hyperbole inspiring you perhaps to + +00:10:28.200 --> 00:10:31.999 +also innovate in a sense to maybe try to change the way some + +00:10:32.000 --> 00:10:32.559 +things are done? + +00:10:32.560 --> 00:10:45.239 +Hmm, tricky question. I know, right? Yeah, no, well, I don't + +00:10:45.240 --> 00:10:46.159 +know. + +00:10:46.160 --> 00:10:52.799 +I don't know if it answers the question, but we have this + +00:10:52.800 --> 00:11:02.919 +idea that we meet and work from our point of view. And then we + +00:11:02.920 --> 00:11:07.679 +pick up maybe details from the outside world. So we're not + +00:11:07.680 --> 00:11:13.079 +heavily looking into what happens in the rest of the world + +00:11:13.080 --> 00:11:17.239 +when it comes to Emacs and personal information + +00:11:17.240 --> 00:11:21.159 +management, etc. But but we do pick up some ideas. + +00:11:21.160 --> 00:11:26.719 +Sometimes. But yeah, we mostly do hacking and then we want to + +00:11:26.720 --> 00:11:31.639 +we meet once a week and work on hyperbole and you know, so + +00:11:31.640 --> 00:11:35.599 +Yeah, that's already very cool. And the reason I'm + +00:11:35.600 --> 00:11:38.799 +mentioning this is not because I know that you are operating + +00:11:38.800 --> 00:11:42.079 +in a little bit of a silo when it comes to all of Hyperbole, but + +00:11:42.080 --> 00:11:45.399 +it's always nice for me personally to see a lot of energy + +00:11:45.400 --> 00:11:49.039 +being brought in by people. Whenever there's a new major + +00:11:49.040 --> 00:11:52.919 +version being published, be it Org Mode or be it Hyperbole, + +00:11:52.920 --> 00:11:55.519 +people are excited. There's a lot of energy in here because + +00:11:55.520 --> 00:11:58.039 +people are chatting about what you're doing. And that's why + +00:11:58.040 --> 00:12:02.399 +I find that people, a new maintenanceship for Org Mode + +00:12:02.400 --> 00:12:05.199 +actually benefits Hyperbole in a way because you get a lot of + +00:12:05.200 --> 00:12:07.559 +excitement, a lot of people thinking and bringing ideas to + +00:12:07.560 --> 00:12:12.279 +the table. And I think it's a prime time to actually try I'm + +00:12:12.280 --> 00:12:14.599 +using the word stealing, but in a very nice way, stealing in + +00:12:14.600 --> 00:12:17.519 +terms of floss, stealing some ideas and trying to see if you + +00:12:17.520 --> 00:12:21.199 +can run with them on your own end. And that's also why I was + +00:12:21.200 --> 00:12:24.479 +suggesting transient, because transient looks like it's + +00:12:24.480 --> 00:12:28.759 +on its path to reach core at some point. And it would be nice if + +00:12:28.760 --> 00:12:31.479 +you had the idea early on to integrate with it, because it + +00:12:31.480 --> 00:12:34.319 +might save you time later on and make your user happy, + +00:12:34.320 --> 00:12:37.319 +because they can find the same grammar between the Git, + +00:12:37.320 --> 00:12:41.639 +between org mode, and between hyperbole. All right. Is + +00:12:41.640 --> 00:12:46.439 +there... I don't think... Yeah, go on, please. Yeah, I just + +00:12:46.440 --> 00:12:49.879 +want to add on that, that, I mean, as an ultimate goal, in the + +00:12:49.880 --> 00:12:56.679 +far distance, we would want sort of Hyperbole or hyperbole + +00:12:56.680 --> 00:13:00.399 +type of functionality be part of the core Emacs. So in that + +00:13:00.400 --> 00:13:06.839 +sense, it's sort of totally sort of okay with us that + +00:13:06.840 --> 00:13:10.599 +different packages steal ideas and try to merge them into + +00:13:10.600 --> 00:13:16.359 +sort of the core system. Yeah. All right, I don't see any more + +00:13:16.360 --> 00:13:19.279 +questions, so I think we can move to close. Actually, we're + +00:13:19.280 --> 00:13:22.439 +actually three minutes over time, so I'm glad we managed to + +00:13:22.440 --> 00:13:24.759 +discuss a little more, but that's fine. Mats, do you have + +00:13:24.760 --> 00:13:31.519 +any last words? I'll try it out. Okay, well, then, you heard + +00:13:31.520 --> 00:13:35.479 +it, everyone. Just try it out. Try it out, and if you like it, + +00:13:35.480 --> 00:13:37.239 +you can join us on Sundays + +00:13:37.240 --> 00:13:41.959 +Right. And every Sunday, well, if you do not know what to do, + +00:13:41.960 --> 00:13:44.919 +you know, here's an idea for you. All right. Thank you so + +00:13:44.920 --> 00:13:47.079 +much, Mats, for coming again to Emacs Conf. And we look + +00:13:47.080 --> 00:13:50.319 +forward, perhaps, to seeing you next year. Yes. I'll be + +00:13:50.320 --> 00:13:55.119 +there. Hopefully, I can see some of the presentations live + +00:13:55.120 --> 00:13:58.399 +then. OK. That's OK. You've got the entire year to catch up on + +00:13:58.400 --> 00:14:01.159 +the ones you haven't seen this year and next year. But you'll + +00:14:01.160 --> 00:14:04.359 +have the time to catch another one live. All right. Yes. + +00:14:04.360 --> 00:14:09.519 +Great! For the folks watching, we will be taking a break, a + +00:14:09.520 --> 00:14:14.039 +one hour and one minute break. We'll be back at 1 p.m. EST and I + +00:14:14.040 --> 00:14:21.479 +think if my UTC conversion is working right, it should be 6 + +00:14:21.480 --> 00:14:24.679 +p.m. UTC, so at least in one hour. All right, see you in a bit + +00:14:24.680 --> 00:14:30.159 +folks! Oh yes, and sorry, I've got a little elf speaking + +00:14:30.160 --> 00:14:32.999 +in my ears. In case you're interested in discussing further + +00:14:33.000 --> 00:14:35.999 +hyperbole with Mats, Mats is in the room right now and I see + +00:14:36.000 --> 00:14:39.919 +people have joined the BBB chat. So if you want to join and + +00:14:39.920 --> 00:14:42.439 +chat directly with Mats, I'm sure Mats would be more than + +00:14:42.440 --> 00:14:44.999 +happy to answer your questions. And obviously everything + +00:14:45.000 --> 00:14:48.239 +has been recorded and will be published later on. But for me, + +00:14:48.240 --> 00:14:54.119 +I will use the break to rest a little bit and I'll be back in the + +00:14:54.120 --> 00:14:59.039 +afternoon. All right, see you folks. Bye, take a break. + +00:14:59.040 --> 00:15:03.160 +Okay. diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt new file mode 100644 index 00000000..f63f8b0c --- /dev/null +++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt @@ -0,0 +1,23 @@ +WEBVTT + + +00:00:00.000 --> 00:00:41.298 +Introduction + +00:00:41.299 --> 00:02:22.839 +The action key and the assist key + +00:02:22.840 --> 00:03:44.599 +Composing an e-mail + +00:03:44.600 --> 00:06:03.410 +Inserting implicit links + +00:06:03.411 --> 00:11:19.719 +Window grid + +00:11:19.720 --> 00:12:33.817 +Select a thing + +00:12:33.818 --> 00:14:09.400 +Web search diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt new file mode 100644 index 00000000..39603c7e --- /dev/null +++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt @@ -0,0 +1,459 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:08.239 +Hi, Emacs Conference. I'm Mats Lidell. I'm the maintainer + +00:00:08.240 --> 00:00:13.399 +of the GNU Hyperbole, together with the author, Bob + +00:00:13.400 --> 00:00:19.759 +Weiner. The title of the talk is Fun Things with GNU + +00:00:19.760 --> 00:00:27.959 +Hyperbole. With that, I intend to cover a different set of + +00:00:27.960 --> 00:00:33.319 +small things that is in the package. So this will not be a + +00:00:33.320 --> 00:00:36.854 +tutorial of Hyperbole. + +00:00:36.855 --> 00:00:41.298 +For that, you have to look for other sources. + +NOTE The action key and the assist key + +00:00:41.299 --> 00:00:45.039 +This is a short talk, so let's get started with + +00:00:45.040 --> 00:00:50.879 +the first thing. We're going to talk about scrolling and + +00:00:50.880 --> 00:00:56.239 +with the subtitle using the end of line. If you're new to + +00:00:56.240 --> 00:00:59.559 +Hyperbole, you need to know about the action key and assist + +00:00:59.560 --> 00:01:06.079 +key. The action key is bound to M-RET and the assist key + +00:01:06.080 --> 00:01:10.279 +is bound by default to M-RET with the prefix argument. + +00:01:10.280 --> 00:01:15.559 +Both of these keys are used for performing actions on + +00:01:15.560 --> 00:01:20.319 +different contexts. In this case, we'll look what + +00:01:20.320 --> 00:01:27.719 +happens when you use it on the end of a line. + +00:01:27.720 --> 00:01:35.439 +I have here the tutorial, the Emacs tutorial, and we see + +00:01:35.440 --> 00:01:40.599 +here a line inserting and deleting. I move there and put the + +00:01:40.600 --> 00:01:45.439 +cursor on the end of the line. I then hit M-RET, the + +00:01:45.440 --> 00:01:53.479 +action key, and it's moved to the top of the window. If I want + +00:01:53.480 --> 00:01:58.919 +to move it to the last row on the window I can press C-u and + +00:01:58.920 --> 00:02:05.879 +then M-RET, so I use the assist key. If I repeatedly hit + +00:02:05.880 --> 00:02:10.399 +M-RET, it will scroll so the first time it moves to the + +00:02:10.400 --> 00:02:16.159 +top of the window, but if I at the top of the window hit + +00:02:16.160 --> 00:02:22.839 +M-RET again it scrolls. + +NOTE Composing an e-mail + +00:02:22.840 --> 00:02:27.799 +Now over to the next thing. + +00:02:27.800 --> 00:02:34.559 +So next thing is to compose an email from an address + +00:02:34.560 --> 00:02:42.599 +of the style of username@domain. Let's look into + +00:02:42.600 --> 00:02:48.359 +that. Here I have entered the file in the Emacs + +00:02:48.360 --> 00:02:54.239 +distribution vc.el. At its top it has a lot of + +00:02:54.240 --> 00:03:01.359 +different email addresses from the contributors. This is, in + +00:03:01.360 --> 00:03:09.199 +principle, a normal text file. By placing the cursor over + +00:03:09.200 --> 00:03:13.519 +one of these addresses and hitting the action key, Hyperbole + +00:03:13.520 --> 00:03:17.839 +identifies that it's an email address and tries to open or + +00:03:17.840 --> 00:03:28.519 +opens the email composer with that, using that email address. + +00:03:28.520 --> 00:03:33.719 +If we'll go to the scratch buffer... Prepared another name + +00:03:33.720 --> 00:03:38.119 +there so just to demonstrate it works in a buffer the same + +00:03:38.120 --> 00:03:44.599 +way. + +NOTE Inserting implicit links + +00:03:44.600 --> 00:03:51.079 +The next fun thing is insert implicit link. I'm going to give + +00:03:51.080 --> 00:03:56.279 +you an example with email how to share an implicit link with + +00:03:56.280 --> 00:04:02.359 +someone. An implicit link is a text pattern, just as we saw + +00:04:02.360 --> 00:04:05.159 +with the email address, something that Hyperbole + +00:04:05.160 --> 00:04:13.319 +recognizes just by how the text looks. Here we have the + +00:04:13.320 --> 00:04:15.981 +example. We have started writing an email to + +00:04:15.982 --> 00:04:20.662 +the user@domain, and in the other window below, + +00:04:20.663 --> 00:04:27.423 +the vc.el file is open. It's now opened within the search path, + +00:04:27.424 --> 00:04:34.279 +the load path. That's why it's compressed. I want to tell + +00:04:34.280 --> 00:04:40.719 +my friend about the credit section. First, the cursor is + +00:04:40.720 --> 00:04:44.559 +placed here at your credit section. I move over to the other + +00:04:44.560 --> 00:04:48.879 +window and I use the Hyperbole menu system. By hitting + +00:04:48.880 --> 00:04:55.261 +C-h h, I go into the menu system. I press i for getting an + +00:04:55.262 --> 00:05:05.119 +i-button, implicit button, and I press l for creating a link. + +00:05:05.120 --> 00:05:12.159 +And there you have the link. What does the link mean? Well, it + +00:05:12.160 --> 00:05:15.519 +means that in the load for Hyperbole, Emacs lib files are + +00:05:15.520 --> 00:05:20.719 +special. If they are in the load path, they will use this short + +00:05:20.720 --> 00:05:26.279 +format. At the end, you have the L for the line number 24 and + +00:05:26.280 --> 00:05:31.439 +the C for the column. If I hit the action key on this line, you + +00:05:31.440 --> 00:05:35.559 +can see that the cursor moves over to the credit section. we + +00:05:35.560 --> 00:05:44.919 +can remove that file just to make sure that it works and move + +00:05:44.920 --> 00:05:50.639 +the cursor a little bit and hit M-RET again. + +00:05:50.640 --> 00:05:55.599 +M-RET and we moved over there. I mean, given that + +00:05:55.600 --> 00:06:00.039 +the receiver has a similar setup with Emacs, et cetera, that + +00:06:00.040 --> 00:06:03.410 +link will work there as well. + +NOTE Window grid + +00:06:03.411 --> 00:06:05.879 +Hi, Emacs Conference. It's a + +00:06:05.880 --> 00:06:09.639 +new recording day, the sun is shining, I'm wearing a new + +00:06:09.640 --> 00:06:14.359 +t-shirt but we're still cracking on with fun things in + +00:06:14.360 --> 00:06:21.239 +Hyperbole. Our next subject is window grid. With + +00:06:21.240 --> 00:06:25.039 +Hyperbole, it's easy to create a grid of windows. I'm going to + +00:06:25.040 --> 00:06:29.319 +show how you can do that and also moving on I'm going to show + +00:06:29.320 --> 00:06:34.239 +how you can use Dired or IBuffer to select what buffers to + +00:06:34.240 --> 00:06:39.959 +show in the grid. I will also show how you can save + +00:06:39.960 --> 00:06:46.079 +configuration for use later. + +00:06:46.080 --> 00:06:50.039 +You reach the window grid functionality through the + +00:06:50.040 --> 00:06:56.839 +hyperbole menu system. C-h h screen. There you have + +00:06:56.840 --> 00:07:01.279 +two submenus, frame control and window control. The grid + +00:07:01.280 --> 00:07:05.039 +functionality is part of both of these submenus. You can + +00:07:05.040 --> 00:07:09.359 +select either, but I'll go with window control here. + +00:07:09.360 --> 00:07:15.239 +Down to the left, we see the @ character and the grid of + +00:07:15.240 --> 00:07:21.799 +windows, so hit @. I'm prompted with the number of + +00:07:21.800 --> 00:07:25.803 +columns and rows for the window grid. + +00:07:25.804 --> 00:07:34.359 +I select the 3x3 grid. + +00:07:34.360 --> 00:07:41.919 +We get the 3x3 grid, and it's populated with buffers I have + +00:07:41.920 --> 00:07:46.639 +loaded in Emacs. + +00:07:46.640 --> 00:07:52.319 +Let's go back here to the scratch buffer. + +00:07:52.320 --> 00:07:56.399 +Now, using all those keystrokes for the menu system is a + +00:07:56.400 --> 00:08:01.599 +little bit cumbersome, so there is a shortcut: C-c @. + +00:08:01.600 --> 00:08:08.519 +If I use that, C-c @, I get immediately prompted the + +00:08:08.520 --> 00:08:16.538 +number of rows and columns. If i use a prefix arg 0, + +00:08:16.539 --> 00:08:23.359 +C-u 0 C-c @, I get also prompted with what type of + +00:08:23.360 --> 00:08:28.719 +buffers I want to have populated in my grid. Let's select + +00:08:28.720 --> 00:08:36.599 +the emacs-lisp-mode. Again we do a 3x3 grid. Here + +00:08:36.600 --> 00:08:44.959 +you see all the grids. The whole grid is populated with Emacs + +00:08:44.960 --> 00:08:45.919 +Lisp buffers. + +00:08:45.920 --> 00:08:57.679 +To get even finer control, you can go into IBuffer. I have + +00:08:57.680 --> 00:09:04.279 +pre-selected here all the Emacs Lisp files I have. Let's + +00:09:04.280 --> 00:09:10.279 +pick a few. I mark them like this. Let's pick three or maybe + +00:09:10.280 --> 00:09:16.879 +pick four. Then I hit the @ sign, and then it + +00:09:16.880 --> 00:09:22.368 +automatically shows a 2x2 grid + +00:09:22.369 --> 00:09:26.279 +with the selected buffers. + +00:09:26.280 --> 00:09:35.239 +We can go in again and maybe select a few more and do the same + +00:09:35.240 --> 00:09:44.399 +thing: hit add and it now becomes a 3x2 grid with these buffers + +00:09:44.400 --> 00:09:50.178 +The same thing is possible through Dired. + +00:09:50.179 --> 00:10:00.639 +Let's just mark quite a few here and then hit @, and then it + +00:10:00.640 --> 00:10:04.199 +populates it with all the buffers. You see that if it's not + +00:10:04.200 --> 00:10:10.679 +enough buffer to fill the whole grid, there are blank grids or + +00:10:10.680 --> 00:10:15.039 +rectangles in the grid. + +00:10:15.040 --> 00:10:20.519 +Now going back and forth like this, maybe if you want to work + +00:10:20.520 --> 00:10:26.759 +on some file and and then go over to Dired again to select this, + +00:10:26.760 --> 00:10:31.759 +can be a little bit cumbersome. You maybe have prepared a + +00:10:31.760 --> 00:10:34.965 +grid with the buffers you want to have there. + +00:10:34.966 --> 00:10:42.559 +Hyperbole comes with a simple window configuration support. + +00:10:42.560 --> 00:10:46.119 +You reach that the same way through the Hyperbole menu, so + +00:10:46.120 --> 00:10:54.119 +C-h h and window, w for window, and there you can hit save to + +00:10:54.120 --> 00:10:58.599 +save the configuration to a ring of configurations. + +00:10:58.600 --> 00:11:04.759 +Let's go back to the scratch buffer again here. Now we + +00:11:04.760 --> 00:11:09.919 +want to bring up our window configuration again, so we + +00:11:09.920 --> 00:11:15.079 +hit C-h h and window, and yank in the configuration. Boom, + +00:11:15.080 --> 00:11:19.719 +there is the grid again. + +NOTE Select a thing + +00:11:19.720 --> 00:11:23.319 +We're reaching the end of the talk. The last fun thing I want to + +00:11:23.320 --> 00:11:27.639 +talk about is the Hyperbole support for select a thing. + +00:11:27.640 --> 00:11:33.439 +We'll show some use of selections together with web search. + +00:11:33.440 --> 00:11:43.599 +Here I have brought up the GNU General Public License for + +00:11:43.600 --> 00:11:48.119 +just getting some text that I can show the select a thing + +00:11:48.120 --> 00:11:52.919 +functionality. Let's move the cursor over the word + +00:11:52.920 --> 00:11:59.399 +versions. Then I hit C-c RET, which is bound for the + +00:11:59.400 --> 00:12:03.119 +select a thing functionality. + +00:12:03.120 --> 00:12:11.039 +Then it selects the word that the cursor was at. If I hit it + +00:12:11.040 --> 00:12:15.199 +again, C-c RET, it selects the line. Again, it + +00:12:15.200 --> 00:12:22.359 +selects the sentence, and again, the whole paragraph. So + +00:12:22.360 --> 00:12:26.159 +that's a convenient way to extend your searches--your + +00:12:26.160 --> 00:12:33.817 +selections, rather--in a buffer. + +NOTE Web search + +00:12:33.818 --> 00:12:38.198 +Looking at selections, how you can use that from web search... + +00:12:38.199 --> 00:12:44.321 +Let's mark some text and then hit C-c /, which is bound + +00:12:44.322 --> 00:12:48.542 +for the web search. Here you see the Hyperbole menu system again. + +00:12:48.543 --> 00:12:54.959 +It's slightly customized with things that I use, but the basic + +00:12:54.960 --> 00:13:00.519 +menus are the ones supported by Hyperbole. Let's look at + +00:13:00.520 --> 00:13:07.999 +searching DuckDuckGo. It then populates the prompt with + +00:13:08.000 --> 00:13:08.839 +the selection. + +00:13:08.840 --> 00:13:17.919 +I have configured it so it uses my Firefox for these + +00:13:17.920 --> 00:13:23.319 +searches. Here we have the GNU General Public License + +00:13:23.320 --> 00:13:30.599 +shown. I can also show that for like me, being not a native + +00:13:30.600 --> 00:13:36.319 +English speaker, let's look what "take away your freedoms" + +00:13:36.320 --> 00:13:41.679 +means in Swedish. So C-c /, and then I hit translate. + +00:13:41.680 --> 00:13:45.879 +Take away your freedom, yeah, what's the translation for + +00:13:45.880 --> 00:13:48.582 +that? Using Google Translate, + +00:13:48.583 --> 00:13:50.799 +I get it translated to Swedish. + +00:13:50.800 --> 00:14:03.430 +That was the whole talk. We reached the end, + +00:14:03.431 --> 00:14:09.400 +and thanks for listening. Bye. diff --git a/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt new file mode 100644 index 00000000..7b377fed --- /dev/null +++ b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt @@ -0,0 +1,630 @@ +WEBVTT captioned by sachac + +NOTE New version of hyperdrive.el + +00:00:00.000 --> 00:00:02.596 +One thing I wanted to mention was that + +00:00:02.597 --> 00:00:08.596 +as with last year, I just released a new version of + +00:00:08.597 --> 00:00:13.476 +hyperdrive.el and it depends on the latest release of + +00:00:13.477 --> 00:00:19.156 +transient.el and so if you are going to install this + +00:00:19.157 --> 00:00:25.156 +package, make sure that you restart your Emacs after you + +00:00:25.157 --> 00:00:29.796 +install it, if you aren't already up to date with transient, + +00:00:29.797 --> 00:00:35.316 +which was released yesterday. Otherwise, since it, this + +00:00:35.317 --> 00:00:40.876 +latest version of transient.el updates the transient + +00:00:40.877 --> 00:00:46.316 +prefix EIEIO class, and it won't work unless you restart + +00:00:46.317 --> 00:00:50.996 +Emacs. Okay, well, good to know. I think that's a small price + +00:00:50.997 --> 00:00:57.076 +to pay to be on a bleedingest of bleeding edges. All right, I + +00:00:57.077 --> 00:00:59.596 +see there's a question here. Let me see if I can read it. Yeah, + +00:00:59.597 --> 00:01:01.276 +sure. Do you want me to field it to you or do you want to read it? + +00:01:01.277 --> 00:01:04.104 +Oh, sure. Go ahead. I'd love to hear you read it. Sure. + +00:01:04.105 --> 00:01:06.686 +Thank you. So first question. Hi there. + +NOTE Q: Network effects are tricky - do you know of any public shares people can join to try this tool out properly? + +00:01:06.687 --> 00:01:07.787 +Thank you for the talk. + +00:01:07.788 --> 00:01:10.756 +I enjoyed watching it. I tried this tool last year and it + +00:01:10.757 --> 00:01:13.156 +seemed to work well, but I don't know anyone who actually + +00:01:13.157 --> 00:01:16.516 +uses it. Network effects are tricky. Do you know of any + +00:01:16.517 --> 00:01:19.636 +public shares people can join to try to try this tool out + +00:01:19.637 --> 00:01:24.396 +properly? Thank you. Network effects are indeed tricky. + +00:01:24.397 --> 00:01:29.916 +Yeah. That's kind of part of the purpose of the peer graph is + +00:01:29.917 --> 00:01:34.596 +to make it easier to discover peers in a way that's more, uh, + +00:01:34.597 --> 00:01:37.956 +more reliable and consistent than just somebody puts a + +00:01:37.957 --> 00:01:42.076 +public key on Reddit and then it's lost unless somebody + +00:01:42.077 --> 00:01:50.156 +finds it. Um, but the, the public keys that I know of are, + +00:01:50.157 --> 00:01:53.076 +there's the public key for the Ushin hyperdrive, which is + +00:01:53.077 --> 00:01:56.236 +basically just the same content that's on the website + +00:01:56.237 --> 00:02:00.156 +mirrored to a hyperdrive. Um, and then there are a few other + +00:02:00.157 --> 00:02:07.316 +ones. There's like, uh, hypha.coop has some WebZine + +00:02:07.317 --> 00:02:13.796 +content accessible via HyperDrive and also via IPFS. And + +00:02:13.797 --> 00:02:19.916 +then mauvesignweaver has a blog that's also available on + +00:02:19.917 --> 00:02:23.196 +Hyper. So that's blog.mauve.moe . + +00:02:23.197 --> 00:02:28.276 +But besides that, that's kind of the purpose of this + +00:02:28.277 --> 00:02:31.756 +peer graph thing is to make it easier to discover other + +00:02:31.757 --> 00:02:36.596 +peers. Yeah, to make it also very visual in a way, because, + +00:02:36.597 --> 00:02:40.436 +you know, I personally, it's funny because it reminded me of + +00:02:40.437 --> 00:02:45.156 +talks that I did in the past about the trust system for PGP + +00:02:45.157 --> 00:02:47.596 +keychains, because at the end of the day, you know, this + +00:02:47.597 --> 00:02:50.596 +trust system, whether you trust someone absolutely or + +00:02:50.597 --> 00:02:53.876 +relatively, the blocking system, it feels very related. + +00:02:53.877 --> 00:02:57.356 +Any kind of a chain of trust like this, feels very + +00:02:57.357 --> 00:03:00.436 +reminiscent, obviously, but it felt very nice that for you, + +00:03:00.437 --> 00:03:04.676 +you had a dynamic display of this web of trust. Whereas for + +00:03:04.677 --> 00:03:08.836 +me, I had to make fancy diagram in ticks, in latex, just to + +00:03:08.837 --> 00:03:14.956 +make sure that people understood what was actually going + +00:03:14.957 --> 00:03:21.596 +on. Yeah, one thing I want to point out is just the difference + +00:03:21.597 --> 00:03:25.556 +in utility for something like the PGP web of trust versus + +00:03:25.557 --> 00:03:29.956 +this kind of network of peers is, if I understand right, the + +00:03:29.957 --> 00:03:34.716 +main purpose of web of trust is to identify that a certain + +00:03:34.717 --> 00:03:42.516 +public key is actually created by the person that they claim + +00:03:42.517 --> 00:03:46.036 +to be. So you have a way of identifying that a key actually + +00:03:46.037 --> 00:03:49.996 +matches like a government identity. Whereas this kind of + +00:03:49.997 --> 00:03:53.356 +network of peers has nothing to do with authenticating a key + +00:03:53.357 --> 00:03:57.636 +or associating a key with an identity, like a government + +00:03:57.637 --> 00:04:03.396 +identity. The purpose is exclusively just to get more peers + +00:04:03.397 --> 00:04:07.276 +to be able to discover more peers who have things that are + +00:04:07.277 --> 00:04:07.676 +worth reading. + +00:04:07.677 --> 00:04:14.356 +Yeah, it's a different take on a concept, but even though the + +00:04:14.357 --> 00:04:18.836 +concept might be the same, I find there's a wealth of things + +00:04:18.837 --> 00:04:21.716 +that can be done thanks to this, because as you said, you + +00:04:21.717 --> 00:04:25.396 +trust someone to send you a file that is trustworthy. Well, + +00:04:25.397 --> 00:04:28.236 +with PGP, it's mostly about communication, but about file + +00:04:28.237 --> 00:04:33.356 +sharing, it just opens up completely new avenues. Yeah. Do + +00:04:33.357 --> 00:04:40.516 +you have anything else to add? And about that, I think one of + +00:04:40.517 --> 00:04:45.476 +the barriers to the PGP web of trust is that it required + +00:04:45.477 --> 00:04:48.916 +getting together to have key parties to meet people and + +00:04:48.917 --> 00:04:51.596 +verify identities. Whereas with this kind of thing, + +00:04:51.597 --> 00:04:54.076 +there's no need to do that because so long as your content is + +00:04:54.077 --> 00:04:57.876 +interesting, it doesn't matter that you're not who you + +00:04:57.877 --> 00:05:01.076 +claim to be or that you don't even claim to be anybody. Yeah, I + +00:05:01.077 --> 00:05:04.556 +mean, again, as you mentioned, it's not about identifying + +00:05:04.557 --> 00:05:08.196 +people, it's just about identifying value, in a way, in the + +00:05:08.197 --> 00:05:10.636 +content that people share. It has nothing to do with + +00:05:10.637 --> 00:05:13.916 +verifying their actual identity. But again, it's the same + +00:05:13.917 --> 00:05:16.596 +technology, it's the same understanding, but for + +00:05:16.597 --> 00:05:18.556 +different applications, which is lovely because + +00:05:18.557 --> 00:05:22.116 +programming is fractals all over. The same problems repeat + +00:05:22.117 --> 00:05:24.836 +themselves and the same solutions show up for widely + +00:05:24.837 --> 00:05:26.996 +different scenarios, which is always good. Yeah. Anything + +00:05:26.997 --> 00:05:32.676 +else? One more thing. Yeah. One more thing is that I wanted to + +00:05:32.677 --> 00:05:36.956 +give some kudos to, um, some of the other projects that + +00:05:36.957 --> 00:05:42.796 +inspired the pure graph work. One of them is Adam Porter's or + +00:05:42.797 --> 00:05:50.076 +graph view, um, which is a, um, a tool for visualizing + +00:05:50.077 --> 00:05:55.276 +different nodes in an org file and how they link to one + +00:05:55.277 --> 00:06:01.876 +another. Um, he did. the pioneering work to figure out how to + +00:06:01.877 --> 00:06:07.316 +render interactive graphs with GraphViz. And so we worked + +00:06:07.317 --> 00:06:12.476 +together on it and kind of hacked down the last parts that + +00:06:12.477 --> 00:06:16.796 +weren't working correctly. And so this is inspired a lot. + +00:06:16.797 --> 00:06:19.316 +The user interface is inspired a lot by Adam's work. And then + +00:06:19.317 --> 00:06:26.156 +also the idea of having people that you mark as blockers and + +00:06:26.157 --> 00:06:31.076 +block is inspired by another project called TrustNet by + +00:06:31.077 --> 00:06:37.196 +Alex Cobleigh. I can type in the link there. Alex, how do you + +00:06:37.197 --> 00:06:43.516 +spell it? Cobleigh? Yeah, I'll type it in here. Thank you. And I + +00:06:43.517 --> 00:06:50.596 +think the link is https://cblgh.org/trustnet. I think that is it. + +00:06:50.597 --> 00:06:57.836 +I'm not totally sure. But yeah. Okay, well, that's very good. + +00:06:57.837 --> 00:07:01.396 +and thank you for giving credits to the inspiration, because + +00:07:01.397 --> 00:07:05.556 +again, nothing is done without context, and it's always nice + +00:07:05.557 --> 00:07:08.516 +in the free software world to acknowledge people who have + +00:07:08.517 --> 00:07:11.676 +influenced us, because it's very nice when people start + +00:07:11.677 --> 00:07:14.556 +contributing, maintaining software, publishing stuff + +00:07:14.557 --> 00:07:17.916 +that they actually start collaborating with people who've + +00:07:17.917 --> 00:07:21.916 +inspired them, which is a nice way to climb over the shoulders + +00:07:21.917 --> 00:07:25.636 +of giants, which this community likes so much. All right, + +00:07:25.637 --> 00:07:28.676 +moving on to the next question. We are, we have about seven + +00:07:28.677 --> 00:07:31.063 +more minutes for questions, so we're still good. + +NOTE Q: blocklist or whitelist so I can make them containing useful information for only me while also being useful with in a public sense + +00:07:31.064 --> 00:07:33.956 +Second question, one use case for this sharing and building upon + +00:07:33.957 --> 00:07:37.996 +second brain, sorry, one use case for this is sharing and + +00:07:37.997 --> 00:07:41.436 +building upon second brains, i.e. Zettelkasten, that's + +00:07:41.437 --> 00:07:44.396 +denote or what I'm actually doing, but a blocker for me + +00:07:44.397 --> 00:07:46.916 +wanting to make one public is wanting to use a block list or + +00:07:46.917 --> 00:07:51.556 +whitelist so that I can make them... Cautioning? + +00:07:51.557 --> 00:07:56.156 +Quarantining? Containing. Yes, definitely containing. + +00:07:56.157 --> 00:07:59.756 +Why did I go for quarantine rather than containing? I guess + +00:07:59.757 --> 00:08:04.636 +my brain went to a dark place from the 2020s. So I can make + +00:08:04.637 --> 00:08:08.996 +containing useful information for only me while also being + +00:08:08.997 --> 00:08:16.156 +useful in a public sense. Yes, I think your question is about + +00:08:16.157 --> 00:08:22.276 +how to keep some of the content of your Zettelkasten private + +00:08:22.277 --> 00:08:29.956 +and only have certain parts of it be public. If your desire is + +00:08:29.957 --> 00:08:35.796 +to only share certain files in your Zettelkasten, then you + +00:08:35.797 --> 00:08:43.596 +can use the hyperdrive mirror command that we demonstrated + +00:08:43.597 --> 00:08:48.596 +in the Emacs 2023 talk. In short, + +00:08:48.597 --> 00:08:53.916 +It lets you specify either a regular expression that + +00:08:53.917 --> 00:08:58.036 +matches only some of the files that'll get uploaded from a + +00:08:58.037 --> 00:09:02.236 +directory of files on your machine. And only the files that + +00:09:02.237 --> 00:09:05.716 +match that regex will be put into the hyperdrive and shared + +00:09:05.717 --> 00:09:08.796 +with the world. But it doesn't have to be a regex. It could be a + +00:09:08.797 --> 00:09:13.276 +lambda. So it could match based on file size or modification + +00:09:13.277 --> 00:09:18.996 +time or really whatever you like. So I hope that answers your + +00:09:18.997 --> 00:09:23.956 +question. Great. And I personally, as someone who loves + +00:09:23.957 --> 00:09:27.876 +tinkering with my Elisp, I particularly like the ability to + +00:09:27.877 --> 00:09:31.156 +specify things with a lambda because it just opens up the + +00:09:31.157 --> 00:09:34.356 +ceiling of the possibilities with interactions between + +00:09:34.357 --> 00:09:37.316 +different parts of software. And, you know, as I have worked + +00:09:37.317 --> 00:09:39.956 +significantly in Org Roam, I could definitely see + +00:09:39.957 --> 00:09:44.116 +interactions with lambdas here to make sure that we can send + +00:09:44.117 --> 00:09:47.156 +and share files based on the filter list that is + +00:09:47.157 --> 00:09:51.036 +incrementally added to thanks to those lambdas. So thanks + +00:09:51.037 --> 00:09:55.116 +for this. One more thing I want to add about that is that the, + +00:09:55.117 --> 00:10:00.116 +that same question of being able to upload only certain + +00:10:00.117 --> 00:10:04.316 +files while leaving others to be private was something + +00:10:04.317 --> 00:10:07.556 +that was inspired by Karl Voit. I had an email thread with + +00:10:07.557 --> 00:10:16.036 +him in which he talked about how he uses his file tags project + +00:10:16.037 --> 00:10:21.676 +to organize his files. And he'll put a public tag on the files + +00:10:21.677 --> 00:10:26.476 +in his org database that he wants to have be published to his + +00:10:26.477 --> 00:10:29.916 +website. And so you could very easily just set a regular + +00:10:29.917 --> 00:10:33.636 +expression matches that public tag and then all of the other + +00:10:33.637 --> 00:10:39.676 +files would be not shared. Yeah, and, oh, sorry, I was, I + +00:10:39.677 --> 00:10:42.716 +misclicked, I was talking to production for a second. First + +00:10:42.717 --> 00:10:45.636 +time it happens today, so I think this is a testament to the + +00:10:45.637 --> 00:10:47.996 +level of tightness. But yeah, as you were saying, whatever + +00:10:47.997 --> 00:10:51.396 +heuristics you want is actually a good thing. I think people + +00:10:51.397 --> 00:10:54.636 +are a little antsy because they tend to brain dump into their + +00:10:54.637 --> 00:10:59.836 +Org Roam, Zettelkasten, Denote, and they + +00:10:59.837 --> 00:11:02.516 +really don't want some of their personal notes being out + +00:11:02.517 --> 00:11:05.596 +there. And well, if you are worried about this, I think + +00:11:05.597 --> 00:11:09.356 +learning some Elisp and implementing some Lambda function + +00:11:09.357 --> 00:11:13.116 +that allows you to filter with intention might be the best + +00:11:13.117 --> 00:11:17.636 +solution for you. So I hope we've covered the question as + +00:11:17.637 --> 00:11:21.436 +well as we could have. Next question is more about an idea + +00:11:21.437 --> 00:11:24.996 +about trying hyperdrive to distribute the Worg. Does that + +00:11:24.997 --> 00:11:28.596 +make sense to you? Yeah, I mean, you could distribute + +00:11:28.597 --> 00:11:32.636 +whatever you wanted. I think that'd be a great idea. Okay, + +00:11:32.637 --> 00:11:36.116 +great. Moving to the next question, and we have about three + +00:11:36.117 --> 00:11:38.316 +minutes, so I think we'll cover the last two questions and + +00:11:38.317 --> 00:11:41.023 +we'll move on to the next talk after that. + +NOTE Q: Could you comment on the "visualization" thing, (org visualization), and your experience with this type of content in buffers and the various possibilities (svg, etc.)? + +00:11:41.024 --> 00:11:43.164 +Could you comment on the visualization thing, + +00:11:43.165 --> 00:11:44.716 +Org visualization, and your + +00:11:44.717 --> 00:11:47.236 +experience with this type of content in buffers and the + +00:11:47.237 --> 00:11:52.916 +various possibilities, SVG, et cetera? + +00:11:52.917 --> 00:11:59.916 +Sure. So one thing that we worked on was I added a patch that + +00:11:59.917 --> 00:12:05.156 +was merged as part of Emacs 30, which fixes the way that image + +00:12:05.157 --> 00:12:14.196 +maps scale when images are scaled. So as an Emacs 30, if you + +00:12:14.197 --> 00:12:19.276 +zoom in on an image or shrink an image or rotate an image, now + +00:12:19.277 --> 00:12:24.276 +the image map, which is the overlay, so it's not actually an + +00:12:24.277 --> 00:12:26.716 +overlay, but it's, so to speak, it's an overlay that allows + +00:12:26.717 --> 00:12:30.116 +the images to be clickable based on, you know, where the + +00:12:30.117 --> 00:12:32.756 +actual visual display is. You can also click on it or hit help + +00:12:32.757 --> 00:12:37.356 +echo. And as of Emacs 30, now that scales with the image + +00:12:37.357 --> 00:12:37.796 +itself. + +00:12:37.797 --> 00:12:45.236 +The code to make that work on previous versions of Emacs, you + +00:12:45.237 --> 00:12:51.756 +can see the advice that we added in hyperdrive-sbb-view, that + +00:12:51.757 --> 00:12:55.956 +file in hyperdrive.el, if you're curious to see how you + +00:12:55.957 --> 00:13:01.196 +could polyfill that code, so to speak, to make it work on + +00:13:01.197 --> 00:13:06.076 +previous versions of Emacs before Emacs 30. But it works + +00:13:06.077 --> 00:13:11.076 +great. The way that this works is we generate a GraphViz + +00:13:11.077 --> 00:13:16.716 +string that will be sent to GraphViz to render an SVG and also + +00:13:16.717 --> 00:13:23.676 +render a CMAPX string. We pipe those back into Emacs and then + +00:13:23.677 --> 00:13:27.596 +we generate the image map from the CMAPX file and then we put + +00:13:27.597 --> 00:13:32.596 +that image map with the SVG, and we render it in a buffer. + +00:13:32.597 --> 00:13:37.076 +Works pretty well. You can check out the code to see exactly + +00:13:37.077 --> 00:13:41.876 +how it works. OK, great. Well, sadly, I think we are a little + +00:13:41.877 --> 00:13:44.996 +short on time to cover the last two questions. So Joseph, if + +00:13:44.997 --> 00:13:47.236 +you want to take a little bit of time maybe to answer the + +00:13:47.237 --> 00:13:51.196 +questions in the BBB, you can just do this, even though the + +00:13:51.197 --> 00:13:54.476 +stream will be moving to the next talk. But I'll use the + +00:13:54.477 --> 00:13:57.716 +opportunity to thank you both for the talk and for your + +00:13:57.717 --> 00:14:00.316 +answers, because they were very insightful. And thank you + +00:14:00.317 --> 00:14:03.636 +so much for taking the time to be with us today. Thank you, + +00:14:03.637 --> 00:14:05.876 +Leo. Enjoy the rest of the conference. Any last words in + +00:14:05.877 --> 00:14:10.356 +about 15 seconds? Thank you. I'm grateful for your taking + +00:14:10.357 --> 00:14:14.076 +all this time to make this conference possible. Well, you + +00:14:14.077 --> 00:14:16.916 +know, the conference would be nothing without the speakers + +00:14:16.917 --> 00:14:19.676 +coming and chatting, so you are the ones to thank. I mean, we + +00:14:19.677 --> 00:14:21.796 +like the thanking, obviously, but it's mostly you doing the + +00:14:21.797 --> 00:14:26.156 +work. All right. Thank you, Joseph. We'll see you later. + +00:14:26.157 --> 00:14:26.796 +Bye-bye. diff --git a/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt new file mode 100644 index 00000000..9a180103 --- /dev/null +++ b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt @@ -0,0 +1,841 @@ +WEBVTT captioned by sachac + +00:00:00.000 --> 00:00:03.919 +Hello, welcome to this talk on hyperdrive.el. I'm Joseph + +00:00:03.920 --> 00:00:07.439 +Turner presenting on behalf of ushin, a tiny independent + +00:00:07.440 --> 00:00:12.039 +information freedom nonprofit. hyperdrive.el is an Emacs + +00:00:12.040 --> 00:00:14.959 +interface to the hyperdrive peer-to-peer file sharing + +00:00:14.960 --> 00:00:18.399 +system built by Holepunch. Like other peer-to-peer file + +00:00:18.400 --> 00:00:22.119 +sharing tools, such as BitTorrent, hyperdrive lets you + +00:00:22.120 --> 00:00:25.959 +share unlimited files directly with other users without + +00:00:25.960 --> 00:00:29.519 +having to go through a central hub. One thing that sets + +00:00:29.520 --> 00:00:32.519 +Hyperdrive apart is that the files you share can be + +00:00:32.520 --> 00:00:35.759 +modified. Since hyperdrive has built-in versioning, + +00:00:35.760 --> 00:00:38.519 +you can explore the history of changes that you make to your + +00:00:38.520 --> 00:00:42.199 +files or others make to theirs. You can stream video and + +00:00:42.200 --> 00:00:45.639 +audio. There's no sign-up or account creation process + +00:00:45.640 --> 00:00:49.319 +required. It's all free software. This means that the + +00:00:49.320 --> 00:00:52.319 +community has the legal right, the tools, and the + +00:00:52.320 --> 00:00:55.359 +information necessary to participate in the development + +00:00:55.360 --> 00:00:58.337 +process, or even fork the project + +00:00:58.338 --> 00:01:00.799 +and go cimarron. Since + +00:01:00.800 --> 00:01:04.919 +last year's talk, we've added a few new features. It's now + +00:01:04.920 --> 00:01:08.559 +much easier to get started using hyperdrive.el, since we + +00:01:08.560 --> 00:01:12.399 +added the hyperdrive-install command, which downloads the + +00:01:12.400 --> 00:01:16.399 +gateway program and installs it on your machine. We added a + +00:01:16.400 --> 00:01:19.959 +peer graph feature, which lets you visualize your network + +00:01:19.960 --> 00:01:24.719 +of sources of information. We also published a new package, + +00:01:24.720 --> 00:01:29.079 +hyperdrive-org-transclusion, which lets you display live + +00:01:29.080 --> 00:01:34.599 +updating snippets of hyperdrive files in Org documents. + +00:01:34.600 --> 00:01:37.319 +Let's get started. Let's say you get an email from your + +00:01:37.320 --> 00:01:41.079 +friend Alice inviting you to check out hyperdrive.el. + +00:01:41.080 --> 00:01:45.519 +Let's click on the link here to look at the manual. Let's go + +00:01:45.520 --> 00:01:50.239 +down to the installation section. It says you need to have + +00:01:50.240 --> 00:01:54.639 +GNU Emacs version 28.1 or later. I'll assume you have it + +00:01:54.640 --> 00:01:57.479 +installed, but if not, you can click this link. + +00:01:57.480 --> 00:01:59.399 +You need to have curl installed, + +00:01:59.400 --> 00:02:01.919 +which is likely already the case, but if not, + +00:02:01.920 --> 00:02:04.719 +hyperdrive.el will let you know. + +00:02:04.720 --> 00:02:10.879 +Now from within Emacs you can install hyperdrive.el. + +00:02:10.880 --> 00:02:14.399 +Run M-x package-refresh-contents. + +00:02:14.400 --> 00:02:20.919 +Then, M-x package-install, type in hyperdrive, + +00:02:20.920 --> 00:02:26.079 +and hit return. Next, we'll install hyper-gateway-ushin. + +00:02:26.080 --> 00:02:32.999 +Let's run M-x hyperdrive-install. It's prompting me to + +00:02:33.000 --> 00:02:35.880 +download and install the gateway, which is 51 megabytes. + +00:02:35.881 --> 00:02:39.780 +I'll press y. + +00:02:39.781 --> 00:02:44.159 +I will skip most of the download process. The download is + +00:02:44.160 --> 00:02:49.439 +wrapping up. + +00:02:49.440 --> 00:02:53.399 +Now, it's prompting me to start the gateway. I can either run + +00:02:53.400 --> 00:02:59.279 +M-x hyperdrive-start, or I can press this button. And + +00:02:59.280 --> 00:03:03.479 +after a few moments, we'll see that the gateway will start. + +00:03:03.480 --> 00:03:07.279 +It's ready. You can also click this button, "View hyperdrive + +00:03:07.280 --> 00:03:10.239 +User Info Manual", to view the same manual that we were + +00:03:10.240 --> 00:03:13.479 +viewing in the browser. The info manual comes with + +00:03:13.480 --> 00:03:17.319 +hyperdrive.el and is available offline. Now that + +00:03:17.320 --> 00:03:20.559 +everything's installed and the gateway is running, we're + +00:03:20.560 --> 00:03:23.399 +back at Alice's email. Let's click on the link to her + +00:03:23.400 --> 00:03:28.719 +hyperdrive. Here's Alice's hyperdrive. Let's open her + +00:03:28.720 --> 00:03:33.079 +hello.org file. + +00:03:33.080 --> 00:03:37.319 +I'm being prompted to mark Alice's hyperdrive. Currently, + +00:03:37.320 --> 00:03:41.879 +it's unknown. I'll press ? to see more details. + +00:03:41.880 --> 00:03:48.279 +"safe", "unsafe", "unknown". I'll press e for "explain". In the info + +00:03:48.280 --> 00:03:54.139 +manual, it says that if a hyperdrive is marked as safe, that + +00:03:54.140 --> 00:03:57.799 +means files in that hyperdrive will automatically have + +00:03:57.800 --> 00:04:02.559 +their major mode enabled based on their file extension. In + +00:04:02.560 --> 00:04:06.719 +this case, if I mark Alice's hyperdrive as safe and I click on + +00:04:06.720 --> 00:04:10.519 +this hello.org file, Emacs will automatically enable Org + +00:04:10.520 --> 00:04:14.919 +mode in that file. Since I know Alice directly, I'll mark her + +00:04:14.920 --> 00:04:19.639 +hyperdrive as safe. I'll click on the file hello.org again, + +00:04:19.640 --> 00:04:25.679 +and now I'll press Shift-s for safe. + +00:04:25.680 --> 00:04:30.639 +Now I'm going to set Alice's petname. hyperdrive.el has + +00:04:30.640 --> 00:04:34.679 +different ways to name a hyperdrive. The public key is the + +00:04:34.680 --> 00:04:38.719 +drive's unique identifier. You can also assign yourself a + +00:04:38.720 --> 00:04:42.359 +public nickname, which you announce to the world. Then + +00:04:42.360 --> 00:04:45.959 +users on their own machines can assign each hyperdrive that + +00:04:45.960 --> 00:04:50.439 +they are aware of a private petname. I'll assign Alice a + +00:04:50.440 --> 00:04:54.079 +petname, which is the way that I will identify Alice just on + +00:04:54.080 --> 00:05:01.906 +my own machine. I'll type in "My Friend Alice". + +00:05:01.907 --> 00:05:03.707 +Then when I refresh her drive, + +00:05:03.708 --> 00:05:07.359 +we see that it says petname in the top left. + +00:05:07.360 --> 00:05:09.392 +Now I'll do what she asks, + +00:05:09.393 --> 00:05:11.613 +which is to right click on her name and + +00:05:11.614 --> 00:05:15.259 +open her peer graph. In the context menu, I see a few + +00:05:15.260 --> 00:05:19.159 +different actions I can take, but I'll click on "Peer Graph". + +00:05:19.160 --> 00:05:22.959 +It's prompting me to pick the max hops for sources. Default 3. + +00:05:22.960 --> 00:05:26.799 +I'll choose the default. Same for blockers. I'll explain + +00:05:26.800 --> 00:05:27.599 +what that means later. + +00:05:30.380 --> 00:05:35.959 +This is Alice's peer graph. Here we can see that Alice has two + +00:05:35.960 --> 00:05:41.279 +direct sources, Bob and Eve. Both Bob and Eve have assigned + +00:05:41.280 --> 00:05:45.919 +themselves nicknames, and so we see Bob and Eve here. Eve has + +00:05:45.920 --> 00:05:50.479 +assigned this other hyperdrive to be a source. But this + +00:05:50.480 --> 00:05:55.959 +other hyperdrive, whose public key is "kb3zr6mq" + +00:05:55.960 --> 00:05:59.519 +and so on--if we hover over the hyperdrive, we'll see the full + +00:05:59.520 --> 00:06:03.239 +public key--has not assigned itself a nickname. So we + +00:06:03.240 --> 00:06:07.999 +just see the truncated short public key. Because we've + +00:06:08.000 --> 00:06:10.917 +assigned a petname for Alice, + +00:06:10.918 --> 00:06:14.558 +we see Alice's petname show up here. + +00:06:14.559 --> 00:06:17.839 +Now I'll open the peer list view to show the same + +00:06:17.840 --> 00:06:21.479 +information in a different way. Since I'm using a large + +00:06:21.480 --> 00:06:25.199 +font, I'll widen this window so we can see everything going + +00:06:25.200 --> 00:06:29.319 +on in the peer list. We see that the root hyperdrive is + +00:06:29.320 --> 00:06:33.639 +petname "My Friend Alice", nickname "alice", public key "dm1", + +00:06:33.640 --> 00:06:38.359 +and so on. We've set the sources max hops to three, which means + +00:06:38.360 --> 00:06:42.359 +that we will go out at most three hops from Alice in order to + +00:06:42.360 --> 00:06:49.839 +find sources. One hop from Alice are Bob and Eve. One hop + +00:06:49.840 --> 00:06:55.839 +from Eve is "kb3", which is two hops from Alice. Now we've set + +00:06:55.840 --> 00:06:59.159 +the max hops for sources to three, but in this case, the + +00:06:59.160 --> 00:07:04.279 +network is small, and "kb3" has no sources. So we can only go + +00:07:04.280 --> 00:07:07.959 +out two hops from Alice until we run out of sources. In the + +00:07:07.960 --> 00:07:11.159 +future, we plan to add a search feature based on this list of + +00:07:11.160 --> 00:07:14.479 +sources. You type in a query, and you get back a list of + +00:07:14.480 --> 00:07:19.879 +results published by Eve, Bob, or "kb3". It's also possible to + +00:07:19.880 --> 00:07:23.239 +block peers. I'll open the transient menu by pressing + +00:07:23.240 --> 00:07:28.759 +question mark. For now, let's turn on showing blocked + +00:07:28.760 --> 00:07:35.439 +peers. I'll press "s x", and now it says blocked sources. + +00:07:35.440 --> 00:07:38.839 +Now we can see Mallory also shows up. Mallory has been + +00:07:38.840 --> 00:07:43.399 +included as a source by Eve, but is blocked. So in the end + +00:07:43.400 --> 00:07:47.039 +result, she does not show up in the list of sources. Instead, + +00:07:47.040 --> 00:07:51.839 +she shows up as a blocked source. But how is it that Mallory + +00:07:51.840 --> 00:07:55.039 +ended up being blocked? Let's open up the transient menu + +00:07:55.040 --> 00:08:02.759 +once more and click "s b" to show blockers. Now we can see that + +00:08:02.760 --> 00:08:07.079 +Bob has blocked Mallory. This means that Bob is not + +00:08:07.080 --> 00:08:12.519 +interested in seeing search results from Mallory. Since + +00:08:12.520 --> 00:08:17.639 +Alice has included Bob as a blocker, that means that Alice + +00:08:17.640 --> 00:08:23.439 +trusts Bob to block people on her behalf. So since Bob has + +00:08:23.440 --> 00:08:27.479 +blocked Mallory, Mallory does not show up in Alice's + +00:08:27.480 --> 00:08:31.919 +peergraph as a source. Well, now I'm curious to see what it is + +00:08:31.920 --> 00:08:35.919 +Mallory published that drove Bob to block her. I'll + +00:08:35.920 --> 00:08:39.439 +right-click on Mallory, and in the context menu, "Open Hyperdrive" + +00:08:39.440 --> 00:08:44.319 +and... Wingsuit Flying Grand Canyon Point of View Not Clickbait? + +00:08:44.320 --> 00:08:49.879 +I gotta check this out! [playing: Rick Astley's "Never Gonna Give You Up"] + +00:08:49.880 --> 00:08:56.159 +No! Disgusting! No wonder Bob blocked Mallory. Let's go + +00:08:56.160 --> 00:09:01.839 +back to Alice's peer graph. Mallory is a blocked source. + +00:09:01.840 --> 00:09:05.599 +Are there any peers who are blocked but who aren't sources? + +00:09:05.600 --> 00:09:11.739 +I'll open the transient menu and I'll press "s x". Now we're + +00:09:11.740 --> 00:09:16.839 +looking at blocked non-sources. Darth, who's been blocked + +00:09:16.840 --> 00:09:20.759 +by Bob, has not been added by any of Alice's sources as a + +00:09:20.760 --> 00:09:25.559 +source. So Darth is a blocked non-source. I'll open the + +00:09:25.560 --> 00:09:29.699 +transient menu again and I'll press "s x". Now we're + +00:09:29.700 --> 00:09:34.639 +looking at all blocked peers. Both Mallory and Darth show + +00:09:34.640 --> 00:09:37.959 +up. If I scroll down in the peer list, we'll see that Mallory + +00:09:37.960 --> 00:09:42.519 +is listed under blocked sources, and Darth is listed under + +00:09:42.520 --> 00:09:45.559 +blocked non-sources. This view has gotten a little bit busy. + +00:09:45.560 --> 00:09:49.319 +Let's say that we're only interested in how Alice + +00:09:49.320 --> 00:09:54.519 +relates to Mallory. I'll open the transient menu, and I + +00:09:54.520 --> 00:09:58.519 +will filter the graph to show paths only to Mallory. I'll + +00:09:58.520 --> 00:10:05.519 +press "o a", type in Mallory, and hit enter. Now we see that + +00:10:05.520 --> 00:10:11.479 +Mallory has a bold border and "kb3" and Darth are missing from + +00:10:11.480 --> 00:10:16.679 +the graph. Eve shows up because there's a path from Alice to + +00:10:16.680 --> 00:10:22.479 +Mallory that goes through Eve. Same for Bob. We can also add + +00:10:22.480 --> 00:10:28.599 +more than one peer in this view. I'll press "o a" again, and + +00:10:28.600 --> 00:10:34.719 +this time I'll choose Darth. Now Darth and Mallory have bold + +00:10:34.720 --> 00:10:38.839 +borders, and "kb3" is still missing. We can remove Mallory and + +00:10:38.840 --> 00:10:42.799 +Darth one at a time with "o r", or we can press C-u, the + +00:10:42.800 --> 00:10:47.679 +universal prefix argument, and then "o r" to remove both + +00:10:47.680 --> 00:10:51.239 +Mallory and Darth from the list. Now we're back to seeing + +00:10:51.240 --> 00:10:55.679 +everybody. This view of the graph is somewhat simplified + +00:10:55.680 --> 00:10:57.537 +because we're showing only + +00:10:57.538 --> 00:11:00.238 +the shortest paths between peers. + +00:11:00.239 --> 00:11:06.039 +If I press Shift-s now we're looking at all paths. + +00:11:06.040 --> 00:11:10.039 +Here, we can see that in addition to going from Alice to + +00:11:10.040 --> 00:11:15.519 +Bob as a source directly, we also go from Alice to Bob through + +00:11:15.520 --> 00:11:21.079 +Eve as a source. Let's go back to showing only the shortest + +00:11:21.080 --> 00:11:27.719 +paths. Currently, the max hops for sources and for blockers + +00:11:27.720 --> 00:11:31.679 +is set to 3. Let's see what happens if we set the + +00:11:31.680 --> 00:11:33.519 +blockers max hops to 0. + +00:11:35.800 --> 00:11:39.479 +After the graph reloads, we now see that Mallory + +00:11:39.480 --> 00:11:43.286 +shows up as a source, not as a blocked source. + +00:11:43.287 --> 00:11:44.759 +This is because Bob, + +00:11:44.760 --> 00:11:49.199 +who is one hop away from Alice, is no longer included as a + +00:11:49.200 --> 00:11:52.479 +blocker, because we've set the blockers max hops to 0. And + +00:11:52.480 --> 00:11:57.519 +since Bob is not a blocker, the fact that Bob blocks Mallory + +00:11:57.520 --> 00:12:01.719 +doesn't factor in. While Alice is the only one who gets to + +00:12:01.720 --> 00:12:05.959 +decide who her direct sources, blockers, and blocked peers + +00:12:05.960 --> 00:12:10.239 +are, anyone can view Alice's peer graph, tinker with the + +00:12:10.240 --> 00:12:14.439 +sources or blockers max hops, and use her list of sources to + +00:12:14.440 --> 00:12:19.239 +do a search. Let's see what happens if we set sources max + +00:12:19.240 --> 00:12:24.719 +hops to 2. Well, the graph doesn't change, because we only + +00:12:24.720 --> 00:12:29.239 +ever went out 2 hops anyway. Let's set source's max hops to 1. + +00:12:30.140 --> 00:12:35.159 +Now we only see Bob and Eve, since "kb3" and Mallory are + +00:12:35.160 --> 00:12:43.079 +2 hops out. Source hops 0. Now we're left with just Alice. + +00:12:44.120 --> 00:12:47.999 +Now I'd like to create a new hyperdrive and add Alice as a + +00:12:48.000 --> 00:12:52.731 +source. I'll run M-x hyperdrive-new. + +00:12:52.732 --> 00:12:53.812 +Now it's prompting me + +00:12:53.813 --> 00:12:57.479 +for a new hyperdrive seed. A seed is a string of characters + +00:12:57.480 --> 00:13:01.359 +that's combined with your secret key, which is generated + +00:13:01.360 --> 00:13:04.719 +for you by the gateway program, in order to create a new + +00:13:04.720 --> 00:13:10.679 +public key for each new hyperdrive. I'll type in "Joseph". + +00:13:10.680 --> 00:13:15.319 +A new drive. Now, I'll right-click on my own name, and in the + +00:13:15.320 --> 00:13:21.599 +context menu, I'll choose "Set Relation From". From Joseph... + +00:13:21.600 --> 00:13:32.279 +to Alice...as a source. Now, I'll right-click on my name again, + +00:13:32.280 --> 00:13:40.919 +and click on "Peer Graph". Sources max hops, let's say three + +00:13:40.920 --> 00:13:41.879 +and [three] for blockers as well, + +00:13:45.440 --> 00:13:49.399 +Here's the peer graph from my newly created + +00:13:49.400 --> 00:13:54.199 +hyperdrive's perspective. Mallory is included as a + +00:13:54.200 --> 00:13:58.519 +source, three hops from the root. Let's open the list view. + +00:14:01.220 --> 00:14:06.439 +If we were to mark Alice as a blocker by clicking on this + +00:14:06.440 --> 00:14:10.319 +button in the blocker column next to the petname for Alice, + +00:14:12.120 --> 00:14:16.959 +Then we see that Mallory shows up as a blocked source. Only + +00:14:16.960 --> 00:14:21.359 +now that Joseph includes Alice as a blocker does the fact + +00:14:21.360 --> 00:14:26.399 +that Bob blocked Mallory take effect. You can click on + +00:14:26.400 --> 00:14:30.539 +another peer to set them as the root hyperdrive. I'll click + +00:14:30.540 --> 00:14:34.999 +on Eve. Now we're looking at the peer graph from Eve's + +00:14:35.000 --> 00:14:39.519 +perspective. This peer graph view has a history. If I open + +00:14:39.520 --> 00:14:42.359 +the transient menu, you'll see here there's a back and a + +00:14:42.360 --> 00:14:47.359 +forward button. Back is bound to "l" for "left". If I press "l", + +00:14:48.440 --> 00:14:51.839 +we're looking at the graph from Joseph's perspective. If I + +00:14:51.840 --> 00:14:56.279 +press "l" again, now we're looking at Alice, as at the + +00:14:56.280 --> 00:15:01.439 +beginning. I'll press "r" to go forward, and "r" again, and now + +00:15:01.440 --> 00:15:04.734 +we're back at Eve. Now, I'd like to show you + +00:15:04.735 --> 00:15:08.337 +the hyperdrive-org-transclusion package we published. + +00:15:08.338 --> 00:15:10.358 +I'll open up the hyperdrive manual + +00:15:10.359 --> 00:15:14.399 +to see how to install it. + +00:15:15.680 --> 00:15:20.999 +Now, from here, I'll press "m" and type in transclusion to jump + +00:15:21.000 --> 00:15:23.599 +straight to the "Org-transclusion integration" section of + +00:15:23.600 --> 00:15:27.079 +the manual. To summarize, we can install + +00:15:27.080 --> 00:15:30.879 +hyperdrive-org-transclusion with + +00:15:32.220 --> 00:15:33.919 +M-x package-install RET hyperdrive-org-transclusion. + +00:15:37.000 --> 00:15:42.159 +Then, once this is done, we will copy the following snippet + +00:15:43.780 --> 00:15:47.559 +and add it either to our init.el file or, in this case, I'll + +00:15:47.560 --> 00:15:52.439 +just evaluate it. Now, hyperdrive-org-transclusion-mode is + +00:15:52.440 --> 00:15:52.879 +enabled. + +00:15:58.100 --> 00:16:01.479 +Let's go back to the hello.org file in Alice's hyperdrive. + +00:16:01.480 --> 00:16:07.239 +I'll right-click on Alice, then click "Open Hyperdrive", and + +00:16:07.240 --> 00:16:11.359 +hit RET on hello.org. This time, I'm not prompted to mark + +00:16:11.360 --> 00:16:16.199 +Alice's hyperdrive as safe, since we did it already. I'll + +00:16:16.200 --> 00:16:20.719 +navigate to the "Check out my peers" heading. Then I'll run + +00:16:20.720 --> 00:16:28.359 +M-x org-store-link. Now, I'll create a new file in my + +00:16:28.360 --> 00:16:32.959 +hyperdrive by running M-x hyperdrive-find-file. I'll + +00:16:32.960 --> 00:16:38.488 +select my hyperdrive and I'll call this new file + +00:16:38.489 --> 00:16:45.919 +response-to-alice.org. + +00:16:45.920 --> 00:16:50.780 +Now, I'll paste in a response that I've written. + +00:16:50.781 --> 00:16:57.979 +I'll go to the bottom and I will run M-x org-insert-link + +00:16:57.980 --> 00:16:59.423 +and I'll insert the link + +00:16:59.424 --> 00:17:02.799 +that I stored earlier. As a link + +00:17:02.800 --> 00:17:07.759 +description, I'll change it to + +00:17:08.880 --> 00:17:09.879 +"Snippet from Alice's hyperdrive file". + +00:17:12.700 --> 00:17:18.399 +I'll save my hyperdrive file. + +00:17:18.400 --> 00:17:21.839 +Now, to show that the link works, I'll just kill this buffer + +00:17:21.840 --> 00:17:27.099 +showing the hello.org file, and I'll click on the link. + +00:17:27.100 --> 00:17:29.487 +Now, in addition to linking from my file + +00:17:29.488 --> 00:17:31.488 +to the heading in Alice's file, + +00:17:31.489 --> 00:17:35.699 +I'd like to transclude this heading's content in my file. + +00:17:35.700 --> 00:17:38.634 +So I'll go to the link in my file and run + +00:17:38.635 --> 00:17:45.400 +M-x org-transclusion-make-from-link + +00:17:45.401 --> 00:17:47.879 +and I'll save my file again. + +00:17:47.880 --> 00:17:50.504 +All that's been added is another link, + +00:17:50.505 --> 00:17:54.433 +prefixed with this transclude keyword. + +00:17:54.434 --> 00:17:57.034 +To make the transclusion show up inline, + +00:17:57.035 --> 00:18:02.359 +I'll run M-x org-transclusion-add. The content + +00:18:02.360 --> 00:18:05.359 +of Alice's file hasn't been copied into mine. It's just + +00:18:05.360 --> 00:18:12.959 +being transcluded. If I run M-x org-transclusion-remove, + +00:18:12.960 --> 00:18:15.439 +you'll see that the underlying content is still + +00:18:15.440 --> 00:18:21.639 +just the transclude keyword and the link. + +00:18:21.640 --> 00:18:24.319 +Now some time has passed and Alice has updated her + +00:18:24.320 --> 00:18:29.879 +hyperdrive file. She wrote, "Please add me as a source." Since + +00:18:29.880 --> 00:18:33.559 +the transclude link that I added in my file does not specify a + +00:18:33.560 --> 00:18:36.879 +version, it will always transclude the latest version of + +00:18:36.880 --> 00:18:42.639 +Alice's hello.org file. If I run M-x org-transclusion-add + +00:18:42.640 --> 00:18:46.719 +once more, we'll see that the latest version of Alice's + +00:18:46.720 --> 00:18:51.679 +file gets transcluded into mine. Let's say that I want to + +00:18:51.680 --> 00:18:54.959 +transclude the previous version of Alice's hello.org + +00:18:54.960 --> 00:18:58.879 +file, and I don't want my transclusion to change when Alice + +00:18:58.880 --> 00:19:02.919 +updates her file. That's possible too. I'll go over to her + +00:19:02.920 --> 00:19:09.759 +file and run M-x hyperdrive-open-previous-version. Now + +00:19:09.760 --> 00:19:14.079 +when I widen the window a little, we can see in the mode line + +00:19:14.080 --> 00:19:18.279 +that this is version 57. For an explanation of what the + +00:19:18.280 --> 00:19:21.599 +version numbers mean, check out the last video or the info + +00:19:21.600 --> 00:19:25.759 +manual. For now, I'll go down to her "Check out my peers" + +00:19:25.760 --> 00:19:32.999 +heading and run M-x org-store-link. Now, in my response to + +00:19:33.000 --> 00:19:39.159 +Alice, I'll insert the link. I'll run org-transclusion-make-from-link. + +00:19:39.160 --> 00:19:44.759 +Now there are two transclusions. The first + +00:19:44.760 --> 00:19:47.719 +transclusion will update whenever Alice updates her file, + +00:19:47.720 --> 00:19:52.919 +and the second transclusion is pinned to version 57. + +00:19:52.920 --> 00:19:53.356 +That covers hyperdrive-install, the peer graph, and + +00:19:53.357 --> 00:19:58.298 +hyperdrive-org-transclusion. + +00:19:58.299 --> 00:20:00.519 +Feel free to check out the hyperdrive.el + +00:20:00.520 --> 00:20:04.119 +info manual in the ushin hyperdrive here, or on the + +00:20:04.120 --> 00:20:08.439 +ushin.org website. Thanks to the folks at Sopranica, we + +00:20:08.440 --> 00:20:11.879 +have a public XMPP group chat you can join, either using an + +00:20:11.880 --> 00:20:15.919 +XMPP client or anonymously from your browser. If you use + +00:20:15.920 --> 00:20:19.799 +Matrix, there's also a bridge. Thank you for watching, and + +00:20:19.800 --> 00:20:22.519 +Thank you to the EmacsConf organizers and all the + +00:20:22.520 --> 00:20:25.160 +presenters who made this wonderful event possible. diff --git a/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt new file mode 100644 index 00000000..5f0d3fc5 --- /dev/null +++ b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt @@ -0,0 +1,346 @@ +WEBVTT + +NOTE Q: Do you have any suggestions for interactive debugging of Julia code in Emacs? + +00:00:00.000 --> 00:00:05.319 +... answer to that. I, I think the infrastructure for an + +00:00:05.320 --> 00:00:08.599 +ecosystem in Julia in general is as mature as other + +00:00:08.600 --> 00:00:12.559 +languages, and even debugger infiltrator themselves are + +00:00:12.560 --> 00:00:17.519 +not particularly well developed. And so I don't think + +00:00:17.520 --> 00:00:21.519 +there's much we can do about that right now. I think that it's + +00:00:21.520 --> 00:00:25.999 +unfortunate that most of the development for these type of + +00:00:26.000 --> 00:00:31.759 +tools is tightly linked to VS code. But even there, I don't + +00:00:31.760 --> 00:00:35.719 +think that there's much done in terms of interactive + +00:00:35.720 --> 00:00:42.359 +debugging. So I, yeah, I think this has to be worked on mostly + +00:00:42.360 --> 00:00:47.519 +on the Julia side first. And then probably Emacs can get + +00:00:47.520 --> 00:00:51.239 +something out of that. I know that there's development in + +00:00:51.240 --> 00:00:55.559 +debugger.jl itself for future releases to make it at least + +00:00:55.560 --> 00:01:01.839 +faster and more stable. But yeah, I think we're not there as + +00:01:01.840 --> 00:01:06.879 +Julia community itself. So let alone Emacs, integration + +00:01:06.880 --> 00:01:11.239 +with Emacs. The way I personally debug is mostly using, + +00:01:11.240 --> 00:01:15.199 +well, debugger and infiltrator with Julia REPL mode in + +NOTE Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs? + +00:01:15.200 --> 00:01:21.679 +Emacs. The second question, can you call out something that + +00:01:21.680 --> 00:01:26.839 +Julia has that Emacs does not and which could benefit Emacs? + +00:01:26.840 --> 00:01:31.879 +Nothing stands out to me except the usual multi-threading + +00:01:31.880 --> 00:01:36.119 +and things like this. I don't necessarily see something + +00:01:36.120 --> 00:01:42.479 +that Julia has going on that DMX doesn't have, but I see some + +00:01:42.480 --> 00:01:45.839 +differences and approaches that I think are important, + +00:01:45.840 --> 00:01:49.759 +like the community. I think Julia is a very active and tight + +00:01:49.760 --> 00:01:54.159 +community. Julia uses Slack and is very, very active. I + +00:01:54.160 --> 00:01:56.559 +think he might say something like that, but it's maybe more + +00:01:56.560 --> 00:02:01.799 +on Reddit, IRC. JuliaCon is big and brings together lots and + +00:02:01.800 --> 00:02:05.159 +lots of people. And I think the sense of community is really + +00:02:05.160 --> 00:02:10.479 +powerful. It's very easy to essentially meet people that + +00:02:10.480 --> 00:02:12.919 +are interested in what we're building and interested in + +00:02:12.920 --> 00:02:15.999 +what we're doing and interested in Julian, our, you know, + +00:02:16.000 --> 00:02:21.239 +hacker spirit. I think Emacs is a very strong community. + +00:02:21.240 --> 00:02:24.279 +We're here on a Saturday talking about Emacs, which again + +00:02:24.280 --> 00:02:29.679 +proves that we are doing this. But I'd like to emphasize that + +00:02:29.680 --> 00:02:33.639 +the community is a really important aspect in Julia that I + +00:02:33.640 --> 00:02:38.159 +think we should double down on our side. The next question is + +NOTE Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang? + +00:02:38.160 --> 00:02:46.519 +about Lisp syntax with Julia, like what we can do in Python. + +00:02:46.520 --> 00:02:52.359 +I don't think that's, I don't, I am not aware of any package + +00:02:52.360 --> 00:02:56.879 +that does that. I would bet that there's something there. I + +00:02:56.880 --> 00:03:01.519 +think that that's possible. Indeed, there used to be a Lisp + +00:03:01.520 --> 00:03:08.079 +interpreter in Julia itself until the latest release. The + +00:03:08.080 --> 00:03:12.039 +syntax parsing was done with a Lisp, it was called TemtoList + +00:03:12.040 --> 00:03:18.679 +indeed. I think this got rid, get rid of this for our more + +00:03:18.680 --> 00:03:23.039 +Julia-based solution that is faster and with better code + +00:03:23.040 --> 00:03:28.599 +provenance. I think that it should be possible to use the + +00:03:28.600 --> 00:03:33.319 +metaprogramming features in Julia to change the structure + +00:03:33.320 --> 00:03:38.159 +of your syntax to be a Lispy syntax. I do want to emphasize + +00:03:38.160 --> 00:03:43.879 +that Julia is heavily inspired by Lisp, so I wouldn't be + +00:03:43.880 --> 00:03:49.239 +surprised if if something like this were possible. + +00:03:49.240 --> 00:03:51.239 +I have tried Julia Snail. + +NOTE Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp. + +00:03:51.240 --> 00:03:54.399 +So the next question is about Julia + +00:03:54.400 --> 00:03:58.199 +Snail. I found Julia REPL to be a little bit easier to set up + +00:03:58.200 --> 00:04:02.839 +and use. So I just settled on that. I should maybe revisit + +00:04:02.840 --> 00:04:05.999 +that. In particular, I use the Julia REPL with the vterm + +00:04:06.000 --> 00:04:10.959 +backend, which essentially makes a companion REPL to my + +00:04:10.960 --> 00:04:15.439 +scripts. And that works for me. I do think that the tooling + +00:04:15.440 --> 00:04:19.239 +uh, could be improved. I think there is definitely much room + +00:04:19.240 --> 00:04:26.079 +and I would like to see improvement in that area. Um, and, uh, + +NOTE Q: Is there a data inspector for a Julia REPL available that you can use in Emacs? + +00:04:26.080 --> 00:04:31.639 +so we have data inspector for Julia REPL. + +00:04:31.640 --> 00:04:37.279 +I don't think so. I don't, is there any data inspector + +00:04:37.280 --> 00:04:40.439 +in for, for the Julia REPL that we can use in Emacs? + +00:04:40.440 --> 00:04:44.839 +I'm not sure. I don't think so. + +00:04:44.840 --> 00:04:47.799 +I think the way I look at data is + +00:04:47.800 --> 00:04:50.519 +essentially ignoring Emacs when encoded. It's just using the + +00:04:50.520 --> 00:04:56.839 +REPL. And again, with Julia REPL. So I'm not aware of any + +00:04:56.840 --> 00:05:00.479 +specialized tool And again, maybe this is, again, a good + +00:05:00.480 --> 00:05:04.279 +moment to emphasize that tooling, the Julia community + +00:05:04.280 --> 00:05:09.079 +clusters around VS Code. And there is tools like the, pretty + +00:05:09.080 --> 00:05:14.199 +much all the work with VS Code, unfortunately. And while + +00:05:14.200 --> 00:05:17.759 +there's a very, very decent Julia mode and Julia repo mode + +00:05:17.760 --> 00:05:21.439 +and Julia snail, there's definitely, definitely room for + +00:05:21.440 --> 00:05:24.359 +improvement. + +NOTE Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs? + +00:05:24.360 --> 00:05:27.759 +Next, we have a question about literate programming in + +00:05:27.760 --> 00:05:32.439 +Julia. I haven't done much of it with Org Babel or + +00:05:32.440 --> 00:05:37.079 +anything else. I haven't done much of it. I can say that Julia + +00:05:37.080 --> 00:05:40.719 +has developed a new iteration of notebooks called Pluto. + +00:05:40.720 --> 00:05:47.119 +Here I'm thinking about Jupyter notebooks. The Pluto + +00:05:47.120 --> 00:05:55.359 +notebooks for Julia try to remove a bunch of the pain points + +00:05:55.360 --> 00:06:00.439 +that Jupyter notebooks have, meaning you cannot easily + +00:06:00.440 --> 00:06:03.639 +commit them to Git or things like this. + +00:06:03.640 --> 00:06:09.279 +I haven't used them, but I know some people are very fond of + +00:06:09.280 --> 00:06:13.559 +them. And so I think that that's what some of the Julia + +00:06:13.560 --> 00:06:16.879 +community would use for notebooks. And I think they can + +00:06:16.880 --> 00:06:22.239 +interact with Emacs with no problem. And that would be a form + +00:06:22.240 --> 00:06:26.879 +of later programming. But if you can do it in Python, you can + +00:06:26.880 --> 00:06:32.119 +do it in Julia. I think there is no reason. And actually, you + +00:06:32.120 --> 00:06:35.839 +can take advantage of all this just-in-time or + +00:06:35.840 --> 00:06:38.239 +just-out-of-time compilation by keeping the same + +00:06:38.240 --> 00:06:45.199 +session. So I think it will be definitely a nice use case. So + +00:06:45.200 --> 00:06:49.199 +these are the questions that I see here. I'm going to scroll + +00:06:49.200 --> 00:06:52.759 +through the comments and see if there's something that I + +00:06:52.760 --> 00:06:57.319 +should say about comments. I'm excited people want to learn + +00:06:57.320 --> 00:07:02.519 +Julia. I have to say that if I want to do GPU computing + +00:07:02.520 --> 00:07:06.399 +nowadays, I find it much easier to do it with Julia than with + +00:07:06.400 --> 00:07:11.759 +CUDA. So I encourage people to look into that. And I do, + +00:07:11.760 --> 00:07:19.359 +again, I would like to share what makes me excited about + +00:07:19.360 --> 00:07:23.799 +Emacs, about this being open, being collaborative, being + +00:07:23.800 --> 00:07:26.399 +respectable with documentation is something that I find in + +00:07:26.400 --> 00:07:30.999 +Julia. So I think people that are excited about the same + +00:07:31.000 --> 00:07:35.279 +features will find a little bit of joy in working with Julia. + +00:07:35.280 --> 00:07:41.999 +I think I addressed what I have here. I don't know if there's + +00:07:42.000 --> 00:07:43.559 +anything else that I should add. + +00:07:43.560 --> 00:07:52.879 +It took me a minute to unmute there. + +00:07:52.880 --> 00:07:57.519 +No, I think that was awesome. And thank you so much. + +00:07:57.520 --> 00:08:00.119 +I guess I thought it would + +00:08:00.120 --> 00:08:06.279 +collapse that shared area on BBB, my mistake, on the stream, + +00:08:06.280 --> 00:08:12.359 +or I would have left it open. But in any case, no, I thought + +00:08:12.360 --> 00:08:15.079 +that was great. You did a great job of responding to all the + +00:08:15.080 --> 00:08:17.839 +questions and comments. And thank you again so much for your + +00:08:17.840 --> 00:08:23.199 +talk and getting us all excited to learn Julia. Thank you. + +00:08:23.200 --> 00:08:27.759 +Enjoy EmacsConf. And again, thanks so much for attending, + +00:08:27.760 --> 00:08:42.400 +for being EmacsConf. Thank you. diff --git a/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt new file mode 100644 index 00000000..b6e69c85 --- /dev/null +++ b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt @@ -0,0 +1,616 @@ +WEBVTT captioned by gabriele + +00:00:00.000 --> 00:00:02.359 +Hello, I'm very excited to tell you + +00:00:02.360 --> 00:00:03.679 +about shared philosophies + +00:00:03.680 --> 00:00:06.479 +between the Julia programming language and Emacs. + +00:00:06.480 --> 00:00:08.679 +While Julia and Emacs might look like + +00:00:08.680 --> 00:00:10.279 +different pieces of software, + +00:00:10.280 --> 00:00:13.439 +I think there is profound commonalities between the two. + +00:00:13.440 --> 00:00:16.359 +Let's start by introducing Julia. + +00:00:16.360 --> 00:00:19.719 +Julia is a high-level dynamic programming language. + +00:00:19.720 --> 00:00:21.679 +Julia is free and open source software + +00:00:21.680 --> 00:00:24.639 +and is used primarily for scientific computing. + +00:00:24.640 --> 00:00:27.039 +The reason Julia is used for scientific computing + +00:00:27.040 --> 00:00:29.679 +is that while Julia is high level + +00:00:29.680 --> 00:00:32.559 +and has a syntax that looks like Python or MATLAB, + +00:00:32.560 --> 00:00:34.559 +Julia can be high performance. + +00:00:34.560 --> 00:00:36.519 +I use it to develop climate models + +00:00:36.520 --> 00:00:38.479 +that run on hundreds of GPUs. + +00:00:38.480 --> 00:00:43.399 +Models that are traditionally developed with C, C++, or Fortran. + +00:00:43.400 --> 00:00:44.759 +But how is this possible? + +00:00:44.760 --> 00:00:46.799 +How can Julia be high performance + +00:00:46.800 --> 00:00:48.799 +but also high level at the same time? + +00:00:48.800 --> 00:00:50.424 +What makes Julia, Julia? + +00:00:50.425 --> 00:00:52.469 +Well, what makes Julia, Julia + +00:00:52.470 --> 00:00:54.719 +is the idea of multiple dispatch. + +00:00:54.720 --> 00:00:58.999 +Multiple dispatch is the concept where a function call is resolved + +00:00:59.000 --> 00:01:02.359 +by looking at the types of every single argument involved. + +00:01:02.360 --> 00:01:04.959 +So, let's explore this with this example. + +00:01:04.960 --> 00:01:07.719 +Here, I define a function add that takes two objects + +00:01:07.720 --> 00:01:09.159 +and sums them together. + +00:01:09.160 --> 00:01:11.879 +And I call add with two different types. + +00:01:11.880 --> 00:01:14.639 +First with just integers and second with floats. + +00:01:14.640 --> 00:01:17.559 +So, let's look at what this produces. + +00:01:17.560 --> 00:01:20.439 +Here is the output of add in Julia. + +00:01:20.440 --> 00:01:23.279 +So, first we have add, a function with one method. + +00:01:23.280 --> 00:01:24.839 +I'm going to explain this in a second. + +00:01:24.840 --> 00:01:28.719 +And then we have our return values 12 and 12.0. + +00:01:28.720 --> 00:01:30.799 +What we cannot see here is that + +00:01:30.800 --> 00:01:33.439 +Julia has specialized code + +00:01:33.440 --> 00:01:35.119 +for the two different function calls. + +00:01:35.120 --> 00:01:38.359 +For integers and for floating points. + +00:01:38.360 --> 00:01:42.239 +Let's make this more explicit by specifically providing + +00:01:42.240 --> 00:01:45.079 +a new method for the case with floating point. + +00:01:45.080 --> 00:01:47.599 +So here, now I have an add function + +00:01:47.600 --> 00:01:50.119 +specifically for floating point. Instead of taking + +00:01:50.120 --> 00:01:54.759 +A + B, this returns A exponent B. Let's call this. + +00:01:54.760 --> 00:01:56.799 +And what we can see here is that + +00:01:56.800 --> 00:01:58.319 +now we have two methods. + +00:01:58.320 --> 00:02:00.559 +So, we add a new method to the same function. + +00:02:00.560 --> 00:02:01.639 +This is a method that is + +00:02:01.640 --> 00:02:03.679 +specifically for floating points. + +00:02:03.680 --> 00:02:06.959 +And instead of having the value 12, we have 100. + +00:02:06.960 --> 00:02:09.039 +And this is where the trick lies. + +00:02:09.040 --> 00:02:13.879 +Julia compiles the most, um, specialized version + +00:02:13.880 --> 00:02:16.839 +that can be compiled. So, a version with integers, + +00:02:16.840 --> 00:02:19.199 +a version with floats. And in this, + +00:02:19.200 --> 00:02:22.679 +compiling is an actual compilation with LLVM + +00:02:22.680 --> 00:02:24.479 +with optimization and so on. + +00:02:24.480 --> 00:02:27.439 +This is not just ahead of time compilation. + +00:02:27.440 --> 00:02:30.719 +Soon as the Julia knows the type, + +00:02:30.720 --> 00:02:33.719 +a function is compiled if it's not compiled already + +00:02:33.720 --> 00:02:35.079 +and then it's used. + +00:02:35.080 --> 00:02:37.159 +When types are stable and well inferred, + +00:02:37.160 --> 00:02:40.079 +this can lead to code that is as performant + +00:02:40.080 --> 00:02:42.159 +or comparable to C and Fortran. + +00:02:42.160 --> 00:02:45.159 +So, this is what makes Julia, Julia. + +00:02:45.160 --> 00:02:48.439 +Multiple dispatch with just ahead of time compilation + +00:02:48.440 --> 00:02:49.719 +of highly efficient code. + +00:02:49.720 --> 00:02:53.439 +So now, what makes Emacs, Emacs? + +00:02:53.440 --> 00:02:56.679 +Well, in my opinion, what makes Emacs, Emacs + +00:02:56.680 --> 00:03:01.159 +is interactivity, extensibility, and community. + +00:03:01.160 --> 00:03:06.199 +And I claim that Julia has the same three. + +00:03:06.200 --> 00:03:09.079 +Interactivity, extensibility, and community + +00:03:09.080 --> 00:03:11.839 +are three key pillars for Julia. + +00:03:11.840 --> 00:03:14.599 +More specifically, Julia encourages a + +00:03:14.600 --> 00:03:17.079 +REPL-driven, introspective, interactive workflow. + +00:03:17.080 --> 00:03:19.879 +It's largely open to extension and modification + +00:03:19.880 --> 00:03:23.559 +to the point that most of Julia is written in Julia. + +00:03:23.560 --> 00:03:25.959 +And Julia has a thriving and welcoming community + +00:03:25.960 --> 00:03:28.799 +with lots of packages. So, let me showcase + +00:03:28.800 --> 00:03:31.079 +a little bit of this REPL-driven, introspective, + +00:03:31.080 --> 00:03:34.359 +interactive workflow with the hope that commonalities + +00:03:34.360 --> 00:03:36.759 +with Emacs will emerge naturally. + +00:03:36.760 --> 00:03:39.919 +So, let's start by opening a Julia REPL. + +00:03:39.920 --> 00:03:41.759 +Here, I have a Julia REPL. + +00:03:41.760 --> 00:03:44.399 +Let me give you a tour of the Julia REPL. + +00:03:44.400 --> 00:03:47.759 +So, the REPL comes with lots of useful features, + +00:03:47.760 --> 00:03:51.559 +from a shell to a package manager. + +00:03:51.560 --> 00:03:54.999 +So, for example, let's add the random package. + +00:03:55.000 --> 00:03:58.279 +Um, yeah, I have the random package. + +00:03:58.280 --> 00:03:59.279 +I can look at what's inside. + +00:03:59.280 --> 00:04:01.279 +We have the statistics with random + +00:04:01.280 --> 00:04:02.479 +in this particular environment. + +00:04:02.480 --> 00:04:05.719 +Environments are fully declarative. + +00:04:05.720 --> 00:04:08.039 +So here we have the dependencies of this environment. + +00:04:08.040 --> 00:04:10.239 +And I can explore in this manifest, + +00:04:10.240 --> 00:04:13.999 +the specific versions that are used. + +00:04:14.000 --> 00:04:17.719 +So we have a shell, we have a package manager, + +00:04:17.720 --> 00:04:20.559 +and then we have a very powerful help system. + +00:04:20.560 --> 00:04:24.199 +So, for example, I can ask for help for length. + +00:04:24.200 --> 00:04:26.639 +And here we can see we have, well, + +00:04:26.640 --> 00:04:30.999 +the help for length. Lots of information about + +00:04:31.000 --> 00:04:33.399 +how to call length, the expected return values, + +00:04:33.400 --> 00:04:36.119 +examples. And now you can probably start seeing that + +00:04:36.120 --> 00:04:37.759 +this is not that different from calling length. + +00:04:37.760 --> 00:04:42.119 +So this is the output for length, + +00:04:42.120 --> 00:04:44.999 +or for help for length in in Emacs. + +00:04:45.000 --> 00:04:47.959 +So we have help, and we can do more. + +00:04:47.960 --> 00:04:51.879 +We can even look at the source code for length. + +00:04:51.880 --> 00:04:57.079 +So now, what we can see here is that now, well, + +00:04:57.080 --> 00:04:58.919 +we cannot see because it's zoomed in + +00:04:58.920 --> 00:05:02.799 +because the font size is huge, but in this page here, + +00:05:02.800 --> 00:05:04.759 +we can see the implementation of length. + +00:05:04.760 --> 00:05:06.719 +It's this line here in the middle, + +00:05:06.720 --> 00:05:09.719 +or these few lines here in the middle. + +00:05:09.720 --> 00:05:12.079 +And as you... Let's do this again. + +00:05:12.080 --> 00:05:12.999 +As we can see here at the bottom, + +00:05:13.000 --> 00:05:13.799 +what we are looking at, + +00:05:13.800 --> 00:05:15.639 +this is the source code of Julia. + +00:05:15.640 --> 00:05:17.039 +We can change this. + +00:05:17.040 --> 00:05:20.039 +There's even a macro edit + +00:05:20.040 --> 00:05:22.759 +if you want to change its length. + +00:05:22.760 --> 00:05:24.599 +And yeah, I use the word macro. + +00:05:24.600 --> 00:05:28.639 +Julia supports metaprogramming. + +00:05:28.640 --> 00:05:30.359 +And actually metaprogramming is + +00:05:30.360 --> 00:05:32.079 +one of the key features in Julia. + +00:05:32.080 --> 00:05:33.639 +It's used extensively in the core, + +00:05:33.640 --> 00:05:36.399 +but it's also used extensively in packages, + +00:05:36.400 --> 00:05:40.079 +both to extend the Julia ecosystem and functionalities, + +00:05:40.080 --> 00:05:43.479 +but also to develop full domain specific languages. + +00:05:43.480 --> 00:05:47.239 +Some of the useful macros are, well, I don't know, + +00:05:47.240 --> 00:05:52.239 +like time. Here, we have a built-in + +00:05:52.240 --> 00:05:55.799 +basic performance tool in in in Julia. + +00:05:55.800 --> 00:06:00.479 +And I want to showcase more introspection, macros. + +00:06:00.480 --> 00:06:02.959 +But for that, I'm going to do it slightly different. + +00:06:02.960 --> 00:06:04.039 +I'm going to open a file + +00:06:04.040 --> 00:06:06.239 +example.jl where I define a + +00:06:06.240 --> 00:06:08.039 +function, or our + +00:06:08.040 --> 00:06:09.519 +function add, there was an asterisk + +00:06:09.520 --> 00:06:11.199 +and I will go back to that in a second. + +00:06:11.200 --> 00:06:15.239 +So now, I am going to include this this file, + +00:06:15.240 --> 00:06:18.199 +and I can call my function add, one and two, + +00:06:18.200 --> 00:06:22.639 +and we get three. And now, what I can do is this. + +00:06:22.640 --> 00:06:28.039 +I can look at what code gets compiled + +00:06:28.040 --> 00:06:31.359 +when I call my when I call 1 + 2. + +00:06:31.360 --> 00:06:33.359 +And here, now we can see + +00:06:33.360 --> 00:06:34.639 +that there is some integer stuff. + +00:06:34.640 --> 00:06:38.159 +But if I make this floating point, + +00:06:38.160 --> 00:06:40.239 +now the compiled code changes. + +00:06:40.240 --> 00:06:43.599 +Now, maybe assembly code + +00:06:43.600 --> 00:06:45.079 +is a little bit too hard to read, + +00:06:45.080 --> 00:06:48.639 +so I can look at the LLVM IR representation. + +00:06:48.640 --> 00:06:50.399 +In this case we can see that there is promotion. + +00:06:50.400 --> 00:06:52.239 +The promotion will probably go away + +00:06:52.240 --> 00:06:56.039 +if I make everything float. So this we have F add, + +00:06:56.040 --> 00:06:57.999 +floating point add for a double, + +00:06:58.000 --> 00:06:59.439 +but we can also look at + +00:06:59.440 --> 00:07:04.239 +the Julia lowered representation + +00:07:04.240 --> 00:07:06.079 +after the abstract syntax tree is produced. + +00:07:06.080 --> 00:07:07.919 +The reason I put this in a file is because + +00:07:07.920 --> 00:07:10.119 +now what I can do is I can change this. + +00:07:10.120 --> 00:07:14.079 +And now, one and two will be two. + +00:07:14.080 --> 00:07:16.879 +So this to me is very reminiscent + +00:07:16.880 --> 00:07:18.719 +of how I work in Emacs, + +00:07:18.720 --> 00:07:20.239 +where there is a global state + +00:07:20.240 --> 00:07:22.959 +that I can access and modify any time + +00:07:22.960 --> 00:07:27.159 +with no restrictions. And this happens in in Julia too. + +00:07:27.160 --> 00:07:29.559 +Typically, we don't want to modify functions + +00:07:29.560 --> 00:07:32.519 +that are in other packages or they are in base, + +00:07:32.520 --> 00:07:34.079 +but we can do that. For example, + +00:07:34.080 --> 00:07:37.639 +I can change what is plus for integers. + +00:07:37.640 --> 00:07:41.079 +And if I change with this plus + +00:07:41.080 --> 00:07:43.759 +and make it so that any two integers return zero, + +00:07:43.760 --> 00:07:46.319 +well, I can do this. This will break Julia because, + +00:07:46.320 --> 00:07:48.359 +well, Julia is built in Julia. + +00:07:48.360 --> 00:07:51.399 +So if we break this, well, nothing will work. + +00:07:51.400 --> 00:07:53.399 +But I can do that. This to me is one of + +00:07:53.400 --> 00:07:56.199 +the signs of the powerful, introspective, + +00:07:56.200 --> 00:07:58.479 +and powerful interactive type of workflows + +00:07:58.480 --> 00:07:59.279 +that Julia enables. + +00:07:59.280 --> 00:08:03.479 +Finally, I want to talk about the general registry. + +00:08:03.480 --> 00:08:06.399 +This is the equivalent of Melpa. + +00:08:06.400 --> 00:08:08.759 +It comes with with Julia. + +00:08:08.760 --> 00:08:11.119 +But this is very akin to Melpa. + +00:08:11.120 --> 00:08:14.479 +It's built upon Git essentially. + +00:08:14.480 --> 00:08:19.399 +It's collaborative, as relies heavily on GitHub, GitLab. + +00:08:19.400 --> 00:08:21.119 +It's heavily automated. + +00:08:21.120 --> 00:08:24.479 +And comes with lots and lots of tools and packages. + +00:08:24.480 --> 00:08:27.559 +What's beautiful about all these tools and packages + +00:08:27.560 --> 00:08:30.279 +is that in the same way many of Emacs packages + +00:08:30.280 --> 00:08:32.399 +just play nicely with each other + +00:08:32.400 --> 00:08:34.879 +without any input from the developers, + +00:08:34.880 --> 00:08:37.559 +the same is true for Julia packages. + +00:08:37.560 --> 00:08:40.679 +The Julia packages are highly composable, + +00:08:40.680 --> 00:08:42.879 +so two developers can develop + +00:08:42.880 --> 00:08:44.719 +two distinct packages + +00:08:44.720 --> 00:08:47.639 +that end up playing nicely together for free + +00:08:47.640 --> 00:08:51.879 +because of the intrinsic structure, intrinsic way + +00:08:51.880 --> 00:08:54.079 +Julia objects are built. + +00:08:54.080 --> 00:08:57.479 +So, with all of this, I also want to mention that + +00:08:57.480 --> 00:09:00.079 +the community, in addition to have all these packages, + +00:09:00.080 --> 00:09:02.599 +is highly active, highly collaborative. + +00:09:02.600 --> 00:09:06.159 +The community meets regularly on places like Slack, + +00:09:06.160 --> 00:09:08.199 +as opposed to the Emacs community + +00:09:08.200 --> 00:09:10.039 +that I'd say maybe meets on Reddit. + +00:09:10.040 --> 00:09:12.999 +So, with all of this, I want to thank you + +00:09:13.000 --> 00:09:16.560 +for your attention, enjoy Emacs, and enjoy Julia. diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt new file mode 100644 index 00000000..009f023d --- /dev/null +++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt @@ -0,0 +1,961 @@ +WEBVTT + +00:00:00.000 --> 00:00:05.159 +I'm doing well. Thank you so much. I was supposed to chat and + +00:00:05.160 --> 00:00:08.799 +write down stuff in the etherpad, but you guys accommodated + +00:00:08.800 --> 00:00:12.439 +me very nicely, swiftly, efficiently, in spite of my quirky + +00:00:12.440 --> 00:00:16.599 +last minute requests. Yeah, but that's okay because, well, + +00:00:16.600 --> 00:00:19.479 +it's funny that you talk about accommodating you and doing + +00:00:19.480 --> 00:00:22.159 +all the things we need to do because, frankly, your talk is + +00:00:22.160 --> 00:00:24.199 +about getting things done and you've mentioned the book, + +00:00:24.200 --> 00:00:27.439 +obviously, but the philosophy of getting things done is + +00:00:27.440 --> 00:00:30.759 +ultimately what we've been applying with Emacs Conf so that + +00:00:30.760 --> 00:00:33.759 +when we have curveballs thrown at us, like you've done right + +00:00:33.760 --> 00:00:36.399 +now, we can accommodate them because we made sure that + +00:00:36.400 --> 00:00:41.039 +everything else was done. So we'll move to questions and I + +00:00:41.040 --> 00:00:45.039 +invite viewers to go to the pad, to the etherpad that is on IRC + +00:00:45.040 --> 00:00:48.199 +and also on the talk page and put your questions over there. + +00:00:48.200 --> 00:00:51.559 +But first I wanted to make sure, Bala, that if you had + +00:00:51.560 --> 00:00:54.639 +anything that you could not include in your presentation, + +00:00:54.640 --> 00:01:00.159 +just to give you some time to mention them now if you want. I + +00:01:00.160 --> 00:01:09.119 +think I mentioned most of what I wanted to convey. I wanted to + +00:01:09.120 --> 00:01:12.479 +keep it general with whichever format people are + +00:01:12.480 --> 00:01:15.719 +comfortable with, whether it's Org Mode, whether it's + +00:01:15.720 --> 00:01:21.599 +plain text, whether it is docx. In fact, I was speaking to one + +00:01:21.600 --> 00:01:25.799 +of my friends and he said, Hey, I use Google Sheets to note + +00:01:25.800 --> 00:01:28.679 +down everything, all the tasks that are coming. I said, suit + +00:01:28.680 --> 00:01:33.439 +yourself, whatever it is. So, in that way, this methodology + +00:01:33.440 --> 00:01:37.359 +or whatever, the way which we follow is quite flexible. The + +00:01:37.360 --> 00:01:41.679 +system is quite flexible in whichever way you want to use it. + +00:01:41.680 --> 00:01:46.919 +go ahead and use it. But start emptying your teacup. That + +00:01:46.920 --> 00:01:50.599 +will be my first and foremost. I have nothing else to add per + +00:01:50.600 --> 00:01:54.879 +se. Okay, cool. So we'll start with the first question and + +00:01:54.880 --> 00:01:58.279 +I'll be reading the questions to you. And just so we know, we + +00:01:58.280 --> 00:02:01.079 +have about eight minutes of Q&A until we need to move to the + +00:02:01.080 --> 00:02:03.553 +next talk. All right, so first question. + +NOTE Q: What is TRIZ? + +00:02:03.554 --> 00:02:06.399 +What is TRIZ? Okay, + +00:02:06.400 --> 00:02:11.679 +this is a Russian methodology. It's pardon my, I mean poor + +00:02:11.680 --> 00:02:16.679 +Russian, but it translates to theory of inventive problem + +00:02:16.680 --> 00:02:21.919 +solving. So, that's what it translates to. What it is, is it + +00:02:21.920 --> 00:02:26.119 +is said that all the inventions problem solved so far in + +00:02:26.120 --> 00:02:30.239 +humanity. If you can categorize them, they fall into + +00:02:30.240 --> 00:02:36.159 +exactly 40 principles. That's one of the core tenets in + +00:02:36.160 --> 00:02:40.959 +theory of inventive problem solving. Also, that creative + +00:02:40.960 --> 00:02:46.319 +people have a process they follow. and in defining a problem + +00:02:46.320 --> 00:02:49.839 +and solving a problem. So, this is what I was trained in a + +00:02:49.840 --> 00:02:55.359 +company that I work for and I started using it and started + +00:02:55.360 --> 00:02:59.199 +applying it. So, creative process starts with defining a + +00:02:59.200 --> 00:03:02.799 +problem and solving a problem in a very systematic manner + +00:03:02.800 --> 00:03:06.239 +and you can be as creative as the creatives that we know about + +00:03:06.240 --> 00:03:11.759 +as the methodology talks about. So, that is what TRIZ is, + +00:03:11.760 --> 00:03:15.639 +Theory of Inventive Problem Solving. There is lot of open + +00:03:15.640 --> 00:03:19.799 +source literature like we have in Emacs. It is the same way + +00:03:19.800 --> 00:03:24.159 +with TRIZ, people share very generous and you can learn + +00:03:24.160 --> 00:03:29.879 +about it. what it can be useful for what in the core of our talk + +00:03:29.880 --> 00:03:34.679 +also is that many times we face conflicts, that is, I don't + +00:03:34.680 --> 00:03:38.719 +want to spend a lot of time, you know, figuring out a system + +00:03:38.720 --> 00:03:42.919 +like this. However, I want everything in one place, you + +00:03:42.920 --> 00:03:46.839 +know, how can that happen? So start little by little is one + +00:03:46.840 --> 00:03:50.399 +suggestion I have. Don't And this is also a contradiction we + +00:03:50.400 --> 00:03:55.199 +have, right? So, we need to spend a lot of time to set up things + +00:03:55.200 --> 00:03:58.559 +before we can start organizing our life. But there's not a + +00:03:58.560 --> 00:04:01.599 +lot of time because we haven't organized our life. So, we + +00:04:01.600 --> 00:04:04.839 +don't have that's a conundrum or a contradiction. That's + +00:04:04.840 --> 00:04:09.479 +what TRIZ methodology is about to identify that this is a + +00:04:09.480 --> 00:04:15.039 +contradiction and we have to resolve it not compromise. So, + +00:04:15.040 --> 00:04:18.319 +resolve it in a manner that gives you enough time to set up a + +00:04:18.320 --> 00:04:22.439 +system and enough time, free time to enjoy your life or focus + +00:04:22.440 --> 00:04:26.559 +on a project and be present when you're working with + +00:04:26.560 --> 00:04:31.439 +something. So, that's what the crux of the methodology is. + +00:04:31.440 --> 00:04:34.359 +Okay, splendid answer. Thank you. Moving on to the next one. + +NOTE Q: Do you agree that learning similar but different things again and again is ultimately wasted bandwidth? What can we do as technologists to push back against this? + +00:04:34.360 --> 00:04:37.199 +Thank you for this talk. Very interesting. One of the things + +00:04:37.200 --> 00:04:40.199 +that frustrates me about modern web development is the rate + +00:04:40.200 --> 00:04:43.279 +of churn when it comes to useful knowledge. I think Emacs can + +00:04:43.280 --> 00:04:45.679 +help to counteract against this by building lasting tools + +00:04:45.680 --> 00:04:48.279 +where mastery can be built. Do you agree that learning + +00:04:48.280 --> 00:04:50.799 +similar but different things again and again is ultimately + +00:04:50.800 --> 00:04:54.079 +wasted bandwidth? What can we do as technologists to push + +00:04:54.080 --> 00:05:00.159 +back against this? Yeah, this is an interesting one + +00:05:00.160 --> 00:05:04.879 +because, I mean, I'm like everyone else where a new package + +00:05:04.880 --> 00:05:09.439 +shows up. I mentioned that in my talk also, the first + +00:05:09.440 --> 00:05:12.879 +introduction. Sajajo's newsletter is amazing. It has all + +00:05:12.880 --> 00:05:15.599 +these new things coming up and new developments coming up. + +00:05:15.600 --> 00:05:18.879 +Same thing with web dev, I guess, you have new things coming + +00:05:18.880 --> 00:05:25.519 +up. So you want to learn that new thing. However, you need to + +00:05:25.520 --> 00:05:31.559 +also be aware that there are so many other projects and + +00:05:31.560 --> 00:05:37.879 +hobbies or life that's also waiting for you. And it's not a + +00:05:37.880 --> 00:05:42.799 +balancing act, but if you if you pay attention and be present + +00:05:42.800 --> 00:05:46.199 +and give whatever is in front of you, it's full attention. + +00:05:46.200 --> 00:05:50.959 +Then look back and connect. That's an interesting way, + +00:05:50.960 --> 00:05:55.759 +because hindsight is 20 20. Use it to your advantage. So my I + +00:05:55.760 --> 00:05:59.679 +don't know, I don't want to push back against this because + +00:05:59.680 --> 00:06:02.879 +some of it is just amazing because it thinks that you think is + +00:06:02.880 --> 00:06:05.759 +a waste of time and it's a distraction right now. could + +00:06:05.760 --> 00:06:09.719 +potentially be. I'm not saying it will be because there are + +00:06:09.720 --> 00:06:13.359 +things that are truly a waste of time that could truly + +00:06:13.360 --> 00:06:17.250 +potentially tie back to something and be really helpful. + +NOTE org-mode export, CSS, WeasyPrint + +00:06:17.251 --> 00:06:22.039 +I can give you an example from our Emacs part of my life. I was + +00:06:22.040 --> 00:06:27.839 +experimenting with CSS and Cascade style sheets and how I + +00:06:27.840 --> 00:06:34.599 +can customize it to use it in org mode export. For me at the + +00:06:34.600 --> 00:06:38.639 +time, it seemed like a waste of time. I was spending so much + +00:06:38.640 --> 00:06:42.599 +time. Then I parked it. I didn't do much about it later. But + +00:06:42.600 --> 00:06:47.319 +then one of my students said, "Your slides are too bulky for me + +00:06:47.320 --> 00:06:49.588 +to scroll through to get to exactly what I am looking for." + +00:06:49.589 --> 00:06:55.319 +I was using the reveal HTML and I used to pass on the link + +00:06:55.320 --> 00:07:00.999 +before. And the student sort of hinted at a handout. And now + +00:07:01.000 --> 00:07:05.319 +that's not easy with the RevealJS framework. It's rather + +00:07:05.320 --> 00:07:08.439 +tricky. At least I couldn't figure it out. but then it + +00:07:08.440 --> 00:07:10.879 +occurred to me that, hey, wait a second i've already looked at + +00:07:10.880 --> 00:07:15.799 +this CSS thing and maybe that'll help. It did help. I can + +00:07:15.800 --> 00:07:18.995 +drop in the name of the tool that I use now. + +00:07:18.996 --> 00:07:23.016 +It's called WeasyPrint uh let me use the uh + +00:07:23.017 --> 00:07:24.877 +i don't know if some... + +00:07:24.878 --> 00:07:32.100 +If you can look it up, W-E-A-S-Y print. + +00:07:32.101 --> 00:07:32.519 +That's what it's called. And that's + +00:07:32.520 --> 00:07:36.399 +mighty useful. That's really, really useful. You can + +00:07:36.400 --> 00:07:40.919 +customize it. You can change everything. I think I can even, + +00:07:40.920 --> 00:07:44.519 +I'll probably even share the code later on. It's really + +00:07:44.520 --> 00:07:48.959 +useful and I've been able to, so what seemed like a waste of + +00:07:48.960 --> 00:07:52.039 +time is actually something that became useful later on. But + +00:07:52.040 --> 00:07:55.519 +there are several other things I have truly wasted and it's + +00:07:55.520 --> 00:07:58.439 +not been useful because I couldn't connect the dots. So, + +00:07:58.440 --> 00:08:06.239 +perhaps the, let's say, wasteful of time so that you look at + +00:08:06.240 --> 00:08:09.159 +something and see how to connect back like the Zettelkasten + +00:08:09.160 --> 00:08:12.839 +that everybody talks about. I do not use it, but I like the + +00:08:12.840 --> 00:08:15.399 +idea that you look at it keeping in mind that you could + +00:08:15.400 --> 00:08:19.359 +probably connect to something later on. Perhaps, just try + +00:08:19.360 --> 00:08:24.519 +it out. OK, great, Bala. Sadly, we are a little short on time + +00:08:24.520 --> 00:08:27.159 +to answer all the questions that we have. I see three + +00:08:27.160 --> 00:08:31.039 +questions currently that can still be answered, and I don't + +00:08:31.040 --> 00:08:33.919 +think any of them would be answerable within just one + +00:08:33.920 --> 00:08:37.559 +minute. So what I suggest we do, Bala, feel free. Do you have + +00:08:37.560 --> 00:08:40.919 +access to the pad on your end? Yes, I do. I do. I have it here. + +00:08:40.920 --> 00:08:43.707 +Okay, cool. I'm putting the link on BBB just in case you need + +00:08:43.708 --> 00:08:44.919 +to review it. + +00:08:44.920 --> 00:08:47.039 +We're going to leave the room open. By the way, + +00:08:47.040 --> 00:08:49.399 +if anyone in the crowd wants to join so that they can ask the + +00:08:49.400 --> 00:08:51.919 +question directly with their voice to Bala, feel free to do + +00:08:51.920 --> 00:08:56.119 +so. The links are on the website. But Bala, if no one shows up, + +00:08:56.120 --> 00:08:58.559 +if you could just answer the three questions that we haven't + +00:08:58.560 --> 00:09:01.239 +covered yet, actually. Well, three questions because + +00:09:01.240 --> 00:09:04.359 +Sacha just put the link right there. That'd be lovely. And + +00:09:04.360 --> 00:09:06.080 +we'll make sure that the entire Q&A + +00:09:06.120 --> 00:09:07.839 +finds its place into the + +00:09:07.840 --> 00:09:10.719 +website afterwards. How does that sound for you? Yeah, + +00:09:10.720 --> 00:09:14.559 +sounds great. Thank you so much. I'll do make sure that I will + +00:09:14.560 --> 00:09:17.159 +have the answers there, but I'm going to wait here for some + +00:09:17.160 --> 00:09:20.559 +time so that somebody can join. Okay, sure. Any last word in + +00:09:20.560 --> 00:09:26.799 +10 seconds for the public? Well, empty your teacup and enjoy + +00:09:26.800 --> 00:09:27.199 +your life. + +00:09:27.200 --> 00:09:29.879 +Splendid. Thank you so much, Bala, for coming + +00:09:29.880 --> 00:09:32.359 +again to EmacsConf this year, and hopefully we'll be seeing + +00:09:32.360 --> 00:09:36.439 +you next year with further talks to discuss. Yeah, thank you + +00:09:36.440 --> 00:09:39.559 +so much. All right, and right now we'll be moving to the next + +00:09:39.560 --> 00:09:42.039 +talk of the day in about five seconds. Thank you again, Bala, + +00:09:42.040 --> 00:09:46.799 +and see you later. Bye. + +00:09:46.800 --> 00:09:49.399 +All right, we are a fair. So, Bala, I'll need to move to make + +00:09:49.400 --> 00:09:51.759 +sure that everything is working for the next talk. So, do as + +00:09:51.760 --> 00:09:55.320 +we said, and everything will be fine. Okay. + +00:09:55.333 --> 00:09:58.879 +Okay, bye-bye, Bala. Bye. Bye, Leo. + +00:09:58.880 --> 00:10:15.119 +Okay. + +00:10:15.120 --> 00:10:21.679 +Hello everyone, do you want me to answer a question? I'll be + +00:10:21.680 --> 00:10:23.399 +happy to answer that. You want to discuss something? You + +00:10:23.400 --> 00:10:27.759 +want to share something? I'm here for that. Please let me + +00:10:27.760 --> 00:11:06.479 +know. + +00:11:06.480 --> 00:11:10.599 +I'll hang around for another 5 to 10 minutes. Please let me + +00:11:10.600 --> 00:11:14.439 +know if you have any questions or if you're the ones who ask + +00:11:14.440 --> 00:11:36.739 +those questions also, please let me know. + +00:11:36.740 --> 00:11:38.560 +Are you there? + +00:11:38.625 --> 00:11:44.359 +Hi, yes. Some tips I've found for getting + +00:11:44.360 --> 00:11:50.399 +things done with an image for this stuff is like for + +00:11:50.400 --> 00:11:53.919 +separations you have like your Zettelkasten, you're + +00:11:53.920 --> 00:11:56.799 +getting things done, and then beyond that you have like + +00:11:56.800 --> 00:12:00.559 +dailies and global. + +00:12:00.560 --> 00:12:06.439 +Daily Zettelkasten would be journaling. Okay, okay. And + +00:12:06.440 --> 00:12:10.479 +then, like, global or daily getting things done, I + +00:12:10.480 --> 00:12:11.919 +generally like doing it in a week. + +00:12:11.920 --> 00:12:13.800 +And then splitting the, + +00:12:13.833 --> 00:12:16.120 +like, core tasks, secondary tasks, + +00:12:16.121 --> 00:12:17.220 +unplanned tasks, + +00:12:17.221 --> 00:12:22.079 +because those are good categories. + +00:12:22.080 --> 00:12:26.439 +I like what you're doing. + +00:12:26.440 --> 00:12:32.199 +Sorry? Do you do things like that at all? + +00:12:32.200 --> 00:12:38.279 +Or are there separations like with Zettelkasten + +00:12:38.280 --> 00:12:45.839 +versus the Getting Things Done? + +00:12:45.840 --> 00:12:52.279 +That's very interesting, yes. Daily log and weekly log, + +00:12:52.280 --> 00:12:56.800 +that's really helpful. I've also been trying to do that but + +00:12:56.821 --> 00:13:02.279 +not being able to successfully do a daily log plus a weekly + +00:13:02.280 --> 00:13:06.879 +log. So I gave up on the daily log because it seemed to be like a + +00:13:06.880 --> 00:13:12.479 +lot of overhead for me, so I just switch to a weekly review + +00:13:12.480 --> 00:13:16.759 +where I would log what's going on and how it is. But it's also + +00:13:16.760 --> 00:13:19.759 +interesting to see how it connects back to something that + +00:13:19.760 --> 00:13:22.639 +we've already worked on, or we've already learned + +00:13:22.640 --> 00:13:26.039 +somewhere, which is essentially using the ZIP and custom + +00:13:26.040 --> 00:13:30.239 +method. I probably want to try that a bit later on also. + +00:13:30.240 --> 00:13:34.199 +That's a great suggestion, nice idea. Oh, so some of the + +00:13:34.200 --> 00:13:38.039 +reason for the separation would be with the daily log, like, + +00:13:38.040 --> 00:13:42.839 +for instance, the title for the journal would be, Audinet + +00:13:42.840 --> 00:13:47.359 +would be the day, and it starts blank. And then, so if you have + +00:13:47.360 --> 00:13:50.159 +a straight thought, if you know it can go straight to your + +00:13:50.160 --> 00:13:53.479 +Zettelkasten, it goes into your Zettelkasten. If you don't + +00:13:53.480 --> 00:13:57.679 +know where it goes, it goes into your journal. And then same + +00:13:57.680 --> 00:14:01.839 +thing for like the week, is like your weeks always start + +00:14:01.840 --> 00:14:04.879 +emptying, so like if you have your core tasks, like if it + +00:14:04.880 --> 00:14:08.119 +spells beyond three, it's probably not a core task. So it + +00:14:08.120 --> 00:14:11.359 +gives you the idea of like, did I actually do what I wanted to + +00:14:11.360 --> 00:14:16.999 +yesterday, rather than getting 20 things done that I don't + +00:14:17.000 --> 00:14:22.159 +really care about that much. Yes. True, true, true. Very + +00:14:22.160 --> 00:14:23.759 +true. Yeah. + +00:14:23.760 --> 00:14:30.959 +Nice, nice talk. Thank you so much for sharing that. I've + +00:14:30.960 --> 00:14:35.279 +been a, let's say a start and many times I've started on + +00:14:35.280 --> 00:14:40.799 +Zettelkasten, you know, with little notes. They have these + +00:14:40.800 --> 00:14:43.399 +fleeting notes and permanent notes. I've tried many of + +00:14:43.400 --> 00:14:48.199 +those, but somehow it's not sticky for me. I've not been + +00:14:48.200 --> 00:14:51.399 +able to get rid of that. + +00:14:51.400 --> 00:14:55.919 +Yeah, I've got multiple attempts of using these systems, + +00:14:55.920 --> 00:15:01.999 +becoming too big or complex, like I don't know where to put a + +00:15:02.000 --> 00:15:06.679 +new piece of information, so then I throw the whole system + +00:15:06.680 --> 00:15:14.639 +away. So, this is my favorite iteration that I've done so + +00:15:14.640 --> 00:15:23.399 +far. I'm sure it'll change with time. Okay, okay, okay, I + +00:15:23.400 --> 00:15:25.079 +see. Yeah, I... + +NOTE Daily log + +00:15:25.080 --> 00:15:31.759 +I like the way the daily log works, that it has an embedded, + +00:15:31.760 --> 00:15:36.799 +you know, you just have a name stamp and then you embed + +00:15:36.800 --> 00:15:40.479 +something from another project. And when you go to the + +00:15:40.480 --> 00:15:44.559 +project page, the same thing shows up there in the log also. I + +00:15:44.560 --> 00:15:48.679 +wanted to take that feature and have that in my optimal + +00:15:48.680 --> 00:15:53.399 +setup. I'm not well versed enough to get that set up because I + +00:15:53.400 --> 00:15:56.799 +like that with that. Anything I enter in the daily log should + +00:15:56.800 --> 00:16:00.359 +show up in my project log also and vice versa. I want to + +00:16:00.360 --> 00:16:04.799 +execute on my project. I need that notes where I'm looking + +00:16:04.800 --> 00:16:10.599 +for. That's a key feature of that is with logseq you just have + +00:16:10.600 --> 00:16:14.160 +a button that says go to today. So you don't think about it and + +00:16:14.161 --> 00:16:18.060 +it always starts empty. It's that blank sheet that's always + +00:16:18.061 --> 00:16:23.079 +confirming you want the things that I used that before. + +00:16:23.080 --> 00:16:26.360 +One of the things I really wanted was, I want this, + +00:16:26.397 --> 00:16:29.198 +but I want it for Getting Things Done on my journal. + +00:16:29.199 --> 00:16:36.279 +I want two separate ones. + +00:16:36.280 --> 00:16:45.319 +Yeah, I like the, also I'm trying to see how to create pages + +00:16:45.320 --> 00:16:51.119 +quickly from within Org Mode. I know we can do the square + +00:16:51.120 --> 00:16:55.879 +bracket thing and enter and it should go into a new page. but + +00:16:55.880 --> 00:17:00.879 +it's not as seamless as in logseq or obsidian i'm trying to + +00:17:00.880 --> 00:17:06.239 +see how which way do i do that quickly so that you don't spend + +00:17:06.240 --> 00:17:10.439 +time on organizing once you have the bigger setup of the + +00:17:10.440 --> 00:17:14.959 +folder structures and the to do then it's easier to + +00:17:14.960 --> 00:17:18.599 +integrate it but if i'm starting from a business point of + +00:17:18.600 --> 00:17:22.679 +view it's rather tough for them to set it all up because the + +00:17:22.680 --> 00:17:27.679 +setup costs are very high in terms of system first and then + +00:17:27.680 --> 00:17:30.639 +start with this. Or like you said, you know we could also + +00:17:30.640 --> 00:17:33.759 +start with a blank sheet and then start filling it up and then + +00:17:33.760 --> 00:17:39.159 +see how to link up things or move it around so that it fits into + +00:17:39.160 --> 00:17:44.719 +your larger system or evolve a system as it goes. Don't start + +00:17:44.720 --> 00:17:47.959 +with the system in mind, but evolve it because it then fits + +00:17:47.960 --> 00:17:52.559 +into how you are rather than the you trying to adapt to the + +00:17:52.560 --> 00:17:53.159 +system. + +NOTE Capturing + +00:17:53.160 --> 00:18:00.559 +So, Denote and org-roam, they'll have a feature, like the + +00:18:00.560 --> 00:18:05.199 +note, you have a command called, let's see, create or + +00:18:05.200 --> 00:18:09.479 +existing note, and org-roam has an equivalent to that, and + +00:18:09.480 --> 00:18:14.999 +what that, you need to consult with that, as you are browsing + +00:18:15.000 --> 00:18:19.279 +your notes, you see that, and so if you're making a new note, + +00:18:19.280 --> 00:18:23.119 +power generation or something like that you'll easily see + +00:18:23.120 --> 00:18:27.799 +if you have any notes that are in power generation or like + +00:18:27.800 --> 00:18:30.839 +let's say you have something in power and if you don't you + +00:18:30.840 --> 00:18:34.079 +just go down to where you're just you know you don't have + +00:18:34.080 --> 00:18:39.599 +anything selected or so it's your what's in your uh what your + +00:18:39.600 --> 00:18:46.719 +current so you're not pre-selecting something existing + +00:18:46.720 --> 00:18:51.599 +and voila now you have a file And then you have consult so you + +00:18:51.600 --> 00:18:57.879 +can preview them as you move up and down the list. + +00:18:57.880 --> 00:19:02.319 +And then you also got Emacs + +00:19:02.320 --> 00:19:10.719 +Org Capture to just pop up a template + +00:19:10.720 --> 00:19:16.599 +capture buffer that is blank that you can tell to go into + +00:19:16.600 --> 00:19:20.919 +something like a journal or a GTD inbox. + +00:19:20.920 --> 00:19:27.279 +And yeah, this allows you to just make it like a specific + +00:19:27.280 --> 00:19:30.999 +buffer to do that specific task. I think Protesilaos has a + +00:19:31.000 --> 00:19:35.479 +video about how to make that into just a pop-up window. Like + +00:19:35.480 --> 00:19:41.519 +for instance, you're in your browser, you pop it up, Uh, jot + +00:19:41.520 --> 00:19:49.599 +down your task, press enter, and it's gone. Hmm, okay. Okay, + +NOTE Note silos + +00:19:49.600 --> 00:19:54.919 +okay, makes sense, makes sense. Yeah, for me, I wanted to try + +00:19:54.920 --> 00:20:01.079 +denote, but my folder structure, I found it very difficult + +00:20:01.080 --> 00:20:04.559 +to move it to a denote kind of a structure where the folder + +00:20:04.560 --> 00:20:08.519 +hierarchy is not as important because all nodes are treated + +00:20:08.520 --> 00:20:12.639 +the same. But for me, because I'm focusing on a project, I + +00:20:12.640 --> 00:20:17.079 +need only the project files show up. It was tricky for me to, + +00:20:17.080 --> 00:20:20.599 +because sometimes I share the folder with my colleagues and + +00:20:20.600 --> 00:20:24.519 +who are not on Emacs or more. So I can't show them all the + +00:20:24.520 --> 00:20:28.879 +files, all the notes. I just want that folder to be shared and + +00:20:28.880 --> 00:20:32.439 +ignore the todo.org that is there because it's not readable + +00:20:32.440 --> 00:20:37.679 +for them. So, I find it easier to share a folder level or a + +00:20:37.680 --> 00:20:41.639 +project level and that's why I stuck to this format which is a + +00:20:41.640 --> 00:20:46.639 +hierarchy of folders with the to-do inside those folders. + +00:20:46.640 --> 00:20:49.719 +That works very well for me, particularly keeping in mind + +00:20:49.720 --> 00:20:52.479 +that I need to share some folders sometimes with my + +00:20:52.480 --> 00:20:57.439 +colleagues. Whereas Denote with a flat structure or + +00:20:57.440 --> 00:21:01.919 +Roam with a flat structure, I find it very tricky to do that. + +00:21:01.920 --> 00:21:06.079 +With Denote, you can actually have, there's a feature + +00:21:06.080 --> 00:21:07.759 +called silos that will + +00:21:07.760 --> 00:21:13.199 +allow you to do both and I think you can make customized + +00:21:13.200 --> 00:21:17.959 +commands to go that work only in specific silos. I haven't + +00:21:17.960 --> 00:21:20.919 +messed around to it. too much with them. I don't think org run + +00:21:20.920 --> 00:21:24.719 +has anything like that though. Yes, I don't think they have + +00:21:24.720 --> 00:21:28.239 +that. But I remember seeing silos. Maybe I should give it + +00:21:28.240 --> 00:21:32.119 +another spin and see if that works. Because if it can solve my + +00:21:32.120 --> 00:21:36.519 +creating new node quickly from the denote part itself while + +00:21:36.520 --> 00:21:40.439 +I'm writing the nodes itself rather than go through the R + +00:21:40.440 --> 00:21:45.439 +capture. That will really help me in linking back and seeing + +00:21:45.440 --> 00:21:49.399 +how it maps to another project that I've already worked on + +00:21:49.400 --> 00:21:53.999 +from an archive and then bring it there. I think that's a good + +00:21:54.000 --> 00:21:57.639 +idea. I'll look at silos again. Also, with the silos, let's + +00:21:57.640 --> 00:22:03.719 +say you're going to use ripgrep on the directory, you could + +00:22:03.720 --> 00:22:07.799 +intentionally keep your Zettelkasten and your journal + +00:22:07.800 --> 00:22:13.159 +separated. in different folders, like, yeah. So that, + +00:22:13.160 --> 00:22:19.039 +like, if you direct them, or if you wanted to share folder by + +00:22:19.040 --> 00:22:23.399 +folder basis, yeah, you don't have to be the all-in or + +00:22:23.400 --> 00:22:30.759 +nothing approach. Yeah, that works. That works. + +00:22:30.760 --> 00:22:35.119 +Excellent. + +00:22:35.120 --> 00:22:37.839 +OK. + +00:22:37.840 --> 00:22:44.159 +Well, thank you so much for your time and for sharing what is + +00:22:44.160 --> 00:22:47.919 +really helpful for me. I hope the talk was useful for you. + +00:22:47.920 --> 00:22:53.839 +Yep. Thanks for sharing. Have fun with the rest of the Emacs + +00:22:53.840 --> 00:23:00.799 +camp. Okay. All right. Then see you then. Happy Emacs month + +00:23:00.800 --> 00:23:06.200 +to you too. Okay. Bye. Bye. diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt new file mode 100644 index 00000000..1b100ff2 --- /dev/null +++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt @@ -0,0 +1,53 @@ +WEBVTT + + +00:00:00.300 --> 00:01:33.849 +Introduction + +00:01:35.350 --> 00:01:46.474 +What is a skill? + +00:01:47.424 --> 00:02:09.890 +Why should you learn a new skill? + +00:02:11.040 --> 00:02:35.174 +What skills should you learn? + +00:02:35.974 --> 00:03:15.424 +What stops you from learning new skills? + +00:03:16.274 --> 00:04:40.374 +Empty your teacup + +00:04:40.424 --> 00:06:33.274 +Getting Things Done + +00:06:33.724 --> 00:07:32.740 +Archive + +00:07:33.290 --> 00:10:02.524 +Multiple steps + +00:10:02.874 --> 00:10:37.674 +Multiple projects + +00:10:37.874 --> 00:11:20.274 +What if the project stops before completion? + +00:11:20.974 --> 00:12:16.990 +What if you successfully complete the project? + +00:12:18.140 --> 00:12:53.519 +What if the project is ongoing and doesn't really end? + +00:12:54.320 --> 00:16:01.640 +What if you forget to visit the TODO files? + +00:16:02.740 --> 00:18:36.007 +Planning for the future + +00:18:36.957 --> 00:19:02.859 +Summary + +00:19:03.210 --> 00:19:36.650 +References diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt new file mode 100644 index 00000000..81bac250 --- /dev/null +++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt @@ -0,0 +1,1349 @@ +WEBVTT captioned by rodrigo, checked by sachac and bhavin + +NOTE Introduction + +00:00:00.300 --> 00:00:00.874 +Oh, wow! + +00:00:00.924 --> 00:00:05.740 +I'm gonna tell you about how I'm learning this new thing… + +00:00:07.790 --> 00:00:08.539 +Okay… + +00:00:11.840 --> 00:00:15.157 +Hey dude, I am recording, okay? So, I'll call you back + +00:00:15.757 --> 00:00:18.074 +yeah yeah I'm doing learning the new thing. + +00:00:18.724 --> 00:00:20.574 +Yeah yeah yeah later later later + +00:00:20.624 --> 00:00:22.924 +not right now later later later later. + +00:00:24.024 --> 00:00:24.990 +Sorry about that. + +00:00:25.390 --> 00:00:28.719 +Okay, as I was saying, I'm going to tell you all about + +00:00:28.920 --> 00:00:30.774 +how I'm learning this new thing. + +00:00:32.074 --> 00:00:36.440 +Ooh, Sacha Chua's Emacs newsletter is out. + +00:00:36.490 --> 00:00:38.874 +Maybe I should spend some time… + +00:00:38.924 --> 00:00:41.769 +Oh, wait a second. I have to learn this new thing. + +00:00:43.370 --> 00:00:46.790 +Haha. Okay, so I'm going to tell you + +00:00:47.290 --> 00:00:51.474 +how we can learn new skills in the middle of + +00:00:51.524 --> 00:00:54.359 +so many other wonderful things that you want to do + +00:00:54.360 --> 00:00:56.959 +and to speak to wonderful people that you have to speak to. + +00:00:57.460 --> 00:01:01.407 +My name is Bala Ramadurai and I'm going to be talking about + +00:01:01.607 --> 00:01:06.307 +the Survival of The Skillest, that's what I call it, okay? + +00:01:07.407 --> 00:01:11.574 +Survival of The Skillest. Thriving in the Learning Jungle. + +00:01:11.724 --> 00:01:14.149 +Here I'm going to give you some tips and techniques + +00:01:14.250 --> 00:01:17.490 +as to how you can learn skills, new skills. + +00:01:17.990 --> 00:01:22.974 +I'm going to give you a quote from a multi-talented teacher. + +00:01:23.224 --> 00:01:27.007 +He was the second president of my country, India. + +00:01:27.357 --> 00:01:29.440 +S. Radhakrishnan, he says, + +00:01:29.590 --> 00:01:32.324 +“When we think we know, we cease to learn.” + +00:01:32.674 --> 00:01:33.849 +That was his quote. + +NOTE What is a skill? + +00:01:35.350 --> 00:01:36.240 +What is a skill? + +00:01:36.540 --> 00:01:39.157 +A skill is the knowledge and the ability + +00:01:39.507 --> 00:01:42.707 +that enables you to do something well. + +00:01:43.157 --> 00:01:45.557 +There's the knowledge first and the ability + +00:01:45.607 --> 00:01:46.474 +and you have to do it well. + +NOTE Why should you learn a new skill? + +00:01:47.424 --> 00:01:50.324 +Right. So why should you learn a new skill? + +00:01:50.824 --> 00:01:53.474 +Now if you can pause this video, + +00:01:53.674 --> 00:01:55.224 +watching streaming part of the video, + +00:01:55.524 --> 00:01:57.990 +then come up with your own reasons. + +00:01:58.040 --> 00:02:00.290 +I'm going to give you my top three reasons + +00:02:00.340 --> 00:02:02.424 +that you might want to learn a new skill. + +00:02:02.574 --> 00:02:03.989 +Get ahead in your career. + +00:02:04.390 --> 00:02:08.040 +Look good or cool in your community or peer group + +00:02:08.640 --> 00:02:09.890 +or someone forced you to. + +NOTE What skills should you learn? + +00:02:11.040 --> 00:02:14.174 +Now, what skills should you learn? + +00:02:14.574 --> 00:02:16.124 +Ok, there could be a whole list. + +00:02:16.674 --> 00:02:19.479 +Let me take a stab at some of the ones + +00:02:19.529 --> 00:02:21.757 +that I think could be cool: bungee jumping, + +00:02:22.057 --> 00:02:24.340 +teaching your pet to pick up the newspaper + +00:02:24.390 --> 00:02:25.679 +without tearing it to shreds. + +00:02:26.330 --> 00:02:29.974 +Perhaps with Python rearing, I meant coding, coding, + +00:02:30.024 --> 00:02:31.090 +you can do learning coding. + +00:02:31.240 --> 00:02:34.340 +So you could list your own skills that you have to learn, + +00:02:34.390 --> 00:02:35.174 +you want to learn. + +NOTE What stops you from learning new skills? + +00:02:35.974 --> 00:02:38.540 +But what stops you from learning new skills? + +00:02:39.140 --> 00:02:41.030 +The most common reason that I've heard + +00:02:41.230 --> 00:02:42.690 +in the past is lack of time. + +00:02:42.790 --> 00:02:45.174 +“Oh Bala, I have to do so many things.” + +00:02:45.474 --> 00:02:47.540 +“I don't have the time to learn any new skills.” + +00:02:48.140 --> 00:02:50.440 +Lack of motivation could be another reason. + +00:02:50.740 --> 00:02:52.257 +Or you're just a rebel. + +00:02:53.307 --> 00:02:56.407 +Who is he or who is she to tell me what I should learn? + +00:02:56.507 --> 00:02:57.707 +I'm going to learn things like that. + +00:02:57.857 --> 00:03:00.040 +So then it stops you from learning a new skill. + +00:03:01.040 --> 00:03:04.307 +But there's even more fundamental reason + +00:03:04.357 --> 00:03:06.874 +for why we don't learn a new skill so easily. + +00:03:07.374 --> 00:03:10.074 +And this comes from the story of scholar in the teacup. + +00:03:10.174 --> 00:03:12.157 +I can pass on the link later to you. + +00:03:12.257 --> 00:03:15.424 +You can watch this, my own version of the story. + +NOTE Empty your teacup + +00:03:16.274 --> 00:03:18.740 +The ultimate truth in this story + +00:03:18.790 --> 00:03:20.757 +or the moral in this story is that + +00:03:21.057 --> 00:03:23.657 +we are filled with preconceived ideas + +00:03:23.957 --> 00:03:25.874 +and the Zen master in the story says, + +00:03:26.074 --> 00:03:27.540 +it's like a full teacup. + +00:03:27.940 --> 00:03:32.107 +In order to learn new skills, you have to empty your teacup. + +00:03:32.807 --> 00:03:34.674 +Now, how do you empty your teacup? + +00:03:34.724 --> 00:03:37.607 +You just can't pour everything out of your head, right? + +00:03:37.707 --> 00:03:39.824 +So how do you really empty your teacup? + +00:03:40.624 --> 00:03:43.340 +So the way to empty your teacup, + +00:03:43.790 --> 00:03:46.540 +simplest way to do it is write down your thoughts. + +00:03:46.790 --> 00:03:48.390 +As simple as that. + +00:03:48.740 --> 00:03:51.157 +Just take a piece of paper and write it down. + +00:03:51.657 --> 00:03:53.674 +Or if you are on electronic means, + +00:03:53.724 --> 00:03:57.840 +use Emacs Org Mode and type out your thoughts, okay? + +00:03:58.490 --> 00:04:00.007 +There is a task for you right now. + +00:04:00.507 --> 00:04:02.607 +What you have to do is to create a folder + +00:04:02.657 --> 00:04:05.774 +in your documents folder called Inbox. + +00:04:05.824 --> 00:04:09.874 +Create one and create a new file called todo.org. + +00:04:10.224 --> 00:04:11.240 +If you are paper based, + +00:04:11.290 --> 00:04:14.607 +you can use a notebook or any other forms of the same file. + +00:04:15.257 --> 00:04:18.407 +In that, write down all your unfinished tasks + +00:04:18.707 --> 00:04:19.969 +personal and professional. + +00:04:20.270 --> 00:04:23.207 +Write down some things that have been worrying you, + +00:04:23.607 --> 00:04:25.074 +whatever worries you right now. + +00:04:25.124 --> 00:04:27.569 +just write it down, the whole thing, okay? + +00:04:28.019 --> 00:04:29.957 +Write down some tasks or actions that + +00:04:30.107 --> 00:04:32.174 +you are waiting for somebody else + +00:04:32.524 --> 00:04:34.740 +that could also be part of your list here. + +00:04:35.640 --> 00:04:37.859 +Great. Now that you have emptied your tea cup, + +00:04:38.160 --> 00:04:40.374 +I'm going to tell you the origin of these ideas. + +NOTE Getting Things Done + +00:04:40.424 --> 00:04:42.990 +These come from “Getting Things Done” by David Allen. + +00:04:43.090 --> 00:04:46.207 +It's a great book. I've read it multiple times. Fantastic. + +00:04:46.657 --> 00:04:50.240 +And he says, your mind is for having ideas, + +00:04:50.390 --> 00:04:51.424 +not holding them. + +00:04:52.274 --> 00:04:54.740 +You have to hold on to this idea in your mind. + +00:04:55.040 --> 00:04:55.840 +Keep it in your mind. + +00:04:55.890 --> 00:04:59.107 +saying it's for having ideas, not holding them. + +00:05:00.757 --> 00:05:05.007 +Alright, perform one of four actions on your task list. + +00:05:05.207 --> 00:05:07.474 +Okay? The one that you just wrote down. + +00:05:07.974 --> 00:05:10.274 +You delete them, okay? As simple as that. + +00:05:10.324 --> 00:05:13.574 +Strikethrough the task, hit the delete + +00:05:13.624 --> 00:05:16.274 +or change the state to cancel, okay? + +00:05:16.674 --> 00:05:18.307 +Alright, If you don't want to delete it, + +00:05:18.357 --> 00:05:20.074 +you want to defer it, do it later. + +00:05:20.524 --> 00:05:21.807 +Add it to your calendar. + +00:05:22.107 --> 00:05:23.840 +Add a reminder to it if you want. + +00:05:24.190 --> 00:05:27.307 +Or in Emacs Org Mode use C-c C-s to + +00:05:27.357 --> 00:05:31.207 +schedule it to a different time that you feel + +00:05:31.257 --> 00:05:32.940 +you would be able to do that task. + +00:05:33.640 --> 00:05:35.374 +Or just delegate it to somebody else. + +00:05:35.424 --> 00:05:37.380 +Maybe you are not the best person to do it + +00:05:37.430 --> 00:05:40.090 +or you probably won't find time to do this. + +00:05:40.590 --> 00:05:43.357 +Send it to your colleague, student, assistant, + +00:05:43.807 --> 00:05:46.524 +maybe even your favorite LLM to do this. + +00:05:47.374 --> 00:05:49.624 +LLM being large language model. + +00:05:50.274 --> 00:05:53.457 +Or just do it, right? As they say, just do it. + +00:05:53.807 --> 00:05:56.140 +Set a timer for two minutes and do the task. + +00:05:56.190 --> 00:05:57.807 +Finish the task, right here right now. + +00:05:58.257 --> 00:05:59.207 +Nothing is stopping you. + +00:05:59.257 --> 00:06:00.909 +Finish it. Oh, great, I'm going to do this + +00:06:01.360 --> 00:06:02.457 +but set yourself two minutes + +00:06:02.507 --> 00:06:04.940 +because sometimes it may spill over to half an hour + +00:06:04.990 --> 00:06:06.674 +and you still haven't processed through your list. + +00:06:07.024 --> 00:06:08.407 +That's why the timer for two minutes. + +00:06:08.907 --> 00:06:10.524 +One tip I'm going to give you is: + +00:06:10.624 --> 00:06:13.459 +Don't skip any of the items from your list + +00:06:13.910 --> 00:06:16.490 +because it's tough work you've been trying to avoid it, + +00:06:16.640 --> 00:06:17.374 +don't do that. + +00:06:17.724 --> 00:06:22.974 +Be rigorous and finish it off, processing at least, okay? + +00:06:23.324 --> 00:06:25.607 +Now you can do the absolute same process + +00:06:25.657 --> 00:06:26.940 +on your email inbox. + +00:06:27.090 --> 00:06:31.490 +I know, I know some of you have 55,000 emails in your inbox. + +00:06:31.540 --> 00:06:33.274 +How am I going to process all of them? + +NOTE Archive + +00:06:33.724 --> 00:06:36.490 +Well, Tiago Forte, whose method + +00:06:36.540 --> 00:06:39.157 +I'm going to be also talking about, says: + +00:06:39.257 --> 00:06:42.657 +Archive them all and pull out the top 100, okay? + +00:06:42.707 --> 00:06:45.007 +The last latest 100 and process that. + +00:06:45.757 --> 00:06:48.207 +That's a cool way to do it, okay? + +00:06:48.407 --> 00:06:50.674 +So you're not stuck to those 55,000, + +00:06:50.724 --> 00:06:52.340 +but just the top 100 of those. + +00:06:52.990 --> 00:06:53.957 +You can do the same, + +00:06:54.007 --> 00:06:55.140 +absolutely the same thing + +00:06:55.190 --> 00:06:57.624 +to any of your messaging apps as well: + +00:06:57.674 --> 00:07:01.240 +WhatsApp, Matrix, Slack, whatever you choose. + +00:07:01.890 --> 00:07:03.099 +Even to your physical inbox, + +00:07:03.200 --> 00:07:04.540 +you can do the absolute same things. + +00:07:04.590 --> 00:07:06.574 +You lift your items and + +00:07:06.624 --> 00:07:09.707 +see if you can need to process them, okay? + +00:07:10.407 --> 00:07:13.174 +What if the email or message or task is something + +00:07:13.224 --> 00:07:14.974 +that you might need in the future? + +00:07:15.274 --> 00:07:16.807 +Great! Archive them + +00:07:17.107 --> 00:07:19.507 +or move it to a place you may refer to later. + +00:07:19.757 --> 00:07:23.240 +So, you have plenty of storage in your cloud space, + +00:07:23.290 --> 00:07:25.690 +in your email space, in your computer space. + +00:07:26.040 --> 00:07:27.790 +Use that. Archive it. + +00:07:27.890 --> 00:07:29.719 +You can refer to it later. Not a worry. + +00:07:29.820 --> 00:07:31.040 +Don't want it right in front of you. + +00:07:31.090 --> 00:07:32.740 +That's the only thing here, right? + +NOTE Multiple steps + +00:07:33.290 --> 00:07:35.207 +Now another question that pops in your head is: + +00:07:35.257 --> 00:07:38.807 +What if something that requires multiple steps, right? + +00:07:38.907 --> 00:07:42.774 +not all steps are created… not all tasks are created alike, + +00:07:43.074 --> 00:07:44.474 +There are multiple steps to a task. + +00:07:45.024 --> 00:07:47.959 +That's when a task becomes a project, ok? + +00:07:48.009 --> 00:07:49.990 +An example or few examples of those + +00:07:50.190 --> 00:07:53.840 +are finishing a course on say Coursera or NPTEL or Udemy, + +00:07:54.340 --> 00:07:56.224 +teaching a course if you are a teacher + +00:07:56.274 --> 00:07:57.874 +in your college or school. + +00:07:58.224 --> 00:08:00.807 +If you are organizing a conference + +00:08:00.957 --> 00:08:03.607 +such as the Emacs conference, it's a huge project, + +00:08:03.957 --> 00:08:05.990 +you will need to use… it's a project. + +00:08:07.440 --> 00:08:10.359 +Arranging a birthday party for your spouse, that's sweet, + +00:08:10.560 --> 00:08:13.170 +but it's still a project, you will have many tasks in it. + +00:08:13.220 --> 00:08:14.824 +So these are examples of projects. + +00:08:15.874 --> 00:08:17.374 +Here's how one can handle projects. + +00:08:18.024 --> 00:08:19.940 +Create a folder for each project. + +00:08:20.390 --> 00:08:24.340 +Create a text or word doc or title it as todo.txt + +00:08:24.390 --> 00:08:26.559 +or todo.docx or todo.org. + +00:08:26.560 --> 00:08:28.507 +I prefer .org and you can do it. + +00:08:29.057 --> 00:08:32.340 +And in that, write down the success criteria, + +00:08:32.440 --> 00:08:35.079 +the goal or the deadline of the project. + +00:08:35.730 --> 00:08:38.290 +Write down all the tasks that need to be done. + +00:08:38.340 --> 00:08:40.040 +You don't have to think about all of it, + +00:08:40.190 --> 00:08:41.529 +but whatever comes to your mind, + +00:08:41.579 --> 00:08:42.474 +just put it in there + +00:08:42.524 --> 00:08:45.974 +as some tasks that you need to get done inside this project. + +00:08:46.624 --> 00:08:52.174 +Now, identify the immediate action that needs to be done + +00:08:52.224 --> 00:08:53.740 +for the project to move forward. + +00:08:54.040 --> 00:08:56.279 +That's usually something that's stopping the project + +00:08:56.580 --> 00:08:57.257 +from progressing. + +00:08:57.457 --> 00:08:58.874 +So identify that and say: + +00:08:58.924 --> 00:09:00.307 +“That's the next thing I'm going to do.” + +00:09:01.557 --> 00:09:03.974 +An example of a project is right here. + +00:09:04.274 --> 00:09:06.107 +Goal of the project is to deliver a talk + +00:09:06.207 --> 00:09:09.157 +about my organization system, + +00:09:09.257 --> 00:09:12.709 +make it like a workshop with pauses for activities. + +00:09:13.010 --> 00:09:14.890 +You can see that this is the talk + +00:09:14.940 --> 00:09:16.174 +that I am delivering right now. + +00:09:16.424 --> 00:09:19.590 +And right now if you see recording the talk, okay? + +00:09:19.840 --> 00:09:21.907 +Of course, the next one I'm going to do after this + +00:09:21.957 --> 00:09:24.024 +is going to be sending the recorded talk, + +00:09:24.074 --> 00:09:25.339 +the file and the PDF for the talk. + +00:09:25.389 --> 00:09:27.974 +Now, if you want, you can add some sub steps and all that + +00:09:28.024 --> 00:09:28.774 +also into this. + +00:09:29.174 --> 00:09:31.599 +Of course, I'd like to thank the coordinators for their + +00:09:31.600 --> 00:09:33.479 +absolutely wonderful work that they're doing + +00:09:33.480 --> 00:09:35.240 +throughout this, okay? + +00:09:35.640 --> 00:09:37.274 +Now, tasks for you. + +00:09:37.474 --> 00:09:38.579 +You can take your time. + +00:09:38.779 --> 00:09:40.440 +And first of all, think of a project + +00:09:40.490 --> 00:09:42.374 +that you have to absolutely get done. + +00:09:43.474 --> 00:09:48.274 +Create a folder on your computer or phone + +00:09:48.324 --> 00:09:49.557 +with the name of the project. + +00:09:50.157 --> 00:09:51.724 +Create a todo.org. + +00:09:52.024 --> 00:09:56.024 +If you want to use a notebook, you can use a fresh leaf. + +00:09:56.524 --> 00:10:00.074 +Write down all the tasks associated with this project. + +00:10:00.524 --> 00:10:02.524 +That's going to be how you handle it, right? + +NOTE Multiple projects + +00:10:02.874 --> 00:10:04.540 +Now, what if you have multiple projects? + +00:10:05.490 --> 00:10:08.107 +Not many of us have only one project. + +00:10:08.157 --> 00:10:09.757 +In fact, many of us have multiple projects. + +00:10:09.807 --> 00:10:11.240 +What do we do in that situation? + +00:10:11.790 --> 00:10:12.974 +Well, the answer is simple. + +00:10:13.274 --> 00:10:15.174 +Create a folder for each project. + +00:10:15.624 --> 00:10:20.157 +Add this Org file called todo into each of those folders + +00:10:20.657 --> 00:10:25.040 +and write down the task for all of these projects as well. + +00:10:25.190 --> 00:10:29.107 +Write down all of these tasks and mark one of them as next. + +00:10:29.207 --> 00:10:30.590 +There can be only one next action. + +00:10:30.790 --> 00:10:31.940 +It can't be multiple next actions. + +00:10:32.390 --> 00:10:34.840 +That's the immediate thing that has to be done + +00:10:34.990 --> 00:10:37.674 +to take this project forward, okay? + +NOTE What if the project stops before completion? + +00:10:37.874 --> 00:10:40.390 +What if the project stops before completion? + +00:10:40.440 --> 00:10:42.974 +There are possibilities sometimes you lose interest, + +00:10:43.024 --> 00:10:44.874 +sometimes your collaborator loses interest. + +00:10:45.124 --> 00:10:46.707 +What do you do in those situations? + +00:10:47.157 --> 00:10:49.590 +Have a folder in your computer or phone + +00:10:49.740 --> 00:10:52.040 +for abandoned projects called resources. + +00:10:52.590 --> 00:10:53.270 +Oh, by the way, + +00:10:53.320 --> 00:10:57.157 +for your projects folder, create an + +00:10:57.557 --> 00:11:01.239 +overarching projects folder and inside that are + +00:11:01.289 --> 00:11:02.507 +all the project folders. + +00:11:02.607 --> 00:11:03.507 +I forgot to tell you that. + +00:11:03.707 --> 00:11:06.807 +Same way, on the same level, create a resources folder. + +00:11:06.957 --> 00:11:09.057 +That's for all your abandoned projects + +00:11:09.107 --> 00:11:13.040 +or even could be on your research material as well, + +00:11:13.090 --> 00:11:14.859 +which you are not currently working on. + +00:11:15.509 --> 00:11:18.669 +Move this particular project that's abandoned or stopped + +00:11:18.769 --> 00:11:20.274 +somewhere in between to that folder. + +NOTE What if you successfully complete the project? + +00:11:20.974 --> 00:11:23.590 +Now, there's a possibility you might successfully complete. + +00:11:23.640 --> 00:11:26.840 +I hope all your projects end up being successful. + +00:11:27.190 --> 00:11:30.174 +But there are quite a few which will end up in this, + +00:11:30.224 --> 00:11:32.857 +quite a few which will end up abandoned as well. + +00:11:33.757 --> 00:11:37.390 +Now, I write an end report so that I can learn from this. + +00:11:37.440 --> 00:11:39.274 +What did I enjoy most in the project? + +00:11:39.324 --> 00:11:40.574 +What could have been better? + +00:11:40.874 --> 00:11:43.024 +What did I learn from this particular project? + +00:11:43.724 --> 00:11:45.699 +Now, you will need to move that folder + +00:11:45.849 --> 00:11:47.490 +to a folder called archives. + +00:11:47.790 --> 00:11:50.757 +This is the final resting place for the project, + +00:11:50.807 --> 00:11:53.490 +completed projects because if you come up + +00:11:53.540 --> 00:11:55.640 +with another project which sounds similar + +00:11:55.690 --> 00:11:56.807 +to the archives one, + +00:11:56.857 --> 00:11:59.140 +you can pick that out and create that as a template, + +00:11:59.190 --> 00:12:00.124 +use that as a template. + +00:12:00.524 --> 00:12:04.290 +Now, why would I have one folder per project + +00:12:04.340 --> 00:12:07.457 +when there's only one file sitting in it called todo.org? + +00:12:07.757 --> 00:12:10.774 +Well, most projects also have some project files + +00:12:10.824 --> 00:12:13.574 +and this folder can be a storehouse of all of that + +00:12:13.824 --> 00:12:15.824 +and you can access all of them at one shot. + +00:12:16.174 --> 00:12:16.990 +That's the advantage. + +NOTE What if the project is ongoing and doesn't really end? + +00:12:18.140 --> 00:12:20.740 +What if the project is ongoing and doesn't really end? + +00:12:20.790 --> 00:12:23.590 +That doesn't seem to have a deadline or an ending point. + +00:12:24.190 --> 00:12:27.107 +That's called an Area. This is now an Area. + +00:12:27.157 --> 00:12:31.674 +Examples of Areas: gardening, paying bills, never stops, + +00:12:32.024 --> 00:12:34.574 +bills never don't stop, blogging. + +00:12:34.624 --> 00:12:36.974 +These are all some examples of Areas that really + +00:12:37.024 --> 00:12:39.474 +don't have a definite deadline. + +00:12:40.374 --> 00:12:44.559 +For Areas also, create a folder for each of them, right? + +00:12:44.710 --> 00:12:47.274 +You can create a parent folder called Areas + +00:12:47.324 --> 00:12:50.540 +and under them you can have those areas, okay, + +00:12:50.990 --> 00:12:53.519 +and have a todo [file] in each of those folders. + +NOTE What if you forget to visit the TODO files? + +00:12:54.320 --> 00:12:56.724 +Now what if we forget to visit the todo files + +00:12:57.024 --> 00:12:58.824 +which in my case often happens? + +00:12:58.974 --> 00:13:00.790 +I forget to visit those todo files + +00:13:01.040 --> 00:13:03.540 +and see what the task net needs to be done. + +00:13:03.940 --> 00:13:08.174 +You can of course add all of this todo.org + +00:13:08.224 --> 00:13:11.110 +and into your org-agenda-files variable + +00:13:11.360 --> 00:13:14.014 +so that when you pull up your Org Agenda, + +00:13:14.015 --> 00:13:14.729 +all of them show up. + +00:13:15.080 --> 00:13:15.790 +That's a good idea. + +00:13:16.440 --> 00:13:18.574 +You need to have a weekly review with yourself. + +00:13:19.624 --> 00:13:22.090 +Weekly review is essentially a weekly appointment + +00:13:22.140 --> 00:13:24.207 +with yourself for you to stay + +00:13:24.357 --> 00:13:28.674 +in control of your life or career. To keep things on track. + +00:13:29.524 --> 00:13:32.474 +In the weekly review, you need to empty your teacup. + +00:13:32.724 --> 00:13:34.974 +That's the first and foremost, okay? + +00:13:35.274 --> 00:13:38.539 +Then process all your items in the TODO file. + +00:13:39.239 --> 00:13:42.007 +Process all your emails from the last week. + +00:13:42.057 --> 00:13:45.340 +Use the exact same structure of do, delete, defer, delegate. + +00:13:45.390 --> 00:13:47.074 +These are the four D's that you can use. + +00:13:47.474 --> 00:13:51.740 +Process all your messaging app messages from the last week. + +00:13:51.890 --> 00:13:54.024 +So last one whole week, whatever has come up, + +00:13:54.074 --> 00:13:56.824 +you need to process all of them, okay? + +00:13:57.174 --> 00:13:58.174 +In the weekly review, + +00:13:58.224 --> 00:14:01.439 +you also need to archive all your emails and + +00:14:01.440 --> 00:14:03.839 +messaging app messages that you have processed. + +00:14:03.990 --> 00:14:05.707 +You've already taken care of it. + +00:14:05.857 --> 00:14:07.690 +You don't need to have it right in front of you. + +00:14:07.740 --> 00:14:09.707 +You can move them all into archive. + +00:14:09.957 --> 00:14:12.240 +Most messaging apps and email systems + +00:14:12.290 --> 00:14:14.774 +have archives as part of their features. + +00:14:15.524 --> 00:14:17.124 +Look through the project TODO files + +00:14:17.174 --> 00:14:20.290 +to see if the next action is marked, okay? + +00:14:20.690 --> 00:14:22.374 +Now look through the project folder list + +00:14:22.424 --> 00:14:24.157 +to see if some of them need to be archived + +00:14:24.307 --> 00:14:26.274 +or moved to resources. + +00:14:26.474 --> 00:14:28.390 +Some may be abandoned, some may be done. + +00:14:28.640 --> 00:14:30.490 +You can move them successfully to + +00:14:30.540 --> 00:14:32.407 +all of where it needs to belong. + +00:14:33.257 --> 00:14:34.942 +Now task for you, you can pause this, + +00:14:34.943 --> 00:14:36.290 +of course, and do this. + +00:14:36.540 --> 00:14:39.679 +Set an appointment with yourself, sacrosanct time, + +00:14:39.730 --> 00:14:42.124 +only with yourself and title it weekly review. + +00:14:42.324 --> 00:14:43.674 +Start with half an hour, + +00:14:43.924 --> 00:14:45.907 +perhaps you can have it longer later on. + +00:14:46.057 --> 00:14:47.712 +As you need more time, + +00:14:47.713 --> 00:14:49.096 +you can have more time with yourself. + +00:14:49.846 --> 00:14:51.907 +And make it repeating every week. + +00:14:53.607 --> 00:14:56.307 +Now you can complain, I can hear you some of you complain + +00:14:56.357 --> 00:14:58.507 +“Oh, this is such a microscopic view of my life. + +00:14:58.557 --> 00:14:59.707 +What about the big picture?” + +00:14:59.857 --> 00:15:03.674 +Well, there is quarterly review, once every 13 weeks + +00:15:03.724 --> 00:15:06.107 +you can mark an appointment with yourself. + +00:15:06.357 --> 00:15:08.274 +Right after your weekly review + +00:15:08.324 --> 00:15:11.240 +to do your quarterly review, okay? + +00:15:11.290 --> 00:15:14.116 +And also every year, mark yourself-- + +00:15:14.117 --> 00:15:15.174 +it could be at the start + +00:15:15.224 --> 00:15:18.840 +or the end of an academic year or a calendar year-- + +00:15:18.990 --> 00:15:21.840 +mark yourself an appointment again with yourself + +00:15:21.940 --> 00:15:22.890 +called yearly review. + +00:15:23.790 --> 00:15:26.474 +And these contain some big life questions, okay? + +00:15:27.074 --> 00:15:31.157 +Now I'll give you some examples but feel free to modify it, + +00:15:31.207 --> 00:15:32.274 +have it as your own. + +00:15:33.324 --> 00:15:34.799 +How much money did I make? + +00:15:34.850 --> 00:15:36.540 +How much money did I save? + +00:15:36.640 --> 00:15:38.440 +How many people did I help? + +00:15:39.040 --> 00:15:42.307 +How many do I plan to help in the future? + +00:15:43.457 --> 00:15:44.690 +What projects did I enjoy? + +00:15:44.740 --> 00:15:47.707 +Look through your archives and resources. + +00:15:47.907 --> 00:15:49.840 +Which one are best avoided? + +00:15:49.890 --> 00:15:52.440 +I don't want to get on to this, okay? + +00:15:52.490 --> 00:15:55.359 +You can look through a personal and private… I'm sorry… + +00:15:55.360 --> 00:15:56.707 +personal and professional and + +00:15:56.757 --> 00:15:59.324 +see how much is there a balance between all of these. + +00:15:59.724 --> 00:16:01.640 +These are some questions you can answer. + +NOTE Planning for the future + +00:16:02.740 --> 00:16:04.840 +Now that you know how to manage them now... + +00:16:04.890 --> 00:16:06.590 +So far we have looked at the now, + +00:16:06.840 --> 00:16:08.240 +how do you plan for the future? + +00:16:08.290 --> 00:16:09.674 +like really into the future? + +00:16:10.224 --> 00:16:13.174 +Well, I have a trick called nine windows for you. + +00:16:13.474 --> 00:16:15.340 +Nine windows are essentially, + +00:16:15.640 --> 00:16:18.257 +it's like a tic-tac-toe grid + +00:16:18.507 --> 00:16:25.174 +and the left column is your past, + +00:16:25.574 --> 00:16:27.740 +the middle column is your present + +00:16:28.090 --> 00:16:31.740 +and the right column is your future, okay? + +00:16:31.940 --> 00:16:37.590 +and the bottom row is your skill set, + +00:16:37.940 --> 00:16:40.519 +the middle row is what you do + +00:16:40.920 --> 00:16:44.607 +and the top row is whom do you work for + +00:16:44.657 --> 00:16:46.674 +or whom do you serve, right? + +00:16:46.724 --> 00:16:50.349 +So you are doing something for an organization + +00:16:50.500 --> 00:16:51.869 +so those could be in your top row. + +00:16:52.570 --> 00:16:54.974 +Let me give you an example from my own life. + +00:16:55.424 --> 00:16:58.874 +This I made about 10 years ago, okay? + +00:16:59.024 --> 00:17:05.674 +So the middle column is the what I did 10 years ago. + +00:17:05.724 --> 00:17:09.207 +So that is the now let's keep it as the now, okay? + +00:17:09.257 --> 00:17:11.390 +So five years before that, I used to work + +00:17:11.440 --> 00:17:12.990 +for General Electric (GE). + +00:17:13.090 --> 00:17:14.790 +I was a research scientist for them + +00:17:15.240 --> 00:17:16.874 +and the skills that I had was: + +00:17:16.924 --> 00:17:22.474 +I had a PhD which was used in this profession. + +00:17:22.824 --> 00:17:23.740 +I had writing skills, + +00:17:23.790 --> 00:17:25.224 +I had some teaching skills, + +00:17:25.424 --> 00:17:28.224 +and I love to interact and learn from my teammates. + +00:17:29.224 --> 00:17:32.540 +Then I joined Mindtree, which was the current job + +00:17:32.590 --> 00:17:35.774 +when I did this, software services company. + +00:17:36.824 --> 00:17:38.474 +I co-founded TRIZIndia also. + +00:17:38.524 --> 00:17:40.574 +These are two organizations that I served. + +00:17:41.124 --> 00:17:44.940 +And facilitator, that was the main profession that I was in. + +00:17:45.240 --> 00:17:46.874 +And the skills I had was: + +00:17:46.924 --> 00:17:47.399 +TRIZ [Theory of Inventive Problem Solving], + +00:17:47.800 --> 00:17:51.874 +interacting with people outside of my team, + +00:17:52.224 --> 00:17:54.840 +and I could align well with my organization. + +00:17:54.890 --> 00:17:56.224 +I knew exactly where they were going + +00:17:56.274 --> 00:17:58.407 +and how to align myself, my goals with that. + +00:17:59.107 --> 00:18:02.174 +Now, I said, five years later, + +00:18:02.224 --> 00:18:04.674 +I want to be an entrepreneur and an author. + +00:18:05.174 --> 00:18:06.924 +And I want to do this for, + +00:18:07.224 --> 00:18:11.557 +I want to really work with academia and corporate companies. + +00:18:11.757 --> 00:18:12.790 +That was my goal. + +00:18:13.240 --> 00:18:15.007 +So the skills I needed to have were: + +00:18:15.057 --> 00:18:18.157 +marketing, writing, sales, hiring, people management, + +00:18:18.207 --> 00:18:19.474 +all of that I needed to have. + +00:18:19.924 --> 00:18:21.490 +And I had to plan that so I used + +00:18:21.540 --> 00:18:22.740 +the PARA structure [projects, areas, resources, archives] + +00:18:23.090 --> 00:18:27.240 +to manage how I'm going to learn all of these skills + +00:18:27.290 --> 00:18:29.207 +and imbibe those and get better at it. + +00:18:29.257 --> 00:18:30.357 +So that's where I use this. + +00:18:31.157 --> 00:18:32.439 +Ok, your turn. + +00:18:32.639 --> 00:18:34.940 +You can pause this video and build your own nine windows + +00:18:34.990 --> 00:18:36.007 +to plan for the future. + +NOTE Summary + +00:18:36.957 --> 00:18:39.957 +So in summary, you need to empty your teacup + +00:18:40.007 --> 00:18:42.740 +before engaging with the work in front of you. + +00:18:43.040 --> 00:18:45.340 +Use the PARA structure: projects, area, + +00:18:45.390 --> 00:18:46.669 +resources and archives. + +00:18:46.770 --> 00:18:51.479 +Create this folder structure and use reviews regularly, + +00:18:51.480 --> 00:18:53.474 +weekly, quarterly and yearly. + +00:18:54.024 --> 00:18:55.740 +Use the nine windows to your advantage + +00:18:55.790 --> 00:18:57.290 +for your future career planning + +00:18:57.640 --> 00:19:00.340 +and of course, apply PARA to your future plans + +00:19:00.440 --> 00:19:02.859 +to plan for those as well, ok? + +NOTE References + +00:19:03.210 --> 00:19:04.790 +Now, these are the references I have used. + +00:19:04.840 --> 00:19:07.240 +heavily borrowed upon Tiago Fortes' PARA, + +00:19:07.640 --> 00:19:09.239 +David Allen's “Getting Things Done” + +00:19:09.240 --> 00:19:13.039 +and Tasshin's way to implement this in Emacs and Org Mode. + +00:19:14.190 --> 00:19:15.457 +These are some acknowledgments. + +00:19:15.507 --> 00:19:17.790 +I used some generative AI for this. + +00:19:18.290 --> 00:19:20.590 +And this is a question to you: + +00:19:20.790 --> 00:19:24.090 +What parts of this talk are you planning on implementing? + +00:19:24.140 --> 00:19:26.274 +Please write this in the Etherpad. + +00:19:26.824 --> 00:19:28.519 +Thank you so much. If you have any questions, + +00:19:28.569 --> 00:19:30.357 +let me know in the Etherpad as well. + +00:19:30.857 --> 00:19:32.724 +Good luck managing your tasks, + +00:19:33.474 --> 00:19:36.650 +emptying your teacup, and planning for the future. diff --git a/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt new file mode 100644 index 00000000..89ebbd97 --- /dev/null +++ b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt @@ -0,0 +1,19 @@ +WEBVTT + +00:00:00.000 --> 00:01:30.000 +Specialized Apps and Linked Data + +00:01:30.000 --> 00:02:53.000 +Discovering Org Roam and Linked Notes + +00:02:53.000 --> 00:06:35.000 +Enhanced Org Roam Buffer: Rich Links and Similar Nodes + +00:06:35.000 --> 00:08:26.000 +Semantic Search on Link Contexts + +00:08:26.000 --> 00:10:38.000 +Exposing notes outside Emacs + +00:10:38.000 --> 00:11:20.000 +Future Directions and Potential Improvements
\ No newline at end of file diff --git a/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt new file mode 100644 index 00000000..19d42157 --- /dev/null +++ b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt @@ -0,0 +1,841 @@ +WEBVTT captioned by abhinav + +00:00:00.560 --> 00:00:02.560 +Hello. My name is Abhinav, and I'm going + +00:00:02.560 --> 00:00:04.880 +to talk about unlocking linked data in Org + +00:00:04.880 --> 00:00:07.120 +Mode. So, like, a lot of you, I + +00:00:07.120 --> 00:00:09.360 +use Emacs and Org Mode for keeping a + +00:00:09.360 --> 00:00:12.320 +lot of my data, personal information. For example, + +00:00:12.320 --> 00:00:14.775 +if I'm trying to, you know, write journal + +00:00:14.775 --> 00:00:16.535 +entries, it's most likely going to be an + +00:00:16.535 --> 00:00:18.615 +Org Mode file. If I'm trying to save + +00:00:18.615 --> 00:00:21.015 +bookmarks or save links, again, they go into + +00:00:21.015 --> 00:00:23.415 +an Org Mode file. Now, I was doing + +00:00:23.415 --> 00:00:26.375 +that earlier, but, last year, I think I + +00:00:26.695 --> 00:00:28.615 +around last year, I started to use these + +00:00:28.615 --> 00:00:31.390 +specialized applications. So, you know, for example, if + +00:00:31.390 --> 00:00:33.710 +I'm trying to save bookmarks, I'm going to + +00:00:33.710 --> 00:00:37.230 +use a bookmark manager. I specifically was using + +00:00:37.230 --> 00:00:39.870 +Raindrop for it. What happened with that is + +00:00:39.870 --> 00:00:42.590 +that it allowed me to save bookmarks. Let's + +00:00:42.590 --> 00:00:43.790 +say, you know, when I'm on go, I'm + +00:00:43.790 --> 00:00:45.470 +on a mobile phone, I can just, + +00:00:45.470 --> 00:00:47.594 +you know, open my Android app and then + +00:00:47.594 --> 00:00:50.235 +save links there. I can also annotate and, + +00:00:50.235 --> 00:00:51.355 +you know, do other things that you can + +00:00:51.355 --> 00:00:54.235 +do on bookmarks. Similarly, you know, for reading, + +00:00:54.235 --> 00:00:56.074 +let's say, papers and PDFs, I would use + +00:00:56.074 --> 00:01:00.074 +Zotero. For, keeping notes about people, I'll use + +00:01:00.074 --> 00:01:03.650 +a tool called Monica CRM. Now all these + +00:01:03.650 --> 00:01:05.650 +tools, their aim is to kind of + +00:01:05.650 --> 00:01:08.050 +do one thing really well, but they kind + +00:01:08.050 --> 00:01:09.730 +of work in their own silos, and it's + +00:01:09.730 --> 00:01:11.810 +very hard to link data from one to + +00:01:11.810 --> 00:01:13.730 +another. For example, if you have a journal + +00:01:13.730 --> 00:01:16.855 +application, you can say things like, you know, + +00:01:16.855 --> 00:01:18.795 +"Hey today, I met this person, and then, + +00:01:18.935 --> 00:01:20.855 +you know, this person gave me this recipe," + +00:01:20.855 --> 00:01:23.915 +whatever. But you know that the person information + +00:01:24.615 --> 00:01:26.375 +is still kept in a different application, and + +00:01:26.375 --> 00:01:27.895 +the recipe information is still kept in a + +00:01:27.895 --> 00:01:30.235 +different application. You have to, like, you know, + +00:01:30.720 --> 00:01:32.079 +like, do a lot of work to kind + +00:01:32.079 --> 00:01:35.920 +of make them come together. So, one thing + +00:01:35.920 --> 00:01:37.600 +that happened also last year was that I + +00:01:37.600 --> 00:01:39.840 +started using Org Roam a lot. So Org + +00:01:39.840 --> 00:01:41.920 +Roam is a Zettelkasten system, you know, + +00:01:41.920 --> 00:01:45.025 +which allows you to have linked notes. I'll + +00:01:45.025 --> 00:01:46.625 +not go too much into that detail, but + +00:01:46.625 --> 00:01:48.945 +basically, with Org Roam, you can, you know, + +00:01:48.945 --> 00:01:50.785 +have a lot of these text based files + +00:01:50.785 --> 00:01:53.025 +that you make anyway and then keep them + +00:01:53.025 --> 00:01:55.345 +connected and then, you know, like, have this + +00:01:55.345 --> 00:01:57.985 +knowledge base that you can build, around your + +00:01:57.985 --> 00:02:02.040 +information, your data. While it's a good system, + +00:02:02.040 --> 00:02:04.299 +I still feel like it's not very pro + +00:02:04.680 --> 00:02:07.080 +on providing, you know, very good amount of + +00:02:07.080 --> 00:02:10.520 +tools for, working with links. I'll show two + +00:02:10.520 --> 00:02:12.920 +kind of things. First is that, I'll show + +00:02:12.920 --> 00:02:16.885 +how my current knowledge base looks like, what + +00:02:16.885 --> 00:02:18.965 +kind of, you know, workflow I kind of + +00:02:18.965 --> 00:02:21.205 +use to save, let's say, any information or + +00:02:21.205 --> 00:02:22.644 +how do I, like, you know, connect new + +00:02:22.644 --> 00:02:25.924 +notes. The other is that because while this + +00:02:25.924 --> 00:02:28.084 +information base is working out well for + +00:02:28.084 --> 00:02:31.689 +me, I still want all of my external + +00:02:31.750 --> 00:02:34.470 +usages to be, you know, to be reflected + +00:02:34.470 --> 00:02:37.030 +back into this database of text files. So + +00:02:37.030 --> 00:02:38.950 +if I'm browsing something, I still want that + +00:02:38.950 --> 00:02:40.790 +thing to be, you know, saved in my + +00:02:40.790 --> 00:02:43.975 +Org Mode files, whether I'm browsing on Android + +00:02:43.975 --> 00:02:46.475 +or I'm browsing on, let's say, Firefox + +00:02:46.535 --> 00:02:49.015 +somewhere on a laptop. So, I'll show you + +00:02:49.015 --> 00:02:50.615 +those two things here. It's going to be + +00:02:50.615 --> 00:02:52.215 +a short talk, and then, yeah, hope you + +00:02:52.215 --> 00:02:54.855 +like it. Okay. So we'll start with this + +00:02:54.855 --> 00:02:57.830 +thing. So this is a simple Org Roam + +00:02:57.830 --> 00:02:59.990 +node. It's, you know, it's a dummy node. + +00:02:59.990 --> 00:03:01.190 +I've made, like, a lot of dummy nodes + +00:03:01.190 --> 00:03:03.110 +here just to kind of show, so, you + +00:03:03.110 --> 00:03:05.590 +know, maybe some of those information will be + +00:03:05.590 --> 00:03:08.470 +sparse, but I hope I convey the + +00:03:08.630 --> 00:03:12.555 +meaning clearly. Okay. So here, if you usually, + +00:03:12.635 --> 00:03:14.234 +you know, if you're just using plain Org + +00:03:14.234 --> 00:03:15.995 +Mode, you just have this file. Right? There's + +00:03:15.995 --> 00:03:19.114 +nothing else. Now if you are using Org + +00:03:19.114 --> 00:03:20.875 +Roam, you can do something called org-roam- + +00:03:20.875 --> 00:03:23.034 +buffer-toggle, which will show you, you know, + +00:03:23.034 --> 00:03:26.610 +a few of those connected nodes. Now, usually, + +00:03:26.750 --> 00:03:29.470 +the connections are shown here, they only show + +00:03:29.470 --> 00:03:32.190 +you backlinks. So, basically, any other node that + +00:03:32.190 --> 00:03:34.270 +has linked to this node is going to + +00:03:34.270 --> 00:03:36.910 +be shown there. But in my extension, you + +00:03:36.910 --> 00:03:40.485 +can see more things. For example, here, in + +00:03:40.485 --> 00:03:42.985 +this case, you can see, first of all, + +00:03:43.125 --> 00:03:45.364 +we show both links. So any link from + +00:03:45.364 --> 00:03:47.765 +this node to something else, will also be + +00:03:47.765 --> 00:03:49.285 +shown there. Any link from that node to + +00:03:49.285 --> 00:03:52.099 +something else will also be shown there. So + +00:03:52.099 --> 00:03:54.420 +you can see, that is one thing. The + +00:03:54.420 --> 00:03:56.099 +other thing is that all these links are + +00:03:56.099 --> 00:03:58.739 +categorized in, you know, type of notes. For + +00:03:58.739 --> 00:04:02.260 +example, when this note specifically right now is + +00:04:02.260 --> 00:04:05.005 +of kind book. Tag is one identifier for + +00:04:05.005 --> 00:04:06.045 +it, but there are, like, other ways to + +00:04:06.045 --> 00:04:09.165 +identify, you know, a kind of note. But + +00:04:09.165 --> 00:04:11.165 +this is connected to another node, which is + +00:04:11.165 --> 00:04:13.084 +of a kind person. So as you + +00:04:13.084 --> 00:04:15.165 +can see, the, Person A asked me to + +00:04:15.165 --> 00:04:16.685 +read this book. So, you know, that link + +00:04:16.685 --> 00:04:19.170 +is shown there in a very, rich format. + +00:04:19.170 --> 00:04:20.769 +So we have, like, more information about the + +00:04:20.769 --> 00:04:23.970 +link, in this. The other thing that you + +00:04:23.970 --> 00:04:26.610 +can see there is that, there are also + +00:04:26.610 --> 00:04:29.570 +links which are not existing right now, but + +00:04:29.570 --> 00:04:32.530 +they could be, you know, possibly interesting for + +00:04:32.530 --> 00:04:34.675 +me. So these are similar nodes. So these + +00:04:34.755 --> 00:04:36.514 +you can see the scores of similarity and + +00:04:36.514 --> 00:04:38.435 +then, you know, other nodes like Book on + +00:04:38.435 --> 00:04:40.354 +Mathematics, which is another dummy node that + +00:04:40.354 --> 00:04:42.995 +I made for this demo. Now these are + +00:04:42.995 --> 00:04:44.275 +nodes which, you know, again, I can just + +00:04:44.275 --> 00:04:45.474 +go in there and I can see if + +00:04:45.474 --> 00:04:47.389 +maybe they make sense or if, you know, + +00:04:47.710 --> 00:04:50.210 +I can just, like, make those connections explicitly. + +00:04:51.150 --> 00:04:53.229 +So let's let's try some other node here. + +00:04:53.229 --> 00:04:55.229 +So let's say so this is a node + +00:04:55.229 --> 00:04:57.389 +of a recipe. It's Bombay + +00:04:57.389 --> 00:04:59.550 +Sandwich. It's the recipe I made. Now if + +00:04:59.550 --> 00:05:01.389 +you go here on the right, you can + +00:05:01.389 --> 00:05:03.775 +see, you know, there's, like, some things on, + +00:05:04.095 --> 00:05:07.135 +some person liking the sandwich. There are some + +00:05:07.135 --> 00:05:09.775 +related notes also, similar notes which I have + +00:05:09.775 --> 00:05:12.575 +not linked. Plus, there are some journal entries. + +00:05:12.575 --> 00:05:15.855 +Now I use Org-Roam daily to kind of, + +00:05:15.855 --> 00:05:19.930 +you know, write down journal entries. And then, + +00:05:20.710 --> 00:05:22.150 +you know, what I have to do there + +00:05:22.150 --> 00:05:24.070 +is basically just write whatever I want and + +00:05:24.070 --> 00:05:25.590 +then just, you know, make those links to + +00:05:25.590 --> 00:05:28.630 +this node. So for doing + +00:05:28.630 --> 00:05:31.030 +that, I can see, that there were two + +00:05:31.030 --> 00:05:32.630 +days where I made Bombay Sandwich, and I + +00:05:32.630 --> 00:05:35.465 +had some observations around it, which, you know, + +00:05:35.465 --> 00:05:38.505 +you can see here. Right. Same so same + +00:05:38.505 --> 00:05:39.865 +for person. Let's say if you go to + +00:05:39.865 --> 00:05:41.705 +Person B, you can see that, you know, + +00:05:41.705 --> 00:05:43.385 +this person has, again, link to Person A + +00:05:43.385 --> 00:05:45.865 +and there's, like, some information around it. Plus, + +00:05:45.865 --> 00:05:50.050 +there are some similar notes there. This works + +00:05:50.050 --> 00:05:52.210 +really well. The similarity function works really well + +00:05:52.210 --> 00:05:54.530 +if you are basically trying to go to, + +00:05:54.530 --> 00:05:56.530 +you know, bookmarks that I have saved. So + +00:05:56.530 --> 00:05:58.470 +for example, here's a bookmark that I saved, + +00:05:58.610 --> 00:06:01.605 +which is, Google at Interspeech 2023. Now + +00:06:01.605 --> 00:06:03.845 +this bookmark is a blog post from Google + +00:06:03.845 --> 00:06:07.525 +AI team. Basically, you know, tells what research + +00:06:07.525 --> 00:06:09.785 +publications they had in this conference. + +00:06:10.005 --> 00:06:11.445 +Now if you go to the Similar Nodes + +00:06:11.445 --> 00:06:13.365 +here, you can see a very similar blog + +00:06:13.365 --> 00:06:15.925 +post from Google's team for other conferences that + +00:06:15.925 --> 00:06:17.840 +they attended. Right? Now this is very helpful + +00:06:17.840 --> 00:06:19.860 +for me, especially when I'm, like, reading something, + +00:06:20.240 --> 00:06:21.840 +later. So I, like, save a lot of + +00:06:21.840 --> 00:06:24.400 +links together. And then when I'm deciding + +00:06:24.400 --> 00:06:26.080 +to read something, I just open this and + +00:06:26.080 --> 00:06:28.319 +then see, you know, how everything is connected, + +00:06:28.319 --> 00:06:30.159 +what what else I have saved. Should I + +00:06:30.159 --> 00:06:32.625 +read something else or not? One interesting feature + +00:06:32.625 --> 00:06:34.784 +I was realizing I should try out is + +00:06:34.784 --> 00:06:37.425 +that, you know, if I go to this + +00:06:37.425 --> 00:06:39.985 +node, which is Person B, you can see + +00:06:39.985 --> 00:06:42.705 +that while I'm linking this to Person A, + +00:06:42.705 --> 00:06:45.040 +I also have some context on that. So + +00:06:45.040 --> 00:06:47.600 +I've written specifically uncle of Person + +00:06:47.600 --> 00:06:49.600 +A. Now if you have a semantic wiki, + +00:06:49.600 --> 00:06:52.240 +you will have a typed link where you + +00:06:52.240 --> 00:06:54.000 +don't have a plain link. You also have + +00:06:54.000 --> 00:06:55.840 +a type of the link. So in this + +00:06:55.840 --> 00:06:57.040 +case, the type of the link could be, + +00:06:57.040 --> 00:07:00.895 +you know, it's like `uncle:` whatever + +00:07:00.895 --> 00:07:03.335 +that link is. But, you know, I don't + +00:07:03.335 --> 00:07:05.175 +want to, like, go into that much detail, + +00:07:05.175 --> 00:07:07.335 +and I don't want to, like, learn how + +00:07:07.335 --> 00:07:09.175 +to link things, learn what kind of types + +00:07:09.175 --> 00:07:10.375 +I can make. So I can just write + +00:07:10.375 --> 00:07:12.294 +things in plain text. So I've written this + +00:07:12.294 --> 00:07:13.815 +in plain text. What I can do now + +00:07:13.815 --> 00:07:16.250 +is I can just search for links like + +00:07:16.250 --> 00:07:17.850 +this. For example, I can just do something + +00:07:17.850 --> 00:07:21.290 +like family members. Now this will show me + +00:07:21.290 --> 00:07:23.370 +all the links which have a context which + +00:07:23.370 --> 00:07:27.450 +makes sense as family members. So basically, this + +00:07:27.450 --> 00:07:29.610 +is semantic search on links, on the context + +00:07:29.610 --> 00:07:31.215 +of the links, and then, you know, it + +00:07:31.215 --> 00:07:33.134 +kind of gives me what I want here. + +00:07:33.134 --> 00:07:34.895 +For example, here, in this demo, I just + +00:07:34.895 --> 00:07:37.134 +had, like, one node, one link, which had + +00:07:37.134 --> 00:07:39.455 +this uncle relationship. So that kind of works + +00:07:39.455 --> 00:07:41.375 +out. Now let's just try another search. For + +00:07:41.375 --> 00:07:44.850 +example, let's say if I'm just typing 'check + +00:07:44.850 --> 00:07:47.410 +before meeting'. So these are now again links + +00:07:47.410 --> 00:07:49.410 +where I have written something where I kind + +00:07:49.410 --> 00:07:52.290 +of should do something before meeting someone. So + +00:07:52.290 --> 00:07:54.050 +for example, the first one you can see, + +00:07:54.850 --> 00:07:57.705 +there's a person called Meeting Person. It's a + +00:07:57.705 --> 00:08:00.745 +demo node again. And, I've written one note + +00:08:00.745 --> 00:08:05.085 +about, one connection here is basically saying that, + +00:08:05.145 --> 00:08:07.145 +hey, you know, read this link before you + +00:08:07.145 --> 00:08:09.720 +go to meet them. Right? So it's also + +00:08:09.720 --> 00:08:11.560 +been very helpful for me. There are, like, + +00:08:11.560 --> 00:08:13.800 +few patterns where I kind of feel this + +00:08:13.800 --> 00:08:17.319 +works out well. As I keep making more + +00:08:17.319 --> 00:08:20.120 +of the links and keep writing more context + +00:08:20.120 --> 00:08:21.800 +around the link, this kind of works + +00:08:21.800 --> 00:08:25.135 +out really helpful. This becomes really helpful for + +00:08:25.135 --> 00:08:27.935 +me. Okay. So the other few things, you + +00:08:27.935 --> 00:08:30.575 +know, how do I, like, work with, systems + +00:08:30.575 --> 00:08:32.735 +outside Emacs. Right? So the first thing + +00:08:32.735 --> 00:08:35.054 +is that, you know, the I haven't found + +00:08:35.054 --> 00:08:38.510 +anything that works really well for saving bookmarks, + +00:08:40.250 --> 00:08:42.250 +when I'm on my Android phone. So I + +00:08:42.250 --> 00:08:44.890 +had to make a new applications, application, and + +00:08:44.890 --> 00:08:47.930 +it's called pile-android. Now this application basically, + +00:08:47.930 --> 00:08:49.290 +you know, lets me do whatever I was + +00:08:49.290 --> 00:08:52.085 +doing with Raindrop, which was a bookmark manager. + +00:08:52.305 --> 00:08:53.825 +So I can open links. I can read + +00:08:53.825 --> 00:08:55.985 +stuff in Firefox on my browser on my, + +00:08:56.385 --> 00:08:58.065 +Android phone, and then I can save all + +00:08:58.065 --> 00:09:00.625 +of that in my Org Roam database. Org + +00:09:00.625 --> 00:09:02.465 +roam database here means the Org Roam files + +00:09:02.465 --> 00:09:03.905 +that I have. Because, again, these are plain + +00:09:03.905 --> 00:09:06.140 +text file, I can sync them through mobile + +00:09:06.140 --> 00:09:08.780 +phone to my, you know, desktop and laptop + +00:09:08.780 --> 00:09:11.340 +and everything else. So that's one place where + +00:09:11.340 --> 00:09:13.460 +I kind of, you know, stop, going to + +00:09:13.460 --> 00:09:16.860 +a, new application. I just basically ingest everything + +00:09:16.860 --> 00:09:19.625 +in my Org Roam setup. The other thing + +00:09:19.625 --> 00:09:22.444 +is that, when I'm browsing on my laptop, + +00:09:22.985 --> 00:09:25.785 +I still want to, you know, collect all + +00:09:25.785 --> 00:09:28.504 +the data inside my Org Roam system. So + +00:09:28.504 --> 00:09:30.504 +so here's something which I call Org Roam + +00:09:30.504 --> 00:09:33.380 +Sidekick. Now what you can do here is + +00:09:33.380 --> 00:09:34.740 +that, let's say, if you want to search + +00:09:34.740 --> 00:09:37.380 +for something, so you can basically do a + +00:09:37.380 --> 00:09:39.139 +search normally, which is going to do a + +00:09:39.139 --> 00:09:41.860 +web search. But if you call Org Roam + +00:09:41.860 --> 00:09:44.740 +SK, which is Sidekick, it will do a + +00:09:44.740 --> 00:09:48.025 +search on all of your Org Roam notes. So + +00:09:48.025 --> 00:09:50.905 +now this search is basically using recoll. So + +00:09:50.905 --> 00:09:53.145 +recoll kind of indexes all the plain text + +00:09:53.145 --> 00:09:54.925 +and does a full text search for you. + +00:09:55.385 --> 00:09:57.145 +But this this is really helpful because when + +00:09:57.145 --> 00:09:59.190 +I'm searching for something and I still want + +00:09:59.190 --> 00:10:00.550 +to know that, hey, you know, hey, I + +00:10:00.550 --> 00:10:03.510 +have saved some of those links earlier. So, + +00:10:03.830 --> 00:10:05.350 +can I, like, you know, see them back + +00:10:05.350 --> 00:10:07.590 +and then, you know, it's a very + +00:10:07.590 --> 00:10:09.990 +good way to kind of not lose track + +00:10:09.990 --> 00:10:12.665 +of what you've already saved. The other + +00:10:12.665 --> 00:10:13.625 +thing I can do is, like, I can + +00:10:13.625 --> 00:10:16.605 +also, you know again, since I have saved + +00:10:16.745 --> 00:10:20.185 +a project, in my Org Roam, I can + +00:10:20.185 --> 00:10:22.905 +basically call, again, Sidekick again, and I can + +00:10:22.905 --> 00:10:26.200 +see a note for that. That note here + +00:10:26.200 --> 00:10:28.780 +specifically is tracking my tasks for this project. + +00:10:29.240 --> 00:10:30.840 +And other than tasks, you know, again, I + +00:10:30.840 --> 00:10:32.920 +can see other things like similar notes. I + +00:10:32.920 --> 00:10:36.040 +can see, you know, other links that are + +00:10:36.040 --> 00:10:39.665 +there. So yeah, so this, there's still some + +00:10:39.665 --> 00:10:41.585 +optimizations to be done. I think this, you + +00:10:41.585 --> 00:10:44.385 +know, the bookmark here is not very intuitive. + +00:10:44.385 --> 00:10:46.385 +I still want, I want this to be + +00:10:46.385 --> 00:10:49.685 +following the browser, as I switch tabs. + +00:10:50.160 --> 00:10:51.839 +But, again, those things are something I'll work + +00:10:51.839 --> 00:10:55.519 +on. Other optimizations include, you know, the way + +00:10:55.519 --> 00:10:59.540 +I'm doing the search using ML that needs + +00:10:59.600 --> 00:11:02.735 +a little bit of fine tuning because, every + +00:11:02.735 --> 00:11:04.175 +time I make a new link, I have + +00:11:04.175 --> 00:11:07.375 +to, like, rerun the, you know, re kind of + +00:11:07.375 --> 00:11:09.855 +build the features and everything else, which I, + +00:11:10.335 --> 00:11:13.855 +need it to be real time. Yeah. So + +00:11:13.855 --> 00:11:16.334 +that concludes my talk. Hope you enjoyed it. + +00:11:16.734 --> 00:11:18.355 +Let me know if there are any questions. + +00:11:18.814 --> 00:11:19.554 +Thank you. diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt new file mode 100644 index 00000000..803d43df --- /dev/null +++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt @@ -0,0 +1,996 @@ +WEBVTT + +00:00:00.000 --> 00:00:04.839 +I'm doing great. Good to hear from you guys. Yeah, I mean, + +00:00:04.840 --> 00:00:07.959 +you've been a regular of the show, I would say, for quite a + +00:00:07.960 --> 00:00:11.399 +while, and it's good. I really like the retrospective that + +00:00:11.400 --> 00:00:14.959 +you did the first time you attended EmacsConf. And when was + +00:00:14.960 --> 00:00:18.759 +it? Was it 2015? I can't actually remember. 2015 was when I + +00:00:18.760 --> 00:00:22.319 +presented that, but I did an earlier talk the year before. So + +00:00:22.320 --> 00:00:25.479 +yeah, that's why it's kind of thing. It's like, wow, it's + +00:00:25.480 --> 00:00:31.279 +been a decade. It's been a while. Yeah, and I'm glad that you + +00:00:31.280 --> 00:00:35.559 +are in a much better recording situation than you were in + +00:00:35.560 --> 00:00:39.439 +2015 at the back of your colleague's house. It's good to see + +00:00:39.440 --> 00:00:44.359 +you at your own place. Well, it's also nice to pre-record and + +00:00:44.360 --> 00:00:48.239 +then just share. Yeah, I mean, that's why we keep talking + +00:00:48.240 --> 00:00:51.519 +about pre-recording. You know, when we really pushed + +00:00:51.520 --> 00:00:53.759 +pre-recordings, I think it was five years ago when we + +00:00:53.760 --> 00:00:57.679 +started, people were not really liking it. They thought, + +00:00:57.680 --> 00:01:00.039 +oh, but most conferences are just asking you to come and + +00:01:00.040 --> 00:01:02.919 +chat. And, you know, I don't need to do the pesky + +00:01:02.920 --> 00:01:06.319 +pre-recording. But now, and especially for you regulars, + +00:01:06.320 --> 00:01:08.359 +you're really starting to realize that pre-recordings are + +00:01:08.360 --> 00:01:11.279 +actually amazing for everyone. You're less stressed on the + +00:01:11.280 --> 00:01:14.199 +day of the conference. We, the organizers, are way less + +00:01:14.200 --> 00:01:16.519 +stressed. So it's a win-win scenario for absolutely + +00:01:16.520 --> 00:01:19.359 +everyone in the equation. Okay, so there's some + +00:01:19.360 --> 00:01:22.519 +confirmation bias at work, but I'm not really arguing with + +00:01:22.520 --> 00:01:27.639 +what Leo says for the record. It may be that we are just that + +00:01:27.640 --> 00:01:30.759 +this stoked that we're lying to ourselves by the + +00:01:30.760 --> 00:01:33.959 +opportunity that we have to chat with each of you. Sure. + +00:01:33.960 --> 00:01:38.759 +Sure. Sure. I have really appreciated all of the, the + +00:01:38.760 --> 00:01:43.559 +transcripts. It's been great that, you know, to be able to + +00:01:43.560 --> 00:01:46.519 +read and copy and paste and all that kind of thing. Yeah, it's + +00:01:46.520 --> 00:01:49.959 +great. So yeah, let's answer some questions here. + +00:01:49.960 --> 00:01:58.159 +Let's see. Yeah, just feel free to jump onto the Etherpad and + +00:01:58.160 --> 00:02:01.239 +just drop on the questions. I'll keep answering them all day + +00:02:01.240 --> 00:02:07.399 +kind of thing and get better answers as we go along. + +NOTE Q: What's the largest code base you've ever tackled with the literate approach (esp. Emacs + Org-mode)? + +00:02:07.400 --> 00:02:12.439 +So yeah, the first question here is, what's my largest code base? + +00:02:12.440 --> 00:02:18.359 +I kind of touched it in my presentation. However, I think + +00:02:18.360 --> 00:02:22.439 +someone just went through and did a better count than it + +00:02:22.440 --> 00:02:27.879 +looks like. a little bit more. So + +00:02:27.880 --> 00:02:32.959 +as I joked about in the video, we've all worked on larger code + +00:02:32.960 --> 00:02:36.799 +bases, but that's still, it's kind of significant. So it's + +00:02:36.800 --> 00:02:43.679 +not, so yeah, anyway. So let's talk a little bit about + +00:02:43.680 --> 00:02:49.519 +searching for functions here. If you've got your functions + +00:02:49.520 --> 00:02:53.679 +in your code or code block, well, you can search for the + +00:02:53.680 --> 00:02:59.319 +descriptions, you know, as long as you've evaluated it. And + +00:02:59.320 --> 00:03:04.519 +so that wasn't so much of a problem, but I did want to like look + +00:03:04.520 --> 00:03:07.839 +at the commentary around any function that I would define. + +00:03:07.840 --> 00:03:14.039 +And that's where, yeah, you know, the C-x or the + +00:03:14.040 --> 00:03:18.919 +C-f to define that function and display it. It won't + +00:03:18.920 --> 00:03:22.279 +pull out the literate stuff around it, obviously, it'll + +00:03:22.280 --> 00:03:27.159 +only do the doc header. But if you could search for it and find + +00:03:27.160 --> 00:03:30.559 +it quick, then it might be just as useful. And I guess that's + +00:03:30.560 --> 00:03:36.079 +why I started getting into seeing if I can't tie that into the + +00:03:36.080 --> 00:03:40.839 +X ref. you know, just the standard ways. My first part, I + +00:03:40.840 --> 00:03:45.799 +noticed that evil has a different way of searching through + +00:03:45.800 --> 00:03:50.999 +for looking for code definitions. That was my first foray + +00:03:51.000 --> 00:03:53.959 +into it. It's like, oh, that's not a bad idea. Let's hook it up + +00:03:53.960 --> 00:03:58.079 +under, you know, in the standard way. + +NOTE Q: Have you ever used org-transclusion? + +00:03:58.080 --> 00:04:02.279 +Let's see. Have I ever used org-transclusion? + +00:04:02.280 --> 00:04:05.319 +No, I haven't, but I think I want to + +00:04:05.320 --> 00:04:08.439 +take a look at it. I haven't heard of it before. + +NOTE Q: What is your usage of dynamic blocks in such workflows? + +00:04:08.440 --> 00:04:16.519 +Let's see. What's my usage of dynamic blocks in my + +00:04:16.520 --> 00:04:21.439 +workflows? You know, that's a real good question. I haven't + +00:04:21.440 --> 00:04:26.319 +really used them a lot in all of my workflows, but yeah, it's + +00:04:26.320 --> 00:04:29.439 +an interesting, you know, we always start. + +00:04:29.440 --> 00:04:30.999 +At first, all + +00:04:31.000 --> 00:04:33.679 +we're doing is just taking a few notes, then we start + +00:04:33.680 --> 00:04:36.039 +organizing, then we've got links, and then we're writing + +00:04:36.040 --> 00:04:39.519 +code blocks, and then agendas, and table, you know, we keep + +00:04:39.520 --> 00:04:40.999 +building up on it. + +00:04:41.000 --> 00:04:44.399 +I guess I haven't really added that to + +00:04:44.400 --> 00:04:46.978 +my workflow, but maybe I'll have to come back + +00:04:46.979 --> 00:04:48.839 +and report on that. + +NOTE Q: Is the minibuffer being deliberately hidden in this video? + +00:04:48.840 --> 00:04:51.599 +Is the mini buffer being deliberately hidden in my + +00:04:51.600 --> 00:04:57.879 +video? Not deliberately. I recorded it first and + +00:04:57.880 --> 00:05:03.759 +accidentally not clipped the video and turned that all off. + +00:05:03.760 --> 00:05:07.359 +So I went through and started fixing all of it. But yeah, so + +00:05:07.360 --> 00:05:10.759 +you'll notice the mini buffer kind of comes and goes in the + +00:05:10.760 --> 00:05:12.444 +video. Sorry about that. + +00:05:12.445 --> 00:05:17.340 +So yeah, it wasn't intentional at all. + +NOTE Q: What's your take on Emacs+Org vs. Jupyter notebooks (for interactive programming)? + +00:05:17.341 --> 00:05:21.839 +What's my take on Emacs Org versus Jupyter? That's a real + +00:05:21.840 --> 00:05:29.519 +good question. I've been toying about seeing if I could do + +00:05:29.520 --> 00:05:32.479 +everything that some people do with Jupyter notebooks in + +00:05:32.480 --> 00:05:36.079 +order. I don't need to do it as much because I'm still kind of + +00:05:36.080 --> 00:05:40.319 +doing a lot of list programming and a lot of my DevOps, which + +00:05:40.320 --> 00:05:45.559 +is a lot of shell work and a lot of Python. Most of the Jupyter + +00:05:45.560 --> 00:05:49.639 +notebooks, they automatically include a lot of things in + +00:05:49.640 --> 00:05:56.679 +from either Julia or Python, like NumPy and all the dynamic + +00:05:56.680 --> 00:06:01.439 +stuff that's going on there. Since it has a server, + +00:06:01.440 --> 00:06:07.439 +it seems like it's running a lot more stuff and then just + +00:06:07.440 --> 00:06:10.719 +shipping it back off into the web app. That has been the + +00:06:10.720 --> 00:06:16.239 +biggest challenge as I've tried to kind of duplicate that. I + +00:06:16.240 --> 00:06:20.439 +don't really know NumPy and all the math stuff and that sort + +00:06:20.440 --> 00:06:25.039 +of stuff that well. So trying to do like matrix + +00:06:25.040 --> 00:06:27.359 +multiplications and that kind of thing that seemed to be + +00:06:27.360 --> 00:06:33.119 +pretty easy in the Jupyter, it's not very easy in Org. I've + +00:06:33.120 --> 00:06:36.639 +attempted to kind of work with Julia and the Julia support + +00:06:36.640 --> 00:06:45.759 +for Org is really limited it seems. That's the, So, yeah, + +00:06:45.760 --> 00:06:49.199 +there's some improvements we could probably make. So, I + +00:06:49.200 --> 00:06:53.159 +think if somebody is comfortable with Jupiter, and that + +00:06:53.160 --> 00:06:59.039 +seems to work, you may have to stay there. I don't know how + +00:06:59.040 --> 00:07:04.679 +easy. I would be curious to try to see what we could do as a + +00:07:04.680 --> 00:07:07.799 +community to kind of make that transition a lot easier. + +NOTE Q: Do you think any programming language is more suited to literate programming than another? + +00:07:07.800 --> 00:07:12.416 +Do you think any programming language + +00:07:12.417 --> 00:07:13.559 +is more suited to literate + +00:07:13.560 --> 00:07:16.959 +programming than another? Hey, that's a real good + +00:07:16.960 --> 00:07:22.359 +question. A lot of mine is with Emacs Lisp, and obviously + +00:07:22.360 --> 00:07:27.639 +that's a first-class citizen in Emacs. Go figure, right? So + +00:07:27.640 --> 00:07:33.519 +that one certainly works. A lot depends on the support in the + +00:07:33.520 --> 00:07:38.199 +OB version for the Babel work. Python is really well + +00:07:38.200 --> 00:07:45.599 +supported, and yeah, Emacs Lisp. Others, Shell, you know, + +00:07:45.600 --> 00:07:50.439 +it works, but it's hard to get both the values, the variables + +00:07:50.440 --> 00:07:53.479 +out of the environment variables into your thing. So most + +00:07:53.480 --> 00:07:58.959 +everything is just with the results of output. So, you know, + +00:07:58.960 --> 00:08:03.079 +some languages aren't quite as good as others for sure. I + +00:08:03.080 --> 00:08:06.879 +would love to see better support for more interesting + +00:08:06.880 --> 00:08:10.439 +languages, especially ones that are compiled. I've been + +00:08:10.440 --> 00:08:16.639 +dabbling with Rust and like, yeah, what can we do to have Rust + +00:08:16.640 --> 00:08:21.559 +more iterative as well? So... + +NOTE Q: Do you use inline org function calls and org babel library and such? + +00:08:21.560 --> 00:08:29.159 +Do you use inline org function calls in Org Babel library? So + +00:08:29.160 --> 00:08:33.599 +I used to do a lot of Org Babel libraries to kind of share + +00:08:33.600 --> 00:08:35.639 +things. + +00:08:35.640 --> 00:08:46.399 +Yeah. What I. But yeah. Sorry, I'm just kind of thinking + +00:08:46.400 --> 00:08:49.839 +through here. I've done a lot of it in the past. There were a + +00:08:49.840 --> 00:08:54.919 +lot of bugs in it. Oh, I don't know, eight years ago when I was + +00:08:54.920 --> 00:08:59.359 +playing with it. I bet things have improved a lot more and it + +00:08:59.360 --> 00:09:04.239 +probably saved me a lot more effort. Right now, most of the + +00:09:04.240 --> 00:09:08.639 +literate devops, the devops kind of stuff that I'm doing, is + +00:09:08.640 --> 00:09:14.079 +calling a lot of back-end programs and that sort of thing. So + +00:09:14.080 --> 00:09:19.359 +the Org Babel kind of has limited help in that regard. And as + +00:09:19.360 --> 00:09:23.999 +far as my Emacs work, well, it's just part of the session. So + +00:09:24.000 --> 00:09:26.759 +it's going to be available or not. So that hasn't been as + +00:09:26.760 --> 00:09:30.559 +helpful either. So it's kind of dropped off. But I bet if + +00:09:30.560 --> 00:09:34.519 +you're using something like, say, Python, it might be a lot + +00:09:34.520 --> 00:09:36.969 +more helpful. + +NOTE Q: How do you handle the cases where org markup may sometimes interfere with some of the code? + +00:09:36.970 --> 00:09:40.159 +Another question, how do you handle the cases + +00:09:40.160 --> 00:09:43.999 +where markup may sometimes interfere with some of the code + +00:09:44.000 --> 00:09:50.559 +in places where you can't escape? Oh, okay. All right. Let me + +00:09:50.560 --> 00:09:54.719 +see if I understand the question correctly. + +00:09:54.720 --> 00:10:01.759 +When I, like, when I'm making prose, and I'm talking about a + +00:10:01.760 --> 00:10:04.839 +function that I've written somewhere else, like, oh, I need + +00:10:04.840 --> 00:10:09.439 +to work on this, or this calls this, and yeah, I'll use the + +00:10:09.440 --> 00:10:14.839 +tildes or the equal signs on either side to make sure it's. + +00:10:14.840 --> 00:10:20.399 +that it's clear that it's code. In my xref, when I'm doing a + +00:10:20.400 --> 00:10:27.479 +thing-at-point so it can go look for that symbol, I do look for + +00:10:27.480 --> 00:10:31.919 +those things at the end and strip them off so that I can mark it + +00:10:31.920 --> 00:10:35.039 +up and still search and it's still okay. I'm not sure if + +00:10:35.040 --> 00:10:39.359 +that's the answer to the question. Yeah, clarifying. I'm + +00:10:39.360 --> 00:10:41.759 +making prose. I'm talking about a function I've written + +00:10:41.760 --> 00:10:47.319 +somewhere else. Yeah, yeah, yeah, that is what I'm talking + +00:10:47.320 --> 00:10:53.279 +about, where a function with tildes on either end, and if I do + +00:10:53.280 --> 00:10:57.359 +an xref search find for that symbol, it'll strip that off and + +00:10:57.360 --> 00:11:01.439 +then still look for the function name, so I can still mark it + +00:11:01.440 --> 00:11:06.219 +correctly. + +NOTE Q: You said at the start that literate didn't catch on in corporate DevOps - why not? + +00:11:06.220 --> 00:11:08.439 +You said at the start that literate didn't catch on in + +00:11:08.440 --> 00:11:14.719 +corporate devops, why not? You know, + +00:11:14.720 --> 00:11:18.919 +I guess the big thing is not everybody's using Emacs, + +00:11:18.920 --> 00:11:20.610 +and I don't think anybody would be + +00:11:20.611 --> 00:11:23.651 +doing literate programming if you didn't + +00:11:23.652 --> 00:11:25.199 +have Emacs. I mean, you got to have Org, or it just + +00:11:25.200 --> 00:11:29.420 +doesn't work that well, right? + +NOTE Q: Why not that full stack on Markdown? + +00:11:29.421 --> 00:11:36.359 +Why not that full stack on Markdown? Yeah, so I often do a lot + +00:11:36.360 --> 00:11:44.279 +of Markdown. I have got, so I've gone through and make my + +00:11:44.280 --> 00:11:49.039 +markdown look a lot like Org. So my headers are the same size + +00:11:49.040 --> 00:11:54.759 +as org. When I mark, do the triple back ticks, you know, and + +00:11:54.760 --> 00:11:59.279 +specify your language, we can now colorize that. + +00:11:59.280 --> 00:12:01.521 +So you can kind of now have it + +00:12:01.522 --> 00:12:05.679 +syntactically marked up. It would be + +00:12:05.680 --> 00:12:11.199 +interesting if we kind of expanded on Markdown so that I + +00:12:11.200 --> 00:12:14.479 +could do a C-c twice on it and run that code block. + +00:12:14.480 --> 00:12:22.119 +That's a real good idea. Maybe we should work on that. + +NOTE Corwin's aside on orgvm + +00:12:22.120 --> 00:12:28.039 +How does your management of TODOs, projects, and tasks + +00:12:28.040 --> 00:12:31.679 +interact with this literate mindset? I can't believe I'm + +00:12:31.680 --> 00:12:33.879 +going to do this, but Howard, I'm going to break right in + +00:12:33.880 --> 00:12:37.119 +there because I just can't. I need to talk about that. So this + +00:12:37.120 --> 00:12:41.799 +is I bought a domain. And really what I mean is I have this + +00:12:41.800 --> 00:12:45.599 +domain if somebody gets some work done in this area. I'm + +00:12:45.600 --> 00:12:48.839 +fascinated by this. That's mostly really actually my whole + +00:12:48.840 --> 00:12:52.599 +comment. But I just wanted to say, indeed, that is something + +00:12:52.600 --> 00:12:56.599 +maybe we should work on. Well said. I think the idea of having + +00:12:56.600 --> 00:12:59.559 +something that's full-stack baked around Emacs is pretty + +00:12:59.560 --> 00:13:03.079 +fascinating, just thinking about it as some command line + +00:13:03.080 --> 00:13:05.639 +tool that we can run to get some work done, and then there are + +00:13:05.640 --> 00:13:07.969 +documents involved, and as you know coming back + +00:13:07.970 --> 00:13:10.511 +to the kind of corporate + +00:13:10.512 --> 00:13:12.759 +sense of some of the things like there... + +00:13:12.760 --> 00:13:15.319 +that's a little dicey the same way a free software + +00:13:15.320 --> 00:13:19.038 +project raising money for itself is a little dicey. + +00:13:19.039 --> 00:13:21.720 +It might be a necessary way to get through + +00:13:21.721 --> 00:13:23.882 +certain kinds of things and like + +00:13:23.883 --> 00:13:26.559 +what the corporate side of the world brings to the table + +00:13:26.560 --> 00:13:31.989 +Here in my mind is that idea of I've got a formal process, + +00:13:31.990 --> 00:13:33.830 +like the process itself is an asset. + +00:13:33.831 --> 00:13:35.239 +If I were selling my company, + +00:13:35.240 --> 00:13:39.399 +that would be visibly of value to outside auditors that + +00:13:39.400 --> 00:13:43.257 +would help us arbitrate the sale. It's just empirical. + +00:13:43.258 --> 00:13:48.239 +Then tie that together with free software is maybe a little + +00:13:48.240 --> 00:13:53.159 +unstated ethos of doing our work in the open, and you might + +00:13:53.160 --> 00:13:58.759 +even deal with some of the ick factor. that you know that for a + +00:13:58.760 --> 00:14:05.119 +handler. Maybe so, but yeah, the downside to that is you'd + +00:14:05.120 --> 00:14:09.679 +still need to use Emacs to run through it, right? You know, + +00:14:09.680 --> 00:14:13.719 +for all those cool features, yes, it would be kind of a yet + +00:14:13.720 --> 00:14:17.519 +another killer app that we would have. So my domain name is + +00:14:17.520 --> 00:14:22.239 +orgvm, and my concept is really put org into a box, build a UI + +00:14:22.240 --> 00:14:25.119 +around it, it executes things that manipulate files that + +00:14:25.120 --> 00:14:30.239 +generate, let's say, And that's just one conceptual + +00:14:30.240 --> 00:14:34.359 +solution. But I really do think this is a super fun topic. And + +00:14:34.360 --> 00:14:37.479 +that's the space. I'm not sure my idea is that wonderful. I + +00:14:37.480 --> 00:14:42.439 +personally haven't soaked too many weekends into it. But I + +00:14:42.440 --> 00:14:45.159 +just love the way you're thinking in terms of, well, we + +00:14:45.160 --> 00:14:49.519 +should think more about that. Gosh, that's great to hear. + +NOTE Org and Markdown fragmentation + +00:14:49.520 --> 00:14:53.399 +Yeah. Yeah, I mean, just like the talk yesterday on the + +00:14:53.400 --> 00:14:57.639 +future of org, it's like, let's standardize it. Because, + +00:14:57.640 --> 00:15:03.239 +yeah, we don't want to have org fragmented like Markdown is. + +00:15:03.240 --> 00:15:06.839 +Markdown is terribly fragmented. You know, everybody's + +00:15:06.840 --> 00:15:10.199 +got different implementations. And Yeah, what I've ended + +00:15:10.200 --> 00:15:15.039 +up doing, I don't know if you've seen my blog, but I often I'm + +00:15:15.040 --> 00:15:19.119 +always just writing an org and talking to myself and writing + +00:15:19.120 --> 00:15:22.919 +questions and answers and essays come out of that. And then + +00:15:22.920 --> 00:15:26.319 +I'll put them on my web page and easy. It's easy to publish to a + +00:15:26.320 --> 00:15:30.079 +web page. Well, I do the same thing at work, but I need to have + +00:15:30.080 --> 00:15:33.319 +it marked down. I don't start Markdown though. I'm always + +00:15:33.320 --> 00:15:36.479 +starting an org because that, you know, I can really work + +00:15:36.480 --> 00:15:40.239 +through the problem space, you know, executing code blocks + +00:15:40.240 --> 00:15:44.759 +and making sure they work and all of that sort of stuff. And + +00:15:44.760 --> 00:15:47.959 +then I just export to Markdown and then go cleaned up a little + +00:15:47.960 --> 00:15:51.679 +bit if I need to. And that makes sense. But I am editing + +00:15:51.680 --> 00:15:55.999 +Markdown afterwards. So yeah, it would be nice. It would be + +00:15:56.000 --> 00:16:00.359 +nice. It's just, it's all done over here as opposed to, you + +00:16:00.360 --> 00:16:02.879 +know, Adding it over there, but yeah, let's think about + +00:16:02.880 --> 00:16:06.519 +every bit as much as as that. You know, I jumped in in the + +00:16:06.520 --> 00:16:09.959 +spirit of yes, let's think about it. You know, your, your + +00:16:09.960 --> 00:16:12.599 +comments about, let's think about the workflows that work + +00:16:12.600 --> 00:16:17.919 +for us. Wow. Does that hit home? Right? So great. Yeah. Yeah. + +NOTE Q: How does your management of "TODOs" (projects/tasks) interact with this literate mindset, any insightful things you do on that front? + +00:16:17.920 --> 00:16:25.279 +Yeah. Okay. So, uh, on to do's and that sort of thing, um. You + +00:16:25.280 --> 00:16:32.199 +know, a lot is the same as it was 10 years ago. At the beginning + +00:16:32.200 --> 00:16:33.319 +of every sprint, + +00:16:33.320 --> 00:16:38.279 +my company, we're using JIRA. + +00:16:38.280 --> 00:16:46.159 +All jokes are valid when I say that. But I just go to its web + +00:16:46.160 --> 00:16:49.639 +page. I copy all the tasks that I need to do that sprint. I + +00:16:49.640 --> 00:16:54.119 +wrote a function that takes that code and reformats it as a + +00:16:54.120 --> 00:16:58.199 +bunch of org tasks for me to do that I can just now have all my + +00:16:58.200 --> 00:17:02.799 +to-dos. And I start to work off of that from that point on. So + +00:17:02.800 --> 00:17:06.479 +it'll reference all the projects, and I do symlinks to every + +00:17:06.480 --> 00:17:12.479 +code base that I need to use. Most of the to-dos I put inside my + +00:17:12.480 --> 00:17:16.639 +code block is kind of just for me, just so I can remember it. + +00:17:16.640 --> 00:17:21.086 +Because the work that I have to do + +00:17:21.087 --> 00:17:24.119 +needs to be tracked a little more + +00:17:24.120 --> 00:17:30.629 +fine-grained, I guess. Yeah. + +NOTE Q: Do you LP also on larger projects? + +00:17:30.630 --> 00:17:33.439 +Do I use LP also on larger + +00:17:33.440 --> 00:17:37.199 +projects? More files and nested directories? Yeah, I + +00:17:37.200 --> 00:17:43.879 +haven't really done nested directories, but I can now. Now + +00:17:43.880 --> 00:17:49.839 +that I've now kind of realized that I have the feature that I + +00:17:49.840 --> 00:17:54.439 +demonstrated where I can just jump to any projects for a + +00:17:54.440 --> 00:17:59.559 +particular project, all the org files and all the headings + +00:17:59.560 --> 00:18:02.439 +show up, that works in nested directories. + +00:18:02.440 --> 00:18:10.999 +Oh, okay, yeah, somebody's typing it in. Yeah, so it's + +00:18:11.000 --> 00:18:15.359 +definitely possible. And I have now, since I recorded the + +00:18:15.360 --> 00:18:20.519 +talk, I've been busy typing in and trying to extract that out + +00:18:20.520 --> 00:18:24.479 +of my init file and make it into a package. I'm looking for a + +00:18:24.480 --> 00:18:30.239 +good name right now. I'm calling it jobs, jump to project + +00:18:30.240 --> 00:18:36.399 +sections. Anyway, but yeah, I think that's kind of a nice, + +00:18:36.400 --> 00:18:38.935 +useful feature. + +NOTE Q: Have you used Cucumber/Gherkin/BDD and do you think it has a strong overlap to what you talked about here? + +00:18:38.936 --> 00:18:41.919 +Have I used Cucumber, Gherkin, and other + +00:18:41.920 --> 00:18:44.479 +behavior-driven development? + +00:18:44.480 --> 00:18:50.719 +Have I, I mean, I do a lot of... + +00:18:50.720 --> 00:19:00.279 +more test driven. I do a lot of unit tests and I just put it + +00:19:00.280 --> 00:19:04.679 +right in my code base because if it's in my pros, I can just + +00:19:04.680 --> 00:19:07.199 +shove it in there. I've got the test right next to the + +00:19:07.200 --> 00:19:11.519 +function that I'm testing. I like that so I can kind of see it. + +00:19:11.520 --> 00:19:15.359 +I don't tangle it out to that same source file. I tangle it + +00:19:15.360 --> 00:19:19.119 +somewhere else if I tangle it at all because I don't need to. I + +00:19:19.120 --> 00:19:23.199 +can just, you know, C-c that and run it. I like that + +00:19:23.200 --> 00:19:24.879 +aspect of it. + +00:19:24.880 --> 00:19:29.319 +Yeah, just keeping things together. That's the big problem + +00:19:29.320 --> 00:19:32.479 +I have with a lot of tests is the tests are somewhere else. + +00:19:32.480 --> 00:19:35.319 +It's separate from the code. I like seeing it all together, + +00:19:35.320 --> 00:19:39.879 +but a lot depends on how extensive it is. So for a lot of the, + +00:19:39.880 --> 00:19:43.359 +you know, the tests that we end up doing where, you know, + +00:19:43.360 --> 00:19:47.759 +you've got to do a lot of mocks and a lot of startup and tear + +00:19:47.760 --> 00:19:51.839 +down, that kind of thing. Yeah, that doesn't help as much. + +00:19:51.840 --> 00:19:54.599 +And you probably have to kind of go old school on that. + +NOTE Q: What granularity are you looking for re your org files and contents, with respect to a codebase that it tangles to, or in non-coding contexts? + +00:19:54.600 --> 00:20:01.359 +What granularity I'm looking for with my org files and my + +00:20:01.360 --> 00:20:03.634 +subcontent? That's a real good question + +00:20:03.635 --> 00:20:05.255 +and really subjective. + +00:20:05.256 --> 00:20:13.159 +I change that over time. I begin by just dumping. + +00:20:13.160 --> 00:20:16.378 +I just dump everything in my head into a file + +00:20:16.379 --> 00:20:19.679 +and then I go through and start to refine it. + +00:20:19.680 --> 00:20:26.159 +My goal at one point was to have an Emacs config file that was + +00:20:26.160 --> 00:20:29.919 +really small and simple. And boy, that just doesn't happen. + +00:20:29.920 --> 00:20:35.759 +It's just too fun to add things and try new ideas. And I found + +00:20:35.760 --> 00:20:41.839 +my files were just littered with good ideas that were + +00:20:41.840 --> 00:20:47.119 +half-baked and not finished. And so it's like, oh, I need to + +00:20:47.120 --> 00:20:49.959 +extract these and put them into different files so I can keep + +00:20:49.960 --> 00:20:54.359 +it clean. And so I think it's like with any code base, you're + +00:20:54.360 --> 00:20:58.999 +just going to keep refactoring. It's an iterative process. + +00:20:59.000 --> 00:21:04.199 +So having the ability to, like with an Org file, where you can + +00:21:04.200 --> 00:21:09.159 +archive a subtree. Okay, this idea didn't pan out. Archive + +00:21:09.160 --> 00:21:13.519 +it. I can come back to it later. Being able to just kind of + +00:21:13.520 --> 00:21:20.399 +shove it somewhere else is really a nice little feature. All + +00:21:20.400 --> 00:21:25.079 +right. Not a question, just a comment. We need more of your + +00:21:25.080 --> 00:21:29.239 +insightful posts and videos. Oh, thanks. + +00:21:29.240 --> 00:21:35.519 +I appreciate it. Yes, it's been a fun journey. And I think we + +00:21:35.520 --> 00:21:38.519 +are coming up on our time, actually. So that is just an + +00:21:38.520 --> 00:21:41.919 +amazing quiz. And it helps me from manipulating, as I said, + +00:21:41.920 --> 00:21:46.959 +or as I put it earlier, like my chance as an organizer, or not + +00:21:46.960 --> 00:21:50.679 +manipulating, monopolizing my chance as an organizer to + +00:21:50.680 --> 00:21:53.439 +just get a chance to pick your brain on all kinds of things, + +00:21:53.440 --> 00:21:58.959 +which is too kind, too kind. Appreciate it. It's been fun. + +00:21:58.960 --> 00:22:04.679 +All right, I'll try answering more questions online as + +00:22:04.680 --> 00:22:07.959 +well. All right, talk to you later. And we appreciate your + +00:22:07.960 --> 00:22:10.399 +being in a huge resource that you are to the community. + +00:22:10.400 --> 00:22:14.199 +Thanks to everyone for tuning in and we'll be coming over to + +00:22:14.200 --> 00:22:18.239 +our next talk in just a moment here. And so bear with us + +00:22:18.240 --> 00:22:23.239 +through the transition as we slip into, I think it's our, is + +00:22:23.240 --> 00:22:26.919 +that our penultimate or our ultimate talk? We have one or two + +00:22:26.920 --> 00:22:30.119 +left, I'm not sure. I think we've got a couple of talks left. + +00:22:30.120 --> 00:22:34.079 +I'm back. Thank you, Howard. And we will be moving to the next + +00:22:34.080 --> 00:22:37.159 +talk in about six minutes. So if you need to grab some coffee, + +00:22:37.160 --> 00:22:42.119 +some tea, use the time wisely. And to confirm, we will have + +00:22:42.120 --> 00:22:44.319 +one, two, three more talks this afternoon. So there's still + +00:22:44.320 --> 00:22:48.160 +plenty to go around. See you in a bit, folks. diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt new file mode 100644 index 00000000..640735ad --- /dev/null +++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt @@ -0,0 +1,47 @@ +WEBVTT + + +00:00:00.000 --> 00:01:35.252 +Introduction + +00:01:35.253 --> 00:03:06.331 +Do I still literate? + +00:03:06.332 --> 00:04:28.719 +Advantages + +00:04:28.720 --> 00:05:24.132 +Disadvantages + +00:05:24.133 --> 00:06:24.719 +Ease of typing + +00:06:24.720 --> 00:07:22.500 +Keep tangled code sync'd + +00:07:22.501 --> 00:08:19.959 +Code evaluation + +00:08:19.960 --> 00:09:05.238 +Has that block been eval'd? + +00:09:05.239 --> 00:09:26.871 +Evaluating code in a subtree + +00:09:26.872 --> 00:10:26.019 +Evaluating code from a distance + +00:10:26.020 --> 00:11:26.793 +Navigating by headers + +00:11:26.794 --> 00:13:40.479 +Navigating by function names + +00:13:40.480 --> 00:14:23.165 +Why literate programming? + +00:14:23.166 --> 00:14:55.799 +LP prose isn't comments + +00:14:55.800 --> 00:15:51.240 +Summary diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt new file mode 100644 index 00000000..986320d0 --- /dev/null +++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt @@ -0,0 +1,724 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:09.359 +Can you believe it's been a decade since I started + +00:00:09.360 --> 00:00:12.358 +pontificating on literate programming? + +00:00:12.359 --> 00:00:17.542 +I am Howard Abrams. In 2015, I spoke at this EmacsConf + +00:00:17.543 --> 00:00:21.705 +where I described my challenges I called Literate DevOps. + +00:00:21.706 --> 00:00:25.634 +The conference wasn't completely virtual, even though I was. + +00:00:25.635 --> 00:00:29.317 +My city of Portland was suffering a citywide electrical outage + +00:00:29.318 --> 00:00:33.479 +and I was without power, so I gave the talk in a corner of my + +00:00:33.480 --> 00:00:37.439 +friend's living room. People online asking questions and + +00:00:37.440 --> 00:00:41.439 +wondering about literate programming... I also see comments + +00:00:41.440 --> 00:00:44.599 +explaining why literate programming hasn't caught on in + +00:00:44.600 --> 00:00:49.079 +corporate practice. I often don't engage. I mean, is the + +00:00:49.080 --> 00:00:51.599 +online arguments and chatter over ignorance or + +00:00:51.600 --> 00:00:56.719 +preference? Sure, we're wired differently. I mean, my + +00:00:56.720 --> 00:00:59.559 +favorite programming languages put the parentheses + +00:00:59.560 --> 00:01:01.939 +before the function name. + +00:01:01.940 --> 00:01:03.800 +Literate programming has come a long way + +00:01:03.801 --> 00:01:08.519 +since Knuth proposed it in the 19th century. I feel + +00:01:08.520 --> 00:01:12.999 +it's come a long way just in the last 10 years. Obviously, + +00:01:13.000 --> 00:01:16.399 +this interest is due to Org. I don't think I would bother if + +00:01:16.400 --> 00:01:21.359 +all I had was Knuth's original preprocessor. But since I'm + +00:01:21.360 --> 00:01:24.839 +talking to fellow nerds about an open source project + +00:01:24.840 --> 00:01:27.919 +without corporate backing, let me change the title of my + +00:01:27.920 --> 00:01:32.919 +talk and re-pitch Literate Programming in the 24th and a + +00:01:32.920 --> 00:01:35.252 +Half Century! + +NOTE Do I still literate? + +00:01:35.253 --> 00:01:36.653 +People often ask if I still program that way. + +00:01:36.654 --> 00:01:42.759 +I guess they want to know if there's any long-term benefits, + +00:01:42.760 --> 00:01:45.919 +for many of our tools and our workflows, while initially + +00:01:45.920 --> 00:01:51.079 +tantalizing, often don't last. But yes, when I sit down to + +00:01:51.080 --> 00:01:57.759 +write a program, I create a file with an extension of .org. + +00:01:57.760 --> 00:02:03.799 +I guess you can say I program literally. + +00:02:03.800 --> 00:02:07.359 +Let me be transparent. Do I use literate programming during + +00:02:07.360 --> 00:02:12.599 +my day job? Yes, but only for personal tools or for initial + +00:02:12.600 --> 00:02:16.759 +investigation. At the end of the sprint, I tangle the file + +00:02:16.760 --> 00:02:21.079 +and git commit that. My personal projects, on the other + +00:02:21.080 --> 00:02:25.679 +hand, are Org files. Since I can't show you the code from + +00:02:25.680 --> 00:02:27.839 +my day job, I'm afraid my example code will have a lot of + +00:02:27.840 --> 00:02:31.159 +parentheses. + +00:02:31.160 --> 00:02:33.955 +I'm sure you won't mind. + +00:02:33.956 --> 00:02:37.356 +I like having my Emacs configuration in Org. + +00:02:37.357 --> 00:02:40.359 +It's pretty bling. It has over 8,000 + +00:02:40.360 --> 00:02:44.559 +lines of code. I know, I can hear the screams and gasps over + +00:02:44.560 --> 00:02:49.439 +the network. However, the surrounding prose in Org adds + +00:02:49.440 --> 00:02:53.410 +10,000 lines, and those lines are non-wrapped paragraphs. + +00:02:53.411 --> 00:02:58.119 +I mean, is that large? Sure, we've all worked on + +00:02:58.120 --> 00:03:03.639 +larger, so I guess it's not huge. Come on, it's still + +00:03:03.640 --> 00:03:06.331 +significant. + +NOTE Advantages + +00:03:06.332 --> 00:03:09.799 +Advantages? Look who I'm talking to. I'm sure + +00:03:09.800 --> 00:03:14.279 +you know the advantages, but indulge me. I feel that one + +00:03:14.280 --> 00:03:16.799 +advantage of literate programming, especially with large + +00:03:16.800 --> 00:03:20.279 +code bases, is how you can organize and manage the + +00:03:20.280 --> 00:03:24.839 +complexity. Most programming languages tame large bases + +00:03:24.840 --> 00:03:29.119 +by putting code in separate files. While Org can too, with + +00:03:29.120 --> 00:03:32.279 +Org, we can group related functions together under + +00:03:32.280 --> 00:03:35.043 +expandable headlines. + +00:03:35.044 --> 00:03:37.279 +Here's one. You can see that + +00:03:37.280 --> 00:03:40.706 +I've got different sections grouped together. + +00:03:40.707 --> 00:03:43.759 +In my original talk, I mentioned how I would attempt to organize + +00:03:43.760 --> 00:03:47.839 +my thoughts before coding. I appreciate how I can look back + +00:03:47.840 --> 00:03:53.599 +at my notes. In my Emacs configuration, I review the prose to + +00:03:53.600 --> 00:03:57.799 +help memorize key bindings. + +00:03:57.800 --> 00:04:01.039 +My section on getting email working with Emacs using + +00:04:01.040 --> 00:04:04.079 +notmuch means creating small collections of scripts and + +00:04:04.080 --> 00:04:08.199 +configuration files. I can tangle them all from one Org + +00:04:08.200 --> 00:04:16.799 +file. I like that I can explain each part separately. + +00:04:16.800 --> 00:04:20.879 +You just can't beat having links back to Stack Overflow or + +00:04:20.880 --> 00:04:25.519 +that GitHub repo where you stole, I mean, became inspired to + +00:04:25.520 --> 00:04:28.719 +write your code. + +NOTE Disadvantages + +00:04:28.720 --> 00:04:34.279 +Literate programming may push the boundaries of our + +00:04:34.280 --> 00:04:38.119 +workflows and revealing some abrasion, but we aren't + +00:04:38.120 --> 00:04:41.239 +solely working with Org. We have the flexibility of a Lisp + +00:04:41.240 --> 00:04:45.119 +engine to file down those rough parts. You may have your + +00:04:45.120 --> 00:04:48.159 +concerns. Perhaps you could reach out to me, and with + +00:04:48.160 --> 00:04:54.239 +particular issues, maybe we can figure something out. + +00:04:54.240 --> 00:04:57.439 +Here is my list of frictions, and the rest of my talk + +00:04:57.440 --> 00:05:02.159 +demonstrates my answers and my hacks. The goal in literate + +00:05:02.160 --> 00:05:05.039 +programming with Org is that it should not require more + +00:05:05.040 --> 00:05:08.679 +effort than non-literate programming. For instance, I + +00:05:08.680 --> 00:05:12.119 +shouldn't have to type much more than regular programming + +00:05:12.120 --> 00:05:15.719 +to get my code literate. I also shouldn't have to worry about + +00:05:15.720 --> 00:05:20.799 +the state between my Org file and the source code. I want + +00:05:20.800 --> 00:05:24.132 +to be able to jump around my code just as easily. + +NOTE Ease of typing + +00:05:24.133 --> 00:05:28.654 +Let me explain more. I've created some templates using + +00:05:28.655 --> 00:05:34.679 +yasnippet. Since I was used to the old org-tempo feature, + +00:05:34.680 --> 00:05:37.145 +my habit has all the snippets starting with a + +00:05:37.146 --> 00:05:40.759 +< character. I'm not sure if I should demonstrate all of them + +00:05:40.760 --> 00:05:45.999 +as you may be doing something similar. I like to build on top + +00:05:46.000 --> 00:05:49.999 +of characters to remind me that if I just enter a <s, I + +00:05:50.000 --> 00:05:53.519 +need to put in the language. But if I append a mnemonic, I can + +00:05:53.520 --> 00:05:56.839 +get a full language. Why not do that with a full function + +00:05:56.840 --> 00:06:01.199 +definition? In this case, I'm smooshing one yasnippet + +00:06:01.200 --> 00:06:11.679 +inside another one in order to save myself some typing. + +00:06:11.680 --> 00:06:15.159 +My point here is to pay attention to what slows you down or + +00:06:15.160 --> 00:06:24.719 +hinders you from getting the advantages you want. + +NOTE Keep tangled code sync'd + +00:06:24.720 --> 00:06:28.399 +Do you ever forget to tangle your code? You can append this + +00:06:28.400 --> 00:06:31.519 +code to the bottom of your Org file so that it gets tangled + +00:06:31.520 --> 00:06:36.159 +every time you save. I've written a function so I can visit + +00:06:36.160 --> 00:06:40.559 +that tangled file and then return. I've grouped all my + +00:06:40.560 --> 00:06:45.119 +functions together. I've taken a cue from Charles Choi, you + +00:06:45.120 --> 00:06:48.639 +know, kickingvegas, and his Casual feature set. But + +00:06:48.640 --> 00:06:52.374 +instead of Transient, I've just made a hydra using + +00:06:52.375 --> 00:06:57.399 +the major-mode-hydra package. Anyway, this allows me to use and + +00:06:57.400 --> 00:07:00.136 +remember my micro-optimizations. + +00:07:00.137 --> 00:07:03.697 +If you set the :comments property to link, + +00:07:03.698 --> 00:07:06.999 +the tangled output is back-connected. + +00:07:07.000 --> 00:07:11.479 +This allows us to edit the tangled code and have it update the + +00:07:11.480 --> 00:07:16.879 +Org file. Personally, I don't like this. My source of truth + +00:07:16.880 --> 00:07:22.500 +is the Org file, and I tangle as a one-way diode. + +NOTE Code evaluation + +00:07:22.501 --> 00:07:25.603 +Often a block of code will reference a variable + +00:07:25.604 --> 00:07:29.046 +or call a function to find in another block of code. + +00:07:29.047 --> 00:07:31.508 +In my original literate DevOps talk, + +00:07:31.509 --> 00:07:34.519 +I discussed how to use the output from one block into + +00:07:34.520 --> 00:07:37.799 +another block by naming the first block and referencing it + +00:07:37.800 --> 00:07:42.159 +with a :var for the second. However, if all the blocks use the + +00:07:42.160 --> 00:07:46.039 +same language, you can use sessions, which create a + +00:07:46.040 --> 00:07:51.479 +persistent REPL behind the scenes. Let's evaluate the + +00:07:51.480 --> 00:07:53.199 +blocks of Python code in this file. + +00:07:53.200 --> 00:08:00.119 +The evaluation created a Python REPL. It's available in + +00:08:00.120 --> 00:08:04.279 +another buffer. This buffer matches the name of the + +00:08:04.280 --> 00:08:07.959 +session, but with surrounding asterisks. Evaluating a + +00:08:07.960 --> 00:08:11.399 +code block sends it into the REPL, and now I can work with my + +00:08:11.400 --> 00:08:19.959 +code blocks interactively. (That's not quite right.) + +NOTE Has that block been eval'd? + +00:08:19.960 --> 00:08:24.039 +I primarily hack on Emacs Lisp, and textual changes to + +00:08:24.040 --> 00:08:28.199 +variables, functions, or macros--unless you habitually + +00:08:28.200 --> 00:08:31.679 +type C-c C-c--may not represent the state of your + +00:08:31.680 --> 00:08:35.439 +machine. A similar effect happens in any language that + +00:08:35.440 --> 00:08:39.319 +uses sessions. Sure, I can move the point to a block and + +00:08:39.320 --> 00:08:42.799 +evaluate, but I have three functions that allow me to + +00:08:42.800 --> 00:08:44.734 +evaluate all blocks in a buffer or all blocks in a subtree, + +00:08:44.735 --> 00:08:50.199 +or I can, without moving the point, evaluate any block I see. + +00:08:50.200 --> 00:08:54.919 +Now, this function here evaluates all blocks in a buffer. + +00:08:54.920 --> 00:08:58.279 +Someone mentioned calling this function when you first + +00:08:58.280 --> 00:09:02.359 +load a file. I'm not sure that's a good policy. I mean, have + +00:09:02.360 --> 00:09:05.238 +you not written a bug? + +NOTE Evaluating code in a subtree + +00:09:05.239 --> 00:09:08.559 +Since this function right here + +00:09:08.560 --> 00:09:12.039 +evaluates only visible blocks, we can limit what Emacs + +00:09:12.040 --> 00:09:18.799 +evaluates to a single Org mode section. For instance, with + +00:09:18.800 --> 00:09:23.759 +the cursor in one section, I can evaluate just the blocks in + +00:09:23.760 --> 00:09:26.871 +that header section. + +NOTE Evaluating code from a distance + +00:09:26.872 --> 00:09:29.399 +If I can see a block, why clumsily + +00:09:29.400 --> 00:09:33.079 +navigate to it when I can extend the avy project to just jump to + +00:09:33.080 --> 00:09:40.479 +it? For instance, let's pull this file up. I can jump to any of + +00:09:40.480 --> 00:09:41.639 +the four blocks. + +00:09:41.640 --> 00:09:50.319 +I think that's quite slick. Now why navigate to a code block + +00:09:50.320 --> 00:09:55.799 +solely to evaluate it? Yes, this is a terrible example, but + +00:09:55.800 --> 00:09:59.679 +these three blocks set a variable to different values. So + +00:09:59.680 --> 00:10:02.599 +without moving the point, I can evaluate any one of them. + +00:10:02.600 --> 00:10:09.719 +To be honest, the reason why I wrote this is because I often + +00:10:09.720 --> 00:10:13.999 +forget to evaluate a block after editing it. I've moved on, + +00:10:14.000 --> 00:10:17.839 +and I just don't want to jump back. Now, I can just evaluate + +00:10:17.840 --> 00:10:22.359 +from a distance. I apologize for the previous terrible + +00:10:22.360 --> 00:10:26.019 +examples, but I'm quite pleased with this feature. + +NOTE Navigating by headers + +00:10:26.020 --> 00:10:30.119 +As I mentioned earlier, in a large code base, we organize code by + +00:10:30.120 --> 00:10:33.839 +library or module, and each file contains a class composed + +00:10:33.840 --> 00:10:37.119 +of methods, functions, variables, fields, et cetera. + +00:10:37.120 --> 00:10:39.999 +Literate programming in Org files allows me to add a + +00:10:40.000 --> 00:10:43.159 +semantic organization layer where I can group related + +00:10:43.160 --> 00:10:46.919 +concepts under headlines. Now, while this isn't specific + +00:10:46.920 --> 00:10:50.799 +to literate programming, I wrote a little user interface to + +00:10:50.800 --> 00:10:54.296 +allow me to jump to any heading in any Org file + +00:10:54.297 --> 00:10:57.679 +in a particular project. + +00:10:57.680 --> 00:11:02.879 +These are the headings in my Emacs configuration project. + +00:11:02.880 --> 00:11:06.559 +Notice the file name beforehand, before the colon + +00:11:06.560 --> 00:11:09.759 +character. The header name and its parent headers are + +00:11:09.760 --> 00:11:14.799 +after. Let me search for the LSP sections. Maybe I only want + +00:11:14.800 --> 00:11:20.039 +the one for Python. Now I use ripgrep to search the files and + +00:11:20.040 --> 00:11:24.559 +then some Lisp to parse the output. Unless someone has + +00:11:24.560 --> 00:11:26.793 +already done this, I should package this up on MELPA. + +NOTE Navigating by function names + +00:11:26.794 --> 00:11:32.199 +What about jumping directly to the definition of a function, + +00:11:32.200 --> 00:11:36.799 +variable, or what have you? We can use Emacs's built-in xref + +00:11:36.800 --> 00:11:39.879 +library, but these functions don't understand that the + +00:11:39.880 --> 00:11:45.319 +source code is in Org files. When I started using Emacs + +00:11:45.320 --> 00:11:49.479 +30-something years ago, I would pre-index my source into + +00:11:49.480 --> 00:11:53.799 +tag files, but the dumb-jump project uses the newfangled and + +00:11:53.800 --> 00:11:58.319 +faster text search programs like ripgrep to find a symbol in + +00:11:58.320 --> 00:12:02.319 +real time. I followed this pattern and wrote an extension + +00:12:02.320 --> 00:12:08.119 +to the xref API. Now, I want to jump around my code from both + +00:12:08.120 --> 00:12:14.519 +code block or in the surrounding prose. I'm sure it + +00:12:14.520 --> 00:12:18.199 +comes as no surprise that my presentation is just an Org + +00:12:18.200 --> 00:12:23.919 +file. Let's suppose my cursor is on this symbol. I wrote this + +00:12:23.920 --> 00:12:28.079 +function for this demonstration. We can jump to the + +00:12:28.080 --> 00:12:30.759 +definition and I can jump back. + +00:12:30.760 --> 00:12:37.639 +Notice it jumped into an Org file and back out. References, + +00:12:37.640 --> 00:12:42.279 +unlike definitions, is where something is defined and + +00:12:42.280 --> 00:12:46.919 +where it's used. Well, you know how the xref system works. + +00:12:46.920 --> 00:12:52.679 +Here, I can jump to the definition or where it's + +00:12:52.680 --> 00:12:59.519 +used. Of course, and jump back. I think this is cool. This + +00:12:59.520 --> 00:13:04.319 +should be a nifty package on MELPA. But my code is specific to + +00:13:04.320 --> 00:13:08.799 +Lisp, and I'm not completely sure how to make it general. For + +00:13:08.800 --> 00:13:13.399 +instance, what is a symbol? If you know the language, this is + +00:13:13.400 --> 00:13:17.679 +obvious. But what should the language be when your cursor is + +00:13:17.680 --> 00:13:22.639 +in the prose of an Org file? Python only supports sequences + +00:13:22.640 --> 00:13:25.559 +of alphanumeric and underscores, but in Lisp, a symbol can + +00:13:25.560 --> 00:13:30.399 +be almost any character sequence. I've been stewing on how + +00:13:30.400 --> 00:13:34.479 +to do this. I have ideas like prompting during the first + +00:13:34.480 --> 00:13:37.719 +query or scanning the language based on the nearest code + +00:13:37.720 --> 00:13:40.479 +block. I think I'm babbling. + +NOTE Why literate programming? + +00:13:40.480 --> 00:13:47.199 +In true geek fashion, I dived into the details before + +00:13:47.200 --> 00:13:52.079 +answering some better questions. In my original Literate + +00:13:52.080 --> 00:13:55.479 +DevOps talk, I explained the advantages of initially + +00:13:55.480 --> 00:13:58.959 +writing down your thoughts, your plans, goals... the + +00:13:58.960 --> 00:14:02.879 +user requirements. But what do you do with all that luscious + +00:14:02.880 --> 00:14:06.359 +prose afterwards? Well, you do the same thing you do to your + +00:14:06.360 --> 00:14:09.279 +initial code. You refactor that prose. + +00:14:09.280 --> 00:14:14.759 +Just because the tech surrounding your code is now a + +00:14:14.760 --> 00:14:18.799 +first-class citizen doesn't excuse bad code. You want + +00:14:18.800 --> 00:14:23.165 +something more from both your code and your prose. + +NOTE LP prose isn't comments + +00:14:23.166 --> 00:14:25.586 +The prose of your literate program isn't + +00:14:25.587 --> 00:14:28.667 +just regurgitation of the code in the block. + +00:14:28.668 --> 00:14:31.527 +You want something more helpful. + +00:14:31.528 --> 00:14:35.736 +You're really writing a research paper to yourself. + +00:14:35.737 --> 00:14:38.577 +I know what you're thinking. You've seen my Git repos. + +00:14:38.578 --> 00:14:41.858 +I'm guilty and not always the best example. + +00:14:41.859 --> 00:14:44.559 +However, I do get great joy + +00:14:44.560 --> 00:14:48.680 +when I see someone ask about something in Emacs + +00:14:48.681 --> 00:14:51.041 +and my response is little more than a link + +00:14:51.042 --> 00:14:55.799 +to my online repo that I've rendered as a website. + +NOTE Summary + +00:14:55.800 --> 00:15:01.199 +I'm out of time. I hope this has been interesting + +00:15:01.200 --> 00:15:04.359 +philosophically as well as practically, as I think + +00:15:04.360 --> 00:15:08.559 +literate programming is the cat's meow. I'm afraid this + +00:15:08.560 --> 00:15:11.879 +summary slide is about my home-baked solutions that fit my + +00:15:11.880 --> 00:15:15.119 +needs, but hopefully you can recognize your pain points and + +00:15:15.120 --> 00:15:17.839 +address them. If you don't need my Literate + +00:15:17.840 --> 00:15:21.479 +DevOps-specific techniques for connecting code blocks, I + +00:15:21.480 --> 00:15:25.799 +suggest using sessions by default. I highly recommend + +00:15:25.800 --> 00:15:28.399 +looking at your workflow and writing snippets to give you + +00:15:28.400 --> 00:15:33.159 +less typing for Org blocks. I now jump by headlines in my + +00:15:33.160 --> 00:15:37.479 +projects, but extending xref to support Org files made + +00:15:37.480 --> 00:15:40.159 +literate programming as easy as programming the + +00:15:40.160 --> 00:15:44.319 +old-fashioned way. I do need to make it more general to put up + +00:15:44.320 --> 00:15:47.722 +on MELPA, though. Thanks for watching. + +00:15:47.723 --> 00:15:51.240 +Happy hacking, my friends. diff --git a/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt b/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt new file mode 100644 index 00000000..b35c8610 --- /dev/null +++ b/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt @@ -0,0 +1,1887 @@ +WEBVTT captioned by edrx +Kind: captions +Language: en-GB + +00:00:00.000 --> 00:00:03.000 +Hi! My name is Eduardo Ochs. I'm the author of + +00:00:03.000 --> 00:00:07.000 +an obscure package called eev and I + +00:00:07.000 --> 00:00:08.000 +think that it's better to start this + +00:00:08.000 --> 00:00:10.000 +presentation by the middle of the story - + +00:00:10.000 --> 00:00:12.000 +by this word here: Maxima. + +00:00:12.000 --> 00:00:15.000 +Maxima is a computer algebra system + +00:00:15.000 --> 00:00:17.000 +that has several interfaces. One + +00:00:17.000 --> 00:00:20.000 +of them is WxMaxima, that looks very + +00:00:20.000 --> 00:00:24.000 +modern and is very pretty, and it + +00:00:24.000 --> 00:00:26.000 +looks like this... + +00:00:26.000 --> 00:00:30.000 +it's a cell based interface. We can type + +00:00:30.000 --> 00:00:32.000 +an expression here and execute it... + +00:00:32.000 --> 00:00:35.000 +here's the result. + +00:00:35.000 --> 00:00:38.000 +But I don't like that interface + +00:00:38.000 --> 00:00:40.000 +because my memory is very bad, and I type + +00:00:40.000 --> 00:00:42.000 +very slowly and with lots of mistakes... + +00:00:42.000 --> 00:00:46.000 +so for me this ugly interface that + +00:00:46.000 --> 00:00:49.000 +I'm going to show now is much better - + +00:00:49.000 --> 00:00:51.000 +and here I'm going to show how I am teaching + +00:00:51.000 --> 00:00:54.000 +that ugly interface to beginners. + +00:00:54.000 --> 00:00:58.000 +If I type f8 on these three lines here + +00:00:58.000 --> 00:01:00.000 +it creates a Maxima running inside Emacs - + +00:01:00.000 --> 00:01:04.000 +I mean, using a terminal and running inside + +00:01:04.000 --> 00:01:06.000 +a shell buffer in Emacs... + +00:01:06.000 --> 00:01:09.000 +and if I type f8 on this other the lines here + +00:01:09.000 --> 00:01:15.000 +the 'f8's send lines to Maxima, and, ta-daaa, + +00:01:15.000 --> 00:01:20.000 +this small program drew this. + +00:01:20.000 --> 00:01:23.000 +I live in Brazil and people in + +00:01:23.000 --> 00:01:26.000 +developed countries cannot imagine + +00:01:26.000 --> 00:01:29.000 +how are the beginners that we have here... + +00:01:29.000 --> 00:01:32.000 +in a sense Brazil is another planet. + +00:01:32.000 --> 00:01:35.000 +Let me explain why, and also let me + +00:01:35.000 --> 00:01:37.000 +explain why Maxima, why Emacs... because + +00:01:37.000 --> 00:01:39.000 +people always say "you should use + +00:01:39.000 --> 00:01:41.000 +programs that everyone finds intuitive, + +00:01:41.000 --> 00:01:43.000 +like VSCode"... + +00:01:43.000 --> 00:01:45.000 +well, I teach Calculus in a bad Campus + +00:01:45.000 --> 00:01:47.000 +of a good Federal University in Brazil. + +00:01:47.000 --> 00:01:50.000 +My university is called UFF, for + +00:01:50.000 --> 00:01:53.000 +Universidade Federal Fluminense. + +00:01:53.000 --> 00:01:56.000 +The main campus of UFF is in Niterói, + +00:01:56.000 --> 00:02:00.000 +that is a big city near Rio de Janeiro, + +00:02:00.000 --> 00:02:03.000 +and I work in a city called Rio das Ostras, + +00:02:03.000 --> 00:02:03.000 +that is is a small city 200 Kms away + +00:02:03.000 --> 00:02:07.000 +from Rio de Janeiro. + +00:02:07.000 --> 00:02:09.000 +I started working there in 2009. + +00:02:09.000 --> 00:02:13.000 +My campus gets very little funding - + +00:02:13.000 --> 00:02:16.000 +that's a long story that I don't have time + +00:02:16.000 --> 00:02:20.000 +to tell now - and we get the + +00:02:20.000 --> 00:02:22.000 +students that don't get enough marks in + +00:02:22.000 --> 00:02:25.000 +the admission process to go to better places. + +00:02:25.000 --> 00:02:30.000 +Also, my campus has two institutes - + +00:02:30.000 --> 00:02:33.000 +I call them The Institute of Humanities + +00:02:33.000 --> 00:02:35.000 +and The Institute of Inhumanities. + +00:02:35.000 --> 00:02:38.000 +Each of our institutes has a small building... + +00:02:38.000 --> 00:02:41.000 +the Humanities building has lots of plants and + +00:02:41.000 --> 00:02:46.000 +lots of graffittis - I call it the Good Building - + +00:02:46.000 --> 00:02:49.000 +and the Inhumanities building has lots + +00:02:49.000 --> 00:02:51.000 +of rules and prohibitions, and I call it the + +00:02:51.000 --> 00:02:51.000 +Evil Building. + +00:02:51.000 --> 00:02:56.000 +I heard that the Inhumanities building + +00:02:56.000 --> 00:02:58.000 +has a laboratory with computers, and that + +00:02:58.000 --> 00:03:00.000 +it doesn't have any machine that runs Linux... + +00:03:00.000 --> 00:03:05.000 +but the Inhumanities building is + +00:03:05.000 --> 00:03:07.000 +shrouded in mystery, and basically + +00:03:07.000 --> 00:03:09.000 +humans avoid it - only inhumans go there. + +00:03:09.000 --> 00:03:12.000 +I only discovered how much "another planet" + +00:03:12.000 --> 00:03:15.000 +Brazil is a few months ago. In May and June + +00:03:15.000 --> 00:03:18.000 +of this year the federal universities in Brazil + +00:03:18.000 --> 00:03:21.000 +paralyzed their activities in a nationwide + +00:03:21.000 --> 00:03:23.000 +strike for two months, and during the strike + +00:03:23.000 --> 00:03:28.000 +the humanity students occupied the + +00:03:28.000 --> 00:03:31.000 +Humanities Building and organized lots + +00:03:31.000 --> 00:03:31.000 +of activities there. + +00:03:31.000 --> 00:03:34.000 +They asked me if I could give some workshops + +00:03:34.000 --> 00:03:36.000 +and I offered two hands-on workshops + +00:03:36.000 --> 00:03:40.000 +on Free Software for beginners - + +00:03:40.000 --> 00:03:45.000 +basically on Emacs and eev, with + +00:03:45.000 --> 00:03:49.000 +tutorials with lots of "try this"s... + +00:03:49.000 --> 00:03:54.000 +and, as usual, the students of + +00:03:54.000 --> 00:03:56.000 +Computer Science and Engineering ignored + +00:03:56.000 --> 00:03:59.000 +the workshop completely, and didn't come... + +00:03:59.000 --> 00:04:01.000 +but some students of psychology and of + +00:04:01.000 --> 00:04:04.000 +Producão Cultural, which is basically + +00:04:04.000 --> 00:04:08.000 +techniques for producing cultural + +00:04:08.000 --> 00:04:11.000 +activities, came to workshop... and they LOVED + +00:04:11.000 --> 00:04:14.000 +the workshop - they found it FUN. + +00:04:14.000 --> 00:04:17.000 +And after the workshop I told the + +00:04:17.000 --> 00:04:19.000 +students that there are lots of things + +00:04:19.000 --> 00:04:22.000 +that, uh, "everyone knows and I don't", + +00:04:22.000 --> 00:04:24.000 +and I would like to learn them, + +00:04:24.000 --> 00:04:27.000 +but I find them too hard to learn by myself + +00:04:27.000 --> 00:04:29.000 +because I'm a dinosaur - I'm only used to + +00:04:29.000 --> 00:04:31.000 +interfaces that are very old, + +00:04:31.000 --> 00:04:35.000 +and that are not graphical... and one + +00:04:35.000 --> 00:04:37.000 +of the examples of the things that I + +00:04:37.000 --> 00:04:39.000 +would like to learn was Canva. + +00:04:39.000 --> 00:04:42.000 +And then the student of Produção Cultural + +00:04:42.000 --> 00:04:45.000 +taught me Canva in 10 minutes, + +00:04:45.000 --> 00:04:54.000 +AND THAT CHANGED MY LIFE. + +00:04:54.000 --> 00:04:58.000 +Anyway, again, I'm working in that place, + +00:04:58.000 --> 00:05:00.000 +Rio das Ostras, since 2009, + +00:05:00.000 --> 00:05:04.000 +and the Computer Science students + +00:05:04.000 --> 00:05:06.000 +here know lots of programs and languages + +00:05:06.000 --> 00:05:08.000 +that I would like to learn, but in all + +00:05:08.000 --> 00:05:11.000 +these 15 years the Computer Science + +00:05:11.000 --> 00:05:14.000 +students only helped me twice. + +00:05:14.000 --> 00:05:17.000 +It turns out that our Inhumanities + +00:05:17.000 --> 00:05:20.000 +students don't have a culture of sharing + +00:05:20.000 --> 00:05:26.000 +and helping - but our Humanities students do. + +00:05:26.000 --> 00:05:29.000 +Another detail about how much Brazil + +00:05:29.000 --> 00:05:30.000 +is another planet... + +00:05:30.000 --> 00:05:33.000 +well, I only discovered this very + +00:05:33.000 --> 00:05:38.000 +recently, too... my research is in Logic, + +00:05:38.000 --> 00:05:40.000 +I sometimes go to conferences, usually in + +00:05:40.000 --> 00:05:44.000 +Brazil, very rarely outside, and people + +00:05:44.000 --> 00:05:46.000 +here don't bring their laptops to the + +00:05:46.000 --> 00:05:49.000 +conferences - we don't have a culture + +00:05:49.000 --> 00:05:51.000 +of sitting together with friends + +00:05:51.000 --> 00:05:54.000 +or colleagues to learn with them how to + +00:05:54.000 --> 00:05:56.000 +use the programs that they use... + +00:05:56.000 --> 00:06:01.000 +for example, many of my friends + +00:06:01.000 --> 00:06:05.000 +are logicians, so they have to draw + +00:06:05.000 --> 00:06:08.000 +lots of diagrams, and I don't know how + +00:06:08.000 --> 00:06:13.000 +they use their programs to draw diagrams... + +00:06:13.000 --> 00:06:15.000 +I don't know how things are in + +00:06:15.000 --> 00:06:18.000 +universities with good computer labs but, + +00:06:18.000 --> 00:06:22.000 +anyway, consider these sentences + +00:06:22.000 --> 00:06:25.000 +sentences that sort of everybody says... + +00:06:25.000 --> 00:06:25.000 +"Everyone knows VSCode", + +00:06:25.000 --> 00:06:27.000 +"Everyone knows Jupiter Notebooks", + +00:06:27.000 --> 00:06:31.000 +"Everyone draws diagrams with Quiver"... + +00:06:31.000 --> 00:06:34.000 +Here these things are not true - + +00:06:34.000 --> 00:06:36.000 +and they are not relevant - + +00:06:36.000 --> 00:06:40.000 +here knowledge about programs does not + +00:06:40.000 --> 00:06:40.000 +propagate... and + +00:06:40.000 --> 00:06:43.000 +one of my goals in life is + +00:06:43.000 --> 00:06:45.000 +to become friends with some people who + +00:06:45.000 --> 00:06:47.000 +know how to use for example, code blocks + +00:06:47.000 --> 00:06:50.000 +in Org, and JavaScript, and learn some of + +00:06:50.000 --> 00:06:55.000 +their workflows... or, rather one of my + +00:06:55.000 --> 00:06:57.000 +goals is to become someone who deserves + +00:06:57.000 --> 00:07:02.000 +help. + +00:07:02.000 --> 00:07:05.000 +More on Maxima for students... + +00:07:05.000 --> 00:07:08.000 +remember: our inhumanities students + +00:07:08.000 --> 00:07:10.000 +don't have a culture of sharing and helping + +00:07:10.000 --> 00:07:13.000 +but our humanity students do... + +00:07:13.000 --> 00:07:16.000 +I've been telling my students - I teach + +00:07:16.000 --> 00:07:19.000 +Calculus 2 and 3 here -that they will learn + +00:07:19.000 --> 00:07:21.000 +much faster if they learn Maxima, + +00:07:21.000 --> 00:07:24.000 +and that people who learn Maxima can take + +00:07:24.000 --> 00:07:27.000 +an optional test and earn extra marks + +00:07:27.000 --> 00:07:31.000 +in the course, but if they behave + +00:07:31.000 --> 00:07:34.000 +as typical inhumanities students - + +00:07:34.000 --> 00:07:37.000 +I mean, not asking questions and + +00:07:37.000 --> 00:07:39.000 +not helping their colleagues - + +00:07:39.000 --> 00:07:42.000 +then I won't help help... + +00:07:42.000 --> 00:07:45.000 +Actually it's even worse. I've + +00:07:45.000 --> 00:07:47.000 +told my students that my documentation + +00:07:47.000 --> 00:07:50.000 +is not good enough yet and every + +00:07:50.000 --> 00:07:53.000 +question helps me a lot, so PLEASE ask + +00:07:53.000 --> 00:07:57.000 +questions, and I've bagged on my knees... + +00:07:57.000 --> 00:08:01.000 +and now I can treat students + +00:08:01.000 --> 00:08:02.000 +who don't ask questions as people who + +00:08:02.000 --> 00:08:05.000 +won't help someone that they know + +00:08:05.000 --> 00:08:08.000 +who is begging on his knees! + +00:08:08.000 --> 00:08:12.000 +Now let me explain another word of + +00:08:12.000 --> 00:08:15.000 +the title of this presentation. + +00:08:15.000 --> 00:08:17.000 +The title of this presentation is + +00:08:17.000 --> 00:08:17.000 +"Emacs, eev, and Maxima - Now!" + +00:08:17.000 --> 00:08:22.000 +The "Now!" in the title means: + +00:08:22.000 --> 00:08:25.000 +in less than one hour and even for people + +00:08:25.000 --> 00:08:27.000 +who have never seen a terminal in their lives. + +00:08:27.000 --> 00:08:32.000 +Well, my title is a slight exaggeration... + +00:08:32.000 --> 00:08:34.000 +it only took less than one hour + +00:08:34.000 --> 00:08:37.000 +for one person, who is a school kid + +00:08:37.000 --> 00:08:40.000 +from a small City in the North of Brazil, + +00:08:40.000 --> 00:08:42.000 +who didn't know anything about programming, + +00:08:42.000 --> 00:08:44.000 +but who was competing in the local + +00:08:44.000 --> 00:08:50.000 +Math Olympiads, so not a typical person... + +00:08:50.000 --> 00:08:53.000 +Now let me tell a story based on + +00:08:53.000 --> 00:08:55.000 +real events and based on a real student. + +00:08:55.000 --> 00:08:58.000 +The student said: "I have Linux on my + +00:08:58.000 --> 00:09:00.000 +laptop, can you help me to do blah1?" + +00:09:00.000 --> 00:09:04.000 +I answered: "Sure, do blah2 and blah3..." + +00:09:04.000 --> 00:09:10.000 +this was all by chat, I don't remember if + +00:09:10.000 --> 00:09:10.000 +by WhatsApp or by Telegram... + +00:09:10.000 --> 00:09:13.000 +then one week passes, and the student + +00:09:13.000 --> 00:09:16.000 +talks to me again, and the student says: + +00:09:16.000 --> 00:09:19.000 +"It doesn't work!", and I answer: + +00:09:19.000 --> 00:09:21.000 +"What happens when you do blah4 and blah5?" + +00:09:21.000 --> 00:09:28.000 +another week passes, then the student reappears, + +00:09:28.000 --> 00:09:29.000 +and he says: "It doesn't work!" + +00:09:29.000 --> 00:09:33.000 +and I answer: "Type blah6 and blah7 in + +00:09:33.000 --> 00:09:36.000 +the terminal, press ENTER, take a + +00:09:36.000 --> 00:09:38.000 +photo of your screen... remember, not a + +00:09:38.000 --> 00:09:41.000 +screenshot, it's a photo of your screen... + +00:09:41.000 --> 00:09:43.000 +and send it to me." Then the student + +00:09:43.000 --> 00:09:46.000 +disappears again, another week passes and + +00:09:46.000 --> 00:09:49.000 +the student reappears and says: + +00:09:49.000 --> 00:09:50.000 +"How do I open a terminal?" + +00:09:50.000 --> 00:09:52.000 +Well, then... + +00:09:52.000 --> 00:09:54.000 +PLONK. + +00:09:54.000 --> 00:09:57.000 +According to the Jargon file "plonk" is + +00:09:57.000 --> 00:10:00.000 +the sound of that a newbie makes as he + +00:10:00.000 --> 00:10:02.000 +falls to the bottom of a kill file. + +00:10:02.000 --> 00:10:03.000 +I prefer this simpler definition here... + +00:10:03.000 --> 00:10:06.000 +for me "plonk" is the sound + +00:10:06.000 --> 00:10:08.000 +that a person makes when he, or she, or they + +00:10:08.000 --> 00:10:15.000 +hits the bottom of my list of priorities. + +00:10:15.000 --> 00:10:19.000 +I've been using this slogan with my + +00:10:19.000 --> 00:10:22.000 +students - it sounds much better in + +00:10:22.000 --> 00:10:25.000 +Portuguese, sorry... "I am not a telepath, + +00:10:25.000 --> 00:10:27.000 +and for me it is 100 times harder to + +00:10:27.000 --> 00:10:29.000 +discover the doubts of people who don't + +00:10:29.000 --> 00:10:32.000 +talk to me than to discover the doubts of + +00:10:32.000 --> 00:10:38.000 +people who do talk to me. + +00:10:38.000 --> 00:10:41.000 +There's an interesting thing here in + +00:10:41.000 --> 00:10:47.000 +this presentation by Abelson and Sussman. + +00:10:47.000 --> 00:10:51.000 +Let me explain now this word of + +00:10:51.000 --> 00:10:53.000 +my title, "Emacs"... + +00:10:53.000 --> 00:10:56.000 +and the idea is that learning Emacs can + +00:10:56.000 --> 00:10:58.000 +mean many things, learning Lisp can mean + +00:10:58.000 --> 00:11:03.000 +many things, and in this presentation... + +00:11:03.000 --> 00:11:07.000 +oh no, one second... + +00:11:07.000 --> 00:11:09.000 +sorry, back. + +00:11:09.000 --> 00:11:12.000 +In this presentation they say... + +00:11:12.000 --> 00:11:16.000 +"anyone can learn Lisp in one day, + +00:11:16.000 --> 00:11:18.000 +except that if they already know Fortran, + +00:11:18.000 --> 00:11:20.000 +then it will take three days". + +00:11:20.000 --> 00:11:24.000 +And I would add: and if the person + +00:11:24.000 --> 00:11:26.000 +is starting with Doom Emacs then it would + +00:11:26.000 --> 00:11:28.000 +take take five years. + +00:11:28.000 --> 00:11:20.000 +Why? Because the person is using + +00:11:20.000 --> 00:11:32.000 +a different notion of Emacs, + +00:11:32.000 --> 00:11:35.000 +and a different notion of Lisp. + +00:11:35.000 --> 00:11:38.000 +The person is starting by spending five + +00:11:38.000 --> 00:11:41.000 +years learning how to configure Emacs, and + +00:11:41.000 --> 00:11:43.000 +the person is using Lisp as a very weird + +00:11:43.000 --> 00:11:46.000 +configuration language. + +00:11:46.000 --> 00:11:48.000 +Usually the people who start by Doom Emacs + +00:11:48.000 --> 00:11:51.000 +they start by configuring Emacs, + +00:11:51.000 --> 00:11:54.000 +and only then they learn things like + +00:11:54.000 --> 00:11:56.000 +defun, etc... + +00:11:56.000 --> 00:11:58.000 +and another slogan that I use a lot + +00:11:58.000 --> 00:12:01.000 +with my students is that there are + +00:12:01.000 --> 00:12:03.000 +many cases in which learning just the + +00:12:03.000 --> 00:12:07.000 +thing B takes 200 hours but learning + +00:12:07.000 --> 00:12:13.000 +A and then B takes just 20 hours. + +00:12:13.000 --> 00:12:16.000 +Here are some kinds of beginners + +00:12:16.000 --> 00:12:19.000 +that I do not want to help. + +00:12:19.000 --> 00:12:21.000 +First example: a person who says "I can't + +00:12:21.000 --> 00:12:24.000 +read that page - it has too many links". + +00:12:24.000 --> 00:12:27.000 +Second example: a person who says + +00:12:27.000 --> 00:12:29.000 +"I don't want to read anything and + +00:12:29.000 --> 00:12:31.000 +I don't want to learn anything, + +00:12:31.000 --> 00:12:32.000 +I want something that just works". + +00:12:32.000 --> 00:12:36.000 +And third example: "I don't want to + +00:12:36.000 --> 00:12:38.000 +look at examples, you need to summarize + +00:12:38.000 --> 00:12:40.000 +everything to me in one paragraph". + +00:12:40.000 --> 00:12:43.000 +There are more explanations on + +00:12:43.000 --> 00:12:47.000 +these kinds of beginners at my page + +00:12:47.000 --> 00:12:49.000 +about this presentation - here. + +00:12:49.000 --> 00:12:53.000 +And here is one kind of beginner + +00:12:53.000 --> 00:12:54.000 +that I really want to help. + +00:12:54.000 --> 00:12:57.000 +Beginners that are nerdy kids + +00:12:57.000 --> 00:13:00.000 +who are used to: + +00:13:00.000 --> 00:13:03.000 +reading materials that are too advanced for them, + +00:13:03.000 --> 00:13:05.000 +understanding only a few percent of what they read, + +00:13:05.000 --> 00:13:10.000 +remembering just a tiny fraction of what they read, + +00:13:10.000 --> 00:13:14.000 +going to back to these materials later, + +00:13:14.000 --> 00:13:19.000 +and taking notes about what they read... + +00:13:19.000 --> 00:13:22.000 +and who are also always interested in + +00:13:22.000 --> 00:13:25.000 +experimenting with new ways of taking notes, + +00:13:25.000 --> 00:13:28.000 +transcribing, summarizing and saving links + +00:13:28.000 --> 00:13:32.000 +to primary sources. + +00:13:32.000 --> 00:13:36.000 +I'd like to say something about how + +00:13:36.000 --> 00:13:38.000 +I've been plonking the paragraph people... + +00:13:38.000 --> 00:13:40.000 +who are the people who say: + +00:13:40.000 --> 00:13:43.000 +"I don't want to look at examples, + +00:13:43.000 --> 00:13:45.000 +you need to summarize everything to me + +00:13:45.000 --> 00:13:45.000 +in one paragraph". + +00:13:45.000 --> 00:13:48.000 +Well, I'm a mathematician... + +00:13:48.000 --> 00:13:50.000 +I work with lots of things + +00:13:50.000 --> 00:13:52.000 +that can only be summarized in a paragraph + +00:13:52.000 --> 00:13:55.000 +if we choose the level of who + +00:13:55.000 --> 00:13:57.000 +we are talking to... + +00:13:57.000 --> 00:13:59.000 +so we have many different + +00:13:59.000 --> 00:14:02.000 +one-paragraph summaries, + +00:14:02.000 --> 00:14:04.000 +one for each level... + +00:14:04.000 --> 00:14:06.000 +and in many cases this sentence, + +00:14:06.000 --> 00:14:08.000 +"you need to summarize it + +00:14:08.000 --> 00:14:10.000 +in one paragraph", is WRONG - + +00:14:10.000 --> 00:14:13.000 +the person means I want to learn a lot + +00:14:13.000 --> 00:14:15.000 +in 10 minutes - and this needs diagrams + +00:14:15.000 --> 00:14:18.000 +animations, AND EXAMPLES. + +00:14:18.000 --> 00:14:21.000 +This is an example of something + +00:14:21.000 --> 00:14:24.000 +in mathematics - in category Theory - + +00:14:24.000 --> 00:14:27.000 +I only understood after too many time - + +00:14:27.000 --> 00:14:29.000 +after zillions of years... + +00:14:29.000 --> 00:14:30.000 +It is called The Yoneda Lemma. + +00:14:30.000 --> 00:14:32.000 +This is the general case - + +00:14:32.000 --> 00:14:35.000 +this small thing here... + +00:14:35.000 --> 00:14:40.000 +but I only understood it after + +00:14:40.000 --> 00:14:45.000 +understanding many particular cases, and + +00:14:45.000 --> 00:14:49.000 +then organizing them in a way in which + +00:14:49.000 --> 00:14:52.000 +different figures had similar shapes... + +00:14:52.000 --> 00:14:56.000 +and the textual explanations + +00:14:56.000 --> 00:14:58.000 +for the Yoneda Lemma - the one paragraph + +00:14:58.000 --> 00:15:00.000 +explanations, or the many paragraph + +00:15:00.000 --> 00:15:04.000 +explanations - never helped the much... + +00:15:04.000 --> 00:15:07.000 +they contained formulas... + +00:15:07.000 --> 00:15:10.000 +in mathematics, but written linearly... + +00:15:10.000 --> 00:15:12.000 +that had too many symbols... + +00:15:12.000 --> 00:15:15.000 +and my mental buffer is very small... + +00:15:15.000 --> 00:15:18.000 +and I had to find several tricks to reduce + +00:15:18.000 --> 00:15:21.000 +the cognitive overload of all these ideas. + +00:15:21.000 --> 00:15:24.000 +For example, I had to name the symbols + +00:15:24.000 --> 00:15:29.000 +consecutively, like A, B, C, + +00:15:29.000 --> 00:15:31.000 +so there's a kind of a temporal order + +00:15:31.000 --> 00:15:34.000 +in which the symbols that appear first + +00:15:34.000 --> 00:15:37.000 +have initial letters... + +00:15:37.000 --> 00:15:40.000 +I had to find a way to put + +00:15:40.000 --> 00:15:42.000 +an archetypal case and the general case + +00:15:42.000 --> 00:15:43.000 +side to side - + +00:15:43.000 --> 00:15:45.000 +they have the same "shape"... + +00:15:45.000 --> 00:15:47.000 +I had to find good conventions + +00:15:47.000 --> 00:15:49.000 +for fonts and types... + +00:15:49.000 --> 00:15:51.000 +I had to choose good meanings + +00:15:51.000 --> 00:15:53.000 +for what it means... + +00:15:53.000 --> 00:15:57.000 +sorry, for what are vertical arrows, + +00:15:57.000 --> 00:16:01.000 +what are horizontal arrows, and so on... + +00:16:01.000 --> 00:16:06.000 +and what is "above without an arrow"... + +00:16:06.000 --> 00:16:09.000 +So, how much detail should we include + +00:16:09.000 --> 00:16:12.000 +in our technical explanations? + +00:16:12.000 --> 00:16:14.000 +Well there are many measures + +00:16:14.000 --> 00:16:17.000 +for cognitive (over)load... + +00:16:17.000 --> 00:16:20.000 +For example, I asked many technical questions + +00:16:20.000 --> 00:16:21.000 +on the Maxima mailing list + +00:16:21.000 --> 00:16:24.000 +that got answers that included + +00:16:24.000 --> 00:16:27.000 +snippets and names of of Lisp functions... + +00:16:27.000 --> 00:16:29.000 +in Common Lisp, because Maxima is written + +00:16:29.000 --> 00:16:32.000 +in Common Lisp... and I liked that... + +00:16:32.000 --> 00:16:35.000 +and I asked some some technical questions + +00:16:35.000 --> 00:16:35.000 +on the Org mailing list + +00:16:35.000 --> 00:16:37.000 +and on the Hyperbole mailing list, + +00:16:37.000 --> 00:16:40.000 +and usually I got answers + +00:16:40.000 --> 00:16:43.000 +that avoided the technical details... + +00:16:43.000 --> 00:16:45.000 +note that I chose the term "avoided" + +00:16:45.000 --> 00:16:47.000 +to denote frustration... + +00:16:47.000 --> 00:16:50.000 +by the way, if one of my students panics + +00:16:50.000 --> 00:16:54.000 +on this part here... + +00:16:54.000 --> 00:16:56.000 +"After setting the user and password + +00:16:56.000 --> 00:16:57.000 +you will get a Unix prompt"... + +00:16:57.000 --> 00:17:01.000 +if the student panics on this + +00:17:01.000 --> 00:17:05.000 +and does not know what to ask + +00:17:05.000 --> 00:17:07.000 +and just gives up, then... + +00:17:07.000 --> 00:17:09.000 +plonk. + +00:17:09.000 --> 00:17:13.000 +So... I was talking a lot about + +00:17:13.000 --> 00:17:15.000 +plonking people... + +00:17:15.000 --> 00:17:16.000 +What's left after plonking many people? + +00:17:16.000 --> 00:17:19.000 +Well, several kinds of beginners + +00:17:19.000 --> 00:17:21.000 +that I want to interact with... + +00:17:21.000 --> 00:17:26.000 +note that "kinds" is plural... + +00:17:26.000 --> 00:17:30.000 +Also, I get a definition for the term + +00:17:30.000 --> 00:17:32.000 +"beginners"... think on books... + +00:17:32.000 --> 00:17:37.000 +technical books, that start with + +00:17:37.000 --> 00:17:38.000 +"This book is written for the persons + +00:17:38.000 --> 00:17:40.000 +of the types such and such"... + +00:17:40.000 --> 00:17:43.000 +Maybe several definitions + +00:17:43.000 --> 00:17:47.000 +for the term "beginners"... + +00:17:47.000 --> 00:17:49.000 +also, a metric that lets me choose between + +00:17:49.000 --> 00:17:52.000 +options A, B and C when I'm trying to + +00:17:52.000 --> 00:17:55.000 +write material for my beginners... + +00:17:55.000 --> 00:18:00.000 +for example, here, again... + +00:18:00.000 --> 00:18:04.000 +should I explain what is a Unix prompt? + +00:18:04.000 --> 00:18:07.000 +No!!! + +00:18:07.000 --> 00:18:09.000 +Why "no"? + +00:18:09.000 --> 00:18:11.000 +Well, let me use another example. + +00:18:11.000 --> 00:18:16.000 +This one I took from a discussion on IRC... + +00:18:16.000 --> 00:18:18.000 +we were helping a certain beginner + +00:18:18.000 --> 00:18:20.000 +that was there... + +00:18:20.000 --> 00:18:24.000 +and one person suggested to the beginner + +00:18:24.000 --> 00:18:27.000 +to do this: type M-:, and then this + +00:18:27.000 --> 00:18:29.000 +thing here, and then ENTER. + +00:18:29.000 --> 00:18:33.000 +And I suggested this instead. + +00:18:33.000 --> 00:18:35.000 +Copy this expression to your notes, + +00:18:35.000 --> 00:18:38.000 +and then type C-e C-x C-e... + +00:18:38.000 --> 00:18:42.000 +and the mnemonic for C-e C-x C-e is + +00:18:42.000 --> 00:18:44.000 +C-exe, for "execute". + +00:18:44.000 --> 00:18:47.000 +And then... for me the option 1, + +00:18:47.000 --> 00:18:50.000 +this option here, is very costly, + +00:18:50.000 --> 00:18:53.000 +because the person has to type a lot + +00:18:53.000 --> 00:18:55.000 +without errors, + +00:18:55.000 --> 00:18:59.000 +and then after running that + +00:18:59.000 --> 00:19:03.000 +and reading this page here... + +00:19:03.000 --> 00:19:06.000 +the way of going back to that page is gone. + +00:19:06.000 --> 00:19:08.000 +So the person has to commit lots + +00:19:08.000 --> 00:19:10.000 +of information to memory - + +00:19:10.000 --> 00:19:13.000 +either the person learns from this page + +00:19:13.000 --> 00:19:16.000 +everything that she needs or the person + +00:19:16.000 --> 00:19:20.000 +memorizes how to go there the next time.... + +00:19:20.000 --> 00:19:24.000 +and for me the option 2 - this one: + +00:19:24.000 --> 00:19:27.000 +put this in your notes and then + +00:19:27.000 --> 00:19:29.000 +execute it with C-exe - + +00:19:29.000 --> 00:19:32.000 +is much better, because the person + +00:19:32.000 --> 00:19:34.000 +commits information to notes, + +00:19:34.000 --> 00:19:36.000 +and the person learns a way to return + +00:19:36.000 --> 00:19:40.000 +to this node of the manual later... + +00:19:40.000 --> 00:19:45.000 +and with this the person learns + +00:19:45.000 --> 00:19:47.000 +another way to use her notes. + +00:19:47.000 --> 00:19:50.000 +I have a lot of material about that... + +00:19:50.000 --> 00:19:52.000 +see for example this page here - + +00:19:52.000 --> 00:19:54.000 +there's a link to it + +00:19:54.000 --> 00:19:56.000 +in my page for this talk... + +00:19:56.000 --> 00:19:58.000 +also, I live in a place in which + +00:19:58.000 --> 00:20:00.000 +the people who find my instructions + +00:20:00.000 --> 00:20:03.000 +too complex or too boring + +00:20:03.000 --> 00:20:06.000 +disappear - either for months or forever... + +00:20:06.000 --> 00:20:08.000 +So if I give an instruction + +00:20:08.000 --> 00:20:10.000 +that the person cannot understand + +00:20:10.000 --> 00:20:13.000 +and the person gives up + +00:20:13.000 --> 00:20:15.000 +I lose the person... + +00:20:15.000 --> 00:20:18.000 +Now let me do some things in a weird order. + +00:20:18.000 --> 00:20:20.000 +In a normal presentation this would be + +00:20:20.000 --> 00:20:22.000 +the conclusion, and it would be presented + +00:20:22.000 --> 00:20:24.000 +at the end... + +00:20:24.000 --> 00:20:26.000 +but I will present it now, + +00:20:26.000 --> 00:20:28.000 +before the technical details. + +00:20:28.000 --> 00:20:31.000 +So, I was teaching Emacs, eev and Maxima + +00:20:31.000 --> 00:20:34.000 +for students... did it work well? + +00:20:34.000 --> 00:20:36.000 +Well... sort of, but in a weird way. + +00:20:36.000 --> 00:20:39.000 +Many students decided to take my test + +00:20:39.000 --> 00:20:42.000 +on Emacs, eev, and Maxima... + +00:20:42.000 --> 00:20:45.000 +let me consider only the 35 students + +00:20:45.000 --> 00:20:48.000 +in the two last semesters that were able + +00:20:48.000 --> 00:20:51.000 +to do what I asked, that was to use a link + +00:20:51.000 --> 00:20:56.000 +like this one to go to my notes... + +00:20:56.000 --> 00:20:59.000 +they had to go to a specific small program + +00:20:59.000 --> 00:21:02.000 +in Maxima, copy that program to their notes, + +00:21:02.000 --> 00:21:04.000 +modify it a bit to make it solve + +00:21:04.000 --> 00:21:06.000 +a slightly different problem, + +00:21:06.000 --> 00:21:08.000 +and then save the new program. + +00:21:08.000 --> 00:21:11.000 +So it was mostly a test on the interface, + +00:21:11.000 --> 00:21:14.000 +and to test if they knew some + +00:21:14.000 --> 00:21:16.000 +very basic things on Maxima... + +00:21:16.000 --> 00:21:19.000 +but of these 35 students only 10 students + +00:21:19.000 --> 00:21:21.000 +asked questions on the Telegram group... + +00:21:21.000 --> 00:21:24.000 +Mostly they discussed + +00:21:24.000 --> 00:21:27.000 +with other students... + +00:21:27.000 --> 00:21:30.000 +sometimes live - they would bring + +00:21:30.000 --> 00:21:34.000 +their laptops to the university to discuss... + +00:21:34.000 --> 00:21:37.000 +they only do that very rarely, + +00:21:37.000 --> 00:21:40.000 +but they brought it... + +00:21:40.000 --> 00:21:42.000 +other times they would discuss + +00:21:42.000 --> 00:21:44.000 +with their colleagues on Discord... + +00:21:44.000 --> 00:21:47.000 +but I got very little feedback + +00:21:47.000 --> 00:21:50.000 +for my usability test. + +00:21:50.000 --> 00:21:52.000 +So my experiment failed - in the sense + +00:21:52.000 --> 00:21:55.000 +that I didn't get the feedback + +00:21:55.000 --> 00:21:57.000 +that I expected - I only got a fraction + +00:21:57.000 --> 00:21:59.000 +of the feedback that I expected... + +00:21:59.000 --> 00:22:03.000 +...but I learned lots of things. + +00:22:03.000 --> 00:22:06.000 +Well, I got very angry, very frustrated, + +00:22:06.000 --> 00:22:08.000 +but I saw that I can't invest a lot of energy + +00:22:08.000 --> 00:22:11.000 +on students who... how do I say? + +00:22:11.000 --> 00:22:13.000 +who "won't talk to me". + +00:22:13.000 --> 00:22:16.000 +then I decided to make contact + +00:22:16.000 --> 00:22:19.000 +with some schools - secondary schools - + +00:22:19.000 --> 00:22:21.000 +and to make a long story short... + +00:22:21.000 --> 00:22:25.000 +in one of the schools I was + +00:22:25.000 --> 00:22:27.000 +very well received... + +00:22:27.000 --> 00:22:29.000 +the students asked lots of questions, + +00:22:29.000 --> 00:22:31.000 +and in the middle of the discussion + +00:22:31.000 --> 00:22:35.000 +we were discussing this little program here, + +00:22:35.000 --> 00:22:37.000 +that splits the the frame in two windows + +00:22:37.000 --> 00:22:38.000 +and displays the file ~/HELP + +00:22:38.000 --> 00:22:41.000 +in the window at the right... + +00:22:41.000 --> 00:22:46.000 +and I showed them Elisp tutorial, + +00:22:46.000 --> 00:22:50.000 +that starts... here... + +00:22:50.000 --> 00:22:55.000 +and right in its third section + +00:22:55.000 --> 00:22:57.000 +it explains 'quote'. + +00:22:57.000 --> 00:23:00.000 +So, I had to explain to them + +00:23:00.000 --> 00:23:03.000 +how we can use quote to pass... + +00:23:03.000 --> 00:23:07.000 +to avoid evaluating a program... + +00:23:07.000 --> 00:23:09.000 +we can use quote to pass unevaluated + +00:23:09.000 --> 00:23:11.000 +programs as arguments... + +00:23:11.000 --> 00:23:13.000 +and quote blew their minds, + +00:23:13.000 --> 00:23:16.000 +and I was amazed by their questions, + +00:23:16.000 --> 00:23:18.000 +and I saw more clearly that the campus + +00:23:18.000 --> 00:23:20.000 +in which I work is a hole, + +00:23:20.000 --> 00:23:22.000 +and that I need to do more things outside. + +00:23:22.000 --> 00:23:25.000 +Now let's see some technical details. + +00:23:25.000 --> 00:23:28.000 +What exactly am I teaching to + +00:23:28.000 --> 00:23:20.000 +these students? + +00:23:20.000 --> 00:23:32.000 +Basically, my old tutorial for eev + +00:23:32.000 --> 00:23:36.000 +was this one... it started with a + +00:23:36.000 --> 00:23:39.000 +section on installing eev, and then it + +00:23:39.000 --> 00:23:42.000 +explained Lisp, and how to use + +00:23:42.000 --> 00:23:44.000 +elisp hyperlinks... + +00:23:44.000 --> 00:23:46.000 +and then lots of other things... + +00:23:46.000 --> 00:23:49.000 +but I'm using this new tutorial here, + +00:23:49.000 --> 00:23:51.000 +that I am not announcing in many places + +00:23:51.000 --> 00:23:54.000 +because I wanted to test it a lot + +00:23:54.000 --> 00:23:59.000 +before making it very public... + +00:23:59.000 --> 00:24:04.000 +and it starts with other installation + +00:24:04.000 --> 00:24:06.000 +instructions, that start with + +00:24:06.000 --> 00:24:11.000 +instructions for installing WSL + +00:24:11.000 --> 00:24:13.000 +on a machine with Windows, + +00:24:13.000 --> 00:24:16.000 +and then installing Debian there + +00:24:16.000 --> 00:24:19.000 +and then after that people have to install + +00:24:19.000 --> 00:24:26.000 +Emacs, and then they have to install eev... + +00:24:26.000 --> 00:24:30.000 +And I'm also using this map here, + +00:24:30.000 --> 00:24:32.000 +that I'm reorganizing, + +00:24:32.000 --> 00:24:34.000 +so it's going to change a lot + +00:24:34.000 --> 00:24:36.000 +in the next days... + +00:24:36.000 --> 00:24:40.000 +it has a 2-dimensional map here, + +00:24:40.000 --> 00:24:44.000 +and it has lots of things that I'm putting + +00:24:44.000 --> 00:24:46.000 +in a single place to make it easier + +00:24:46.000 --> 00:24:49.000 +to answer questions, and to show + +00:24:49.000 --> 00:24:51.000 +to the students that I have answers + +00:24:51.000 --> 00:24:56.000 +for the most common questions... + +00:24:56.000 --> 00:24:59.000 +Remember, my target audience + +00:24:59.000 --> 00:25:02.000 +is mostly composed of beginners who have + +00:25:02.000 --> 00:25:04.000 +never seen a terminal in their lives, + +00:25:04.000 --> 00:25:06.000 +and that get bored very quickly... + +00:25:06.000 --> 00:25:10.000 +and when they get bored they disappear. + +00:25:10.000 --> 00:25:15.000 +What are my main goals for the first day? + +00:25:15.000 --> 00:25:19.000 +I want them to "install everything", + +00:25:19.000 --> 00:25:22.000 +where "everything" means WSL on their + +00:25:22.000 --> 00:25:27.000 +Windows machines, then Debian, Emacs, eev, + +00:25:27.000 --> 00:25:32.000 +lots of Debian packages that they install + +00:25:32.000 --> 00:25:44.000 +with this block here... + +00:25:44.000 --> 00:25:47.000 +After that they need to run + +00:25:47.000 --> 00:25:51.000 +some Maxima programs, and some test blocks... + +00:25:51.000 --> 00:25:53.000 +and configure Emacs, and create a first set + +00:25:53.000 --> 00:25:57.000 +of executable notes, and I consider + +00:25:57.000 --> 00:25:59.000 +that after that the person is + +00:25:59.000 --> 00:26:01.000 +autonomous. + +00:26:01.000 --> 00:26:04.000 +I said that the students + +00:26:04.000 --> 00:26:05.000 +learn how to "Run some Maxima programs". + +00:26:05.000 --> 00:26:07.000 +Let me be more precise about that. + +00:26:07.000 --> 00:26:09.000 +The first step is something + +00:26:09.000 --> 00:26:14.000 +that I call "The 5-minute workshop"... + +00:26:14.000 --> 00:26:17.000 +it happens in the classroom, + +00:26:17.000 --> 00:26:20.000 +on my laptop, and I make the students + +00:26:20.000 --> 00:26:20.000 +run this. + +00:26:20.000 --> 00:26:24.000 +Actually in a first moment I run + +00:26:24.000 --> 00:26:27.000 +this thing here, and then I ask them + +00:26:27.000 --> 00:26:30.000 +to run it themselves. + +00:26:30.000 --> 00:26:35.000 +So: I type f8 on these three things here, + +00:26:35.000 --> 00:26:37.000 +we get a target buffer running Maxima, + +00:26:37.000 --> 00:26:40.000 +then I type f8 several other times here... + +00:26:40.000 --> 00:26:42.000 +when I type f8 here it opens a GNUPlot + +00:26:42.000 --> 00:26:46.000 +window, that I have to close + +00:26:46.000 --> 00:26:49.000 +by typing 'q' here... + +00:26:49.000 --> 00:26:51.000 +and that's it. And then I say: + +00:26:51.000 --> 00:26:53.000 +now it's your turn. And the students go there, + +00:26:53.000 --> 00:26:56.000 +they type f8 three times, and then they + +00:26:56.000 --> 00:27:03.000 +type f8 f8 f8 f8 f8 f8 f8 q f8 q... + +00:27:03.000 --> 00:27:07.000 +The second step is similar - + +00:27:07.000 --> 00:27:09.000 +is another individual workshop, + +00:27:09.000 --> 00:27:01.000 +also just a few minutes long, + +00:27:01.000 --> 00:27:15.000 +in which they learn how to access my notes. + +00:27:15.000 --> 00:27:17.000 +My notes on Maxima are here - + +00:27:17.000 --> 00:27:21.000 +I mean, this is the HTMLized version... + +00:27:21.000 --> 00:27:26.000 +it starts with a header, then a huge index, + +00:27:26.000 --> 00:27:29.000 +then many blocks like this... + +00:27:29.000 --> 00:27:31.000 +and this is a specific block that corresponds + +00:27:31.000 --> 00:27:33.000 +to the thing that we we ran + +00:27:33.000 --> 00:27:37.000 +in the first 5-minute workshop. + +00:27:37.000 --> 00:27:40.000 +And in this second 5-minute workshop + +00:27:40.000 --> 00:27:43.000 +they run the instructions in this section... + +00:27:43.000 --> 00:27:46.000 +usually I skip this thing in the first moment, + +00:27:46.000 --> 00:27:52.000 +then I explain it to them... + +00:27:52.000 --> 00:27:56.000 +and they run something like this, + +00:27:56.000 --> 00:27:58.000 +that downloads a copy + +00:27:58.000 --> 00:28:02.000 +of my notes on Maxima, + +00:28:02.000 --> 00:28:04.000 +puts that copy in a temporary buffer... + +00:28:04.000 --> 00:28:06.000 +and they can run the thing here + +00:28:06.000 --> 00:28:18.000 +exactly in the same way as before... + +00:28:18.000 --> 00:28:22.000 +And I also ask them to run the small + +00:28:22.000 --> 00:28:25.000 +Maxim programs in other blocks, + +00:28:25.000 --> 00:28:27.000 +like this one, for example... + +00:28:27.000 --> 00:28:29.000 +if we run this it calculates the solution + +00:28:29.000 --> 00:28:31.000 +of a question that I put in a test + +00:28:31.000 --> 00:28:34.000 +one or two semesters ago... + +00:28:34.000 --> 00:28:38.000 +it starts by calculating several integrals + +00:28:38.000 --> 00:28:41.000 +and then it organizes all the solutions + +00:28:41.000 --> 00:28:49.000 +in a big Matrix like this... + +00:28:49.000 --> 00:28:52.000 +I said that at one point the students + +00:28:52.000 --> 00:28:55.000 +have to install lots of Debian packages. + +00:28:55.000 --> 00:28:59.000 +This happens after they have installed + +00:28:59.000 --> 00:29:05.000 +Debian, then Emacs, and eev... + +00:29:05.000 --> 00:29:09.000 +and they already know a bit about eepitch, + +00:29:09.000 --> 00:29:12.000 +so they are in this section of the + +00:29:12.000 --> 00:29:14.000 +instructions, and they just have to type + +00:29:14.000 --> 00:29:20.000 +f8 here several times and watch what + +00:29:20.000 --> 00:29:22.000 +happens... + +00:29:22.000 --> 00:29:24.000 +after that we have many options, + +00:29:24.000 --> 00:29:26.000 +and I have this map here and I usually + +00:29:26.000 --> 00:29:29.000 +choose a path according to the interests + +00:29:29.000 --> 00:29:32.000 +and the questions of the students... + +00:29:32.000 --> 00:29:34.000 +and there are many things that can go wrong, + +00:29:34.000 --> 00:29:37.000 +so this page also works as as a place + +00:29:37.000 --> 00:29:41.000 +in which I put all my troubleshooting + +00:29:41.000 --> 00:29:43.000 +instructions... + +00:29:43.000 --> 00:29:43.000 +and if a student has a question... + +00:29:43.000 --> 00:29:47.000 +I mean, suppose that the student is + +00:29:47.000 --> 00:29:50.000 +talking to me by WhatsApp or Telegram, + +00:29:50.000 --> 00:29:52.000 +and the student is saying: + +00:29:52.000 --> 00:29:54.000 +okay I installed the things such and such, + +00:29:54.000 --> 00:29:56.000 +and I tried the thing blahblah, and + +00:29:56.000 --> 00:29:58.000 +something went wrong... + +00:29:58.000 --> 00:29:59.000 +and I say: ok, can you send me a screenshot + +00:29:59.000 --> 00:30:02.000 +or a photo of your screen? + +00:30:02.000 --> 00:30:04.000 +And then we can troubleshoot that + +00:30:04.000 --> 00:30:10.000 +by using a section of this page here. + +00:30:10.000 --> 00:30:11.000 +This is a work in progress, + +00:30:11.000 --> 00:30:14.000 +I'm reorganizing this thing for + +00:30:14.000 --> 00:30:15.000 +the 10th time... + +00:30:15.000 --> 00:30:19.000 +and the rest of what can happen + +00:30:19.000 --> 00:30:21.000 +with these students can't be explained + +00:30:21.000 --> 00:30:23.000 +clearly in a video... so I'm going + +00:30:23.000 --> 00:30:26.000 +to put the all the other stuff in the + +00:30:26.000 --> 00:30:28.000 +page of the video, and I'm going to stop + +00:30:28.000 --> 00:30:30.000 +the video here. + +00:30:30.000 --> 00:07:12.000 +So: thanks, and bye! diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt new file mode 100644 index 00000000..812e174f --- /dev/null +++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt @@ -0,0 +1,574 @@ +WEBVTT + +NOTE I would love to see the GUI interacting with the scheduling stuff + +00:00:00.000 --> 00:00:01.999 +...volume of code I've written that. + +00:00:02.000 --> 00:00:06.319 +I will do a follow-up video with the kind of synchronized + +00:00:06.320 --> 00:00:12.519 +elisp-mode stuff because that is the point of the talk. Sorry + +00:00:12.520 --> 00:00:38.599 +for talking over you. Please continue. + +00:00:38.600 --> 00:00:41.879 +sachac is saying (car kill-ring). + +00:00:41.880 --> 00:00:57.559 +Oh, yeah, so this question, they're just asking in the + +NOTE Q: Or any other GUI stuff you've worked on in the past that you'd be comfortable showing? + +00:00:57.560 --> 00:01:01.319 +Scratchpad, is there any other GUI stuff I've worked on in + +00:01:01.320 --> 00:01:07.319 +the past? I guess my Toobnix channel, I was doing a bunch of + +00:01:07.320 --> 00:01:12.639 +that, so just Common Lisp development, homed around + +00:01:12.640 --> 00:01:16.359 +McCLIM. What is my Toobnix channel? If you find a Toobnix + +00:01:16.360 --> 00:01:21.519 +channel and it has a name like Screwtape, that'll + +00:01:21.520 --> 00:01:28.679 +presumably be that. So Toobnix is SDF.org's PeerTube. + +00:01:28.680 --> 00:01:35.719 +Nope, not that one. + +00:01:35.720 --> 00:01:41.319 +Sacha's got it here in the IRC. I think it's + +00:01:41.320 --> 00:01:47.959 +screwtape_channels/videos. Yeah. So the + +00:01:47.960 --> 00:01:52.639 +author of mastodon.el, which hopefully lots of us are using + +00:01:52.640 --> 00:01:58.079 +for our mastodoning, I used the name Screwtape as my + +00:01:58.080 --> 00:02:01.519 +username, and I think Wintermute said some kind of + +00:02:01.520 --> 00:02:06.119 +exasperated Emacs theme. You know what? Screw Lisp. Then + +00:02:06.120 --> 00:02:09.719 +Mousebot of mastodon.el rechristened me screwlisp. So + +00:02:09.720 --> 00:02:12.319 +sometimes you see my name written one way, and sometimes you + +00:02:12.320 --> 00:02:15.039 +see my name written the other way. I quite like it. A lot of + +00:02:15.040 --> 00:02:19.319 +people thought that I was quitting Emacs when I changed my + +00:02:19.320 --> 00:02:23.399 +name to be mainly screwlisp. I love it. That's a great story. + +00:02:23.400 --> 00:02:27.319 +Thank you. It's so great to have a name from somebody else. I + +00:02:27.320 --> 00:02:29.999 +was just thrilled. So thank you, mousebot. Everyone use + +00:02:30.000 --> 00:02:35.199 +mousebot's mode. Welcome to Green Guest. I'm with you + +00:02:35.200 --> 00:02:38.399 +there. All my kids want to choose their own names, and I'm + +00:02:38.400 --> 00:02:41.359 +just like, more power to you. I'm very glad that my parents + +00:02:41.360 --> 00:02:45.479 +picked mine for me, and that's one thing I never had to think + +00:02:45.480 --> 00:02:50.439 +about. All right, so do we have to cut short so I can go back to + +00:02:50.440 --> 00:02:55.839 +watching MPV? of the other stuff. We don't have to, but you + +00:02:55.840 --> 00:02:58.999 +are not obligated to sit here one moment more answering our + +00:02:59.000 --> 00:03:02.039 +questions than, you know, but of course, you know, we've + +00:03:02.040 --> 00:03:07.399 +talked a little before, but I, so I have a pile of questions. + +NOTE Lispy Gopher Show + +00:03:07.400 --> 00:03:11.159 +You promised to come on the Lispy Gopher show. That's right. + +00:03:11.160 --> 00:03:13.239 +I have so much to say. I could, I could, I could come right on + +00:03:13.240 --> 00:03:16.039 +your show and just talk to you there, but I'm just curious. + +00:03:16.040 --> 00:03:18.559 +Talk to us a little bit about that. Tell us more about the + +00:03:18.560 --> 00:03:23.799 +program. Oh, the Lispy Gopher climate. What do we do? So it's + +00:03:23.800 --> 00:03:29.039 +hosted by the Superdimensional Fortress, SDF.org, who are + +00:03:29.040 --> 00:03:32.919 +a public access Unix mainly. They do their own little radio + +00:03:32.920 --> 00:03:38.359 +thing as well. And so I guess for a few years now, I do a weekly + +00:03:38.360 --> 00:03:45.559 +show every zero hundred hours UTC. We always start off with + +00:03:45.560 --> 00:03:49.119 +kind of climate crisis topics, because that is a climate + +00:03:49.120 --> 00:03:54.439 +crisis topic. But there's a sort of joy in that, because Kent + +00:03:54.440 --> 00:03:58.279 +Pitman, who Kent Pitman you're familiar with from the + +00:03:58.280 --> 00:04:03.599 +Pit Manual and so forth, writes a kind of climate crisis + +00:04:03.600 --> 00:04:07.599 +haiku, which we kind of lead out with, and we kind of go into + +00:04:07.600 --> 00:04:10.239 +the discussions there. Then obviously the show has- It's a + +00:04:10.240 --> 00:04:16.959 +highlight, not gonna lie. Yeah, yeah, I love it. I try and do + +00:04:16.960 --> 00:04:19.479 +these dramatic readings, but it's often stumble over. + +00:04:19.480 --> 00:04:23.719 +Actually, when Sacha was on, there was an auxiliary poem + +00:04:23.720 --> 00:04:27.959 +that happened, which was pretty interesting, too. What was + +00:04:27.960 --> 00:04:31.319 +I going to say? Then, I mean, the way we got named the Lispy + +00:04:31.320 --> 00:04:33.839 +Gopher Climate was because, broadly speaking, I like to + +00:04:33.840 --> 00:04:37.959 +talk about kind of lisp, and most of my writing for a long time + +00:04:37.960 --> 00:04:41.919 +was on the Gopher. Though I accidentally locked myself out + +00:04:41.920 --> 00:04:45.679 +of the Gopher recently, so there hasn't been an update there + +00:04:45.680 --> 00:04:52.159 +for a while. I'm kind of around the IRCs and Mastodon quite a + +00:04:52.160 --> 00:04:56.759 +bit now. Lisp, I like to use the term Lisp inclusively, + +00:04:56.760 --> 00:04:59.719 +basically. Obviously this talk, I was making the point that + +00:04:59.720 --> 00:05:05.519 +I just could go through a 1978 paper written in, and so pre-D + +00:05:05.520 --> 00:05:10.279 +machine inter-LISP, right? And it basically just worked in + +00:05:10.280 --> 00:05:13.439 +modern Emacs LISP. Somebody was pointing out to me, who + +00:05:13.440 --> 00:05:20.119 +pointed out where I was like, I don't know what PUT is in, + +00:05:20.120 --> 00:05:23.039 +in Emacs Lisp, and somebody was saying definitely there's + +00:05:23.040 --> 00:05:28.319 +put in Emacs Lisp. So I'm going to come back to the recording + +00:05:28.320 --> 00:05:31.199 +of this talk, and I'm going to just pinpoint this moment the + +00:05:31.200 --> 00:05:34.519 +next time somebody says, we need to modernize Lisp. I'm + +00:05:34.520 --> 00:05:37.799 +going to say, no, no, no, this is modern Emacs Lisp. You see, + +00:05:37.800 --> 00:05:42.359 +here's people talking about, yeah, I'm just tripping over, + +00:05:42.360 --> 00:05:45.519 +not tripping over, I'm amused by your phrase there, but + +00:05:45.520 --> 00:05:48.599 +that's exactly how I see it too. And I take your point utterly + +00:05:48.600 --> 00:05:53.359 +that, you know, this tradition of Lisp of carrying forward + +00:05:53.360 --> 00:05:57.799 +ideas. And, you know, we, you know, especially in Emacs, it + +00:05:57.800 --> 00:06:00.799 +really is like a brain trust, right? Buckets of knowledge of + +00:06:00.800 --> 00:06:04.399 +how to get some sort of work done, or, you know, how to work + +00:06:04.400 --> 00:06:08.919 +with some kind of code or some kind of data. Yeah, but I had a + +00:06:08.920 --> 00:06:12.079 +kind of, interesting experience with some great friends of + +00:06:12.080 --> 00:06:15.799 +mine, whom I love dearly. Vidak, if you're watching this, + +00:06:15.800 --> 00:06:21.559 +I'm gossiping about you people over in Australia there. + +NOTE Lisp already did it + +00:06:21.560 --> 00:06:25.439 +Where people come to you with really exciting ideas that + +00:06:25.440 --> 00:06:30.359 +seem to be very cutting edge and like, you know, very much the + +00:06:30.360 --> 00:06:33.559 +current talk of the day, like you can hear in other + +00:06:33.560 --> 00:06:36.119 +programming languages, and they're telling you how they + +00:06:36.120 --> 00:06:39.639 +think you might be able to do this in Lisp. And you have to say, + +00:06:39.640 --> 00:06:43.719 +well, you know, if we go back to the late 70s, where the Lisp + +00:06:43.720 --> 00:06:47.959 +community really kind of pioneered this topic already. + +00:06:47.960 --> 00:06:51.399 +Here's how we did it in the late 70s. And there's actually + +00:06:51.400 --> 00:06:56.439 +quite a kind of awkward, just kind of disjunction there. I + +00:06:56.440 --> 00:06:59.079 +mean, that's the thing, right? Where use of Emacs in + +00:06:59.080 --> 00:07:03.759 +particular use of Lisp in general will unravel somebody's + +00:07:03.760 --> 00:07:06.319 +whole big bag of wind that they've built up around why + +00:07:06.320 --> 00:07:10.439 +something has to be rebuilt and well right but that's just a + +00:07:10.440 --> 00:07:13.359 +function you know it's data so we'll probably just think + +00:07:13.360 --> 00:07:16.679 +about that as I don't know sitting in a variable. + +00:07:16.680 --> 00:07:21.359 +Oh, so that whole problem, like the elegance of a solution + +00:07:21.360 --> 00:07:25.959 +can entirely fall away once you fall back to an earlier way of + +00:07:25.960 --> 00:07:29.479 +thinking about it. And then, you know, look at the pieces + +00:07:29.480 --> 00:07:32.039 +you've carried forward the idea of the declarative + +00:07:32.040 --> 00:07:37.119 +language, right? Declaring user experience. Yeah. Once + +00:07:37.120 --> 00:07:41.999 +again, tangentially to, um, to the actual talk we've just + +00:07:42.000 --> 00:07:47.479 +watched, which I will try and follow up on as well. But one + +00:07:47.480 --> 00:07:51.919 +example was After watching me use the Common Lisp loop + +00:07:51.920 --> 00:07:55.999 +facility so much, Kent pointed out to me, hey, you know, why + +00:07:56.000 --> 00:08:01.719 +don't you try using Richard Waters' series iteration + +00:08:01.720 --> 00:08:05.799 +stuff, which was kind of lazy evaluation of series that + +00:08:05.800 --> 00:08:09.119 +Waters did. And so after criticizing Haskell for a long + +00:08:09.120 --> 00:08:12.879 +time, me kind of saying, hey, you know, I don't think this + +00:08:12.880 --> 00:08:16.519 +lazy evaluation is important. then Kent pointed out to me + +00:08:16.520 --> 00:08:22.399 +that, for example, the series, like what is it? AIM 1082 or + +00:08:22.400 --> 00:08:28.799 +something published in 1989 was Lazy Evaluation in LISP + +00:08:28.800 --> 00:08:33.639 +with series. And so I thought, well, once I realized that + +00:08:33.640 --> 00:08:37.879 +this was part of kind of almost classic LISP history to have + +00:08:37.880 --> 00:08:43.679 +lazy evaluation, I adopted series, I kind of had to rethink + +00:08:43.680 --> 00:08:47.799 +my LISP worldview to realize it did already include lazy + +00:08:47.800 --> 00:08:51.679 +evaluation, which I attributed to the late 80s. And then + +00:08:51.680 --> 00:08:55.239 +when I actually read a little bit further, lazy evaluation, + +00:08:55.240 --> 00:08:59.159 +depending on your research group, has been, was kind of + +00:08:59.160 --> 00:09:02.719 +established in the late 70s by Waters again, actually. + +00:09:02.720 --> 00:09:05.719 +Sorry for the anecdote, just kind of the interesting + +00:09:05.720 --> 00:09:11.159 +medley. Not at all. + +00:09:11.160 --> 00:09:17.919 +Yeah. + +00:09:17.920 --> 00:09:25.639 +Ellis over in the IRC has come up with a good slime about + +00:09:25.640 --> 00:09:33.339 +async. Oh, I see. So yeah, + +00:09:33.340 --> 00:09:38.199 +I guess that would work. I have to try that. OK, so you're just + +00:09:38.200 --> 00:09:42.679 +getting me reading this. They have had a stab at resolving + +00:09:42.680 --> 00:09:49.279 +our asynchronous calls thing more elegantly than me. Left + +00:09:49.280 --> 00:09:53.879 +as an exercise to the listener. It's one of the big virtues of + +00:09:53.880 --> 00:09:56.799 +something like a convention. It'll bring us together with + +00:09:56.800 --> 00:10:01.079 +other people that can kind of see past the boats in our eyes. + +00:10:01.080 --> 00:10:06.239 +Oh yeah, that's easy for me. Yeah, definitely. Hearing + +00:10:06.240 --> 00:10:10.279 +somebody else's kind of thought process from you and from + +00:10:10.280 --> 00:10:16.639 +just the past speaker who was Robin, I think, because this + +00:10:16.640 --> 00:10:19.519 +was in the morning for me, so I just kind of got up and caught + +00:10:19.520 --> 00:10:25.919 +some of Robin. Yeah, it's so great, kind of vicariously + +00:10:25.920 --> 00:10:30.559 +experiencing somebody else's Emacs usage and how it kind of + +00:10:30.560 --> 00:10:34.799 +subtly backs onto their own development flows. Yeah, so I + +00:10:34.800 --> 00:10:37.319 +really appreciate this talk. I'm constantly cribbing from + +00:10:37.320 --> 00:10:40.519 +everyone I meet. And yeah, this talk has been eye-popping, + +00:10:40.520 --> 00:10:43.599 +just watching you casually navigate Emacs, actually. + +NOTE IELM + +00:10:43.600 --> 00:10:51.519 +Yeah, it's cool. Yeah, I enjoyed discovering IELM mode. + +00:10:51.520 --> 00:10:54.959 +That was going to be my other question for people. Are there + +00:10:54.960 --> 00:10:59.439 +any IELM Power users around? I could really go for an + +00:10:59.440 --> 00:11:05.679 +EmacsConf talk on IELM mode. Aha, yes. Very good. Note + +00:11:05.680 --> 00:11:12.199 +taken. Yeah. So, just thoughts for next year? Oh, well, I + +00:11:12.200 --> 00:11:15.999 +kind of want to get back onto the MPV, but thank you so much for + +00:11:16.000 --> 00:11:22.039 +this. You are cmak in the IRC, right? I am Corwin, same as you. + +00:11:22.040 --> 00:11:26.159 +So you're Corwin. There's also cmak, and I guess there are a + +00:11:26.160 --> 00:11:28.719 +few other people. Sorry that I'm tripping over the + +00:11:28.720 --> 00:11:31.359 +different people here. But you're going to come on the Lispy + +00:11:31.360 --> 00:11:35.719 +Gopher Climate later. Sure, I'm happy to. That sounds + +00:11:35.720 --> 00:11:38.479 +like fun. I always got a million things to talk about me or an + +00:11:38.480 --> 00:11:42.399 +opinion on everything. But of course, my favorite thing to + +00:11:42.400 --> 00:11:48.359 +talk about is just the huge thanks that, you know, sharing + +00:11:48.360 --> 00:11:53.639 +that, the generosity or the, you know, my appreciation for + +00:11:53.640 --> 00:11:57.159 +you and all the other members of the Emacs community that + +00:11:57.160 --> 00:12:00.519 +create talks like this and make the conference and the rest + +00:12:00.520 --> 00:12:04.839 +of the community so rich. Well, yeah, and thank you for your + +00:12:04.840 --> 00:12:09.759 +work. Sacha is just saying over in Lambda that when I say I + +00:12:09.760 --> 00:12:13.039 +want someone to give the talk, this means I'm volunteering + +00:12:13.040 --> 00:12:17.079 +to give the IELM talk. That's what I wrote down. Oh, yeah. I've + +00:12:17.080 --> 00:12:19.479 +been working for Sacha. I mean, helping Sacha with this + +00:12:19.480 --> 00:12:23.919 +conference for years. I know. No, I'm kidding. That would be + +00:12:23.920 --> 00:12:28.559 +cool. I will absolutely go to your ielm talk. I make a lot of use + +00:12:28.560 --> 00:12:32.879 +of that and could do more. Yeah, we're meant to suddenly + +NOTE Q: Are we going to get a McCLIM LambdaMOO client? + +00:12:32.880 --> 00:12:36.639 +stop. But a guest over in Lambda also said, are we going to get + +00:12:36.640 --> 00:12:41.239 +a McCLIM LambdaMOO client? And I actually had all my kind of + +00:12:41.240 --> 00:12:44.519 +Moo stuff I'd written in Common Lisp, which I was thinking of + +00:12:44.520 --> 00:12:47.639 +just kind of jettisoning. But you're right, I should make + +00:12:47.640 --> 00:12:51.479 +that into a client for Common Lisp. Anyway, I'm going to hang + +00:12:51.480 --> 00:12:55.839 +up so I can keep watching the conference sounds good so we'll + +00:12:55.840 --> 00:12:58.399 +just cut away with the stream throw some music and a + +00:12:58.400 --> 00:13:02.799 +countdown uh back on give us just a second to make that on bbb + +00:13:02.800 --> 00:13:05.359 +and then i'll give you the big thumbs up thank you thank you + +00:13:05.360 --> 00:13:08.359 +recording here we'll get it all posted up uh right next to + +00:13:08.360 --> 00:13:09.839 +your awesome pre-recorded talk + +00:13:09.840 --> 00:13:17.159 +thanks again like it's been fun chatting and uh Yeah, + +00:13:17.160 --> 00:13:20.799 +definitely seeing you around in the conference channel off + +00:13:20.800 --> 00:13:23.879 +off season. So to speak, you're like, you're totally + +00:13:23.880 --> 00:13:26.679 +welcome to use our chat like it to the extent you need to IRC + +00:13:26.680 --> 00:13:29.039 +channel that's been working on great for me. It's fun to fun + +00:13:29.040 --> 00:13:30.639 +to see it. + +00:13:30.640 --> 00:13:39.319 +All right, I'm gonna hang up this thing. All right. Happy day + +00:13:39.320 --> 00:13:44.119 +flowy. Sorry, I mean, screwlisp. Oh my gosh, I have + +00:13:44.120 --> 00:13:54.360 +conference brain. Bye bye. All right, later, later. diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt new file mode 100644 index 00000000..ecc41f76 --- /dev/null +++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt @@ -0,0 +1,14 @@ +WEBVTT + + +00:00:01.750 --> 00:03:21.652 +Introduction + +00:03:21.702 --> 00:19:12.752 +Calendar + +00:19:12.802 --> 00:29:09.414 +Inferior Lisp and McCLIM + +00:29:10.964 --> 00:34:28.780 +Putting things together diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt new file mode 100644 index 00000000..f37aea64 --- /dev/null +++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt @@ -0,0 +1,1413 @@ +WEBVTT captioned by rodrigo + +NOTE Introduction + +00:00:01.750 --> 00:00:11.969 +Welcome everyone to my EmacsConf presentation, + +00:00:15.370 --> 00:00:22.089 +where we're going to look at Lisp's vdemo[??] app from 1978, + +00:00:22.139 --> 00:00:25.659 +but done in modern Elisp. + +00:00:28.460 --> 00:00:33.039 +Then we're going to look at getting inferior-lisp working, + +00:00:33.390 --> 00:00:34.753 +my dear Common Lisp. + +00:00:37.003 --> 00:00:42.059 +Then we're going to use the Common Lisp interface manager, + +00:00:42.159 --> 00:00:45.663 +the open source child of the Common Lisp interface manager, + +00:00:47.813 --> 00:00:52.959 +McCLIM, from inferior-lisp in Superior Lisp, + +00:00:55.710 --> 00:00:58.325 +which is the opposite order that I initially thought + +00:00:58.375 --> 00:00:59.276 +we were going to do things in, + +00:00:59.326 --> 00:01:00.779 +but this is how it's kind of turned out. + +00:01:00.829 --> 00:01:01.795 +So it's this article, + +00:01:01.845 --> 00:01:05.199 +I thought, from 1978, was interesting to us today. + +00:01:05.999 --> 00:01:08.702 +“Programming in an Interactive Environment: + +00:01:08.752 --> 00:01:11.805 +the ‘Lisp’ Experience.” + +00:01:12.005 --> 00:01:17.678 +Explaining what all these LISP programmers were doing to + +00:01:19.478 --> 00:01:22.466 +people unfamiliar with LISP programming. + +00:01:22.566 --> 00:01:24.401 +“LISP systems have been used for + +00:01:24.451 --> 00:01:27.454 +highly interactive programming for more than a decade.” + +00:01:27.604 --> 00:01:29.790 +This was from 1978. + +00:01:29.990 --> 00:01:31.959 +And we're just going to go and, + +00:01:34.109 --> 00:01:39.717 +almost verbatim, port the demo application for LISP + +00:01:40.017 --> 00:01:46.119 +out of 1978 Interlisp and into Emacs Lisp. + +00:01:49.720 --> 00:01:51.428 +And we're going to do it without Org Mode, + +00:01:51.478 --> 00:01:54.231 +because I think everyone is finding out + +00:01:54.281 --> 00:01:56.950 +how great Org Mode is already. + +00:01:58.100 --> 00:02:00.787 +For inferior Lisp, I thought instead of org-mode, + +00:02:00.837 --> 00:02:02.823 +we'll theme it around slime-mode and then it turned out + +00:02:02.873 --> 00:02:06.059 +most of this presentation happens in Emacs Lisp, + +00:02:06.109 --> 00:02:08.929 +because this is an Emacs Lisp conference. + +00:02:09.379 --> 00:02:12.799 +But I found out that there's ielm-mode, + +00:02:12.849 --> 00:02:17.604 +which is pretty similar to slime-mode, + +00:02:19.054 --> 00:02:23.610 +but in our hearts, we can imagine that this is + +00:02:23.660 --> 00:02:27.448 +an Emacs example, homed around slime-mode, + +00:02:27.498 --> 00:02:33.353 +Superior Lisp Interaction Mode for Emacs, instead of org-mode. + +00:02:33.403 --> 00:02:36.390 +Though, you know, I do secretly use org-mode as well, + +00:02:36.440 --> 00:02:37.858 +not very secretly. + +00:02:37.958 --> 00:02:40.539 +But that means we're kind of improvising, + +00:02:46.790 --> 00:02:48.786 +improvising a presentation mode. + +00:02:49.986 --> 00:02:55.576 +So we have this big buffer of Elisp, and let's just... + +00:02:56.726 --> 00:02:59.164 +This is me, not Sandewall, out of interest, + +00:03:00.614 --> 00:03:02.616 +let's make a keyboard macro, + +00:03:04.216 --> 00:03:10.240 +go get the S-expression wherever the cursor is, + +00:03:10.290 --> 00:03:13.611 +move it to the next S-expression, paste it in here, + +00:03:13.661 --> 00:03:15.989 +and the keyboard macro, alright. + +00:03:20.190 --> 00:03:21.652 +What was basically happening... + +NOTE Calendar + +00:03:21.702 --> 00:03:25.306 +So the demo application in this case is + +00:03:25.356 --> 00:03:27.842 +a scheduling application. + +00:03:28.792 --> 00:03:34.631 +And so you can imagine improvising a calendar like this + +00:03:34.731 --> 00:03:36.633 +if you weren't existingly using an + +00:03:36.683 --> 00:03:38.952 +org-mode integrated calendar. + +00:03:39.252 --> 00:03:42.739 +So, you know, just have a list and maybe + +00:03:43.989 --> 00:03:49.479 +each list is of sublists, where the first element, + +00:03:49.579 --> 00:03:51.531 +the car of the sublist, I guess, + +00:03:51.931 --> 00:03:55.669 +is a sensible-sounding date format, like sat dec 7, + +00:03:56.119 --> 00:03:59.589 +this is clearly the first day of EmacsConf. + +00:03:59.939 --> 00:04:06.230 +Then after that, a list of basically from and to times, + +00:04:06.280 --> 00:04:18.592 +and then a quick written description of whatever event + +00:04:18.642 --> 00:04:19.576 +was at that time. + +00:04:19.876 --> 00:04:23.130 +So similar to what we were seeing recently + +00:04:23.180 --> 00:04:25.449 +as of me recording this in our Structure and + +00:04:25.499 --> 00:04:28.902 +Interpretation of Computer Programs study group, + +00:04:29.902 --> 00:04:35.709 +you have all these little methods, sorry, defuns. + +00:04:35.759 --> 00:04:39.513 +So hours of a time is actually just car of the time, + +00:04:40.763 --> 00:04:42.966 +minutes of the time, cadr of time. + +00:04:43.216 --> 00:04:46.719 +And so we all know these kind of little, + +00:04:46.720 --> 00:04:50.173 +basically turning car and cadr, + +00:04:50.223 --> 00:04:53.093 +which we do use into descriptive names like from and to. + +00:04:53.143 --> 00:04:56.329 +You can see how this lines up with the appointments. + +00:04:56.379 --> 00:05:01.701 +So for "reproducibly building emacs" described event, + +00:05:01.751 --> 00:05:05.679 +I guess from would be 16 25. + +00:05:05.680 --> 00:05:07.658 +Let's just grab that and literally use those, + +00:05:07.708 --> 00:05:11.011 +because we're in interactive programming, right? + +00:05:11.711 --> 00:05:18.216 +So we have this quoted form and then + +00:05:18.266 --> 00:05:22.240 +let's do from of that. Great. + +00:05:22.290 --> 00:05:24.458 +And let's do minutes. + +00:05:25.308 --> 00:05:31.498 +So from 16 25, 16 45 reproducibly building Emacs, + +00:05:31.548 --> 00:05:34.801 +so when I do from to that I get 16 25 + +00:05:34.851 --> 00:05:40.707 +when I do minutes to 16 25, I get 25 + +00:05:42.057 --> 00:05:45.489 +and a description of this number in octal and hexadecimal, + +00:05:45.590 --> 00:05:47.147 +out of interest. + +00:05:48.047 --> 00:05:52.953 +What was up next? Okay, getting nextday from a date. + +00:05:53.553 --> 00:05:57.023 +And so, what was it? Saturday, December 27th. + +00:05:57.073 --> 00:05:59.245 +So what happens? So this function, + +00:06:01.345 --> 00:06:05.932 +I guess this was part of Sandewall's personal exploration of + +00:06:06.032 --> 00:06:12.188 +atoms using symbols with property lists, + +00:06:12.238 --> 00:06:15.492 +with an attached property list to every symbol. + +00:06:15.942 --> 00:06:18.059 +And so you can kind of see how this works. + +00:06:21.510 --> 00:06:32.799 +I get whatever was keyed by the symbol nextweekday out of + +00:06:32.800 --> 00:06:36.529 +the day symbol, so I guess we would do... + +00:06:36.579 --> 00:06:46.640 +so if we had Sat December 6, I guess we get Sat + +00:06:48.140 --> 00:06:54.379 +Oh, it destructures that itself somehow, get nextweekday. + +00:06:58.429 --> 00:07:02.279 +Sorry, nextday. + +00:07:02.280 --> 00:07:10.170 +set December 6th + +00:07:10.270 --> 00:07:12.732 +But of course these weren't defined yet, + +00:07:12.782 --> 00:07:23.593 +so what if we (setf (get 'sat 'nextweekday) 'sun) + +00:07:23.793 --> 00:07:25.239 +and it's going to be sun right + +00:07:28.990 --> 00:07:34.369 +And then if we (nextday '(sat dec 6)), + +00:07:36.720 --> 00:07:38.392 +Sunday, December 7th. + +00:07:38.942 --> 00:07:41.628 +Yeah, so that kind of makes sense in an intuitive way. + +00:07:41.778 --> 00:07:43.550 +And you can see cond is being used. + +00:07:43.850 --> 00:07:51.538 +So if you're not a Lisp person, cond evaluates a condition. + +00:07:51.588 --> 00:07:54.708 +If the condition returns non-nil, + +00:07:54.758 --> 00:07:57.160 +it executes the code attached to that condition. + +00:07:57.210 --> 00:08:00.247 +It evaluates each of these conditions in terms + +00:08:00.297 --> 00:08:04.851 +and then stops when one returns non-nil, + +00:08:04.901 --> 00:08:07.420 +as you might expect as a Lisp programmer. + +00:08:07.670 --> 00:08:09.622 +Let's keep marching along. + +00:08:09.672 --> 00:08:11.691 +Okay, so we have to populate this. + +00:08:11.741 --> 00:08:13.493 +And this was an interesting one. + +00:08:13.543 --> 00:08:15.562 +As you can see, this was my attempt. + +00:08:15.612 --> 00:08:19.199 +let days mon tue wed, so forth. + +00:08:19.249 --> 00:08:23.403 +Then I used cl-loop from Emacs Lisp, you know, + +00:08:23.453 --> 00:08:32.359 +for day in days, for nex in cdr days, setf nextweekday. + +00:08:32.610 --> 00:08:35.382 +This I thought was surprisingly deep, was that + +00:08:36.432 --> 00:08:38.435 +Lisp programmers, Sandewall thought, + +00:08:38.485 --> 00:08:43.123 +are basically constantly trying to break new ground and they + +00:08:43.723 --> 00:08:45.325 +lose interest very quickly when + +00:08:45.425 --> 00:08:46.743 +that's not what they're doing. + +00:08:46.843 --> 00:08:50.129 +And he was making the point that breaking new ground + +00:08:50.229 --> 00:08:52.832 +involves solving a problem exactly once. + +00:08:54.232 --> 00:08:55.903 +And so you kind of should do it + +00:08:56.003 --> 00:08:58.572 +in the most expedient way possible + +00:08:58.672 --> 00:09:00.692 +to solve it kind of for the first time. + +00:09:00.992 --> 00:09:07.113 +And after that, it's not breaking new ground anymore. + +00:09:07.663 --> 00:09:10.350 +And so I thought that was a kind of fun point + +00:09:10.400 --> 00:09:14.521 +from Sandewall's paper that we could kind of chew on. + +00:09:15.121 --> 00:09:19.359 +Do something similar for months and month lengths. + +00:09:21.059 --> 00:09:30.120 +But as we can see, if I get Feb, + +00:09:32.120 --> 00:09:41.982 +nrdr days I think that characters in 1978, + +00:09:42.082 --> 00:09:45.418 +characters and symbols in 1978 were more precious + +00:09:45.468 --> 00:09:47.821 +which is why Sandewall was writing in this abbreviated way. + +00:09:47.871 --> 00:09:51.341 +We might write more verbosely these days. + +00:09:51.391 --> 00:09:54.177 +We get 28th but it is in fact a leap year, + +00:09:54.277 --> 00:09:58.998 +so let's just set that to be 29. Now, it's fine. + +00:09:59.048 --> 00:10:05.638 +Then I guess if we do, we were doing nextday. + +00:10:06.038 --> 00:10:10.944 +Sure, nextday. I don't know what day it was. + +00:10:10.994 --> 00:10:16.716 +let's assume it was Sunday Feb 28 + +00:10:22.716 --> 00:10:26.179 +some kind of typo crept in there, but we can deal with it. + +00:10:26.230 --> 00:10:43.844 +Let's just setf get sun nextweekday month. + +00:10:43.944 --> 00:10:48.648 +So once we've solved it once, we should be fine, right? + +00:10:48.698 --> 00:10:51.849 +Okay, I think I have to speed up a bit. + +00:10:52.000 --> 00:10:55.555 +Yeah, there we go, Monday February 29th and then + +00:10:55.605 --> 00:11:01.194 +what if we nextday... Tuesday March 1st. + +00:11:01.244 --> 00:11:03.700 +Okay, it basically seems to be working. + +00:11:03.750 --> 00:11:06.398 +And I'd argue it's actually fun that + +00:11:06.448 --> 00:11:08.535 +we kind of had to do that. + +00:11:08.585 --> 00:11:13.473 +Then, just imagining you're kind of functioning with + +00:11:13.523 --> 00:11:18.311 +other people: day begins at 900, ends at 1700, + +00:11:18.361 --> 00:11:22.415 +so kind of a 9:00 to 5:00, imagining... though perhaps, + +00:11:23.915 --> 00:11:25.318 +shorter is more appropriate, + +00:11:25.368 --> 00:11:27.320 +but let's not quibble about that. + +00:11:27.420 --> 00:11:29.789 +What was happening next in this app? + +00:11:29.839 --> 00:11:35.562 +holesin. Oh, yeah, so get me the free slots + +00:11:35.712 --> 00:11:40.060 +in from start time, list of appointments, + +00:11:40.110 --> 00:11:45.238 +remembering characters, I guess, were more precious + +00:11:45.288 --> 00:11:46.556 +is my theory. + +00:11:46.906 --> 00:11:58.399 +And then an end time, so if I go holesin and then from 900 + +00:11:59.050 --> 00:12:02.689 +to where I've written 9 space 0 0 + +00:12:03.389 --> 00:12:05.959 +and what are my appointments? + +00:12:07.459 --> 00:12:09.930 +So I have a list of appointments that + +00:12:09.980 --> 00:12:12.032 +need to have start times and finish times. + +00:12:12.132 --> 00:12:20.080 +So let's go 12 59 to 13 01. + +00:12:23.580 --> 00:12:25.379 +The description, I guess, can be test. + +00:12:25.429 --> 00:12:28.715 +And then let's finish that at 1700, + +00:12:29.115 --> 00:12:30.729 +like we kind of thought. + +00:12:37.830 --> 00:12:41.049 +Oops, some of these were meant to be arguments. + +00:12:54.800 --> 00:12:55.742 +Okay, there we go. + +00:12:56.042 --> 00:13:01.297 +And so the available times between nine and five, + +00:13:01.397 --> 00:13:04.429 +if there's one appointment from 12:59 to 1:01, + +00:13:05.580 --> 00:13:13.092 +are from 9 to 1259 and from 1 past 1 to 5, + +00:13:13.792 --> 00:13:15.528 +which is kind of what we were expecting. + +00:13:15.728 --> 00:13:18.631 +And so our appointment app is kind of coming along. + +00:13:18.931 --> 00:13:20.379 +Then we have commonholes, + +00:13:23.430 --> 00:13:25.189 +kind of works in a sensible way. + +00:13:33.890 --> 00:13:36.199 +Do we have, what are some common holes from + +00:13:36.249 --> 00:13:40.153 +two lists of appointments, I guess? commonholes. + +00:13:50.903 --> 00:13:53.800 +I guess, let's have one person have an appointment + +00:13:53.850 --> 00:13:56.419 +from 9 to 10. + +00:13:59.569 --> 00:14:02.508 +That's going to be their only appointment. + +00:14:02.558 --> 00:14:05.946 +And let's have another person have an appointment + +00:14:05.996 --> 00:14:10.399 +from 9.30 to 10.30. + +00:14:14.450 --> 00:14:18.391 +Oh, we didn't do beforetime yet. + +00:14:18.441 --> 00:14:22.295 +This is the order Sandewall implemented things in there. + +00:14:22.345 --> 00:14:25.465 +Ok, there. + +00:14:25.515 --> 00:14:32.972 +So the commonholes are from 9.30 to 10. + +00:14:34.272 --> 00:14:42.182 +That's actually the overlapping time. + +00:14:42.232 --> 00:14:43.850 +I'll re-record this + +00:14:43.900 --> 00:14:50.799 +if some kind of gremlin has crept into my things. + +00:15:04.150 --> 00:15:06.839 +And then, what did we first start by doing? + +00:15:07.389 --> 00:15:11.444 +Emacsconf track 1 and Emacsconf track 2, + +00:15:11.494 --> 00:15:15.139 +and we'll do it on Saturday, December 7. + +00:15:21.140 --> 00:15:23.756 +commontime, and I'm being prompted, of course. + +00:15:23.806 --> 00:15:27.226 +emacsconf-track-1, + +00:15:29.676 --> 00:15:32.369 +emacsconf-track-2, + +00:15:33.370 --> 00:15:35.485 +the date that we grabbed. + +00:15:36.585 --> 00:15:39.519 +Let's say we want five minutes. + +00:15:49.120 --> 00:15:52.418 +And, as always, I'm forgetting to quote things. + +00:15:52.468 --> 00:15:56.689 +And so my opportunities for common times + +00:15:56.739 --> 00:16:01.326 +between emacsconf-track-1 to emacsconf-track-2 + +00:16:01.376 --> 00:16:02.819 +on the first day of the conference, + +00:16:02.869 --> 00:16:05.464 +Saturday, December 7th, for five minutes. + +00:16:05.864 --> 00:16:08.834 +I have an opportunity between 9:20 and 9:40, + +00:16:08.984 --> 00:16:13.639 +11:40 and 13:00, 13:10, 13:25, + +00:16:14.489 --> 00:16:19.612 +13:45, 13:55, and 16:15 to 16:25. + +00:16:19.662 --> 00:16:21.581 +So I think that's all working. + +00:16:23.881 --> 00:16:29.155 +And it was done with almost exactly the same code, + +00:16:31.355 --> 00:16:38.965 +except for my loopy populating symbol plist bits earlier, + +00:16:39.015 --> 00:16:46.489 +in Interlisp in 1978 as Emacs Lisp in 2024. + +00:16:46.539 --> 00:16:48.625 +I thought that was pretty interesting that + +00:16:48.675 --> 00:16:49.492 +you could do that. + +00:16:49.542 --> 00:16:57.049 +I think setf get was put prop + +00:16:57.099 --> 00:17:02.737 +was the biggest difference in 1978 Interlisp and + +00:17:02.787 --> 00:17:04.690 +modern Emacs Lisp. + +00:17:04.740 --> 00:17:09.178 +And obviously modern Emacs Lisp has Common Lisp loop in it, + +00:17:09.228 --> 00:17:11.514 +kind of. It's another big difference. + +00:17:11.914 --> 00:17:16.099 +How are we doing for time? 17 minutes? + +00:17:16.450 --> 00:17:19.105 +Great, because now let's get a bit closer to what + +00:17:19.805 --> 00:17:21.941 +my talk title has promised. + +00:17:21.991 --> 00:17:24.911 +We're going to use Common Lisp from Emacs Lisp + +00:17:25.211 --> 00:17:28.080 +and we're going to use Common Lisp Interface Manager, + +00:17:28.130 --> 00:17:30.116 +the open source implementation of + +00:17:30.166 --> 00:17:33.786 +Common Lisp Interface Manager from + +00:17:33.836 --> 00:17:36.999 +Inferior Lisp from Emacs Lisp. + +00:17:37.300 --> 00:17:42.695 +And what we just went over in Sandewall's paper... + +00:17:45.550 --> 00:17:47.683 +This was the starting point, and Sandewall says, + +00:17:47.783 --> 00:17:51.537 +well, if you just kind of jammed these ideas using lists + +00:17:51.587 --> 00:17:55.341 +you just kind of made hour a synonym for car and + +00:17:55.391 --> 00:17:58.945 +minute a synonym for cadr and so forth, + +00:17:59.795 --> 00:18:03.066 +you can then make a whole bunch of improvements. + +00:18:04.166 --> 00:18:06.689 +Can we actually get a glimpse of the … + +00:18:09.239 --> 00:18:10.423 +No, I didn't really write this. + +00:18:10.473 --> 00:18:14.244 +Yeah, so you can see I basically just ported out of + +00:18:14.294 --> 00:18:17.430 +the Interlisp code in the text of this paper. + +00:18:17.580 --> 00:18:21.300 +Yeah, you see from lambda of appointment, + +00:18:21.350 --> 00:18:24.904 +car appointment, and that's defineq. + +00:18:24.954 --> 00:18:27.857 +I guess Interlisp in 1978 used defineq, + +00:18:27.907 --> 00:18:32.311 +whereas we used defun in Elisp, + +00:18:33.361 --> 00:18:35.264 +but I'd encourage you to explore that yourselves. + +00:18:35.314 --> 00:18:38.551 +But the extension that I wanted to develop today is, + +00:18:38.601 --> 00:18:41.187 +since Common Lisp interface manager is just Lisp, + +00:18:41.237 --> 00:18:43.422 +and Inferior Lisp is just Lisp, + +00:18:43.472 --> 00:18:45.291 +and Emacs Lisp is just Lisp, + +00:18:45.341 --> 00:18:48.878 +and Interlisp in 1978 is just Lisp, + +00:18:48.928 --> 00:18:50.112 +we could kind of use them all together + +00:18:50.162 --> 00:18:51.430 +in a kind of funky way. + +00:18:51.480 --> 00:18:57.036 +But a complaint you often hear, or a statement of confusion + +00:18:57.086 --> 00:19:00.373 +that you often hear as a Lisp person, + +00:19:00.423 --> 00:19:06.712 +people from other languages often can't kind of figure out + +00:19:06.762 --> 00:19:09.715 +how to get started with Lisp. + +00:19:09.765 --> 00:19:12.752 +So I'm just going to try and do everything here and now. + +NOTE Inferior Lisp and McCLIM + +00:19:12.802 --> 00:19:18.357 +And this is the second piece of my three pieces, + +00:19:18.407 --> 00:19:22.628 +so let's just get inferior lisp and McCLIM happening. + +00:19:22.928 --> 00:19:29.268 +We normally use slime Superior Lisp Interaction Mode + +00:19:29.318 --> 00:19:41.847 +for Emacs, which we could get from Emacs's package manager. + +00:19:41.897 --> 00:19:48.604 +If I go package-list-packages and then we wait + +00:19:48.954 --> 00:19:50.969 +for however fast my network is, + +00:19:54.270 --> 00:19:55.311 +we're going to see how long it's been + +00:19:55.361 --> 00:19:57.079 +since I updated something. + +00:19:58.629 --> 00:20:00.999 +Yeah, but you see it's in MELPA, right? + +00:20:15.750 --> 00:20:16.982 +It's got to be somewhere here. + +00:20:18.082 --> 00:20:18.501 +Yeah, all right. + +00:20:18.551 --> 00:20:21.420 +So there's one slime available in non-GNU, + +00:20:21.470 --> 00:20:25.958 +one possibly more recent one available in + +00:20:26.758 --> 00:20:28.678 +the MELPA package repositories. + +00:20:30.278 --> 00:20:30.963 +I don't know about you, + +00:20:31.013 --> 00:20:33.616 +but I can sympathize with people who feel confused by this + +00:20:33.666 --> 00:20:36.469 +because I think if you look online, + +00:20:36.519 --> 00:20:38.637 +if you found a search engine result, + +00:20:38.687 --> 00:20:44.110 +it doesn't customize these like I customize them. + +00:20:44.160 --> 00:20:45.945 +So let's just do this. + +00:20:45.995 --> 00:20:48.147 +customize-variable. + +00:20:48.197 --> 00:20:52.318 +package-archives. + +00:20:54.518 --> 00:21:00.392 +Yeah and you can see here I've ins-ed gnu, non-gnu, and melpa. + +00:21:00.542 --> 00:21:02.628 +It's melpa, not melpa stable. + +00:21:03.478 --> 00:21:04.359 +Saved and set. + +00:21:06.810 --> 00:21:08.334 +So that's how I do that. + +00:21:08.384 --> 00:21:13.279 +We're just kind of totally get an inferior lisp working. + +00:21:17.130 --> 00:21:20.599 +And then, like we saw before, + +00:21:20.949 --> 00:21:22.648 +this might occur, buffer is still open. + +00:21:23.148 --> 00:21:26.879 +No. occur. slime. + +00:21:35.330 --> 00:21:38.631 +So we could install and execute that. + +00:21:38.681 --> 00:21:41.734 +I cloned slime since Common Lisp people + +00:21:41.784 --> 00:21:48.874 +might use slime and swank, like McCLIM does outside of Emacs. + +00:21:48.924 --> 00:21:51.043 +I think we can secretly see + +00:21:51.093 --> 00:21:55.614 +I've got it here already in my ~/.emacs.d/slime, + +00:21:56.064 --> 00:22:00.119 +but you could install it like that. The hotkey is I, + +00:22:00.169 --> 00:22:02.021 +and then execute the install. + +00:22:02.071 --> 00:22:03.789 +I realize you all already know this, + +00:22:04.039 --> 00:22:06.759 +but many of you might not yet be Common Lisp programmers, + +00:22:06.809 --> 00:22:09.569 +and you can use both Superior and Inferior Lisp. + +00:22:10.370 --> 00:22:14.733 +Instead of package archives in Emacs, + +00:22:14.783 --> 00:22:19.705 +in Inferior Lisp, and with great controversy, + +00:22:19.755 --> 00:22:22.708 +we often use QuickLisp. + +00:22:22.758 --> 00:22:25.778 +People sometimes complain QuickLisp releases + +00:22:25.828 --> 00:22:27.780 +get out of date quite quickly. + +00:22:28.630 --> 00:22:31.717 +But there was one recently, so they're pretty in date. + +00:22:32.167 --> 00:22:35.321 +And so there should be a … + +00:22:35.371 --> 00:22:39.058 +Yeah, so basically you download quicklisp.lisp, + +00:22:39.158 --> 00:22:41.959 +you check its SHA-256 sum. + +00:22:44.910 --> 00:22:47.829 +So I guess in, ooh, over here, if I press D, + +00:22:51.229 --> 00:22:53.706 +~screwtape/downloads/quicklisp.lisp. + +00:22:53.756 --> 00:22:57.376 +Great. If we open a shell, we realize that + +00:22:57.426 --> 00:23:03.599 +this is just riveting for all of our experts there. + +00:23:06.450 --> 00:23:15.919 +sha256 ~/Downloads/quicklisp.lisp + +00:23:19.720 --> 00:23:22.001 +Your SHA-256 might be different to mine. + +00:23:22.601 --> 00:23:25.471 +Somebody please tell me during the actual conference, + +00:23:25.621 --> 00:23:29.125 +the right Emacs idiom to do this. + +00:23:29.225 --> 00:23:32.679 +I guess it will be tools decrypt something. + +00:23:33.930 --> 00:23:36.014 +But then once you have QuickLisp, + +00:23:36.214 --> 00:23:37.959 +let's go back to our shell. + +00:23:41.810 --> 00:23:46.625 +I'm on OpenBSD or a BSD, so I type pkg_add ecl + +00:23:46.675 --> 00:23:48.239 +to get embeddable Common Lisp. + +00:23:53.590 --> 00:23:55.090 +However, I think I already have it. + +00:23:58.540 --> 00:24:02.069 +And then, let's start ecl [embeddable Common Lisp]. + +00:24:04.670 --> 00:24:07.039 +Quicklisp inserts itself already, + +00:24:11.290 --> 00:24:14.920 +but just loading that quicklisp.lisp file + +00:24:14.970 --> 00:24:16.989 +kind of would get you here anyway. + +00:24:17.039 --> 00:24:22.939 +Now let's (ql:quickload :mcclim) + +00:24:27.140 --> 00:24:28.769 +I'm actually following my plan. + +00:24:33.269 --> 00:24:38.294 +McCLIM is kind of like Emacs in that + +00:24:38.344 --> 00:24:40.713 +it handles all sorts of graphical stuff + +00:24:41.013 --> 00:24:42.748 +like if you have GTK Emacs, + +00:24:42.798 --> 00:24:44.333 +you know, it can do really a lot of stuff. + +00:24:44.383 --> 00:24:48.604 +That's the reason why compiling and loading + +00:24:50.504 --> 00:24:53.125 +the McCLIM package takes a while + +00:24:53.175 --> 00:24:56.962 +and I do use my old computer laptop, + +00:24:57.012 --> 00:25:00.299 +my old computer challenge laptop all the time, + +00:25:00.349 --> 00:25:02.685 +so when you do this, your computer will be + +00:25:02.735 --> 00:25:05.504 +substantially faster or you will be feeling + +00:25:06.404 --> 00:25:09.609 +smug about how slow you're running your computer, + +00:25:12.759 --> 00:25:15.481 +and so there's no problem. + +00:25:15.531 --> 00:25:17.316 +Next, we're going to start Swank + +00:25:17.366 --> 00:25:23.699 +which is the Lisp part of Emacs's slime-mode. + +00:25:27.649 --> 00:25:32.298 +If I remember, we looked at this before + +00:25:32.348 --> 00:25:34.700 +in my .emacs.d, + +00:25:35.050 --> 00:25:40.499 +and then there should be slime/start-swank.lisp. + +00:25:41.699 --> 00:25:44.643 +Let's just grab that and load it. + +00:25:46.293 --> 00:25:48.470 +You don't have to type #p. + +00:25:48.870 --> 00:25:51.150 +The string will work as well as the path name, + +00:25:51.200 --> 00:25:52.618 +but it's kind of fun to do so. + +00:25:52.668 --> 00:25:55.287 +Now, slime-connect. + +00:25:55.437 --> 00:25:56.859 +You installed slime earlier. + +00:25:57.559 --> 00:25:59.024 +Default values. + +00:25:59.074 --> 00:26:01.794 +Oh, the reason we had to do this + +00:26:01.844 --> 00:26:07.064 +and not use Slime, start Slime normally was that + +00:26:07.214 --> 00:26:10.736 +CLIM, Common Lisp Interface Manager, + +00:26:10.786 --> 00:26:12.204 +McCLIM, implementation of the + +00:26:12.254 --> 00:26:16.275 +Common Lisp Interface Manager spec, also uses Swank + +00:26:16.675 --> 00:26:19.912 +and McCLIM really wants to be in the driver's seat. + +00:26:20.162 --> 00:26:23.282 +We can have our Emacs connect + +00:26:23.332 --> 00:26:28.053 +to the Swank that McCLIM was already running. + +00:26:28.553 --> 00:26:30.823 +So (in-package :clim-user)... + +00:26:30.873 --> 00:26:33.575 +I don't know if this is an Emacs Lisp idiom, + +00:26:33.625 --> 00:26:37.112 +so you normally have user packages to absorb user code + +00:26:37.162 --> 00:26:38.809 +just for fooling around. + +00:26:42.110 --> 00:26:47.556 +Then let's just use clim at all. + +00:26:47.606 --> 00:26:52.544 +And so clim does lots of things around presentations + +00:26:53.094 --> 00:26:58.317 +but one thing it does is automatically, to a large extent, + +00:26:58.367 --> 00:27:03.956 +generate graphical user interfaces. + +00:27:04.006 --> 00:27:09.394 +So there's a lot to it that's not about graphics, + +00:27:09.444 --> 00:27:13.332 +kind of richer interfaces than + +00:27:14.082 --> 00:27:17.089 +ANSI Common Lisp's character streams. + +00:27:19.389 --> 00:27:23.158 +But let's use it to grab a graphical pop-up + +00:27:23.258 --> 00:27:24.393 +that returns a value. + +00:27:24.743 --> 00:27:27.413 +So we have this accepting-values tool. + +00:27:28.013 --> 00:27:31.950 +t is just choose whatever you think the default stream is. + +00:27:32.150 --> 00:27:36.088 +We're going to want our own window, t as well, + +00:27:36.688 --> 00:27:38.390 +so just a keyword argument. + +00:27:38.640 --> 00:27:43.328 +After that, we can just write things like (accept 'string). + +00:27:44.978 --> 00:27:47.883 +And I'm just doing this in, for people only listening, + +00:27:47.933 --> 00:27:50.936 +I've just done this in my ECL Slime REPL. + +00:27:50.986 --> 00:27:55.279 +Enter a string: foo bar baz. + +00:27:56.530 --> 00:27:58.849 +Alt-Enter, I think, is the shortcut to return that. + +00:27:59.150 --> 00:28:02.248 +As you can see, its first return was "foo bar baz", + +00:28:02.298 --> 00:28:04.316 +and it had second and third returns, + +00:28:04.366 --> 00:28:10.105 +string being the type, presentation type that it got, + +00:28:10.155 --> 00:28:13.739 +and t, I think, to indicate that it exited successfully. + +00:28:16.189 --> 00:28:20.916 +We can also do expression, might be more interesting. + +00:28:20.966 --> 00:28:22.189 +There are a whole bunch of these. + +00:28:26.140 --> 00:28:29.308 +clim's examples folder is pretty good. + +00:28:29.358 --> 00:28:32.294 +And the documentation, everybody's documentation, + +00:28:32.344 --> 00:28:34.713 +McCLIM's documentation, you know, + +00:28:35.413 --> 00:28:39.135 +lispworks and franz's documentation will tell you about + +00:28:39.385 --> 00:28:45.069 +the different default presentation types you can accept. + +00:28:47.969 --> 00:28:49.862 +And they're pretty intuitive and + +00:28:49.912 --> 00:28:52.464 +they're kind of very Lisp compatible, + +00:28:53.264 --> 00:28:54.266 +which everything kind of is. + +00:28:54.316 --> 00:29:00.399 +We could accept an expression. foo bar baz. + +00:29:05.350 --> 00:29:09.414 +return "foo bar baz 123" because that's what I wrote. + +NOTE Putting things together + +00:29:10.964 --> 00:29:14.570 +And now the kind of pièce de résistance + +00:29:14.820 --> 00:29:17.055 +of putting those things together. + +00:29:17.555 --> 00:29:21.326 +Let's just run over to our scratch buffer. + +00:29:22.226 --> 00:29:24.096 +Oh, or our ielm thing, right? + +00:29:24.246 --> 00:29:25.564 +That's what we're actually doing. + +00:29:25.964 --> 00:29:28.951 +So now, I think we're going to do, hang on, + +00:29:30.251 --> 00:29:32.871 +M-:. + +00:29:32.921 --> 00:29:41.313 +I think it's going to be slime-eval-save, + +00:29:41.663 --> 00:29:44.549 +because it'll eval asynchronously. + +00:29:45.849 --> 00:29:49.121 +There's a question of how to get the value out of + +00:29:49.171 --> 00:29:52.124 +the asynchronous slime evaluation. + +00:29:52.524 --> 00:29:55.761 +And so an obvious way is to yank it. + +00:29:59.661 --> 00:30:02.234 +I'm looking forward to learning from kickingvegas. + +00:30:02.284 --> 00:30:06.638 +He finally makes it stick in my brain how to... + +00:30:07.138 --> 00:30:10.559 +Options other than just starting to write a command + +00:30:10.959 --> 00:30:14.013 +in the minibuffer and then mashing Tab + +00:30:14.063 --> 00:30:16.465 +and looking at what the likely sounding results are. + +00:30:16.765 --> 00:30:21.720 +That's what I will be learning this conference, if anything. + +00:30:22.070 --> 00:30:26.558 +slime-eval-save and then, what was happening over here? + +00:30:26.958 --> 00:30:31.769 +(accepting-values (t :own-window t) (accept 'expression)). + +00:30:33.369 --> 00:30:38.319 +Kind of confusingly, slime-eval-save takes a string, + +00:30:39.169 --> 00:30:41.840 +but it works really well, I'd argue. + +00:30:41.940 --> 00:30:43.475 +I think it's about to work really well. + +00:30:45.825 --> 00:30:46.712 +Ok, this is great. + +00:30:46.762 --> 00:30:50.182 +So you can see I've used... Oh, please enter an expression. + +00:30:50.882 --> 00:30:52.117 +So we're doing an expression. + +00:30:52.167 --> 00:30:59.057 +And so let's write like (3 4/2 5/6). + +00:30:59.357 --> 00:31:00.609 +That's an expression, right? + +00:31:03.609 --> 00:31:05.797 +And now I've yanked it. + +00:31:05.847 --> 00:31:07.379 +I should have really been in *scratch*, + +00:31:07.429 --> 00:31:11.770 +because I just want to dump. Sorry, *scratch*. + +00:31:13.770 --> 00:31:15.290 +Dump whatever that did. + +00:31:16.540 --> 00:31:19.480 +Oh, yeah, and see, it kind of simplified that + +00:31:19.530 --> 00:31:20.712 +while it was reading it. + +00:31:20.762 --> 00:31:27.486 +So running in Elisp, (slime-eval-save "(accepting-values + +00:31:27.536 --> 00:31:32.557 +(t :own-window t), accept 'expression))"). + +00:31:33.157 --> 00:31:36.328 +And I got the three returns all the way + +00:31:36.378 --> 00:31:43.235 +from McCLIM to inferior-lisp to Elisp. + +00:31:43.885 --> 00:31:46.471 +3, 2, 5/6. + +00:31:46.521 --> 00:31:50.575 +Second return, it was a presentation type of expression, + +00:31:50.625 --> 00:31:52.811 +returned successfully, key. + +00:31:53.561 --> 00:31:56.679 +Yeah, so that's pretty cool. How out of time are we? + +00:31:58.530 --> 00:32:00.859 +Oh, we did this in basically half an hour. + +00:32:04.009 --> 00:32:07.209 +Maybe we could stop and assume there will be a bit under + +00:32:07.259 --> 00:32:10.796 +half an hour of interactive discussion. + +00:32:11.646 --> 00:32:15.634 +And when I also watch this and also receive suggestions, + +00:32:16.934 --> 00:32:20.071 +there will be additions and changes to make, I think. + +00:32:21.671 --> 00:32:32.617 +But can we quickly defun accept-date? + +00:32:34.667 --> 00:32:36.589 +Let's not take any arguments. + +00:32:40.239 --> 00:32:41.709 +Let's do this. + +00:32:48.409 --> 00:32:49.769 +accept-date. + +00:32:55.519 --> 00:32:58.099 +Saturday, December 7th. + +00:33:02.649 --> 00:33:04.015 +Oh, it doesn't return it. + +00:33:04.215 --> 00:33:05.518 +But it gets pretty close to returning it. + +00:33:05.568 --> 00:33:06.718 +I guess it yanks it. + +00:33:07.818 --> 00:33:18.359 +I would have to call … I'm going to say it's slime-sync, + +00:33:21.160 --> 00:33:25.370 +at which point it will resolve the slime-eval-async. + +00:33:25.670 --> 00:33:28.757 +And then I could get the first value out of + +00:33:28.807 --> 00:33:32.179 +my kill-ring pop, right? + +00:33:33.629 --> 00:33:35.046 +Does kill ring pop what I want? + +00:33:36.646 --> 00:33:39.918 +You know, you tell me in the interactive feedback, + +00:33:39.968 --> 00:33:41.720 +which should be happening in LambdaMOO. + +00:33:43.020 --> 00:33:45.559 +Well, I'll record another draft of this later + +00:33:45.609 --> 00:33:47.709 +after getting some feedback. + +00:33:48.609 --> 00:33:51.580 +Or worse to worse, this is just what you'll hear. + +00:33:52.180 --> 00:33:58.503 +Hopefully we have some questions and constructive comments. + +00:33:59.303 --> 00:34:00.255 +All right, see everybody later. + +00:34:00.305 --> 00:34:01.359 +Thank you so much for being here. + +00:34:04.470 --> 00:34:08.613 +Please do drop in to my live show + +00:34:08.663 --> 00:34:11.266 +if you're so inclined on Wednesdays + +00:34:11.316 --> 00:34:14.186 +where you're not busy with cool Emacs conferences. + +00:34:14.936 --> 00:34:16.169 +The list be go for climate. + +00:34:16.219 --> 00:34:17.572 +Thank you to everyone who helped. + +00:34:17.772 --> 00:34:18.640 +Thank you to Sacha + +00:34:18.690 --> 00:34:21.660 +for really getting me into this conference + +00:34:21.710 --> 00:34:23.428 +and kind of getting me going and + +00:34:23.678 --> 00:34:26.181 +submitting this prerecorded talk. + +00:34:27.981 --> 00:34:28.780 +See everybody later. diff --git a/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt new file mode 100644 index 00000000..a1fbcf55 --- /dev/null +++ b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt @@ -0,0 +1,26 @@ +WEBVTT + + +00:03:08.240 --> 00:05:58.719 +Vertico + +00:05:58.720 --> 00:06:46.079 +which-key + +00:06:46.080 --> 00:07:54.799 +eldoc + +00:07:54.800 --> 00:10:37.559 +Casual + +00:10:37.560 --> 00:13:33.879 +Closing remarks + +00:13:33.880 --> 00:19:00.279 +Graphical web browsing + +00:19:00.280 --> 00:20:28.239 +org-web-tools + +00:20:28.240 --> 00:40:13.360 +qutebrowser diff --git a/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt new file mode 100644 index 00000000..eca74be0 --- /dev/null +++ b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt @@ -0,0 +1,1751 @@ +WEBVTT + +00:00:00.000 --> 00:00:08.399 +I believe we are live, so hi again folks and welcome to a + +00:00:08.400 --> 00:00:12.319 +little bit of an unstructured time that we wanted to have for + +00:00:12.320 --> 00:00:15.399 +this particular EmacsConf. We have a bit of a lighter + +00:00:15.400 --> 00:00:19.239 +afternoon compared to previous years and we just thought it + +00:00:19.240 --> 00:00:23.999 +would be a nice opportunity for us and for you to join if + +00:00:24.000 --> 00:00:27.279 +you've got anything to share like you wanted maybe to have a + +00:00:27.280 --> 00:00:29.879 +talk this year but haven't had the time to submit a + +00:00:29.880 --> 00:00:32.879 +presentation well now's your time think of it more like the + +00:00:32.880 --> 00:00:36.199 +traditional workshops that Emacs Paris or Emacs Berlin + +00:00:36.200 --> 00:00:39.839 +tends to run so if you've got anything to share we've made + +00:00:39.840 --> 00:00:43.479 +sure to publish the link to this room on IRC and perhaps as + +00:00:43.480 --> 00:00:49.279 +well on the website And yeah, it's just a moment for you. If + +00:00:49.280 --> 00:00:53.399 +it's a little slow because people do not join, we might start + +00:00:53.400 --> 00:00:56.239 +chatting a little bit about Emacs Conf in general, and + +00:00:56.240 --> 00:00:59.359 +perhaps take a little bit of advance on the closing remarks + +00:00:59.360 --> 00:01:04.079 +for the day, just so that I can go to bed early. But otherwise, + +00:01:04.080 --> 00:01:10.679 +the mic is yours. + +00:01:10.680 --> 00:01:14.479 +Does any of my fellow co-organizers want to maybe join in and + +00:01:14.480 --> 00:01:19.119 +say a word? Maybe you, Corwin? + +00:01:19.120 --> 00:01:23.559 +Who, me? No, I usually just sit here quietly. You know me, + +00:01:23.560 --> 00:01:31.759 +Leo. Nothing to say to me. I see Karthik here. + +00:01:31.760 --> 00:01:35.919 +Karthik has joined the chat. We can see what Karthik has been + +00:01:35.920 --> 00:01:44.839 +up to. + +00:01:44.840 --> 00:01:53.159 +Hi, everyone. Hi. Hey, I hear you. + +00:01:53.160 --> 00:01:57.999 +Is there anything you wanted to share, Karthik? + +00:01:58.000 --> 00:02:01.879 +Nothing in particular, but if people suggest topics and + +00:02:01.880 --> 00:02:06.839 +have something to say or show off, then I'll jump in. Right, + +00:02:06.840 --> 00:02:10.639 +you're coming in as someone who wants to react to stuff, not + +00:02:10.640 --> 00:02:12.319 +someone who wants to present, but that's completely fine + +00:02:12.320 --> 00:02:15.279 +too. But that means that we are still stopped for people who + +00:02:15.280 --> 00:02:18.599 +want to chat. We're still pointing fingers at people in the + +00:02:18.600 --> 00:02:36.319 +chat, otherwise. + +00:02:36.320 --> 00:02:40.399 +Well, and if you're watching and you want to. Yep. If you, I + +00:02:40.400 --> 00:02:42.799 +was just going to say, if, uh, if you're watching the stream + +00:02:42.800 --> 00:02:45.919 +and you'd like to get involved, uh, you can join, uh, + +00:02:45.920 --> 00:02:53.599 +libera.chat on IRC and join the emacsconf-gen channel. Um, uh, or, + +00:02:53.600 --> 00:02:57.599 +uh, just, just, uh, reach out in one of those channels and, + +00:02:57.600 --> 00:03:01.359 +and we'll, we'll, we'll ship you a link to join in the BBB + +00:03:01.360 --> 00:03:05.839 +here. I'm not sure if that got auto published. I didn't see it + +00:03:05.840 --> 00:03:08.239 +on the website. + +NOTE Vertico + +00:03:08.240 --> 00:03:15.239 +I can suggest a topic, since many people have demoed or used + +00:03:15.240 --> 00:03:20.119 +transient in this conf. I was wondering if someone has any + +00:03:20.120 --> 00:03:25.639 +interesting uses for transient. + +00:03:25.640 --> 00:03:28.479 +It's an interesting topic, sadly one in which I'm not going + +00:03:28.480 --> 00:03:31.839 +to be personally able to participate in because I'm still + +00:03:31.840 --> 00:03:37.199 +old school. It took me, you know, the VertiCo stack. Did we + +00:03:37.200 --> 00:03:40.359 +actually present something on vertico at EmacsConf? I'm not + +00:03:40.360 --> 00:03:44.439 +sure, but it's a completion engine in separate packages, + +00:03:44.440 --> 00:03:49.279 +very similar to what people may be more familiar with, i.e. + +00:03:49.280 --> 00:03:55.199 +Ivy, Helm, ido, all those tools. But I'm old school and I + +00:03:55.200 --> 00:03:59.919 +still use Hydra when it comes to interaction. But I've been + +00:03:59.920 --> 00:04:05.159 +meaning to transition into Transient at some point and I'd + +00:04:05.160 --> 00:04:09.159 +actually be quite interested in people sharing how they've + +00:04:09.160 --> 00:04:13.199 +been able to use Transient to supplement their interfaces. + +00:04:13.200 --> 00:04:17.959 +but I'm obviously a big user as I think most people would be in + +00:04:17.960 --> 00:04:25.679 +this room and on live viewers. The Git, I use it plenty and + +00:04:25.680 --> 00:04:29.319 +it's a wonderful interface and I wish I could develop + +00:04:29.320 --> 00:04:33.239 +similar interfaces for my own packages that I manage. So + +00:04:33.240 --> 00:04:36.159 +maybe at some point. But apparently part of the discussion I + +00:04:36.160 --> 00:04:40.359 +think revolves around the fact that transients might be a + +00:04:40.360 --> 00:04:43.999 +little hard to approach for people who are perhaps used to + +00:04:44.000 --> 00:04:50.639 +the simplicity of a Hydra set up with aboabo's packages. So, + +00:04:50.640 --> 00:04:52.919 +if anyone has got anything to say about this, you're more + +00:04:52.920 --> 00:04:57.639 +than welcome to join us on BBB. You can also chat it up on IRC + +00:04:57.640 --> 00:05:01.759 +and we'll try to give voice to the lines you write and we might + +00:05:01.760 --> 00:05:05.599 +be able to react. Otherwise, I suggest if we got a call in. + +00:05:05.600 --> 00:05:07.799 +Although that's where I was going to take it to. I think + +00:05:07.800 --> 00:05:11.759 +that's a perfect question. Because for once, although + +00:05:11.760 --> 00:05:16.959 +obviously any of us can probably talk about how interesting + +00:05:16.960 --> 00:05:20.039 +it is at some length, it's not something that Leo and I, + +00:05:20.040 --> 00:05:26.559 +normally such loquacious people, have any real insight to. + +00:05:26.560 --> 00:05:31.039 +So kind of pick up the phone, call in, jump on the BBB, or + +00:05:31.040 --> 00:05:35.399 +through your comments in IRC, exactly as Leo says. Love to, + +00:05:35.400 --> 00:05:38.439 +love to have, uh, invite more participation in the + +00:05:38.440 --> 00:05:41.759 +discussion and thinking about how to answer that. I myself, + +00:05:41.760 --> 00:05:44.199 +uh, you know, jump into my own workflow and I'd start + +00:05:44.200 --> 00:05:49.359 +thinking about, oh, well, what is working for me so well, I + +00:05:49.360 --> 00:05:58.719 +haven't dug into that sort of where I take the question. + +NOTE which-key + +00:05:58.720 --> 00:06:02.039 +which-key actually is the direct answer to that, right? For + +00:06:02.040 --> 00:06:05.999 +me, that particular package, which seems to come up a lot in + +00:06:06.000 --> 00:06:09.719 +sort of help-adjacent forums as being a discovery tool, a + +00:06:09.720 --> 00:06:15.519 +way to learn different bindings. I self-identify as being + +00:06:15.520 --> 00:06:19.559 +kind of on a path of memorizing all the keystrokes I'm going + +00:06:19.560 --> 00:06:23.959 +to care about and how to find ones that I, it would have been + +00:06:23.960 --> 00:06:27.559 +convenient if I cared more about before today, right? So + +00:06:27.560 --> 00:06:32.079 +it's, for me, a lot of Emacs's power is the, you know, + +00:06:32.080 --> 00:06:35.159 +whatever brings to me the knowledge of what I should have + +00:06:35.160 --> 00:06:39.519 +done a moment ago, need to do, you know, how to do what I need to + +00:06:39.520 --> 00:06:46.079 +do next and so on. + +NOTE eldoc + +00:06:46.080 --> 00:06:49.999 +I'll also be a user of which-key here and all the fancy tools + +00:06:50.000 --> 00:06:53.799 +like eldoc which provides you in your modeline the signature + +00:06:53.800 --> 00:06:56.599 +of the function you're currently writing such as if you're + +00:06:56.600 --> 00:06:59.959 +writing an elist function but you've suddenly forgotten + +00:06:59.960 --> 00:07:03.519 +which is the first argument which is the second argument + +00:07:03.520 --> 00:07:07.639 +usually you have if you stay inside the function it will show + +00:07:07.640 --> 00:07:10.839 +in the modline what the arguments are supposed to be and what + +00:07:10.840 --> 00:07:13.599 +their names are so that it's actually pretty useful. And you + +00:07:13.600 --> 00:07:16.399 +get similar things if you're writing other languages, like + +00:07:16.400 --> 00:07:19.999 +I write Go for a living, and it's always good to have the + +00:07:20.000 --> 00:07:22.599 +signature appears in the model line whenever you're + +00:07:22.600 --> 00:07:28.199 +writing the start of a function. So I'm seeing, I'll read out + +00:07:28.200 --> 00:07:34.919 +a couple comments here. I just, I note the, you know, use of + +00:07:34.920 --> 00:07:38.559 +transient as a bridge to Elisp, especially if you don't know + +00:07:38.560 --> 00:07:42.519 +it well, you're not interested in learning it, even + +00:07:42.520 --> 00:07:48.759 +perhaps. I've certainly run into that. You know, oh, yuck, + +00:07:48.760 --> 00:07:51.799 +Elisp. No, I'm doing fine with Customize or whatever works + +00:07:51.800 --> 00:07:54.799 +for you, right? That's a lot of the Emacs spirit. So I hear + +NOTE Casual + +00:07:54.800 --> 00:08:00.879 +that. Uh, and then, and that brings up casual, which, uh, + +00:08:00.880 --> 00:08:04.599 +I've seen a lot of discussion of personally, and that, that + +00:08:04.600 --> 00:08:09.719 +looks, uh, you know, uh, it's an, all of these types of things + +00:08:09.720 --> 00:08:12.879 +like org actually, which we've been talking a lot about this + +00:08:12.880 --> 00:08:17.919 +weekend. you know, bring together a lot of functionality + +00:08:17.920 --> 00:08:21.039 +kind of cross-cuttingly across Emacs, all the different + +00:08:21.040 --> 00:08:26.079 +languages that we can figure out how to view nicely in Emacs + +00:08:26.080 --> 00:08:29.519 +will, you know, fit into some sort of, you know, kind of + +00:08:29.520 --> 00:08:34.759 +literate format to talk about. code that needs to span a lot + +00:08:34.760 --> 00:08:40.639 +of languages for whatever reason, right? So I guess my bite + +00:08:40.640 --> 00:08:47.759 +at the apple there. Yeah, casual's neat and so is transient. + +00:08:47.760 --> 00:08:52.559 +I haven't... I haven't for myself... I've seen some comments in + +00:08:52.560 --> 00:08:56.439 +chat throughout the weekend good discussion around hey + +00:08:56.440 --> 00:08:59.639 +that's you know it's kind of hard to learn how to use how do I + +00:08:59.640 --> 00:09:01.999 +fit this into my use case how do I think about things in the + +00:09:02.000 --> 00:09:07.079 +same terms that transients abstractions do so that you know + +00:09:07.080 --> 00:09:10.359 +to the extent I need to I build my program in terms of those + +00:09:10.360 --> 00:09:14.759 +same abstractions or to the extent that isn't necessary or + +00:09:14.760 --> 00:09:18.479 +helpful just so that it's natural for me to set up my + +00:09:18.480 --> 00:09:22.399 +customized variables so that my saved routines just do the + +00:09:22.400 --> 00:09:25.639 +right thing or my read routine spectrum in the right place or + +00:09:25.640 --> 00:09:30.119 +whatever, tying the room together, sorts of integration. I + +00:09:30.120 --> 00:09:34.119 +haven't run into that because for me, I'm on this journey of + +00:09:34.120 --> 00:09:36.639 +learning the keys was my point. I'm not actually preaching + +00:09:36.640 --> 00:09:41.839 +for that's the way to use Emacs, quite the reverse. + +00:09:41.840 --> 00:09:42.199 +away. + +00:09:42.200 --> 00:09:50.839 +All right, I see that some people are joining us on the BBB, so + +00:09:50.840 --> 00:09:53.559 +if you've got a mic on, we're gonna assume that you want to be + +00:09:53.560 --> 00:09:56.879 +chatting, but don't hesitate to interrupt us if you've got + +00:09:56.880 --> 00:10:00.559 +anything to contribute, meaningful otherwise, if you just + +00:10:00.560 --> 00:10:04.999 +want to chat it up with us, we are also here for this. Yeah, and + +00:10:05.000 --> 00:10:07.999 +to do the radio announcer thing a little harder too. Like, + +00:10:08.000 --> 00:10:10.679 +you know, I guess in my mind, I'm thinking of this as a call-in + +00:10:10.680 --> 00:10:13.679 +format. Just come over and grab a microphone and talk about + +00:10:13.680 --> 00:10:16.319 +your thoughts and whether it's something that Leo or I are + +00:10:16.320 --> 00:10:19.959 +saying, or Sacha, that you've been pretty quiet over there, + +00:10:19.960 --> 00:10:24.879 +that are setting you going, or you just kind of walk into the + +00:10:24.880 --> 00:10:27.719 +room with, hey guys, why aren't we talking about, or let's + +00:10:27.720 --> 00:10:31.119 +talk more about, or thoughts from the weekend, which as Leo + +00:10:31.120 --> 00:10:35.079 +mentioned, is kind of where we're gonna where we in our own + +00:10:35.080 --> 00:10:37.559 +minds are sort of sitting, walking into the room. + +NOTE Closing remarks + +00:10:37.560 --> 00:10:49.759 +Perhaps what we could do is I mentioned that we could perhaps + +00:10:49.760 --> 00:10:51.999 +take a little bit of advance on the closing remark. I know it + +00:10:52.000 --> 00:10:54.719 +feels weird to be closing a conference that has not yet + +00:10:54.720 --> 00:10:57.639 +finished because we still have many talks in the afternoon. + +00:10:57.640 --> 00:11:01.359 +If I count, we have one, two, three, four, five talks. Well, + +00:11:01.360 --> 00:11:05.759 +actually, no, four. So there's still plenty to go. But + +00:11:05.760 --> 00:11:10.199 +since, you know, you know, I'm still in Europe and it's still + +00:11:10.200 --> 00:11:14.839 +pretty tough to maintain composure until 11. Might be a good + +00:11:14.840 --> 00:11:18.559 +time for us maybe to read over the closing remarks. How do you + +00:11:18.560 --> 00:11:21.079 +feel, Corwin, about this and Sacha, how do you feel about + +00:11:21.080 --> 00:11:27.239 +this? Yep, that'd be cool. Sacha? Fine with me. People can + +00:11:27.240 --> 00:11:30.919 +continue to share thoughts and ideas in the chat or in the + +00:11:30.920 --> 00:11:34.679 +Etherpad and we can go through the closing remarks. You want + +00:11:34.680 --> 00:11:40.159 +to share the sun-close? Uh, I do have them. I'm not sure. So you + +00:11:40.160 --> 00:11:43.199 +did copy over. Okay, good. I can kind of rotate the screen + +00:11:43.200 --> 00:11:47.519 +between them if that works. And I'll try to jump over to chat a + +00:11:47.520 --> 00:11:52.119 +little more. Uh, you know, sure. I'm putting the link on BBB + +00:11:52.120 --> 00:11:54.759 +just in case people in there wants to follow. And also for + +00:11:54.760 --> 00:11:58.079 +you, Corwin, if you want to open it up more quickly. Yeah, + +00:11:58.080 --> 00:12:01.359 +that's going to be easier. Thank you. + +00:12:01.360 --> 00:12:08.359 +Pretty sure I have the Sunday close pad here, but I'll take + +00:12:08.360 --> 00:12:09.679 +your link, sir. + +00:12:09.680 --> 00:12:37.839 +Um, I mean, I've got my org channel. Sure. I mean, Elephant + +00:12:37.840 --> 00:12:40.479 +Ergo, if you want to jump in, you know, we were suggesting + +00:12:40.480 --> 00:12:45.319 +doing the Saturday, Sunday close, sorry. Instead of having + +00:12:45.320 --> 00:12:47.999 +people chat, but if you have something to say right now, feel + +00:12:48.000 --> 00:12:50.239 +free to jump in. Although you do not have your microphone on, + +00:12:50.240 --> 00:12:57.599 +you would need to join the audio in order to chat. Yep, and you + +00:12:57.600 --> 00:13:01.919 +can also use any of the private message type of features. Did + +00:13:01.920 --> 00:13:05.639 +you guys want me to bring up the pad here? I did pull it up. Oh, + +00:13:05.640 --> 00:13:12.359 +well, I got it already. Understood. Okay, cool. So I think + +00:13:12.360 --> 00:13:14.839 +Elephant Ergonomics is currently switching to the + +00:13:14.840 --> 00:13:18.239 +microphone so that they may ask a question. So I suggest we + +00:13:18.240 --> 00:13:18.999 +wait a little bit. + +00:13:19.000 --> 00:13:24.759 +Elephant Ergonomics, yes, right now, you figured it out. + +00:13:24.760 --> 00:13:30.119 +Hi. Is this working? Oh, wow. Cool. Okay. Long time + +00:13:30.120 --> 00:13:33.879 +listener. First time on the show. Wow. + +NOTE Graphical web browsing + +00:13:33.880 --> 00:13:39.839 +Okay. Well, I shouldn't let my nerves get the best of me now + +00:13:39.840 --> 00:13:44.839 +because I got it all set up. So basically the thing that I've + +00:13:44.840 --> 00:13:50.519 +been thinking about because I've had a a handful of thoughts + +00:13:50.520 --> 00:13:55.719 +related to graphical web browsing. Because I know that + +00:13:55.720 --> 00:14:00.999 +that's a point of friction for me, for sure. I don't know how + +00:14:01.000 --> 00:14:04.599 +much other people experience that. I know that I've + +00:14:04.600 --> 00:14:08.199 +certainly heard murmurs about it. But I've been + +00:14:08.200 --> 00:14:14.239 +speculating about a couple of thoughts about that recently + +00:14:14.240 --> 00:14:18.239 +for some of the stuff that can be done in order to get like the + +00:14:18.240 --> 00:14:22.719 +sort of invasive graphical JavaScript, giant + +00:14:22.720 --> 00:14:27.639 +unmanageable spec sort of version of the browser working + +00:14:27.640 --> 00:14:31.359 +inside of Emacs, you know, in addition to, you know, the much + +00:14:31.360 --> 00:14:33.439 +more manageable EWW kind of thing. + +00:14:33.440 --> 00:14:42.919 +So yeah, basically as part of my rambling, I had basically + +00:14:42.920 --> 00:14:47.719 +two major thoughts for strategies, because God knows this is + +00:14:47.720 --> 00:14:52.519 +way too big of a thing for me to tackle just for me. And I have + +00:14:52.520 --> 00:14:55.759 +been kind of thinking, you know, where do I go about getting + +00:14:55.760 --> 00:14:59.559 +started? And I think maybe that would probably just look + +00:14:59.560 --> 00:15:03.959 +like maybe, you know, pitching ideas that have been on the + +00:15:03.960 --> 00:15:08.119 +back of my mind. + +00:15:08.120 --> 00:15:14.919 +The first of which is that I stumbled upon uh, this + +00:15:14.920 --> 00:15:20.119 +application while ago called browsh. Uh, it's a, I'm going to + +00:15:20.120 --> 00:15:25.127 +go ahead and post that in the chat. Um, and just the, uh, + +00:15:25.128 --> 00:15:26.479 +emacsconf-gen. + +00:15:26.480 --> 00:15:31.479 +So let's see here. It's not going. + +00:15:31.480 --> 00:15:43.079 +Oh, trying to light space. Cool. So this is a, I have no + +00:15:43.080 --> 00:15:46.319 +personal involvement with this project. The person that + +00:15:46.320 --> 00:15:50.919 +developed this does not know I exist, but I stumbled upon + +00:15:50.920 --> 00:15:54.479 +this in the wild. And what's really quite interesting about + +00:15:54.480 --> 00:15:58.879 +it is that it will run, it's effectively a headless browser + +00:15:58.880 --> 00:16:04.839 +in the background and then convert this into blocks of text + +00:16:04.840 --> 00:16:07.959 +for the sake of rendering inside a terminal. This is + +00:16:07.960 --> 00:16:12.479 +especially helpful in the case where you can run the daemon + +00:16:12.480 --> 00:16:15.159 +that's actually responsible for the headless browser + +00:16:15.160 --> 00:16:20.599 +instance on a completely different box than the one that + +00:16:20.600 --> 00:16:25.879 +you're actually running your shell on. And you have this + +00:16:25.880 --> 00:16:30.959 +complete separation between the I/O and the actual handling + +00:16:30.960 --> 00:16:36.319 +of all of the complex, kind of opaque, really unmanageable, + +00:16:36.320 --> 00:16:39.959 +big browser stuff. I'm thinking that there's definitely + +00:16:39.960 --> 00:16:44.039 +something that we could consider cannibalizing here, + +00:16:44.040 --> 00:16:44.599 +either for + +00:16:44.600 --> 00:16:51.959 +one of the different rendering paradigms that fits inside + +00:16:51.960 --> 00:16:57.839 +of Emacs more cleanly, especially either like the SVG + +00:16:57.840 --> 00:17:02.679 +renderer. Or again, trying to figure out how to break it into + +00:17:02.680 --> 00:17:06.479 +blocks somehow, but I feel like there's definitely. + +00:17:06.480 --> 00:17:11.559 +Something very Emacs-y about the strategy that I would love to + +00:17:11.560 --> 00:17:16.079 +consider, especially for someone more technically + +00:17:16.080 --> 00:17:20.359 +qualified than I. To consider, I would love to tackle this. + +00:17:20.360 --> 00:17:24.959 +Given that I have the time, but I didn't want to sit on this + +00:17:24.960 --> 00:17:29.119 +idea. On my own on the basis that, you know, there's a lot + +00:17:29.120 --> 00:17:33.479 +really qualified people here and I figured that. You know, + +00:17:33.480 --> 00:17:36.519 +someone that's a little bit more frustrated than me about + +00:17:36.520 --> 00:17:39.719 +this could very well. Pick this up and run with it. + +00:17:39.720 --> 00:17:46.599 +So I wanted to suggest that I also wanted to suggest the + +00:17:46.600 --> 00:17:53.759 +prospect of... I found a couple of just completely separately + +00:17:53.760 --> 00:17:57.899 +as a strategy to + +00:17:57.900 --> 00:18:07.000 +the ability to re-render outputted DOM content + +00:18:07.001 --> 00:18:10.417 +that would be rendered by, again, a + +00:18:10.418 --> 00:18:13.599 +full-fledged browser, probably in a headless, + +00:18:13.600 --> 00:18:15.309 +a sort of instance and then + +00:18:15.310 --> 00:18:20.530 +converting that DOM content to SVG, + +00:18:20.531 --> 00:18:22.791 +which we could then render inside of Emacs + +00:18:22.792 --> 00:18:25.319 +either piecewise or as + +00:18:25.320 --> 00:18:31.279 +the entire document. And I feel that that could be another + +00:18:31.280 --> 00:18:36.719 +strategy that we could perhaps consider as something that + +00:18:36.720 --> 00:18:41.399 +we can do for, you know, headless processing, and then + +00:18:41.400 --> 00:18:43.839 +having the Emacs rendering engine actually responsible + +00:18:43.840 --> 00:18:52.759 +for the display and the I/O. So yeah, I just wanted to suggest a + +00:18:52.760 --> 00:19:00.279 +couple of those sort of ideas I've been sitting on. A couple + +NOTE org-web-tools + +00:19:00.280 --> 00:19:03.479 +of things related to that stuff would be org-web-tools, I + +00:19:03.480 --> 00:19:07.519 +think is what it's called, from alphapapa. It'll allow you + +00:19:07.520 --> 00:19:12.359 +to download a webpage into an Org Mode document. Or if you + +00:19:12.360 --> 00:19:16.519 +wanted to use a web browser that would have key bindings, + +00:19:16.520 --> 00:19:20.759 +primarily, you would want to use the next browser or + +00:19:20.760 --> 00:19:27.719 +qutebrowser, where they're more of meant to have their settings + +00:19:27.720 --> 00:19:33.319 +saved in a text document. And in the case of Next, it's + +00:19:33.320 --> 00:19:39.839 +written in Common Lisp and is very deeply inspired by Emacs. + +00:19:39.840 --> 00:19:43.199 +So I'll just break in what is a great discussion briefly to + +00:19:43.200 --> 00:19:45.959 +say. If you're just joining us, you're watching the Emacs + +00:19:45.960 --> 00:19:50.479 +conference. We're doing a brief open mic session. And we've + +00:19:50.480 --> 00:19:56.119 +been joined, we have... Sorry, I was just going to introduce + +00:19:56.120 --> 00:20:13.039 +you, Plasma. Sorry. Nasty feedback from you, Sacha. Sorry. + +00:20:13.040 --> 00:20:17.719 +We'll definitely have to check out integration for those + +00:20:17.720 --> 00:20:22.559 +two browsers. You know, this is my first time taking a look at + +00:20:22.560 --> 00:20:28.239 +web tools. This could definitely help me. + +NOTE qutebrowser + +00:20:28.240 --> 00:20:32.879 +I've been using qutebrowser really persistently. It has + +00:20:32.880 --> 00:20:35.199 +dramatically improved my browser experience, but I'm + +00:20:35.200 --> 00:20:39.559 +still definitely having that last little bit of context + +00:20:39.560 --> 00:20:43.359 +switch friction that I would love to make disappear. Next + +00:20:43.360 --> 00:20:47.439 +might be part of the recipe, but I definitely think that, you + +00:20:47.440 --> 00:20:51.199 +know, certainly the goal for me is that I would love to see it + +00:20:51.200 --> 00:20:56.839 +inside Emacs itself. But this is, this definitely + +00:20:56.840 --> 00:21:00.319 +represents a big piecewise improvement I'm going to have to + +00:21:00.320 --> 00:21:05.679 +pursue. So thank you. + +00:21:05.680 --> 00:21:09.439 +So I think that that intersects some some several + +00:21:09.440 --> 00:21:11.679 +conversations that I think we've heard throughout the + +00:21:11.680 --> 00:21:17.879 +weekend kind of touching on the idea of, you know, baking our + +00:21:17.880 --> 00:21:22.759 +baking our thoughts into the core of Emacs right. and + +00:21:22.760 --> 00:21:27.519 +realizing, oh yeah, this is a pattern other people or a + +00:21:27.520 --> 00:21:30.159 +problem other people are running into or a way that other + +00:21:30.160 --> 00:21:38.199 +people work or a way that people want Emacs to look or just + +00:21:38.200 --> 00:21:40.479 +starts me thinking about like alternate key binding + +00:21:40.480 --> 00:21:43.639 +packages, which over the last few years, I feel like we've + +00:21:43.640 --> 00:21:47.159 +seen just a ton of options in a space that had been somewhat + +00:21:47.160 --> 00:21:50.439 +dormant, right? There was evil and everything else. And now + +00:21:50.440 --> 00:21:54.759 +there is a lot of granularity in my mind to everything else. + +00:21:54.760 --> 00:21:57.039 +So although I'm not using any of these things, I think I've + +00:21:57.040 --> 00:22:02.039 +bumped into them a lot. A couple of other related topics in + +00:22:02.040 --> 00:22:05.359 +case that jogs anyone's interest to jump in and join the + +00:22:05.360 --> 00:22:16.039 +discussion. Yeah, thanks. Thanks for the comments. + +00:22:16.040 --> 00:22:18.679 +Any other person wants to share something in the room + +00:22:18.680 --> 00:22:22.159 +currently? I'm seeing plenty of familiar names, so this is + +00:22:22.160 --> 00:22:26.399 +an invitation for those who I haven't heard so far to come in + +00:22:26.400 --> 00:22:30.479 +and chat. + +00:22:30.480 --> 00:22:34.839 +And I mentioned to a comment I see from wasamasa saying, I've + +00:22:34.840 --> 00:22:39.399 +been experimenting with using some crap to review ELIS + +00:22:39.400 --> 00:22:43.239 +security issues. That's something. + +00:22:43.240 --> 00:22:48.999 +you want to leave. I'm not sure that is. Yeah. I'm not sure if + +00:22:49.000 --> 00:22:52.599 +Wes and Marcel wants to deprive themselves of, well, + +00:22:52.600 --> 00:22:56.559 +actually unmuted yourself. So please go. What? I've only + +00:22:56.560 --> 00:23:00.959 +got my name, that's all. I was just reading out your comment + +00:23:00.960 --> 00:23:06.199 +from the chat. Yeah. Just jump in on any topic, honestly. + +00:23:06.200 --> 00:23:09.599 +Okay. I thought like, it's like an invitation for people to + +00:23:09.600 --> 00:23:12.519 +talk what, you know, they've recently started trying to do + +00:23:12.520 --> 00:23:15.359 +in Emacs. That's exactly right. A hundred percent. Okay. + +00:23:15.360 --> 00:23:22.519 +Okay. So, well, I do review security things for work. And one + +00:23:22.520 --> 00:23:25.839 +colleague has been like bugging me all the time about, hey, + +00:23:25.840 --> 00:23:28.279 +try semgrep. It's pretty cool if you have like, you know, + +00:23:28.280 --> 00:23:32.119 +decent rules to review stuff. And I postponed it for the + +00:23:32.120 --> 00:23:35.879 +longest time. And then I thought, actually, you know what, + +00:23:35.880 --> 00:23:38.959 +which would really make sense to like try out whether it even + +00:23:38.960 --> 00:23:44.039 +works for elisp source code review at all. And the answer is + +00:23:44.040 --> 00:23:47.119 +somewhat like apparently they've added LISP support, + +00:23:47.120 --> 00:23:50.439 +which is pretty cool. So it seems it's like best developed + +00:23:50.440 --> 00:23:55.279 +for like reviewing closure code. There are no rules to my + +00:23:55.280 --> 00:23:59.599 +knowledge. I started writing some and yeah, it does work. I + +00:23:59.600 --> 00:24:02.999 +have no idea how many, how many other people are trying to + +00:24:03.000 --> 00:24:05.799 +actively look into Emacs security issues. It feels to me + +00:24:05.800 --> 00:24:07.919 +like it's like a handful at best, like I don't know, + +00:24:07.920 --> 00:24:13.279 +somewhere between three and five people maybe. And yeah. If + +00:24:13.280 --> 00:24:17.159 +anyone knows any rule sets for making this easier, I would be + +00:24:17.160 --> 00:24:20.999 +very interested, because then we'd have a common place to + +00:24:21.000 --> 00:24:24.799 +share them. Maybe it'd be appropriate for me to jump back in + +00:24:24.800 --> 00:24:28.159 +here and just share that, you know, you're somebody that I + +00:24:28.160 --> 00:24:31.639 +definitely trust with these issues. We could talk in the + +00:24:31.640 --> 00:24:36.039 +abstract at least about places where, you know, Emacs, not + +00:24:36.040 --> 00:24:38.599 +necessarily the Emacs team, but maybe more the Free + +00:24:38.600 --> 00:24:41.839 +Software Society has said, oh, somebody reached out to us + +00:24:41.840 --> 00:24:44.879 +about this possible concern. Can you dig into that and find + +00:24:44.880 --> 00:24:48.279 +out if there's, you know, any reason to be concerned and then + +00:24:48.280 --> 00:24:52.279 +find the right people on the Emacs project team and work with + +00:24:52.280 --> 00:24:54.599 +that. So I know that this is something you've been working on + +00:24:54.600 --> 00:24:57.519 +actually for, I don't want to say several years, but more + +00:24:57.520 --> 00:25:05.719 +than a year. + +00:25:05.720 --> 00:25:08.959 +All right. Any other person wants to share something? + +00:25:08.960 --> 00:25:12.519 +Otherwise we have about 15 minutes until the next talk is due + +00:25:12.520 --> 00:25:15.239 +to go live, which would leave us some time to do the closing + +00:25:15.240 --> 00:25:15.559 +remarks. + +00:25:15.560 --> 00:25:27.359 +Let's wait just a bit, let's give people 30 seconds maybe to + +00:25:27.360 --> 00:25:31.359 +connect their thoughts and share them on IRC or to join the + +00:25:31.360 --> 00:25:36.079 +BBB. So in the spirit of, you know, get it out of the way so that + +00:25:36.080 --> 00:25:39.479 +we can let people go to bed and not do our usual rambling two + +00:25:39.480 --> 00:25:42.359 +hours of open remarks where we regret that we didn't turn + +00:25:42.360 --> 00:25:45.279 +them into the open mic. Right. So hopefully everyone's + +00:25:45.280 --> 00:25:47.959 +getting the message that, you know, we love to talk about + +00:25:47.960 --> 00:25:50.999 +Emacs and if you've been to prior conferences, you're + +00:25:51.000 --> 00:25:52.959 +probably, and you've watched through the closing + +00:25:52.960 --> 00:25:55.879 +ceremonies, you may have noticed that we do, you know, We + +00:25:55.880 --> 00:25:59.239 +have a lot of fun talking about all the different ideas that + +00:25:59.240 --> 00:26:03.959 +have come forward here. And so this is realizing that and + +00:26:03.960 --> 00:26:08.239 +also realizing that our habit of talking for several hours + +00:26:08.240 --> 00:26:12.879 +as part of closing the conference is maybe keeping some of us + +00:26:12.880 --> 00:26:19.839 +up at night and jobs and things. So in that spirit, I just want + +00:26:19.840 --> 00:26:23.599 +to throw out And I you know, I like to talk about this at least + +00:26:23.600 --> 00:26:28.679 +once a year. I mean isn't here and I tend to defer to him It's so + +00:26:28.680 --> 00:26:31.679 +I'll also use this opportunity to say gosh. I miss that guy + +00:26:31.680 --> 00:26:38.239 +and thanks so much For all of you've done over the years. Yeah + +00:26:38.240 --> 00:26:41.279 +I'm sorry, you can't make it this year and I'm actually have + +00:26:41.280 --> 00:26:44.799 +personally having a lot of fun covering for me for you It + +00:26:44.800 --> 00:26:48.079 +gives me a A lot of little things that I've picked up how to do, + +00:26:48.080 --> 00:26:50.919 +I'm actually getting to do a little bit of. So fun stuff for + +00:26:50.920 --> 00:26:58.879 +me, but miss you. And in that spirit and thinking of you, + +00:26:58.880 --> 00:27:05.599 +Amin, I'll also say that, and that's Bandali, if you know him + +00:27:05.600 --> 00:27:06.599 +from IRC more. + +00:27:06.600 --> 00:27:12.399 +He would want us to make sure that we talk about the Free + +00:27:12.400 --> 00:27:16.999 +Software Foundation and the fact that that is giving to the + +00:27:17.000 --> 00:27:19.719 +Free Software Foundation as the primary means to support + +00:27:19.720 --> 00:27:23.759 +development of Emacs and other GNU packages. We, as a + +00:27:23.760 --> 00:27:26.399 +project, are part of the giving... Somebody help me with the + +00:27:26.400 --> 00:27:31.199 +name of the project. It's not in the... I'll just go back to it + +00:27:31.200 --> 00:27:39.439 +and even show it, right? So, we are part of the giving + +00:27:39.440 --> 00:27:45.359 +together or working together. A program, and you can, you + +00:27:45.360 --> 00:27:48.399 +can get through that. There may be some matching going on. + +00:27:48.400 --> 00:27:52.359 +There's a fundraiser also that happens to typically run + +00:27:52.360 --> 00:27:57.719 +during the conference currently. and I encourage you to + +00:27:57.720 --> 00:28:03.039 +become a member and there's some newer, lower amount. Also, + +00:28:03.040 --> 00:28:06.599 +you can get directly directed through this program to the + +00:28:06.600 --> 00:28:09.599 +Emacs conference. For the first time this year, we're + +00:28:09.600 --> 00:28:13.679 +actually using those funds. Sacha went and did a bunch of + +00:28:13.680 --> 00:28:17.879 +work to enable us to use some more scalable purchased + +00:28:17.880 --> 00:28:20.719 +infrastructure that's different from what the FSF just + +00:28:20.720 --> 00:28:23.359 +provides us, for example. We use a lot of different things + +00:28:23.360 --> 00:28:27.799 +and thanks also to Pearl and others who are providing us + +00:28:27.800 --> 00:28:30.639 +infrastructure, as well as Sacha for just the amazing work + +00:28:30.640 --> 00:28:38.279 +that you do there. And as well to people that are giving in + +00:28:38.280 --> 00:28:41.679 +some other way, such as your time contributed to the EMAX + +00:28:41.680 --> 00:28:45.439 +project, to the many cool packages I myself take advantage + +00:28:45.440 --> 00:28:49.319 +of. And all of that, don't please feel pressured to break the + +00:28:49.320 --> 00:28:53.839 +piggy bank when that's a bad idea to help out, but it's help + +00:28:53.840 --> 00:29:02.119 +when you can. All right, how about we start from the top of the + +00:29:02.120 --> 00:29:04.359 +closing remarks so that we make sure that we don't forget + +00:29:04.360 --> 00:29:08.119 +anyone or anything. So if you could scroll just a little bit + +00:29:08.120 --> 00:29:10.079 +over, Corbyn, on your screen. + +00:29:10.080 --> 00:29:21.119 +I think you went on the right one. It's a little small for me to + +00:29:21.120 --> 00:29:22.719 +see which one it is. + +00:29:22.720 --> 00:29:29.919 +No, I think it's the other pad. You had it open right before. I + +00:29:29.920 --> 00:29:34.439 +think it's Sunday Close, the other tab on your browser. I + +00:29:34.440 --> 00:29:37.159 +managed to meet myself in BBB. That's what happened there. + +00:29:37.160 --> 00:29:42.879 +Okay, sorry. So here, and you wanted up or down? I wanted up, + +00:29:42.880 --> 00:29:47.759 +just as soon as you see the dashed line. Run through these + +00:29:47.760 --> 00:29:52.039 +instead of Corwin getting his stuff out of the way. Word. + +00:29:52.040 --> 00:29:56.599 +Yeah, but I'll make sure to skip over the stuff that you + +00:29:56.600 --> 00:30:00.599 +already mentioned. But yes, let's try to preempt a little + +00:30:00.600 --> 00:30:05.599 +bit the end of the conference for the reasons I've mentioned + +00:30:05.600 --> 00:30:10.359 +before. I get first to thank you all so much for being part of + +00:30:10.360 --> 00:30:15.759 +Emacs Conf 2024. Obviously, we still have a handful more + +00:30:15.760 --> 00:30:19.039 +talks to go this afternoon, but thanks again for showing up. + +00:30:19.040 --> 00:30:24.039 +We've had steady numbers for the last five years or so. This + +00:30:24.040 --> 00:30:28.199 +is my fifth year. hosting the general track and we've always + +00:30:28.200 --> 00:30:32.399 +averaged between 150 to 200 viewers which is amazing when + +00:30:32.400 --> 00:30:38.279 +you just think about it but we We are accruing plenty more + +00:30:38.280 --> 00:30:41.759 +views over the years because everyone is watching either on + +00:30:41.760 --> 00:30:44.959 +the website or on YouTube or on PeerTube. So thank you so much + +00:30:44.960 --> 00:30:48.079 +for everyone taking the time to, well, first come to the + +00:30:48.080 --> 00:30:51.879 +show. To watch the video, to share it, absolutely. Yes, + +00:30:51.880 --> 00:30:53.999 +because we've just talked about viewers. If you're + +00:30:54.000 --> 00:30:57.119 +watching this a year from now, we're thanking you for the + +00:30:57.120 --> 00:31:00.999 +view. We're talking to you. If you're mentioning a video of + +00:31:01.000 --> 00:31:06.159 +the Society Maths Conference, Thanks for doing that. + +00:31:06.160 --> 00:31:10.319 +That's what makes this worth it. The thing that we have to + +00:31:10.320 --> 00:31:14.239 +talk about for hours after it ends every year, sorry about + +00:31:14.240 --> 00:31:18.399 +that if it's been a disruption for your schedule, is the + +00:31:18.400 --> 00:31:21.199 +sense of community that we feel when we come together and + +00:31:21.200 --> 00:31:24.319 +watch all the different chats running on all these. I have a + +00:31:24.320 --> 00:31:27.959 +bunch of screens going so that I can see all the different + +00:31:27.960 --> 00:31:32.439 +chats and we all have a different way of connecting to all the + +00:31:32.440 --> 00:31:34.759 +different conversations going on. It's just a lot of + +00:31:34.760 --> 00:31:41.879 +energy. But at the end of the day, it's about helping people + +00:31:41.880 --> 00:31:46.399 +connect with the other groups and subgroups of people that + +00:31:46.400 --> 00:31:48.759 +are excited about the same stuff using Emacs to get there. + +00:31:48.760 --> 00:31:55.959 +Yeah, definitely. A word on those recordings, because we + +00:31:55.960 --> 00:32:00.879 +mentioned the previous year's videos, but when it comes to + +00:32:00.880 --> 00:32:04.439 +this conference, the videos, most of the pre-recording and + +00:32:04.440 --> 00:32:07.719 +most of the talk that we had except one this year, they are + +00:32:07.720 --> 00:32:13.079 +already available on emaxconf-.org, the website. You can + +00:32:13.080 --> 00:32:16.839 +also find them on the YouTube account for emaxconf, they're + +00:32:16.840 --> 00:32:21.159 +fairly easy to find. We'll try to get them on PeerTube at some + +00:32:21.160 --> 00:32:26.159 +point. We are not sure when. But the rule is, right now, we are + +00:32:26.160 --> 00:32:28.999 +going to take some time. Go on, Sacha, if you want. There are + +00:32:29.000 --> 00:32:33.959 +two things already. I should put a URL to the channel in. + +00:32:33.960 --> 00:32:38.959 +Okay, sure. So, Sacha will take care of this. But all the + +00:32:38.960 --> 00:32:41.839 +pre-recordings are already available with the subtitles + +00:32:41.840 --> 00:32:44.159 +when we manage to receive them sufficiently early. And if + +00:32:44.160 --> 00:32:47.279 +not, it'll take maybe a couple of days for us to get them out + +00:32:47.280 --> 00:32:50.319 +there. But yes, the pre-recordings are there. When it comes + +00:32:50.320 --> 00:32:53.599 +to the live Q&A, so the little sessions you've seen us do live + +00:32:53.600 --> 00:32:57.239 +when we were on BBB asking questions to the speakers and also + +00:32:57.240 --> 00:32:59.799 +having people join in the discussion, this will take a + +00:32:59.800 --> 00:33:02.759 +little more time for us to publish them because we like to + +00:33:02.760 --> 00:33:06.919 +follow a process of captioning them and making sure we take + +00:33:06.920 --> 00:33:09.319 +all the questions and all the answers from the pad and + +00:33:09.320 --> 00:33:12.999 +centralize everything on the website. So this is a process + +00:33:13.000 --> 00:33:16.439 +that takes about two to three weeks and we are not putting a + +00:33:16.440 --> 00:33:18.959 +lot of pressure on us to do this. If there is anything you're + +00:33:18.960 --> 00:33:21.839 +dying to see you'll have to wait a little bit but we'll try to + +00:33:21.840 --> 00:33:24.959 +make sure to make the information available as soon as we + +00:33:24.960 --> 00:33:27.999 +can. So + +00:33:28.000 --> 00:33:31.759 +Let me read the notes just to make sure we're not forgetting + +00:33:31.760 --> 00:33:36.839 +anything. Yes, when it comes to the publishing process, if + +00:33:36.840 --> 00:33:39.279 +you want to keep in touch and know when something is going to + +00:33:39.280 --> 00:33:42.199 +be released, we will announce all of this on the + +00:33:42.200 --> 00:33:45.959 +emacsconf-discuss mailing list, so emacsconf-discuss. + +00:33:45.960 --> 00:33:49.639 +You'll be able to find the link on the website as well and it's + +00:33:49.640 --> 00:33:53.039 +already on the pad that we are sharing currently on the + +00:33:53.040 --> 00:33:54.559 +screen. + +00:33:54.560 --> 00:33:59.679 +So obviously we'd be very happy to get some feedback from you + +00:33:59.680 --> 00:34:03.359 +on the conference and you can do this on this pad. We'll + +00:34:03.360 --> 00:34:05.519 +mention this at the end of the day again so that you get a + +00:34:05.520 --> 00:34:08.839 +chance to watch the last few talks of the conference and + +00:34:08.840 --> 00:34:11.559 +mention your thoughts on this but yeah we are very open to + +00:34:11.560 --> 00:34:17.319 +feedback. Part of the reason why It feels like a well-oiled + +00:34:17.320 --> 00:34:19.759 +machine, EmacsConf, is the fact that we've been iterating + +00:34:19.760 --> 00:34:25.159 +over the process for many years at this point. We'll get to + +00:34:25.160 --> 00:34:27.679 +the thanking to Sacha for the automation and to other + +00:34:27.680 --> 00:34:30.959 +volunteers for all their work, but really, it's really the + +00:34:30.960 --> 00:34:34.199 +feedback that you give us that allows us to refine the + +00:34:34.200 --> 00:34:37.439 +process of running the conference. And if it looks smooth + +00:34:37.440 --> 00:34:40.359 +and all this, well, it's mostly thanks to you, because what + +00:34:40.360 --> 00:34:43.559 +you believe was smooth, you mentioned as a feedback, and + +00:34:43.560 --> 00:34:47.639 +then we try to adapt our own processes so that we can match the + +00:34:47.640 --> 00:34:50.879 +level of smoothness that you expected. So thank you so much. + +00:34:50.880 --> 00:34:53.359 +Part of the success of EmacsConf is definitely on you. + +00:34:53.360 --> 00:34:59.879 +So again, if you've got feedback, please include them in the + +00:34:59.880 --> 00:35:03.279 +pad. When it comes to the stats, as I mentioned, we are + +00:35:03.280 --> 00:35:07.519 +usually averaging between 150 and 200 viewers. And this + +00:35:07.520 --> 00:35:12.079 +year, on the two tracks, we managed somehow to peak higher on + +00:35:12.080 --> 00:35:14.239 +the Dev track than on the Gen track, which is a first for the + +00:35:14.240 --> 00:35:16.839 +last five years. So that's an interesting tidbit of + +00:35:16.840 --> 00:35:20.959 +knowledge for you. But yeah, overall we had perhaps 300 + +00:35:20.960 --> 00:35:22.999 +viewers total between the channels, which is amazing + +00:35:23.000 --> 00:35:27.039 +because you've got 300 people watching you live present and + +00:35:27.040 --> 00:35:32.919 +so that's a rich experience. All right, moving to the + +00:35:32.920 --> 00:35:36.319 +thanking section. We have plenty of people to thank without + +00:35:36.320 --> 00:35:42.399 +whom this conference would not be possible. First, I'd like + +00:35:42.400 --> 00:35:45.279 +to thank all the speakers, all the volunteers, the + +00:35:45.280 --> 00:35:48.399 +participants, and all the other people in our lives who make + +00:35:48.400 --> 00:35:50.839 +it possible through time and support to run this + +00:35:50.840 --> 00:35:53.199 +conference. Obviously, the speakers I've already + +00:35:53.200 --> 00:35:55.959 +mentioned, volunteers, you have some of them in the room + +00:35:55.960 --> 00:35:59.919 +right now. We've got Corwin, we've got Sacha, we also have + +00:35:59.920 --> 00:36:02.959 +Flowy, but we also have plenty of captioners in the + +00:36:02.960 --> 00:36:07.599 +background, whom I will get to in just a little while. This + +00:36:07.600 --> 00:36:11.239 +year's conference hosts are myself, Leo Vivier, and Corwin Brust + +00:36:11.240 --> 00:36:16.199 +and well not technically not FlowyCoder, not yet at least. + +00:36:16.200 --> 00:36:19.719 +Flowy, as you know, joined us last year and has been running + +00:36:19.720 --> 00:36:22.879 +check-ins in the background and we are very thankful for his + +00:36:22.880 --> 00:36:27.279 +contributions and maybe this afternoon he might be able to + +00:36:27.280 --> 00:36:31.719 +come. This is a fun process if you want to imagine what it's + +00:36:31.720 --> 00:36:35.359 +like for us backstage. Imagine, you know, Flowy's like + +00:36:35.360 --> 00:36:38.439 +getting everybody warmed up, goes in, talks to, gets a + +00:36:38.440 --> 00:36:41.879 +conversation going, everybody's ready, you know, the + +00:36:41.880 --> 00:36:45.079 +video is playing of the live stream, he's doing the warm hand + +00:36:45.080 --> 00:36:48.279 +up, everything ready, checking everything out. And then he + +00:36:48.280 --> 00:36:52.439 +hands the torch to Leo, or maybe me, and then we get to come in + +00:36:52.440 --> 00:36:54.959 +and have this amazing conversation based on all the buzz + +00:36:54.960 --> 00:36:57.079 +that's just been built up, knowing everything works out + +00:36:57.080 --> 00:37:00.359 +great. And one of these times, what Leo is telling you is that + +00:37:00.360 --> 00:37:04.159 +Flowy's just going to give Leo or me the cold shoulder and do + +00:37:04.160 --> 00:37:07.359 +the hosting himself. He did a great job with that last year, + +00:37:07.360 --> 00:37:14.119 +and we're looking forward to more of that. All right, I'll do + +00:37:14.120 --> 00:37:17.039 +a quick fire of thankings because we need to soon move on to + +00:37:17.040 --> 00:37:21.159 +the next talk of the day. I'd also like obviously to thank + +00:37:21.160 --> 00:37:25.239 +Sacha for managing the two streams and the one stream today + +00:37:25.240 --> 00:37:27.279 +because she's in the background making sure that + +00:37:27.280 --> 00:37:30.519 +everything goes all right for all our automation. And + +00:37:30.520 --> 00:37:34.759 +obviously Flowy again for the check-ins. I want also to thank, + +00:37:34.760 --> 00:37:40.639 +to extend my thankings, to the proposal review volunteers + +00:37:40.640 --> 00:37:44.839 +James Howell, Jean-Christophe Helary, and others for + +00:37:44.840 --> 00:37:48.119 +helping with the early acceptance process. I mentioned + +00:37:48.120 --> 00:37:50.839 +them, the captioning volunteers, Mark Lewin, Rodrigo + +00:37:50.840 --> 00:37:54.319 +Morales, Anoush, annona, and James Howell, and some speakers + +00:37:54.320 --> 00:37:56.799 +who captioned their own talks. I'm thinking about Eduardo + +00:37:56.800 --> 00:38:03.359 +especially. I guess thanks to me, be weird for me to read + +00:38:03.360 --> 00:38:07.399 +this, but I'm still going to do this, for fiddling with the + +00:38:07.400 --> 00:38:11.199 +audio and getting things nicely synced. For those who do not + +00:38:11.200 --> 00:38:13.759 +know, I also manage, I make sure that the audio is + +00:38:13.760 --> 00:38:16.079 +normalized, cleaned up, and all this for the conference, + +00:38:16.080 --> 00:38:18.479 +and usually it's one of the few things that Sacha doesn't + +00:38:18.480 --> 00:38:21.959 +like doing, and I'm very happy to pick the little crumbs to + +00:38:21.960 --> 00:38:26.199 +make sure that Emacs is as cool as it can get. Also thanks to + +00:38:26.200 --> 00:38:28.759 +Bhavin Gandhi, Christopher Howard, Joseph Turner and + +00:38:28.760 --> 00:38:30.959 +Screwless for quality checking the videos in the + +00:38:30.960 --> 00:38:34.359 +backstage. Thanks obviously to Shoshin for the music that + +00:38:34.360 --> 00:38:36.999 +has been accompanying us during the breaks. We've + +00:38:37.000 --> 00:38:41.039 +mentioned him already, but thanks to Amin Bandali for help + +00:38:41.040 --> 00:38:44.999 +with infrastructure and communication. Thanks to Ry P for + +00:38:45.000 --> 00:38:47.679 +the server that we're using for OBS streaming and for + +00:38:47.680 --> 00:38:50.719 +processing the videos. That's part of the reason why we are + +00:38:50.720 --> 00:38:55.879 +able to get the titles out so fast. And Corwin already + +00:38:55.880 --> 00:38:57.799 +mentioned the FSF but thanks to the Free Software + +00:38:57.800 --> 00:39:01.079 +Foundation for Emacs itself, the mailing list, + +00:39:01.080 --> 00:39:05.599 +media.emacs.org server where we host the conferences. We + +00:39:05.600 --> 00:39:10.799 +might have a little word about donations and funding the FSF + +00:39:10.800 --> 00:39:14.159 +later in the afternoon. I'll make sure that Corbyn + +00:39:14.160 --> 00:39:17.919 +gets to it. But finally, thanks to the many users and + +00:39:17.920 --> 00:39:20.479 +commuters to the project and team that create all the + +00:39:20.480 --> 00:39:22.879 +awesome free software that we use, especially + +00:39:22.880 --> 00:39:26.239 +BigBlueButton, Etherpad, IceCast, OBS, The Lounge, + +00:39:26.240 --> 00:39:30.359 +LiberaChat, FFmpeg, OpenAI, Whisper, WhisperX, and the + +00:39:30.360 --> 00:39:33.919 +Aeneas Forced Alignment Tool site transfer sub. Anyway, + +00:39:33.920 --> 00:39:35.559 +we're going to get started with the next talk of the day. + +00:39:35.560 --> 00:39:38.079 +We'll continue with the thankings later on. Enjoy the + +00:39:38.080 --> 00:39:43.839 +conference. Thanks for tuning in, really appreciate you. + +00:39:43.840 --> 00:39:45.508 +All right, we are off air. + +00:39:45.509 --> 00:39:45.542 +So I will go back to Mumble now. + +00:39:45.543 --> 00:39:51.734 +All right. That was pretty good. + +00:39:51.735 --> 00:39:52.875 +That was good, right? + +00:39:52.876 --> 00:39:55.858 +I think that was good. I'm glad we did that. + +00:39:55.859 --> 00:39:59.399 +Thank you for that. I'm hoping we would do. + +00:39:59.400 --> 00:40:02.799 +Yeah, sorry. For the people who are still in chat, right now + +00:40:02.800 --> 00:40:06.359 +we are moving to the next live talk, so feel free to join us + +00:40:06.360 --> 00:40:08.839 +later. We might stay in this room, we do not know, but we'll + +00:40:08.840 --> 00:40:13.360 +see you later anyway. Okay, bye-bye. diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt new file mode 100644 index 00000000..a32b0da2 --- /dev/null +++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt @@ -0,0 +1,1294 @@ +WEBVTT + +00:00:00.000 --> 00:00:05.039 +And I believe we are live. Okay. Hi again, Ihor. How are you + +00:00:05.040 --> 00:00:09.359 +doing? Ready to answer questions, right? Yes. Ready to + +00:00:09.360 --> 00:00:13.039 +answer questions and all this. I mean, ready for + +00:00:13.040 --> 00:00:14.999 +everything. It's not just a question, it's the maintenance + +00:00:15.000 --> 00:00:21.679 +that is now lying in front of you. So... Oh, that's not the end + +00:00:21.680 --> 00:00:25.159 +of the day. I mean, it's a rare thing indeed, because you + +00:00:25.160 --> 00:00:27.439 +might not be able to see it on BBB. I'm checking in, but we've + +00:00:27.440 --> 00:00:30.599 +got Ihor, obviously, but we also have Bastien and also + +00:00:30.600 --> 00:00:34.199 +Carsten in the room. So, we have three maintainers of Org + +00:00:34.200 --> 00:00:36.119 +Mode right there in the room to answer all your questions. + +00:00:36.120 --> 00:00:40.759 +So, it's a rare occasion that I invite all of you to seize the + +00:00:40.760 --> 00:00:44.679 +day on this. Ihor, do you have anything maybe to say before we + +00:00:44.680 --> 00:00:49.599 +start moving into the questions? Well, I hope that I said + +00:00:49.600 --> 00:00:51.759 +everything I wanted. Hello, Bastien. during the + +00:00:51.760 --> 00:00:55.519 +presentation. Well, actually, I can say a lot more, like + +00:00:55.520 --> 00:01:01.439 +infinitely, because when I first recorded it, it was like + +00:01:01.440 --> 00:01:05.999 +one hour. So yeah. I mean, you did a, I'll just let you know, + +00:01:06.000 --> 00:01:08.359 +you did a fine job condensing everything in just 40 minutes. + +00:01:08.360 --> 00:01:14.079 +So congratulations on this. Yeah, it's, yeah, usually one + +00:01:14.080 --> 00:01:18.039 +minute per slide is the best way. Otherwise, it's something + +00:01:18.040 --> 00:01:22.319 +that's wrong with this presentation. Right, so just moving + +00:01:22.320 --> 00:01:25.519 +into the question, and by the way we've got 20 minutes, we + +00:01:25.520 --> 00:01:27.799 +might be able to chat a little more if Bastien wants to say + +00:01:27.800 --> 00:01:29.919 +something as well and Carsten, you know, feel free to + +00:01:29.920 --> 00:01:33.119 +intervene at any point during the questions if you've got + +00:01:33.120 --> 00:01:35.279 +anything to contribute or our voice will just show the + +00:01:35.280 --> 00:01:37.879 +breeze later on. So the first question is relating to + +00:01:37.880 --> 00:01:41.479 +something you said about 10 minutes 34 that might speak more + +00:01:41.480 --> 00:01:42.685 +to you than to me. + +NOTE Q: Is the track-changes item about the org-element parser? + +00:01:42.686 --> 00:01:45.159 +Is the track changes item about the org + +00:01:45.160 --> 00:01:51.519 +element parser Yes, the track changes is a new library that + +00:01:51.520 --> 00:01:58.959 +helps to receive changes in buffers incrementally. So like + +00:01:58.960 --> 00:02:03.079 +you can, it has API where you can request what changes + +00:02:03.080 --> 00:02:07.999 +happened in buffer since last request, chunk by chunk. And + +00:02:08.000 --> 00:02:14.119 +in org mode, in org element parser, we do pretty much the same + +00:02:14.120 --> 00:02:19.879 +thing, but using timers. So this track changes library + +00:02:19.880 --> 00:02:25.159 +should improve things, first, because it's a bit faster, + +00:02:25.160 --> 00:02:29.279 +because we don't need to conjure every single change, and + +00:02:29.280 --> 00:02:32.119 +track changes can agglomerate changes into chunks much + +00:02:32.120 --> 00:02:36.039 +more efficiently. And second, it's a built-in library, so + +00:02:36.040 --> 00:02:40.439 +it's a good idea to use built-in library when there is such an + +00:02:40.440 --> 00:02:45.879 +option, instead of running out our own implementation. + +00:02:45.880 --> 00:02:49.399 +Definitely. Moving on to the second question, although I'm + +00:02:49.400 --> 00:02:52.664 +not sure it refers that much to what you can do. + +NOTE Q: Could you please keep IRC alive? I prefer it to Matrix + +00:02:52.665 --> 00:02:57.759 +Could you please keep IRC alive? And I prefer it to Matrix. I mean, + +00:02:57.760 --> 00:03:03.239 +you did talk about IRC, right? But did we talk about phasing + +00:03:03.240 --> 00:03:08.799 +it out? So I try to be live on IRC, but I use mobile client for + +00:03:08.800 --> 00:03:12.999 +IRC to keep connected. So I usually connected, I usually see + +00:03:13.000 --> 00:03:15.519 +messages, except certain times when I don't have mobile + +00:03:15.520 --> 00:03:19.239 +internet. Right. Okay. That's why many people will tell + +00:03:19.240 --> 00:03:23.399 +you, you need a bouncer and all this, but the IRC crowd is very + +00:03:23.400 --> 00:03:33.679 +loud. I just don't know a good bouncer. I don't have a good + +00:03:33.680 --> 00:03:36.399 +setup for a bouncer. Okay. + +00:03:36.400 --> 00:03:41.239 +Personally, I use WeChat usually to stay connected to + +00:03:41.240 --> 00:03:44.119 +email. It's obviously a client for IRC, but it also allows + +00:03:44.120 --> 00:03:47.959 +you to, you know, you can keep it as a bouncer, but it's not in + +00:03:47.960 --> 00:03:54.159 +Emacs. It is. I don't have a computer that is running 24 + +00:03:54.160 --> 00:03:56.839 +hours, so. I mean, that's the thing. I do have a server to run + +00:03:56.840 --> 00:04:02.239 +it off. All right, moving on to the third question. That is + +00:04:02.240 --> 00:04:06.559 +what is running 24 hours. Right. Okay. All right. Moving on + +00:04:06.560 --> 00:04:07.987 +to the third question. + +NOTE Q: Is there any plan for adding support for other modalities of notes like handwritten, audio, etc.? + +00:04:07.988 --> 00:04:09.519 +Is there any plan for adding support + +00:04:09.520 --> 00:04:11.959 +for other modalities of note-like, handwritten, audio, + +00:04:11.960 --> 00:04:14.919 +and et cetera? Would that be interesting to the community? + +00:04:14.920 --> 00:04:20.319 +It will definitely be useful for me. I didn't. Okay. So this + +00:04:20.320 --> 00:04:25.399 +is not the idea I hear frequently. So there's no plan for such + +00:04:25.400 --> 00:04:29.959 +thing. Modalities of notes like handwritten audio. I think + +00:04:29.960 --> 00:04:34.519 +John Kitchin did some handwritten note. + +00:04:34.520 --> 00:04:46.119 +John Kitchin. Yeah. And for audio, I think as well. I. So + +00:04:46.120 --> 00:04:48.999 +basically you can use attachments, you can use images to + +00:04:49.000 --> 00:04:54.279 +paste you. I think John Kitchin even use it to automatically + +00:04:54.280 --> 00:04:58.519 +recognize notes. + +00:04:58.520 --> 00:05:05.359 +I think the previous speaker was talking about a whisper to + +00:05:05.360 --> 00:05:10.399 +recognize voice. Right. + +00:05:10.400 --> 00:05:13.959 +Otherwise there is no special workflow and I'm not even sure + +00:05:13.960 --> 00:05:16.919 +what we can do to support this workflow specifically. + +00:05:16.920 --> 00:05:22.759 +Yeah, it definitely feels like Org Mode is a good format for + +00:05:22.760 --> 00:05:25.719 +textual stuff, and a lot of things are textual. I mean, + +00:05:25.720 --> 00:05:29.679 +that's the whole philosophy behind Emacs. But when it comes + +00:05:29.680 --> 00:05:34.439 +to voice, it feels like it's... I think the person asking the + +00:05:34.440 --> 00:05:36.799 +question probably needs to specify what they mean by voice. + +00:05:36.800 --> 00:05:40.279 +Is it just raw note-taking, as Blaine mentioned in a + +00:05:40.280 --> 00:05:43.199 +previous talk, or is it something else? Feel free to add up to + +00:05:43.200 --> 00:05:46.759 +the question and we'll return to it later on. + +00:05:46.760 --> 00:05:51.919 +I think this is kind of related to drag and drop. I think you + +00:05:51.920 --> 00:05:57.279 +would like to be able to have an audio file and drop it in and + +00:05:57.280 --> 00:06:00.879 +have it translated to text. I think that would be an + +00:06:00.880 --> 00:06:03.959 +interesting API to do this, right? So that you can integrate + +00:06:03.960 --> 00:06:07.599 +it into something like drag and drop. I think I'm going to + +00:06:07.600 --> 00:06:12.079 +talk with supporters in since overnight. So we have, I + +00:06:12.080 --> 00:06:14.959 +believe what constant is alluring to is the fact that not + +00:06:14.960 --> 00:06:17.679 +just pictures but imagine if you were bringing in an audio + +00:06:17.680 --> 00:06:20.399 +file maybe you could, I mean I'm not sure it would work with + +00:06:20.400 --> 00:06:24.279 +whisper but. transcribing it in a way and inserting it as + +00:06:24.280 --> 00:06:27.079 +text. Although I'm not sure how we would be able to do this, + +00:06:27.080 --> 00:06:30.159 +but it's an interesting idea though. It can work if you write + +00:06:30.160 --> 00:06:35.359 +some kind of automatic speech recognition. It's not really + +00:06:35.360 --> 00:06:39.479 +a job for work. If you have some library that can transform + +00:06:39.480 --> 00:06:43.959 +audio to text or transform image to text in Elixir, then we + +00:06:43.960 --> 00:06:47.599 +can happily use that library. Definitely, but I can tell you + +00:06:47.600 --> 00:06:50.119 +that Whisper is not something that works very quickly. We do + +00:06:50.120 --> 00:06:53.479 +use Whisper AI to transcribe some of the talks that we + +00:06:53.480 --> 00:06:56.879 +broadcast during EmacsConf, and I can tell you it takes a + +00:06:56.880 --> 00:06:59.359 +fair while. If you have a video that lasts one minute, it's + +00:06:59.360 --> 00:07:03.439 +definitely going to take more than one minute to try to + +00:07:03.440 --> 00:07:09.239 +transcribe the video. We had to wait for a few years until it + +00:07:09.240 --> 00:07:12.679 +passed. Probably, but it's good to have the ID now so + +00:07:12.680 --> 00:07:17.479 +that we are ready eventually to do this. There is the new + +00:07:17.480 --> 00:07:23.319 +asynchronous IP. It's called org-pending. It's work in + +00:07:23.320 --> 00:07:29.599 +progress. And that basically allows to defer inserting + +00:07:29.600 --> 00:07:34.199 +text into our buffers until later. And while it's being + +00:07:34.200 --> 00:07:37.719 +worked on, it will basically highlight the place where it + +00:07:37.720 --> 00:07:43.159 +will be inserted. And you can click on it, see the progress, + +00:07:43.160 --> 00:07:49.519 +and stuff like that. So this is for Babylon, but I imagine for + +00:07:49.520 --> 00:07:56.159 +things like voice recognition, it can also work. + +00:07:56.160 --> 00:07:59.799 +All right, what I suggest we do, we're going to fill the two + +00:07:59.800 --> 00:08:02.279 +questions that we have now, and then it'd be nice if we could + +00:08:02.280 --> 00:08:05.399 +hear a word from Bastien and from Carsten as well, because + +00:08:05.400 --> 00:08:08.719 +it's rare to have all of you three in a room, and it would be + +00:08:08.720 --> 00:08:11.439 +nice maybe to chat a little bit about this. So quickly, with + +NOTE Q: WRT IETF standardization, have you looked at Karl Voit's OrgDown? + +00:08:11.440 --> 00:08:14.199 +the last two questions, with regards to IETF + +00:08:14.200 --> 00:08:17.039 +standardization, have you looked at Karl Voit's Orgdown? + +00:08:17.040 --> 00:08:24.919 +So, of course, there was a discussion on the mailing list, + +00:08:24.920 --> 00:08:28.319 +and there was a lot of pushback to this idea, especially to + +00:08:28.320 --> 00:08:33.399 +simplify the syntax. So, in short, the conclusion from + +00:08:33.400 --> 00:08:37.799 +there is we want the full syntax, we don't want to have things + +00:08:37.800 --> 00:08:43.079 +like different versus Org mode. But for the syntax, we may + +00:08:43.080 --> 00:08:49.279 +specify different like coverage. So for example, it's a + +00:08:49.280 --> 00:08:53.119 +minimal, it has a minimal support so people can, there's + +00:08:53.120 --> 00:08:59.079 +some parsers or apps can support just whatever curl calls + +00:08:59.080 --> 00:09:04.239 +fork down like level zero or level one or whatever. But the + +00:09:04.240 --> 00:09:10.079 +key point is, when it goes to IETF, we want to have the full + +00:09:10.080 --> 00:09:13.119 +syntax. We don't want to split it into pieces. + +00:09:13.120 --> 00:09:18.959 +Makes a lot of sense. All right. And the last question we have + +NOTE Q: About a year ago we discussed switching GNU documentation from texinfo to org. Do you still consider this? + +00:09:18.960 --> 00:09:22.359 +for now. About a year ago, we discussed switching new + +00:09:22.360 --> 00:09:26.239 +documentation from texinfo to org. Do you still consider + +00:09:26.240 --> 00:09:30.879 +this? definitely contributed to some of the ideas about + +00:09:30.880 --> 00:09:34.479 +syntax. For example, the inline special blocks, I think + +00:09:34.480 --> 00:09:41.639 +about them with this in mind, so that, so basically, one + +00:09:41.640 --> 00:09:45.999 +clarity, we don't want to complicate our syntax, we don't + +00:09:46.000 --> 00:09:50.319 +want to have special built-in support for variable, or I + +00:09:50.320 --> 00:09:54.319 +don't know, function name, or all this kind of specific + +00:09:54.320 --> 00:10:00.959 +markup. But instead, the idea is to have some generic custom + +00:10:00.960 --> 00:10:06.479 +syntax. And then when it goes to software manuals, we want + +00:10:06.480 --> 00:10:09.759 +some like optional library that will provide certain + +00:10:09.760 --> 00:10:12.439 +syntax extensions, like inline special block for + +00:10:12.440 --> 00:10:15.479 +variables, inline special block for acronym and stuff like + +00:10:15.480 --> 00:10:20.999 +that. Then people who want to use Org mode for manuals should + +00:10:21.000 --> 00:10:26.119 +be able to use that new markup to achieve what they want. + +00:10:26.120 --> 00:10:34.359 +That's a distant idea. But the key point is we want to keep org + +00:10:34.360 --> 00:10:39.039 +mode as generic syntax. We don't want to specialize it for + +00:10:39.040 --> 00:10:43.799 +software specifically. But generic in the sense that it can + +00:10:43.800 --> 00:10:44.759 +be used for software as well. + +00:10:44.760 --> 00:10:50.959 +All right, well thank you so much for your answer here and + +00:10:50.960 --> 00:10:56.399 +that was very enlightening but I'd first like to give the mic + +00:10:56.400 --> 00:11:00.359 +to Bastien who might need to leave shortly and I just want to + +00:11:00.360 --> 00:11:03.559 +make sure that you get to chat a little bit Bastien because + +00:11:03.560 --> 00:11:06.199 +it's a big thing we've had you as a maintainer for however + +00:11:06.200 --> 00:11:13.199 +long now? Well, officially, it was 14 years. But obviously, + +00:11:13.200 --> 00:11:17.999 +EHO has been doing much of the groundwork as a de facto + +00:11:18.000 --> 00:11:20.239 +maintainer for several years now, I believe for three or + +00:11:20.240 --> 00:11:28.679 +four years. And before Before IHO, there was Nicolas Goaziou, + +00:11:28.680 --> 00:11:33.679 +who's doing a lot of work. Also Kyle Meyer, who is still + +00:11:33.680 --> 00:11:40.599 +active, backporting Emacs changes. So + +00:11:40.600 --> 00:11:46.039 +it's a relief that we can do things properly, that I didn't + +00:11:46.040 --> 00:11:51.439 +give up before someone could really step up. I'm glad we're + +00:11:51.440 --> 00:11:57.679 +doing this. And I'm glad there was so much help during the + +00:11:57.680 --> 00:12:01.959 +time when I was not available enough. Well, thank you, + +00:12:01.960 --> 00:12:05.039 +Bastien. I think on behalf of the community, I think I'd like + +00:12:05.040 --> 00:12:07.719 +to extend a big thank you for all the work you've done + +00:12:07.720 --> 00:12:12.279 +throughout those 14 years. And if we pull the rope just a + +00:12:12.280 --> 00:12:15.719 +little more, before those 14 years, we had someone else + +00:12:15.720 --> 00:12:18.199 +maintaining Org Mode, well, not actually just maintaining + +00:12:18.200 --> 00:12:20.879 +Org Mode, but also inventing it. Carsten, how are you doing? + +00:12:20.880 --> 00:12:26.799 +I am. I'm doing fine. A really great opportunity to be here. + +NOTE Community + +00:12:26.800 --> 00:12:31.279 +First, I would like to start by indeed thanking Bastien + +00:12:31.280 --> 00:12:34.839 +because, I mean, he was not only maintainer after I stopped, + +00:12:34.840 --> 00:12:37.839 +but already during the time I was there, he was one of the key + +00:12:37.840 --> 00:12:40.559 +contributors who helped the project along for quite a bit. + +00:12:40.560 --> 00:12:44.759 +So it's an incredible investment of time and energy that + +00:12:44.760 --> 00:12:48.399 +Basquiat has shown, which is really fantastic. And now I see + +00:12:48.400 --> 00:12:52.479 +Ihor taking over with, as far as I can see, deep knowledge and + +00:12:52.480 --> 00:12:56.199 +all the right ideas about philosophy. So I'm really + +00:12:56.200 --> 00:13:00.039 +impressed. For me, this is really totally amazing because I + +00:13:00.040 --> 00:13:04.719 +started hacking this more than 20 years ago. And to just see + +00:13:04.720 --> 00:13:07.679 +that there's a community that has sustained itself with the + +00:13:07.680 --> 00:13:11.439 +help of new maintainers for such a long time makes me + +00:13:11.440 --> 00:13:13.999 +extremely grateful. So thank you very much to all of you. + +00:13:14.000 --> 00:13:20.679 +Okay, well, amazing. I mean, I'm a little flustered, I must + +00:13:20.680 --> 00:13:23.559 +admit, because I'm seeing three players of the community in + +00:13:23.560 --> 00:13:27.639 +a way that have kept me busy with very fun stuff to do with Org + +00:13:27.640 --> 00:13:30.999 +Mode, and it's really amazing to see three giants of the + +00:13:31.000 --> 00:13:34.239 +community being able to maintain Org Mode for so long and + +00:13:34.240 --> 00:13:38.199 +contribute so much to it. So, again, thanks to all of you + +00:13:38.200 --> 00:13:40.981 +three. I must also admit that it's really amazing for me + +00:13:40.982 --> 00:13:45.442 +that all of you three stress the importance of the community + +00:13:45.440 --> 00:13:48.479 +a whole lot, and I know that Bastien, you've talked about + +00:13:48.480 --> 00:13:51.359 +maintaining software last year at Emacs Confs, and even + +00:13:51.360 --> 00:13:55.519 +today, during the one-minute little chat that you did in + +00:13:55.520 --> 00:13:59.279 +Ihor's chat, you stressed the importance of maintenance and to + +00:13:59.280 --> 00:14:06.559 +be future-oriented about it. I'm kind of wondering, why do + +00:14:06.560 --> 00:14:12.679 +you think community is so important to Org Mode in general? + +00:14:12.680 --> 00:14:14.679 +Like, obviously we've talked about maintainers and we've + +00:14:14.680 --> 00:14:16.879 +talked about volunteers, but don't you think there's + +00:14:16.880 --> 00:14:19.159 +something more about community in general, about Org Mode + +00:14:19.160 --> 00:14:20.950 +and the fact that we are all taking notes + +00:14:20.951 --> 00:14:34.799 +and doing so much with it? Yeah, are you asking me? + +00:14:34.800 --> 00:14:40.640 +I remember Carsten made his point during the Google talk about + +00:14:40.680 --> 00:14:45.159 +the core idea of Org Mode, about mixing note taking and to-do + +00:14:45.160 --> 00:14:49.959 +manager. It was really powerful. And also in the same + +00:14:49.960 --> 00:14:53.399 +presentation that 98% + +00:14:53.400 --> 00:14:57.047 +of the features were organically developed as ideas + +00:14:57.048 --> 00:15:00.668 +by the community. And Ihor just said the same today + +00:15:00.669 --> 00:15:03.589 +in the presentation, like most of the features, + +00:15:03.590 --> 00:15:06.875 +not only the ideas, but also the code came from + +00:15:06.876 --> 00:15:11.350 +the communities. So that's why the community is so rich. + +00:15:11.351 --> 00:15:12.759 +And another thing is + +00:15:12.760 --> 00:15:16.919 +also that I do remember. Now everyone is having kind of an open + +00:15:16.920 --> 00:15:20.799 +source fatigue and questions about how is it okay to be + +00:15:20.800 --> 00:15:24.039 +maintainer? How do you keep open source project + +00:15:24.040 --> 00:15:28.199 +sustainable? And I'm saying open source on purpose with + +00:15:28.200 --> 00:15:33.119 +this audience to see beyond just the small GNU project and + +00:15:33.120 --> 00:15:36.359 +the small free software community. So at large, there is + +00:15:36.360 --> 00:15:40.679 +some sense of fatigue. I remember that the Org community + +00:15:40.680 --> 00:15:44.079 +right from the beginning had a reputation of being an + +00:15:44.080 --> 00:15:48.839 +amazing community and I think it + +00:15:48.840 --> 00:15:54.879 +continues to be one and I'm amazed that sometimes when I'm, + +00:15:54.880 --> 00:15:59.199 +you know, sometimes I'm, I have this fatigue of moderating + +00:15:59.200 --> 00:16:01.839 +emails from the mailing list, for example, and filtering + +00:16:01.840 --> 00:16:06.199 +out spam. And then I go on the list and I read some emails and I + +00:16:06.200 --> 00:16:09.536 +feel like, okay, this is still there. And it's really + +00:16:09.537 --> 00:16:14.559 +a boost of energy. I wish that this repetition outside Org Mode, + +00:16:14.560 --> 00:16:19.239 +outside Emacs, of being a nice welcoming, + +00:16:19.240 --> 00:16:22.559 +community of knowledgeable people talking of things + +00:16:22.560 --> 00:16:25.319 +and learning from each other that we can + +00:16:25.320 --> 00:16:30.159 +keep up with this pace. Yeah, maybe if I + +00:16:30.160 --> 00:16:32.919 +can just add to this, I think you're making an extremely + +00:16:32.920 --> 00:16:36.679 +important point, Pascal. I think that was really, from the + +00:16:36.680 --> 00:16:39.639 +beginning, something that was really special. And I think + +00:16:39.640 --> 00:16:45.639 +the reason why we all community still works is that first me, + +00:16:45.640 --> 00:16:49.239 +but in particular also the two of you and more people have + +00:16:49.240 --> 00:16:53.359 +been able to keep up the friendly spirit in this community. + +00:16:53.360 --> 00:16:57.239 +Because we had very few fights on the mailing list. There + +00:16:57.240 --> 00:17:02.879 +were a few at some point, we had a few contributors with a + +00:17:02.880 --> 00:17:06.719 +little bit of fights. And I remember that I, for example, had + +00:17:06.720 --> 00:17:10.159 +to invest a lot of time to keep that one under control, but I + +00:17:10.160 --> 00:17:14.199 +think it was totally worth it because as a group, as a whole, I + +00:17:14.200 --> 00:17:18.679 +think it was really fantastic. Our friendly people + +00:17:18.680 --> 00:17:21.719 +always were, and I think that has spurred all the + +00:17:21.720 --> 00:17:22.640 +contributions that we had. Because + +00:17:22.680 --> 00:17:25.542 +if you are in a toxic environment, you will + +00:17:25.543 --> 00:17:29.458 +not be willing to stay and to invest all their time. And if you + +00:17:29.708 --> 00:17:32.291 +are in an appreciative environment where people support + +00:17:32.292 --> 00:17:35.191 +each other, it's a completely different game. So I really + +00:17:35.192 --> 00:17:38.566 +think that Org Mode is a great example for open source + +00:17:38.567 --> 00:17:43.774 +projects that many other communities can learn from. + +00:17:43.775 --> 00:17:52.441 +If I may just interject for a second, because we need to go + +00:17:52.442 --> 00:17:55.441 +into the next chat for the live stream. But as usual, I invite + +00:17:55.442 --> 00:17:57.524 +you, if you're interested with the discussion, we are + +00:17:57.525 --> 00:18:01.482 +staying on BBB, asking questions to Bastien, to Ihor and + +00:18:01.483 --> 00:18:04.316 +to Carsten. So feel free to join on BBB and chat with them + +00:18:04.317 --> 00:18:07.857 +live. The stream will be moving on to the next chat, but we + +00:18:07.858 --> 00:18:10.566 +will be recording the Q&A and posting it afterwards on + +00:18:10.567 --> 00:18:13.441 +emacsconf. So, I'll use the opportunity to thank you again, + +00:18:13.442 --> 00:18:18.941 +all three, for taking part in this EmacsConf, and enjoy the + +00:18:18.942 --> 00:18:27.482 +discussion, and we'll see you later! Thank you, bye bye! So, + +00:18:27.483 --> 00:18:31.274 +yeah, what I was starting to say actually is I feel that the + +00:18:31.275 --> 00:18:35.024 +Org Mode community and to the big extent the Emacs community + +00:18:35.000 --> 00:18:38.679 +is a bit like research in the early days when there was a bunch + +00:18:38.680 --> 00:18:43.959 +of enthusiasts who just exchanged mails together and tried + +00:18:43.960 --> 00:18:49.159 +to find out something new. And there was like no feeling of + +00:18:49.160 --> 00:18:52.719 +competition or too much competition at that time. Unlike + +00:18:52.720 --> 00:18:58.759 +now when we like we all rise for funding and stuff. So it's, + +00:18:58.760 --> 00:19:02.199 +it's really, it's really nice to, to, to have communities + +00:19:02.200 --> 00:19:05.919 +that has the spirit and they hope it can keep the spirit in + +00:19:05.920 --> 00:19:08.279 +future as well. + +00:19:08.280 --> 00:19:14.599 +Yeah. Yeah. I thought I'm very optimistic after. So I mean, + +00:19:14.600 --> 00:19:18.679 +actually had not been reading the mailing list for quite a + +00:19:18.680 --> 00:19:23.039 +while, but I started to read it again a little while ago and I + +00:19:23.040 --> 00:19:26.719 +could just see you also working on it and see how everything + +00:19:26.720 --> 00:19:30.919 +was going. That made me extremely happy to see that and made + +00:19:30.920 --> 00:19:37.679 +me very proud that this is still ongoing. + +00:19:37.680 --> 00:19:42.799 +I was interested about your point about the tables with + +00:19:42.800 --> 00:19:49.079 +multi-lines. My unsolicited advice is don't do it, because + +00:19:49.080 --> 00:19:52.639 +I think it's going to be a mess. Which I think is reflected + +00:19:52.640 --> 00:19:56.039 +also by you saying that nobody has a good idea on how to do + +00:19:56.040 --> 00:20:01.079 +this. I have certainly thought about it. It is requested so + +00:20:01.080 --> 00:20:04.599 +often. It's requested so often that it feels like it would be + +00:20:04.600 --> 00:20:07.959 +nice to come out with something. The question is, it is what? + +00:20:07.960 --> 00:20:11.399 +Yeah, that's a big question. Because I don't always ask + +00:20:11.400 --> 00:20:15.919 +eDocs, for example, and they do have multi line cells in + +00:20:15.920 --> 00:20:21.279 +tables, but that syntax is so ugly. Yes. Yeah, no, exactly. I + +00:20:21.280 --> 00:20:28.719 +think this is a problem and the question is, how far do you + +00:20:28.720 --> 00:20:33.639 +want to develop or want to be a completely full authoring + +00:20:33.640 --> 00:20:35.839 +system in the sense that you have all these options there + +00:20:35.840 --> 00:20:39.999 +because I think to me, the Org Mode tables have a specific + +00:20:40.000 --> 00:20:42.759 +application. They have this fast way of building + +00:20:42.760 --> 00:20:46.079 +something. And if I would have to go and build a hugely + +00:20:46.080 --> 00:20:50.279 +complicated table with different numbers of columns and + +00:20:50.280 --> 00:20:53.959 +columns going away and appearing further down the table, so + +00:20:53.960 --> 00:20:56.639 +I would probably go somewhere else. So for me, this seems to + +00:20:56.640 --> 00:21:00.319 +be overkill. So I don't want to curb anybody's enthusiasm. + +00:21:00.320 --> 00:21:04.919 +But I think it's really important to keep to keep the kind of + +00:21:04.920 --> 00:21:11.199 +functionality that it has. It's a very easy use and quick + +00:21:11.200 --> 00:21:15.879 +ability to do something interesting that I think is more + +00:21:15.880 --> 00:21:23.319 +important. There could be reasons to not do something. So + +00:21:23.320 --> 00:21:28.399 +again, the thing is, we don't have a good idea. But what I know + +00:21:28.400 --> 00:21:32.319 +100% is that we are not going to give up the existing syntax. + +00:21:32.320 --> 00:21:38.839 +Yeah, for sure. So even if you come up with something good, + +00:21:38.840 --> 00:21:42.279 +the existing syntax will remain working. And if people who + +00:21:42.280 --> 00:21:46.159 +need to use simple tables, they should remain possible in + +00:21:46.160 --> 00:21:52.759 +exactly the same way. But I know many people struggle and try + +00:21:52.760 --> 00:21:55.839 +in LaTeX and other workarounds just to create more complex + +00:21:55.840 --> 00:22:01.039 +tables. So there's clearly a demand. I think this is related + +00:22:01.040 --> 00:22:04.439 +to the other question that you asked earlier. I think it's + +00:22:04.440 --> 00:22:06.639 +related to the question about the different parsers. And + +00:22:06.640 --> 00:22:09.999 +then, of course, the way the tables are implemented now is by + +00:22:10.000 --> 00:22:11.944 +basically just looking at what's around you + +00:22:11.945 --> 00:22:13.484 +and doing the right things with + +00:22:13.485 --> 00:22:20.479 +this regular expression-based part of + +00:22:20.480 --> 00:22:24.279 +the parser. And you probably would have to fully use the + +00:22:24.280 --> 00:22:28.839 +other parts and to do all the changes in the formal structure + +00:22:28.840 --> 00:22:31.559 +in order to do something like this. So I have to be honest that + +00:22:31.560 --> 00:22:35.559 +I don't understand this well enough to really have a + +00:22:35.560 --> 00:22:39.679 +meaningful idea about it. Not only that, we'll also need to + +00:22:39.680 --> 00:22:42.799 +rewrite the spreadsheet functionality because it is + +00:22:42.800 --> 00:22:47.679 +completely using regular expressions. Exactly. Not only + +00:22:47.680 --> 00:22:50.639 +idea is missing that the roadmap will be very complicated if + +00:22:50.640 --> 00:22:57.519 +you get there. Yeah. I mean, I do remember. Yeah, go ahead. + +00:22:57.520 --> 00:23:03.359 +Yeah, sorry. I do remember Richard Stallman saying that + +00:23:03.360 --> 00:23:09.759 +Org Mode was doing too much. So my answer was just, coming from + +00:23:09.760 --> 00:23:14.159 +the inventor of Emacs, I took it as a compliment for Org Mode. + +00:23:14.160 --> 00:23:19.319 +But of course, that was just humor. And I agree that the + +00:23:19.320 --> 00:23:24.279 +simple things should keep being simple. And I like the + +00:23:24.280 --> 00:23:30.039 +custom syntax idea of Juan because it goes in the direction + +00:23:30.040 --> 00:23:34.159 +of flexibility while keeping things simple. + +00:23:34.160 --> 00:23:40.319 +And looking forward to what people will come up with. I like + +00:23:40.320 --> 00:23:44.839 +the idea that you want to formalize the syntax. I think that + +00:23:44.840 --> 00:23:48.479 +is really very good. I'd like to also submit it. I think that + +00:23:48.480 --> 00:23:52.359 +would be excellent. I'm also... I think it was proposed by + +00:23:52.360 --> 00:23:57.239 +Timothy, yeah. Initially. Okay. Yeah, that's really + +00:23:57.240 --> 00:24:02.839 +helpful. Pascal, are you still talking, I think? No, yeah, I + +00:24:02.840 --> 00:24:08.399 +just wanted to say also for the younger Emacs users, there is + +00:24:08.400 --> 00:24:12.839 +a lot of new things in Emacs the last five years. It has been so + +00:24:12.840 --> 00:24:17.719 +exciting. And I believe it's exciting for Org Mode too, the + +00:24:17.720 --> 00:24:22.439 +things you mentioned about track changes. uh native + +00:24:22.440 --> 00:24:25.639 +compilation and all that stuff that that's really good like + +00:24:25.640 --> 00:24:29.879 +some some performance problems that we had for org mode for + +00:24:29.880 --> 00:24:33.759 +the agenda and stuff like that were suddenly solved by uh the + +00:24:33.760 --> 00:24:38.159 +the crazy amazing work by Eli and emacs maintainers so + +00:24:38.160 --> 00:24:40.457 +it's really exciting for org as well. + +00:24:40.458 --> 00:24:43.566 +I don't know how you feel, Ihor, about this, + +00:24:43.567 --> 00:24:45.482 +but I know you are reading the Emacs + +00:24:45.483 --> 00:24:50.732 +development mailing list and keeping this is a job in + +00:24:50.733 --> 00:24:54.774 +itself, but it's really exciting for everyone, I guess. Not + +00:24:54.775 --> 00:24:58.274 +only that, I hope we can upstream org-ql, which will speed up + +00:24:58.275 --> 00:25:00.566 +agenda specifically even more. + +00:25:00.567 --> 00:25:06.982 +Okay. I need to fly away, but it was really nice connecting + +00:25:06.983 --> 00:25:13.899 +and I hope everyone has a great conference. Bye-bye. It was + +00:25:13.900 --> 00:25:16.107 +so good to see you. Thank you again for everything that you + +00:25:16.108 --> 00:25:21.399 +have done. Thanks to you both. Thank you. Bye-bye. Bye-bye. + +NOTE Off-stream Q&A + +00:25:28.520 --> 00:25:35.959 +All right. Is it only the two of us now? I don't really know who + +00:25:35.960 --> 00:25:40.239 +else. Can you see if there's anybody else in this room? I + +00:25:40.240 --> 00:25:45.079 +don't know. There are like two, four, six people and Sacha is + +00:25:45.080 --> 00:25:48.159 +one of them, so probably five people. Oh, Sacha is here. + +00:25:48.160 --> 00:25:51.999 +Okay. I haven't heard her say anything, but I see her in the + +00:25:52.000 --> 00:25:58.479 +chat. Okay. It's the same room, basically. Hi, Sacha. Oh, + +00:25:58.480 --> 00:26:02.199 +okay. They're also at her pad, so we may want to finish other + +00:26:02.200 --> 00:26:08.839 +questions, maybe, if there are some. This is just a circle. + +NOTE microemacs + +00:26:08.840 --> 00:26:12.079 +This is just a historical question, but Carsten, I think you + +00:26:12.080 --> 00:26:14.359 +used microemacs back in the day. + +00:26:14.360 --> 00:26:17.839 +Did that have any influence + +00:26:17.840 --> 00:26:23.879 +on Org? That is a really interesting question. I used + +00:26:23.880 --> 00:26:27.359 +microemacs as my first version of emacs, and then I stepped + +00:26:27.360 --> 00:26:33.359 +over to Emacs. I actually did two things at the same time. I + +00:26:33.360 --> 00:26:39.119 +also was working with so Awk basically, that language. I ran + +00:26:39.120 --> 00:26:45.599 +against walls with both Micro-Emacs and with Awk, where I had + +00:26:45.600 --> 00:26:48.639 +the feeling I don't have enough freedom to do everything + +00:26:48.640 --> 00:26:52.839 +that I wanted, so I switched to Perl on one side and to Emacs on + +00:26:52.840 --> 00:26:58.679 +the other side. That's what it was. Micro-Emacs absolutely + +00:26:58.680 --> 00:27:02.679 +had the function to pull me into Emacs, But it's not that I + +00:27:02.680 --> 00:27:04.759 +have specific microemacs features that would have + +00:27:04.760 --> 00:27:08.119 +triggered me to do something for Org Mode. I think that would be + +00:27:08.120 --> 00:27:14.207 +the answer to your question. All right, thanks. + +00:27:14.200 --> 00:27:21.639 +Are you a user of microemacs, George? I posted the source to + +00:27:21.640 --> 00:27:26.719 +CompSource's Amiga in 86, and I was somewhat responsible + +00:27:26.720 --> 00:27:31.959 +for it being in the wild. Oh, I'm so sorry that I didn't, + +00:27:31.960 --> 00:27:35.199 +wasn't really aware that I made the connection to your name. + +00:27:35.200 --> 00:27:39.719 +No, no, no, no. We all moved on and the world is a better place. + +00:27:39.720 --> 00:27:44.799 +Yeah. No, I actually did use it for something like, I think + +00:27:44.800 --> 00:27:47.440 +six years as my only admin at the time before I made the + +00:27:47.440 --> 00:27:51.359 +switch. No, I put it out to the list. David Lawrence ran with + +00:27:51.360 --> 00:27:55.399 +it and you know, that was about, that was the end of it. And I + +00:27:55.400 --> 00:27:57.599 +actually implemented something like fly spell for + +00:27:57.600 --> 00:28:02.359 +microemacs. I remember doing that at some point. Yeah, no, I + +00:28:02.360 --> 00:28:05.319 +don't want us to get stuck on that. I don't want us to get stuck + +00:28:05.320 --> 00:28:10.279 +on that, so. Yeah, yeah. Good. Thank you. Thank you for + +00:28:10.280 --> 00:28:17.679 +Org Mode. Yeah, you're most welcome. + +00:28:17.680 --> 00:28:22.199 +For microemacs, actually, I also tried it once. It feels + +00:28:22.200 --> 00:28:27.959 +like at home after Emacs, of course, the major downside was at + +00:28:27.960 --> 00:28:33.599 +this point is that there is no UTF support. I think that was + +00:28:33.600 --> 00:28:40.039 +like, unfortunately, that that's not going to work. I + +00:28:40.040 --> 00:28:43.959 +think I'm also going to disconnect now. But it was really + +00:28:43.960 --> 00:28:49.119 +fantastic to listen to your talk. I wish you all the best. I'm + +00:28:49.120 --> 00:28:53.479 +sure that is a good answer. Thank you for joining, and nice to + +00:28:53.480 --> 00:29:00.159 +meet you. Yeah, bye. Bye. + +00:29:00.160 --> 00:29:02.799 +Okay, so there are still people in the room, so if you want to + +00:29:02.800 --> 00:29:10.440 +ask questions, feel free to do it. I + +00:29:10.440 --> 00:29:12.679 +think there's one unanswered question in the etherpad + +00:29:12.680 --> 00:29:18.119 +also. Let me see. + +00:29:18.120 --> 00:29:21.639 +It's probably awkward to answer. Okay, I can answer and then + +00:29:21.640 --> 00:29:24.039 +probably answering the answer for this one. So there's a + +00:29:24.040 --> 00:29:28.519 +question about, from a person, I spent some time writing a + +00:29:28.520 --> 00:29:31.919 +library for myself, which involved working with Org files. + +NOTE Q: Is there/could there be a resource with which to recommend particularly well written codebases for review by others? + +00:29:31.920 --> 00:29:34.359 +One thing I struggled with was finding a good source of + +00:29:34.360 --> 00:29:41.599 +reference code which demonstrated idiomatic usage. + +00:29:41.600 --> 00:29:46.319 +particularly well-written code bases for review by + +00:29:46.320 --> 00:29:52.599 +others? That's a good question. We have some wiki pages. + +00:29:52.600 --> 00:29:57.039 +I'll put it in the answer later. You can also check Org Mode's + +00:29:57.040 --> 00:30:02.399 +code, but usually in org-element there are good usages, and + +00:30:02.400 --> 00:30:06.919 +in Org export. + +00:30:06.920 --> 00:30:10.279 +Otherwise, maybe something from Alphapapa, but I need to + +00:30:10.280 --> 00:30:13.320 +check that and probably reply later. + +00:30:16.167 --> 00:30:23.875 +Otherwise, that's all. So I'm going to end this. + +00:30:52.400 --> 00:32:09.720 +Bye bye. diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt new file mode 100644 index 00000000..0e543be3 --- /dev/null +++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt @@ -0,0 +1,86 @@ +WEBVTT + + +00:00:00.000 --> 00:01:14.279 +Introduction + +00:01:14.280 --> 00:03:15.919 +Message from Bastien Guerry + +00:03:15.920 --> 00:05:09.240 +My step-by-step journey to Org maintenance + +00:05:09.241 --> 00:08:11.766 +Priorities for Org maintenance + +00:08:11.767 --> 00:08:41.589 +Modular Org + +00:08:41.590 --> 00:09:59.999 +Slim down large Org libraries + +00:10:00.000 --> 00:11:25.399 +Upstream generic Org libraries + +00:11:25.400 --> 00:13:13.256 +Use modern Emacs APIs and libraries + +00:13:13.257 --> 00:14:45.730 +Improve Org parser APIs + +00:14:45.731 --> 00:15:57.379 +Improve Org babel APIs + +00:15:57.380 --> 00:16:31.199 +Beyond Org code and Emacs: third-party packages, apps, parsers + +00:16:31.200 --> 00:17:37.819 +org-contrib + +00:17:37.820 --> 00:18:25.839 +Org orphanage + +00:18:25.840 --> 00:20:23.868 +Mobile apps and parsers + +00:20:23.869 --> 00:21:56.239 +Long-standing syntax problems + +00:21:56.240 --> 00:23:30.502 +New syntax features + +00:23:30.503 --> 00:25:54.072 +New features I hope to see in Org + +00:25:54.073 --> 00:26:01.357 +Org community + +00:26:01.358 --> 00:27:17.159 +Org community forums - Org mailing list + +00:27:17.160 --> 00:30:05.579 +Org mailing list - world + +00:30:05.580 --> 00:31:01.519 +Contribute ideas! + +00:31:01.520 --> 00:31:34.999 +How much can a single person do? + +00:31:35.000 --> 00:33:02.079 +Contribute code! + +00:33:02.080 --> 00:35:40.239 +Why contribute? + +00:35:40.240 --> 00:37:41.419 +Benefits for code contributors + +00:37:41.420 --> 00:38:30.439 +Contributing as non-programmer + +00:38:30.440 --> 00:39:12.996 +Got no free time, but still want to help? + +00:39:12.997 --> 00:39:34.440 +Thank you diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt new file mode 100644 index 00000000..9a13366b --- /dev/null +++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt @@ -0,0 +1,2046 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:03.039 +Hello, everyone. My name is Ihor Radchenko, + +00:00:03.040 --> 00:00:07.319 +and I'm the new official Org Mode maintainer. + +00:00:07.320 --> 00:00:09.679 +Today, I'll briefly introduce myself + +00:00:09.680 --> 00:00:12.319 +and then share my ideas about the future of + +00:00:12.320 --> 00:00:16.039 +Org Mode development. I will start by passing + +00:00:16.040 --> 00:00:18.759 +the word from Bastien, the previous maintainer. + +00:00:18.760 --> 00:00:22.239 +Then I will tell you a little bit about my story, + +00:00:22.240 --> 00:00:24.119 +starting from ordinary Org Mode user + +00:00:24.120 --> 00:00:26.039 +all the way to the maintainer. + +00:00:26.040 --> 00:00:30.839 +Then I will detail the new directions of development + +00:00:30.840 --> 00:00:33.599 +and specific features which I want to see + +00:00:33.600 --> 00:00:35.799 +in Org Mode in the coming years. + +00:00:35.800 --> 00:00:39.659 +And I will conclude by asking you, Org Mode users, + +00:00:39.660 --> 00:00:42.399 +to contribute to Org Mode + +00:00:42.400 --> 00:00:46.759 +because all the features which are too many + +00:00:46.760 --> 00:00:49.259 +can only be implemented with the help of the community, + +00:00:49.260 --> 00:00:51.879 +with the help of more contributors. + +00:00:51.880 --> 00:00:53.579 +And for that, of course, I will also talk + +00:00:53.580 --> 00:00:59.479 +about Org community and how I see it evolve + +00:00:59.480 --> 00:01:01.199 +so that we have a good communication + +00:01:01.200 --> 00:01:03.039 +between the development of Org Mode + +00:01:03.040 --> 00:01:07.559 +and the community ideas. + +00:01:07.560 --> 00:01:14.279 +Let me first pass the word to Bastien. + +NOTE Message from Bastien Guerry + +00:01:14.280 --> 00:01:17.599 +Hello, everyone. Ihor Radchenko is the new Org Mode + +00:01:17.600 --> 00:01:18.519 +maintainer. + +00:01:18.520 --> 00:01:21.039 +He's been acting as such for a couple of years now, + +00:01:21.040 --> 00:01:23.479 +and I'm really glad he's finally agreed to take on the + +00:01:23.480 --> 00:01:26.439 +role officially. As a maintainer, I've probably done + +00:01:26.440 --> 00:01:29.439 +a few things right and certainly made many mistakes. + +00:01:29.440 --> 00:01:32.319 +Here are 4 lessons I've learned in 14 years. + +00:01:32.320 --> 00:01:34.319 +The first is that maintaining Org Mode + +00:01:34.320 --> 00:01:36.439 +isn't just about code, it's mostly + +00:01:36.440 --> 00:01:40.679 +about users. Of course, some of them will never learn how to + +00:01:40.680 --> 00:01:43.159 +report a bug, some of them will behave like spoiled + +00:01:43.160 --> 00:01:46.319 +children, and most of them will expect you to work for free + +00:01:46.320 --> 00:01:50.439 +forever. Nevertheless, the time is as valuable as yours. + +00:01:50.440 --> 00:01:53.639 +Whatever they request, there is always something that can + +00:01:53.640 --> 00:01:57.879 +lead to a positive outcome for Org Mode or its community. + +00:01:57.880 --> 00:02:00.719 +The second lesson is that maintenance isn't just about + +00:02:00.720 --> 00:02:04.239 +technical choices. It's also about predictability. + +00:02:04.240 --> 00:02:07.879 +Be very clear and very loud about what users and contributors + +00:02:07.880 --> 00:02:11.159 +can expect of your time, skills, and motivations. + +00:02:11.160 --> 00:02:12.879 +Stick to the robustness principle + +00:02:12.880 --> 00:02:15.719 +by being liberal in what you accept + +00:02:15.720 --> 00:02:19.319 +and strict in what you produce. Thirdly, it's all + +00:02:19.320 --> 00:02:22.319 +about learning. Let's build a culture together where it's + +00:02:22.320 --> 00:02:25.719 +okay to ask stupid questions. No one is born knowing how to + +00:02:25.720 --> 00:02:28.639 +write in English, how to report a bug, or how to maintain a + +00:02:28.640 --> 00:02:32.059 +large piece of code. Remember that old-timers were newbies + +00:02:32.060 --> 00:02:35.199 +and that newbies could become maintainers. We all have a lot + +00:02:35.200 --> 00:02:38.759 +to learn, even if it's just how to respect each other. + +00:02:38.760 --> 00:02:42.239 +Finally, as a maintainer, think about the next one. Who will + +00:02:42.240 --> 00:02:45.519 +be in your shoes next? What kind of maintainer do you want for + +00:02:45.520 --> 00:02:48.839 +a software you will be using for decades? It's also a + +00:02:48.840 --> 00:02:52.159 +responsibility of the Org Mode community. How can we + +00:02:52.160 --> 00:02:55.999 +collectively attract maintainers that want to help us use + +00:02:56.000 --> 00:02:59.359 +and enhance this wonderful little tool? How can we, + +00:02:59.360 --> 00:03:02.199 +as Org Mode users, help Ihor pave the way + +00:03:02.200 --> 00:03:04.399 +for the next maintainers? + +00:03:04.400 --> 00:03:08.279 +Enough said. I'm confident Org Mode is in good hands and I'm a very + +00:03:08.280 --> 00:03:11.559 +happy user. Thanks everyone for all these years of fun and + +00:03:11.560 --> 00:03:15.919 +learning. + +NOTE My step-by-step journey to Org maintenance + +00:03:15.920 --> 00:03:20.279 +Now back to my talk. Let me start by briefly introducing + +00:03:20.280 --> 00:03:23.959 +myself. I'm actually not a programmer. By training, I'm a + +00:03:23.960 --> 00:03:27.519 +material scientist. and I only started using Emacs and + +00:03:27.520 --> 00:03:30.719 +Org Mode and naturally doing programming (because that's + +00:03:30.720 --> 00:03:36.799 +Emacs) when I was doing my PhD and I wanted to use Org Mode to + +00:03:36.800 --> 00:03:40.479 +tame my research work. A couple of years I was just an + +00:03:40.480 --> 00:03:44.599 +ordinary user, until I learned enough and + +00:03:44.600 --> 00:03:48.463 +got enough courage to report my first bug. + +00:03:48.464 --> 00:03:51.639 +Then it all evolved over the years. + +00:03:51.640 --> 00:03:53.959 +I started participating in the mailing list, + +00:03:53.960 --> 00:03:56.559 +I started learning more about Elisp, + +00:03:56.560 --> 00:03:59.839 +I reported more complex bugs, + +00:03:59.840 --> 00:04:08.879 +I eventually got around to go and fix the tricky bugs. + +00:04:08.880 --> 00:04:11.719 +Then I started participating more in Org mailing list + +00:04:11.720 --> 00:04:16.919 +in helping fixing bugs in selected areas of Org + +00:04:16.920 --> 00:04:22.839 +mode and eventually switching to all parts of Org. + +00:04:22.840 --> 00:04:27.639 +At some point I ended up doing the de facto maintenance job + +00:04:27.640 --> 00:04:32.679 +together with Bastien and got an actual maintenance offer + +00:04:32.680 --> 00:04:38.599 +which I accepted recently. The key takeaway I want you to get + +00:04:38.600 --> 00:04:40.999 +from here is that you don't have to be a programmer, you don't + +00:04:41.000 --> 00:04:47.239 +have to know Elisp to contribute, and you don't even have to + +00:04:47.240 --> 00:04:51.439 +be like that to become a maintainer. All it takes is + +00:04:51.440 --> 00:04:55.279 +slow, methodical, persistent learning over the years, + +00:04:55.280 --> 00:04:58.499 +participating in the community, and eventually + +00:04:58.500 --> 00:05:02.399 +submitting your patches upstream. And eventually you can + +00:05:02.400 --> 00:05:07.679 +become a maintainer, or not a maintainer as you wish. + +00:05:07.680 --> 00:05:09.240 +Enough about me. + +NOTE Priorities for Org maintenance + +00:05:09.241 --> 00:05:13.359 +Let's talk about what I think should happen with + +00:05:13.360 --> 00:05:18.859 +Org Mode and what my goals on Org Mode is. The first and top + +00:05:18.860 --> 00:05:25.199 +priority for me is the basics. The basics, the + +00:05:25.200 --> 00:05:26.069 +code-based stability. + +00:05:26.070 --> 00:05:29.719 +Basically, all the foundations, all the APIs in + +00:05:29.720 --> 00:05:34.959 +Org Mode, all the basic libraries, which everything builds + +00:05:34.960 --> 00:05:39.079 +upon so that we have fewer bugs and we have more + +00:05:39.080 --> 00:05:42.599 +understandable code so that others who want to contribute + +00:05:42.600 --> 00:05:44.651 +have easier time understanding + +00:05:44.652 --> 00:05:46.371 +what is going on in the code base and + +00:05:46.372 --> 00:05:52.259 +contribute without much of a problem or confusion. + +00:05:52.260 --> 00:05:56.339 +Second equally important direction is the Org community, + +00:05:56.340 --> 00:06:00.579 +because a single person, even a couple of people, cannot + +00:06:00.580 --> 00:06:05.599 +really develop such a big project as Org Mode. And we always + +00:06:05.600 --> 00:06:08.439 +want new contributors, which are not coming from nowhere. + +00:06:08.440 --> 00:06:10.228 +We need to have the community of users. + +00:06:10.229 --> 00:06:12.199 +We have a community of + +00:06:12.200 --> 00:06:15.679 +people who participate in discussions, who later submit + +00:06:15.680 --> 00:06:19.719 +patches and code, and that's where we get most of the new + +00:06:19.720 --> 00:06:24.919 +features. So I would like to improve the communication + +00:06:24.920 --> 00:06:29.879 +between Org community and the development. The third + +00:06:29.880 --> 00:06:34.259 +direction I want to pursue is making life easier for + +00:06:34.260 --> 00:06:38.639 +third-party packages. Because we don't only have org-mode + +00:06:38.640 --> 00:06:41.319 +as it's distributed with Emacs. We have a lot of + +00:06:41.320 --> 00:06:45.196 +ELPA packages. We have a lot of MELPA packages. + +00:06:45.197 --> 00:06:47.917 +People who want some specific features + +00:06:47.918 --> 00:06:49.839 +on top of org-mode do develop + +00:06:49.840 --> 00:06:54.279 +these packages which are widely used or not so widely used. + +00:06:54.280 --> 00:06:57.639 +It's not only about Emacs. We have a lot of mobile apps + +00:06:57.640 --> 00:07:01.879 +that can work with Org files, have a lot of parsers which + +00:07:01.880 --> 00:07:06.039 +enable this mobile apps, or in general, programs outside + +00:07:06.040 --> 00:07:11.019 +Elisp to understand Org files. + +00:07:11.020 --> 00:07:14.959 +Fourth direction is the Org markup as a foundation of + +00:07:14.960 --> 00:07:18.319 +org-mode as a major mode, because we have a lot of + +00:07:18.320 --> 00:07:20.573 +functionality in org-mode itself inside Emacs, + +00:07:20.574 --> 00:07:23.674 +but it's all based on the underlying markup, + +00:07:23.675 --> 00:07:27.435 +and markup should have enough features + +00:07:27.436 --> 00:07:32.479 +to support the functions we want to see there. + +00:07:32.480 --> 00:07:34.919 +Last direction, which is somewhat less + +00:07:34.920 --> 00:07:37.834 +important, mostly because I don't have + +00:07:37.835 --> 00:07:40.136 +that much time to focus on everything, + +00:07:40.137 --> 00:07:44.159 +is the new features. I do want to see + +00:07:44.160 --> 00:07:46.840 +certain important features in Org mode, + +00:07:46.841 --> 00:07:50.262 +but I usually cannot spend too much time on them + +00:07:50.263 --> 00:07:53.084 +because of the previous more important parts. + +00:07:53.085 --> 00:07:54.999 +I do rely on the org community and + +00:07:55.000 --> 00:07:57.456 +the contributors to implement these new features. + +00:07:57.457 --> 00:08:01.915 +My idea is that I want to direct which features + +00:08:01.916 --> 00:08:03.757 +and how they should be implemented, + +00:08:03.758 --> 00:08:05.299 +but the actual people who implement + +00:08:05.300 --> 00:08:09.463 +them should come from the community. + +00:08:09.464 --> 00:08:11.766 +Now let's go into the details. + +NOTE Modular Org + +00:08:11.767 --> 00:08:15.719 +The code base. As a bit of motivation, I would like + +00:08:15.720 --> 00:08:19.279 +to share this email from Richard Stallman, who a couple of + +00:08:19.280 --> 00:08:27.039 +years ago asked about improving Org mode by making it + +00:08:27.040 --> 00:08:32.839 +more modular. That's directly asking about improving the + +00:08:32.840 --> 00:08:35.639 +foundations of the code. That's what I think is + +00:08:35.640 --> 00:08:41.589 +an important direction as well. Here's an example. + +NOTE Slim down large Org libraries + +00:08:41.590 --> 00:08:45.312 +We have a lot of really, really large org libraries, + +00:08:45.313 --> 00:08:49.376 +like org.el, which is like one megabyte or something large, + +00:08:49.377 --> 00:08:51.558 +org-agenda, org-table, org-list, + +00:08:51.559 --> 00:08:52.879 +a number of files which are really, + +00:08:52.880 --> 00:08:56.599 +really, really large. What is worse is they are hard to + +00:08:56.600 --> 00:09:00.906 +understand sometimes. I even have an example, + +00:09:00.907 --> 00:09:04.505 +alphapapa complained that part of his motivation + +00:09:04.506 --> 00:09:07.867 +to write org-ql and specifically his agenda part, + +00:09:07.868 --> 00:09:08.879 +agenda-like part, was + +00:09:08.880 --> 00:09:13.119 +because org-agenda is so hard to understand that it's + +00:09:13.120 --> 00:09:15.572 +easier to start from scratch. + +00:09:15.573 --> 00:09:17.079 +I don't want such situations + +00:09:17.080 --> 00:09:20.374 +to happen in future, if possible at all. + +00:09:20.375 --> 00:09:21.879 +One of the projects + +00:09:21.880 --> 00:09:23.116 +I'm currently working on, + +00:09:23.117 --> 00:09:25.100 +it's work in progress now, + +00:09:25.101 --> 00:09:28.437 +is splitting Org libraries into smaller parts, + +00:09:28.438 --> 00:09:31.808 +into more documented parts, + +00:09:31.809 --> 00:09:34.239 +into the APIs which are actually + +00:09:34.240 --> 00:09:38.470 +documented and explained in the code at least, + +00:09:38.471 --> 00:09:42.571 +so that people who just open org-mode code + +00:09:42.572 --> 00:09:45.239 +cannot be scared away and go and + +00:09:45.240 --> 00:09:47.999 +read the comments and understand what is happening there + +00:09:48.000 --> 00:09:52.039 +easier. At this point, I have almost doubled the number of + +00:09:52.040 --> 00:09:54.839 +libraries. It's still work in progress, so there's a lot of + +00:09:54.840 --> 00:09:59.999 +room for improvement in this area. + +NOTE Upstream generic Org libraries + +00:10:00.000 --> 00:10:04.599 +Another direction which is + +00:10:04.600 --> 00:10:09.799 +somewhat reasonable in relation to splitting things down + +00:10:09.800 --> 00:10:15.159 +is that some libraries are really generic in Org Mode, + +00:10:15.160 --> 00:10:18.239 +because Org Mode often has a functionality + +00:10:18.240 --> 00:10:20.100 +which is really new, and for that, + +00:10:20.101 --> 00:10:22.239 +it had to implement some very generic + +00:10:22.240 --> 00:10:24.222 +functionality that doesn't have to be used + +00:10:24.223 --> 00:10:24.903 +just for Org Mode. + +00:10:24.904 --> 00:10:27.924 +This can be generalized for Emacs in general. + +00:10:27.925 --> 00:10:29.645 +There is a number of libraries + +00:10:29.646 --> 00:10:32.999 +which we may or may not upstream to + +00:10:33.000 --> 00:10:37.559 +Emacs, depending on what Emacs maintain, I think. As one + +00:10:37.560 --> 00:10:40.719 +example is org-capture, because it's a very obvious + +00:10:40.720 --> 00:10:43.679 +example. org-capture started as support from remember.el, + +00:10:43.680 --> 00:10:46.759 +which is still a part of Emacs. It has more features than + +00:10:46.760 --> 00:10:50.039 +remember.el, which we required for Org. But, you know, + +00:10:50.040 --> 00:10:55.139 +these features can be backported. Why not? And then + +00:10:55.140 --> 00:10:58.679 +not only Org-mode, but other Emacs libraries can benefit + +00:10:58.680 --> 00:11:01.957 +from these features we have in Org-mode only. + +00:11:01.958 --> 00:11:04.739 +Similarly, I have a long list of + +00:11:04.740 --> 00:11:12.039 +different libraries that can be shared. + +00:11:12.040 --> 00:11:14.004 +Yeah, for some I'm not sure, + +00:11:14.005 --> 00:11:18.959 +but in general, there is a lot of + +00:11:18.960 --> 00:11:25.399 +work that may be done and may be discussed in the future. + +NOTE Use modern Emacs APIs and libraries + +00:11:25.400 --> 00:11:31.479 +The third part about the basics is making use of the new Emacs + +00:11:31.480 --> 00:11:36.039 +libraries. Org Mode in general is quite well written in terms + +00:11:36.040 --> 00:11:40.039 +of Emacs integration. We do support many of the Emacs + +00:11:40.040 --> 00:11:44.359 +features and libraries which are generic. However, in more + +00:11:44.360 --> 00:11:47.999 +recent Emacs versions, we started getting some new + +00:11:48.000 --> 00:11:50.799 +features, and we do want to make use of them in Org. + +00:11:50.800 --> 00:11:55.879 +For example, recently we contributed yank-media support for + +00:11:55.880 --> 00:12:00.359 +clipboard pasting and drag and drop. Now it is supported + +00:12:00.360 --> 00:12:04.399 +in Org mode already in the released version. Eventually + +00:12:04.400 --> 00:12:08.359 +we want to support transient.el, because now Org uses ad hoc + +00:12:08.360 --> 00:12:11.999 +system. It's of course much better to use existing and + +00:12:12.000 --> 00:12:14.839 +more powerful menus, which are implemented in + +00:12:14.840 --> 00:12:18.159 +transient. It even has some initial work-in-progress + +00:12:18.160 --> 00:12:20.028 +implementation. I hope it can be eventually + +00:12:20.029 --> 00:12:23.960 +extended to the whole Org Mode + +00:12:23.961 --> 00:12:29.359 +There are other things like compatibility, which there is + +00:12:29.360 --> 00:12:33.519 +an excellent Emacs library, compat.el, that provides + +00:12:33.520 --> 00:12:37.599 +backwards compatibility and Org also has something like this + +00:12:37.600 --> 00:12:39.439 +in org-compat. We don't have to write it ourself again. + +00:12:39.440 --> 00:12:43.741 +We can make use of the existing library. + +00:12:43.742 --> 00:12:46.043 +Similarly, there's a very, very new library + +00:12:46.044 --> 00:12:48.759 +track-changes for tracking changes + +00:12:48.760 --> 00:12:53.159 +in real time. Eventually, if you want to support + +00:12:53.160 --> 00:12:56.359 +context-menu mode, maybe touchscreen, Android + +00:12:56.360 --> 00:13:00.999 +support, I don't know, but I hope it can be done by someone. + +00:13:01.000 --> 00:13:09.319 +And some more generic library: select thingatpt. + +00:13:09.320 --> 00:13:13.256 +That's about using external APIs. + +NOTE Improve Org parser APIs + +00:13:13.257 --> 00:13:18.557 +Now about the internal Org APIs. + +00:13:18.558 --> 00:13:19.439 +One important, probably one of the most important + +00:13:19.440 --> 00:13:23.259 +parts of Org is the parser, how Org itself understands the + +00:13:23.260 --> 00:13:27.159 +Org files. The situation is that we have two parsers in + +00:13:27.160 --> 00:13:30.999 +Org mode. One is the Org element, the proper parser, which we + +00:13:31.000 --> 00:13:34.519 +use as a reference, but many parts of Org still use regular + +00:13:34.520 --> 00:13:38.079 +expressions, which are approximate. These two parsers + +00:13:38.080 --> 00:13:41.839 +are not exactly consistent, which is really bad, and I hope + +00:13:41.840 --> 00:13:47.999 +to solve this. I already started doing some work by + +00:13:48.000 --> 00:13:54.140 +factoring out some part of abstract syntax tree and working + +00:13:54.141 --> 00:13:57.519 +on real-time parser, incremental parser, which is enabled + +00:13:57.520 --> 00:14:00.039 +by default in Org 9.6, but there are still parts which I need + +00:14:00.040 --> 00:14:02.999 +to work on. Eventually I want to get rid of regular + +00:14:03.000 --> 00:14:05.439 +expression-based parser completely, so that we don't have + +00:14:05.440 --> 00:14:10.199 +any inconsistencies inside Org Mode. One of the examples of + +00:14:10.200 --> 00:14:13.159 +these parts that are still using regular expression is + +00:14:13.160 --> 00:14:16.719 +fontification, which is often simply wrong, especially in + +00:14:16.720 --> 00:14:21.639 +some edge cases, and we really want to use the proper parser + +00:14:21.640 --> 00:14:27.559 +in this area. Maybe even editing org files using the parser + +00:14:27.560 --> 00:14:31.799 +syntax tree, but that might be tricky, although there is an + +00:14:31.800 --> 00:14:38.119 +existing library that implements some ideas for this. + +00:14:38.120 --> 00:14:41.519 +The key point is that org-element-api, the parser, should + +00:14:41.520 --> 00:14:42.749 +eventually be used everywhere + +00:14:42.750 --> 00:14:45.730 +so that everything is consistent. + +NOTE Improve Org babel APIs + +00:14:45.731 --> 00:14:50.359 +The second important API is the Org babel. + +00:14:50.360 --> 00:14:54.414 +Currently, Org babel does have some API, + +00:14:54.415 --> 00:14:56.195 +but first, it's not well documented. + +00:14:56.196 --> 00:14:59.039 +Second, it's sometimes awkwardly + +00:14:59.040 --> 00:15:04.819 +designed, especially compared with the exporter. + +00:15:04.820 --> 00:15:11.419 +I do want Org Babel APIs to be more consistent. + +00:15:11.420 --> 00:15:14.879 +Another thing about Org Babel, it's not exactly API, but you + +00:15:14.880 --> 00:15:18.259 +know that documentation for most of the Babel backends are + +00:15:18.260 --> 00:15:20.879 +not even in the Org manual, even though the backends are + +00:15:20.880 --> 00:15:25.559 +built-in. They are on Org Wiki, and we do want to move them to + +00:15:25.560 --> 00:15:29.919 +the manual eventually. That's the important part, and it + +00:15:29.920 --> 00:15:34.519 +should be done. Those are some obstacles, like not all the + +00:15:34.520 --> 00:15:39.399 +features are properly implemented, and that's a bit of an + +00:15:39.400 --> 00:15:43.159 +extra job that should be done. Another small thing which + +00:15:43.160 --> 00:15:48.079 +thanks to Bruno Barbier is being done, in progress: we + +00:15:48.080 --> 00:15:51.599 +should have a more robust asynchronous API for babel. + +00:15:51.600 --> 00:15:53.600 +I hope it can progress further. + +00:15:53.601 --> 00:15:57.379 +For now, it already progressed quite far. + +NOTE Beyond Org code and Emacs: third-party packages, apps, parsers + +00:15:57.380 --> 00:15:59.959 +That's all about the basics, the underlying + +00:15:59.960 --> 00:16:04.799 +backbone of the Org codebase. Let's move to the second + +00:16:04.800 --> 00:16:09.519 +important direction which is + +00:16:09.520 --> 00:16:13.739 +the third-party packages and basically the parsers + +00:16:13.740 --> 00:16:18.279 +for mobile apps. I will postpone the community to the end + +00:16:18.280 --> 00:16:23.919 +because I want to have a call for contribution at the end. + +00:16:23.920 --> 00:16:31.199 +For third-party packages, I would like to remind you that + +NOTE org-contrib + +00:16:31.200 --> 00:16:34.239 +Org mode used to have something called org-contrib as a + +00:16:34.240 --> 00:16:39.799 +part of Org mode, which is a collection of small libraries, + +00:16:39.800 --> 00:16:44.079 +small packages that didn't have a proper + +00:16:44.080 --> 00:16:45.495 +copyright assignment basically, + +00:16:45.496 --> 00:16:49.359 +but more or less a part of Org mode. This is + +00:16:49.360 --> 00:16:52.119 +no longer the case. Now what we did is + +00:16:52.120 --> 00:16:56.641 +we moved a number of very rarely used libraries + +00:16:56.642 --> 00:16:58.759 +from Org core itself to org-contrib, + +00:16:58.760 --> 00:17:03.779 +and now we treat org-contrib as basically the libraries + +00:17:03.780 --> 00:17:08.020 +that we really want someone to take responsibility for. + +00:17:08.021 --> 00:17:10.580 +We want to maintain this for everything that is in + +00:17:10.581 --> 00:17:18.079 +org-contrib, and from me and other Org team, we + +00:17:18.080 --> 00:17:21.162 +do not spend too much time maintaining this package, + +00:17:21.163 --> 00:17:25.286 +just do some most basic bug fixing, and that's all. + +00:17:25.287 --> 00:17:27.359 +If you know, if you see + +00:17:27.360 --> 00:17:30.031 +some libraries from org-contrib and you use them, + +00:17:30.032 --> 00:17:31.991 +and you know Elisp, please volunteer to be + +00:17:31.992 --> 00:17:34.454 +the maintainer, because otherwise + +00:17:34.455 --> 00:17:37.819 +there will be not much progress in these libraries. + +NOTE Org orphanage + +00:17:37.820 --> 00:17:40.719 +As a natural extension of this and inspired by + +00:17:40.720 --> 00:17:46.199 +Tarsius's Emacs Orphanage idea, we also maintain a small + +00:17:46.200 --> 00:17:50.359 +page basically listing the libraries, some others like + +00:17:50.360 --> 00:17:55.439 +packages, Emacs packages that are not really maintained. + +00:17:55.440 --> 00:17:59.239 +If you are a maintainer of a library and you don't have time + +00:17:59.240 --> 00:18:02.507 +to do it, you can write to Org mailing list + +00:18:02.508 --> 00:18:05.209 +and we can add the library to this page + +00:18:05.210 --> 00:18:09.918 +so that we can search for new maintainers + +00:18:09.919 --> 00:18:12.839 +in a more centralized way. If you are an + +00:18:12.840 --> 00:18:18.119 +Elisp hacker and you want to help something for Org Mode, + +00:18:18.120 --> 00:18:25.839 +you can check that page and see where you can help. + +NOTE Mobile apps and parsers + +00:18:25.840 --> 00:18:29.879 +Now away from Emacs, or mobile apps. + +00:18:29.880 --> 00:18:33.948 +We have quite a lot of mobile apps at this point. + +00:18:33.949 --> 00:18:35.759 +Unfortunately, it's very hard + +00:18:35.760 --> 00:18:42.459 +for me and many other Elisp contributors to contribute to + +00:18:42.460 --> 00:18:46.759 +these apps because they are not using Elisp naturally. But + +00:18:46.760 --> 00:18:52.359 +these applications heavily rely on Org markup. I do hope + +00:18:52.360 --> 00:18:55.799 +that we can keep Org markup consistent enough and rich + +00:18:55.800 --> 00:19:00.599 +enough so that people don't have to invent extensions to Org + +00:19:00.600 --> 00:19:06.020 +like what happened to Markdown. + +00:19:06.021 --> 00:19:09.542 +I really want to emphasize that + +00:19:09.543 --> 00:19:12.359 +I want to see more Org parsers in different + +00:19:12.360 --> 00:19:13.739 +languages so that they can be used by developers. + +00:19:13.740 --> 00:19:24.185 +For people who are writing these parsers, + +00:19:24.186 --> 00:19:27.267 +I want to share this link. It is the org-syntax reference. + +00:19:27.268 --> 00:19:29.368 +It is the official Org syntax, + +00:19:29.369 --> 00:19:33.631 +which is what we think it should be. + +00:19:33.632 --> 00:19:36.212 +It's described in plain human language. + +00:19:36.213 --> 00:19:39.855 +It's not a code. All details should be listed there. + +00:19:39.856 --> 00:19:43.557 +Please use it as a reference if you are writing a parser. + +00:19:43.558 --> 00:19:45.118 +Eventually, this document will be + +00:19:45.119 --> 00:19:51.672 +submitted to IETF, I hope. In the future + +00:19:51.673 --> 00:19:56.059 +I hope to write a set of tests which will work as benchmarks. + +00:19:56.060 --> 00:19:58.839 +basically we have some existing tests for our internal + +00:19:58.840 --> 00:20:04.319 +parser and I want to factor out these tests so they can be used + +00:20:04.320 --> 00:20:07.359 +by any parser, so that we can compare the performance and + +00:20:07.360 --> 00:20:14.579 +which parts of Org mode are parsed and which parts are not. + +00:20:14.580 --> 00:20:18.999 +I mentioned that we want to submit to IETF, which means that + +00:20:19.000 --> 00:20:23.868 +Org markup will become the actual registered format. + +NOTE Long-standing syntax problems + +00:20:23.869 --> 00:20:31.279 +But before we do that and thus fix Org markup in stone, + +00:20:31.280 --> 00:20:34.614 +because it's very hard to change things in the IETF, + +00:20:34.615 --> 00:20:38.836 +it's important to address important problems, + +00:20:38.837 --> 00:20:41.217 +existing problems with Org syntax. + +00:20:41.218 --> 00:20:43.639 +There are some problems, like I mentioned the + +00:20:43.640 --> 00:20:46.941 +inconsistencies between the two existing parsers + +00:20:46.942 --> 00:20:51.407 +in Org mode. There are also some parts, + +00:20:51.408 --> 00:20:53.149 +there are some examples, like there are + +00:20:53.150 --> 00:20:54.799 +problems with numeric priorities, for + +00:20:54.800 --> 00:20:58.719 +example, which are not treated consistently. There are + +00:20:58.720 --> 00:21:02.599 +problems, more general problems with syntax when people + +00:21:02.600 --> 00:21:07.239 +request some edge cases which should be addressed. Like, + +00:21:07.240 --> 00:21:10.101 +it's very hard to do interword markup. + +00:21:10.102 --> 00:21:13.701 +We have zero-width space workaround, but many people dislike it, + +00:21:13.702 --> 00:21:16.262 +so maybe we want to do something about it. + +00:21:16.263 --> 00:21:18.079 +We have some edge cases when we + +00:21:18.080 --> 00:21:22.119 +combine emphasis with links. We have some edge cases when we + +00:21:22.120 --> 00:21:24.959 +have double blank lines inside some source blocks, for + +00:21:24.960 --> 00:21:30.079 +example, and combination in the list. I hope we can + +00:21:30.080 --> 00:21:33.399 +somehow address it. It's not impossible to do it, it just + +00:21:33.400 --> 00:21:38.919 +requires time. One annoying part is the inline task syntax. + +00:21:38.920 --> 00:21:41.479 +It's annoying both from the programming perspective, + +00:21:41.480 --> 00:21:43.919 +internally as implementation, and from the UI + +00:21:43.920 --> 00:21:47.519 +perspective, because there are too many stars. We + +00:21:47.520 --> 00:21:50.479 +probably should redesign it eventually, maybe in + +00:21:50.480 --> 00:21:56.239 +backwards-compatible way, but we will see how it goes. + +NOTE New syntax features + +00:21:56.240 --> 00:22:00.639 +Another part is not just fixing the edge cases or problems, + +00:22:00.640 --> 00:22:04.039 +it's the completely new syntax features. That's probably + +00:22:04.040 --> 00:22:07.959 +done after we submit to IETF. But there are important things + +00:22:07.960 --> 00:22:11.119 +that people often request, like time zone support in + +00:22:11.120 --> 00:22:15.919 +timestamps. Better repeaters, like more flexible + +00:22:15.920 --> 00:22:21.799 +repeaters, that's really a frequent request also. + +00:22:21.800 --> 00:22:28.919 +Another idea is some custom markup, which is + +00:22:28.920 --> 00:22:31.939 +coming to various requests, like, for example, people + +00:22:31.940 --> 00:22:37.887 +often ask to highlight some words with a color, + +00:22:37.888 --> 00:22:40.890 +for example, or with some other special way + +00:22:40.891 --> 00:22:43.333 +and then export it in a special way, + +00:22:43.334 --> 00:22:47.239 +just as we do with special blocks, basically. + +00:22:47.240 --> 00:22:51.061 +What I want to introduce is the ability to do it + +00:22:51.062 --> 00:22:54.601 +on a macro level or inline. + +00:22:54.602 --> 00:22:57.879 +Of course, a new syntax feature which I wish we could + +00:22:57.880 --> 00:23:01.064 +have is the multi-line cells in tables. + +00:23:01.065 --> 00:23:02.545 +It's very frequently requested as well, + +00:23:02.546 --> 00:23:07.007 +but I really have no clue how to do it. + +00:23:07.008 --> 00:23:09.239 +We had a discussion about this in previous + +00:23:09.240 --> 00:23:13.359 +discussions, but there was no conclusion. We don't see a + +00:23:13.360 --> 00:23:16.155 +good way how to implement it syntax-wise. + +00:23:16.156 --> 00:23:19.140 +Unlike time zones where we decided exactly the syntax, + +00:23:19.141 --> 00:23:22.665 +how it could be and we just need patches to be submitted, + +00:23:22.666 --> 00:23:25.610 +here even the idea of syntax is not clear. + +00:23:25.611 --> 00:23:26.771 +Please do participate in these discussions + +00:23:26.772 --> 00:23:30.502 +if you have ideas. + +NOTE New features I hope to see in Org + +00:23:30.503 --> 00:23:32.519 +The last direction is the + +00:23:32.520 --> 00:23:36.319 +new features. In general, I welcome all kinds of good + +00:23:36.320 --> 00:23:39.559 +features, but there are certain things which I explicitly + +00:23:39.560 --> 00:23:43.919 +want to see and I hope to see submitted. If you are + +00:23:43.920 --> 00:23:48.559 +interested, please do submit patches. One, and probably + +00:23:48.560 --> 00:23:50.799 +many people are aware about it, is the asynchronous LaTeX + +00:23:50.800 --> 00:23:55.319 +preview, developed by Timothy and Karthik. I hope it can be + +00:23:55.320 --> 00:23:59.279 +finalized eventually and upstreamed. It's pretty much in + +00:23:59.280 --> 00:24:02.319 +ready state, but on the technical level it should be + +00:24:02.320 --> 00:24:09.879 +discussed further and revised. The second is org-ql by Adam. + +00:24:09.880 --> 00:24:17.239 +I hope it can be upstreamed. It's also a work in progress. + +00:24:17.240 --> 00:24:20.519 +It's just a question of free time for Adam mostly, I think, + +00:24:20.520 --> 00:24:26.199 +and me. That's another important part, new feature. The + +00:24:26.200 --> 00:24:30.239 +third is the so-called multi-page export. The idea is the + +00:24:30.240 --> 00:24:34.319 +same as many packages for blog posts, so that you have a + +00:24:34.320 --> 00:24:39.479 +single Org file and then you can export multiple HTML pages, + +00:24:39.480 --> 00:24:42.599 +for example, or PDF pages, anything like that. This work in + +00:24:42.600 --> 00:24:46.687 +progress by Orm, thanks to him, + +00:24:46.688 --> 00:24:49.349 +although it was a little bit stuck because + +00:24:49.350 --> 00:24:52.079 +I am not exactly sure how to best integrate it + +00:24:52.080 --> 00:24:56.879 +into the existing APIs. If you are a developer of one of the + +00:24:56.880 --> 00:25:01.079 +blogging packages, I would appreciate if you can chime in + +00:25:01.080 --> 00:25:06.479 +and probably share some ideas here. Next are just some + +00:25:06.480 --> 00:25:09.839 +wishes I wish we could have, but + +00:25:09.840 --> 00:25:11.949 +it's not very detailed. One is + +00:25:11.950 --> 00:25:14.159 +the multi-language support, so that we can have Org + +00:25:14.160 --> 00:25:16.879 +documents in multiple languages, or maybe even + +00:25:16.880 --> 00:25:21.159 +translations. The collaborative editing that many + +00:25:21.160 --> 00:25:25.359 +people would wish to have, I think. Things like tracking + +00:25:25.360 --> 00:25:28.999 +changes, adding comments, importing from + +00:25:29.000 --> 00:25:30.874 +some other Org formats with + +00:25:30.875 --> 00:25:32.035 +the comments and changes + +00:25:32.036 --> 00:25:34.018 +so that we can actually participate + +00:25:34.019 --> 00:25:36.962 +with all those Microsoft Word users + +00:25:36.963 --> 00:25:39.743 +and stuff like that. + +00:25:39.744 --> 00:25:43.719 +But that's really too much for me alone to handle. + +00:25:43.720 --> 00:25:47.839 +If you want to see one of these features, please consider + +00:25:47.840 --> 00:25:50.039 +contributing. Just write the mailing list about your + +00:25:50.040 --> 00:25:54.072 +interest and we can start from there. + +NOTE Org community + +00:25:54.073 --> 00:25:57.455 +Now, the important part is, you see, + +00:25:57.456 --> 00:25:58.635 +I keep asking people like, + +00:25:58.636 --> 00:25:59.799 +please contribute, please contribute, + +00:25:59.800 --> 00:26:01.357 +but who should contribute? + +NOTE Org community forums - Org mailing list + +00:26:01.358 --> 00:26:03.799 +So I want to improve communication between the + +00:26:03.800 --> 00:26:12.479 +community and the mailing list. Now, people often + +00:26:12.480 --> 00:26:16.799 +discuss new features or ideas on all kinds of places like + +00:26:16.800 --> 00:26:20.239 +Reddit, Mastodon, like all kinds of Matrix/IRC chats, + +00:26:20.240 --> 00:26:25.439 +even on meetups, some non-English language. That's very + +00:26:25.440 --> 00:26:29.479 +nice that we have this community, but not all the ideas are + +00:26:29.480 --> 00:26:34.499 +visible to the developers. I do wish that the most + +00:26:34.500 --> 00:26:38.279 +important things that people want to see should end up on the + +00:26:38.280 --> 00:26:42.331 +mailing list, one way or another. + +00:26:42.332 --> 00:26:43.519 +I'll later talk about some + +00:26:43.520 --> 00:26:48.839 +ideas how I think it can be done. Another part is + +00:26:48.840 --> 00:26:52.554 +we have org-wiki and I hope that + +00:26:52.555 --> 00:26:55.239 +we can make it more centralized + +00:26:55.240 --> 00:26:58.476 +space for interesting Org mode articles, + +00:26:58.477 --> 00:27:00.617 +for tutorials, for blog posts, + +00:27:00.618 --> 00:27:03.679 +at least linked to blog posts. If you have + +00:27:03.680 --> 00:27:08.119 +some idea about good blog posts, it would be nice if you + +00:27:08.120 --> 00:27:13.025 +submit a patch to work or at least email about this link + +00:27:13.026 --> 00:27:17.159 +to the mailing list. + +NOTE Org mailing list - world + +00:27:17.160 --> 00:27:21.054 +Of course, not everyone likes to use mailing lists + +00:27:21.055 --> 00:27:23.809 +or don't have a good setup to do it, + +00:27:23.810 --> 00:27:25.559 +or even don't want to read + +00:27:25.560 --> 00:27:27.599 +everything on Org mailing list, because there are things + +00:27:27.600 --> 00:27:31.359 +like bug reports, people don't really want to see that. So + +00:27:31.360 --> 00:27:35.439 +Bastien actually developed a tool that can help with this. + +00:27:35.440 --> 00:27:39.239 +If you want to monitor Org mailing list, but want to see + +00:27:39.240 --> 00:27:42.799 +only the most important discussions, and maybe + +00:27:42.800 --> 00:27:45.479 +participate if you decide to, you don't have to register. We + +00:27:45.480 --> 00:27:51.919 +have Woof, which is basically a web page that monitors our + +00:27:51.920 --> 00:27:55.639 +main list, but not every email. That's the most important + +00:27:55.640 --> 00:27:58.719 +announcements, some blog-like posts, or feature + +00:27:58.720 --> 00:28:02.799 +requests, or some discussions. Then on this webpage, + +00:28:02.800 --> 00:28:06.119 +you can see it as HTML, or you can subscribe as RSS, or even + +00:28:06.120 --> 00:28:11.119 +download in Org or MD format. + +00:28:11.120 --> 00:28:15.359 +Thanks to Sacha Chua, also weekly news about Emacs in + +00:28:15.360 --> 00:28:23.199 +general, but Org Mode as well. It also includes the + +00:28:23.200 --> 00:28:26.639 +new features in Org Mode on the development branch and the + +00:28:27.100 --> 00:28:30.199 +interesting new blog posts and discussions on various + +00:28:30.200 --> 00:28:35.879 +Reddit forums or mailing lists everywhere. I did this + +00:28:35.880 --> 00:28:39.519 +little bit of experimental integration so that many lists + +00:28:39.520 --> 00:28:45.159 +can also be read, kind of announced on the chats. + +00:28:45.160 --> 00:28:48.319 +For example, in #org-mode Matrix room, we have a bot that + +00:28:48.320 --> 00:28:53.239 +connects to Woof RSS so that all the news and discussions are + +00:28:53.240 --> 00:28:55.923 +notified in the chat so that people + +00:28:55.924 --> 00:28:58.764 +can see if they are interested + +00:28:58.765 --> 00:29:02.519 +and maybe, hopefully, participate. I wish + +00:29:02.520 --> 00:29:05.599 +we could also have similar kind of both for Reddit, Mastodon + +00:29:05.600 --> 00:29:10.879 +and maybe IRC. That way we have mailing list connected to + +00:29:10.880 --> 00:29:17.719 +more active and more modern forums and chats. + +00:29:17.720 --> 00:29:19.959 +More people exposed to what is happening. + +00:29:19.960 --> 00:29:26.719 +Another part is that we actually have a web interface to Org + +00:29:26.720 --> 00:29:29.048 +mailing list and you can even reply from there, + +00:29:29.049 --> 00:29:31.400 +but it's not always obvious, unfortunately. + +00:29:31.401 --> 00:29:37.745 +We have this public inbox software + +00:29:37.746 --> 00:29:39.999 +to transform the mailing list into + +00:29:40.000 --> 00:29:45.719 +HTML pages. That's a decent interface, but it could be + +00:29:45.720 --> 00:29:49.199 +improved to look more forum-like, so that people can easily + +00:29:49.200 --> 00:29:53.079 +find the reply button or basically participate without + +00:29:53.080 --> 00:29:56.119 +too much effort, even if they are not subscribed or they are just + +00:29:56.120 --> 00:29:59.079 +casually reading. That would be nice if someone + +00:29:59.080 --> 00:30:05.579 +knowledgeable of CSS could help with this. + +NOTE Contribute ideas! + +00:30:05.580 --> 00:30:12.199 +Again, I cannot emphasize more that most of the Org ideas of + +00:30:12.200 --> 00:30:16.974 +the new features are coming from people, + +00:30:16.975 --> 00:30:23.221 +but often they are known either by someone + +00:30:23.222 --> 00:30:24.479 +submitting a patch to the mailing list or + +00:30:24.480 --> 00:30:28.239 +submitting an idea to the mailing list. Rarely, it happens when + +00:30:28.240 --> 00:30:31.999 +someone is reading posts from Reddit that don't share to the + +00:30:32.000 --> 00:30:35.639 +mailing list. If you think that there is some important + +00:30:35.640 --> 00:30:38.599 +discussion happening on the forum, + +00:30:38.600 --> 00:30:42.415 +it would be nice that you can go ahead and share it + +00:30:42.416 --> 00:30:46.519 +with Org mailing list. We don't care about + +00:30:46.520 --> 00:30:49.500 +on-topic, off-topic, because unlike + +00:30:49.501 --> 00:30:51.385 +emacs-devel, we don't focus on development. + +00:30:51.386 --> 00:30:54.929 +We can discuss some related to Org mode topics + +00:30:54.930 --> 00:31:01.519 +in open-end list, just like on an ordinary forum. + +NOTE How much can a single person do? + +00:31:01.520 --> 00:31:08.439 +I would like to end my talk with the call for contributions. + +00:31:08.440 --> 00:31:13.639 +Let me explain a little bit, because you saw now I shared many + +00:31:13.640 --> 00:31:19.319 +many ideas and I do spend a lot of time on Org Mode. In fact, + +00:31:19.320 --> 00:31:21.322 +for the last year, I was spending like + +00:31:21.323 --> 00:31:23.437 +30 hours per week or something. + +00:31:23.438 --> 00:31:27.319 +Until recently, I can spend a bit less, but still + +00:31:27.320 --> 00:31:29.900 +even with that much of commitment, + +00:31:29.901 --> 00:31:31.479 +there is no way I can handle + +00:31:31.480 --> 00:31:34.999 +everything by myself. + +NOTE Contribute code! + +00:31:35.000 --> 00:31:38.551 +We really, really need more people to contribute + +00:31:38.552 --> 00:31:43.633 +so that Org mode keeps moving forward. + +00:31:43.634 --> 00:31:45.079 +Again, I just shared ideas, + +00:31:45.080 --> 00:31:46.394 +but I have so many more. + +00:31:46.395 --> 00:31:48.734 +I have more than a thousand ideas noted down. + +00:31:48.735 --> 00:31:52.636 +Yeah, there's no way I can do it myself. + +00:31:52.637 --> 00:31:57.350 +I do need help for new contributions, for new features. + +00:31:57.351 --> 00:31:57.617 +If someone can help fixing bugs, it would be really great. + +00:31:57.618 --> 00:32:04.291 +If someone knows specialized things, + +00:32:04.292 --> 00:32:06.873 +like for example Open Document Format, + +00:32:06.874 --> 00:32:08.759 +which I don't know very well, it would be + +00:32:08.760 --> 00:32:12.999 +really nice, because things like ODT export requires + +00:32:13.000 --> 00:32:14.089 +knowing that, and if someone already has the knowledge, + +00:32:14.090 --> 00:32:18.081 +it would be much easier + +00:32:18.082 --> 00:32:23.480 +if that person can help with such things. + +00:32:23.481 --> 00:32:26.868 +Although in the coming years, + +00:32:26.869 --> 00:32:28.159 +it's very important to have + +00:32:28.160 --> 00:32:28.830 +regular contributors + +00:32:28.831 --> 00:32:31.921 +because my life is my life + +00:32:31.922 --> 00:32:34.363 +and things may happen, + +00:32:34.364 --> 00:32:37.244 +so it would be nice to have some kind of backup + +00:32:37.245 --> 00:32:40.245 +so that bugs keep being fixed + +00:32:40.245 --> 00:32:40.245 +and things like patches being accepted + +00:32:40.246 --> 00:32:44.567 +and stuff like that, + +00:32:44.568 --> 00:32:46.168 +so that some person can at least + +00:32:46.169 --> 00:32:49.879 +temporarily take on my job. + +00:32:49.880 --> 00:32:51.510 +I would like to emphasize + +00:32:51.511 --> 00:32:53.319 +that the code contributors are the most + +00:32:53.320 --> 00:32:56.212 +important contributions for Org Mode. + +00:32:56.213 --> 00:33:02.079 +All other types are less important, really. + +NOTE Why contribute? + +00:33:02.080 --> 00:33:03.959 +I want to spend a couple of slides + +00:33:03.960 --> 00:33:07.719 +trying to motivate you to contribute. + +00:33:07.720 --> 00:33:11.128 +If you ever considered contributing + +00:33:11.129 --> 00:33:13.359 +or if you ever wished to have some + +00:33:13.360 --> 00:33:16.879 +feature in Org Mode, really don't wait, because + +00:33:16.880 --> 00:33:18.239 +most new features are contributed by people. + +00:33:18.240 --> 00:33:23.736 +They are not contributed by me. + +00:33:23.737 --> 00:33:25.199 +I contribute a few things, but I am alone. + +00:33:25.200 --> 00:33:27.038 +I cannot contribute many things. + +00:33:27.039 --> 00:33:30.300 +Most of the things are contributed by users + +00:33:30.301 --> 00:33:33.441 +who go ahead and submit patches. + +00:33:33.442 --> 00:33:37.323 +And even in very commonly requested features, + +00:33:37.324 --> 00:33:40.344 +it's usually someone who steps up. + +00:33:40.345 --> 00:33:42.199 +If you want something, don't wait. + +00:33:42.200 --> 00:33:44.206 +Just go ahead and write to mailing list. + +00:33:44.207 --> 00:33:46.207 +You don't have to submit a patch immediately. + +00:33:46.208 --> 00:33:48.729 +You can just say, I am interested. + +00:33:48.730 --> 00:33:53.819 +We will start from there. + +00:33:53.820 --> 00:33:56.043 +We'll start because that's my job + +00:33:56.044 --> 00:33:57.644 +and I will guide you through. + +00:33:57.645 --> 00:33:58.990 +If you have problems with Org in general, + +00:33:58.991 --> 00:34:02.308 +I'll explain, because that's what I know. + +00:34:02.309 --> 00:34:05.030 +I will explain how to implement things better, + +00:34:05.031 --> 00:34:06.999 +but I need someone to actually do + +00:34:07.000 --> 00:34:10.070 +the job and write the code. + +00:34:10.071 --> 00:34:19.057 +Even if you don't have 10 years experience with Elisp, + +00:34:19.058 --> 00:34:21.178 +it doesn't matter. You can learn on the way. + +00:34:21.179 --> 00:34:22.519 +There are many examples of this in the + +00:34:22.520 --> 00:34:25.642 +mailing list when we start slowly, + +00:34:25.643 --> 00:34:27.759 +fix things one by one, and + +00:34:27.760 --> 00:34:29.225 +eventually arrive to a good quality + +00:34:29.226 --> 00:34:31.707 +when the person is not experienced. + +00:34:31.708 --> 00:34:34.759 +You just need to be ready to learn things, + +00:34:34.760 --> 00:34:37.992 +Spend your free time (that's as usual, right?), + +00:34:37.993 --> 00:34:41.214 +and have the interest in specific thing + +00:34:41.215 --> 00:34:43.499 +you are contributing. + +00:34:43.500 --> 00:34:44.475 +Don't be afraid to be wrong. + +00:34:44.476 --> 00:34:47.578 +I will be there to assist. + +00:34:47.579 --> 00:34:48.937 +If you don't like emails, + +00:34:48.938 --> 00:34:51.239 +if you don't like patches, it doesn't matter. + +00:34:51.240 --> 00:34:55.361 +Again, you can share GitHub link. It's okay. + +00:34:55.362 --> 00:34:57.684 +You can go and modify some workflow directly. + +00:34:57.685 --> 00:34:59.565 +You submit the modified version. It's also okay. + +00:34:59.566 --> 00:35:05.119 +It's easy for me to create patches if I need to. + +00:35:05.120 --> 00:35:07.279 +If you don't like emails at all, you don't want to + +00:35:07.280 --> 00:35:11.879 +participate in the mailing list, it's not ideal, but I can + +00:35:11.880 --> 00:35:16.005 +still work with this. I am on IRC, I am on Matrix, + +00:35:16.006 --> 00:35:19.799 +you can ping me, it's yantar92. + +00:35:19.800 --> 00:35:22.347 +We also have monthly meetup, + +00:35:22.348 --> 00:35:23.987 +so you can go and ask by voice, + +00:35:23.988 --> 00:35:27.088 +we can just talk in person, discuss your ideas, + +00:35:27.089 --> 00:35:29.299 +it's also fine. + +00:35:29.300 --> 00:35:35.159 +The key point is that we always welcome new contributors. + +00:35:35.160 --> 00:35:40.239 +The more contributions to Org Mode is better. + +NOTE Benefits for code contributors + +00:35:40.240 --> 00:35:41.519 +To increase the motivation, + +00:35:41.520 --> 00:35:44.919 +I'll just try to show some benefits + +00:35:44.920 --> 00:35:49.479 +of contributing to Org Mode and free software in general. + +00:35:49.480 --> 00:35:52.079 +It can be actually useful for your CV if you're a programmer. + +00:35:52.080 --> 00:35:54.999 +It doesn't matter if it's Lisp, because you can have a pet + +00:35:55.000 --> 00:35:59.039 +project that demonstrates your skills, that you can finish + +00:35:59.040 --> 00:36:04.359 +something to a usable state. + +00:36:04.360 --> 00:36:06.800 +A pet project usually demonstrates + +00:36:06.801 --> 00:36:08.839 +that you can work alone, but it doesn't + +00:36:08.840 --> 00:36:12.119 +demonstrate anything about you working in a team, in the + +00:36:12.120 --> 00:36:15.519 +production team. When you contribute to + +00:36:15.520 --> 00:36:17.629 +Libre software, look, + +00:36:17.630 --> 00:36:20.759 +you will work with a number of people + +00:36:20.760 --> 00:36:24.352 +who contribute and comment on your work. + +00:36:24.353 --> 00:36:27.073 +You'll have to learn a new code base. + +00:36:27.074 --> 00:36:30.075 +You will have to follow certain standards. + +00:36:30.076 --> 00:36:33.239 +All these things, by having a public record + +00:36:33.240 --> 00:36:37.559 +of contribution, will be a valid point that proves your + +00:36:37.560 --> 00:36:42.087 +knowledge in your CV. I put a small quote + +00:36:42.088 --> 00:36:44.869 +(which I'm not going to read in the interest of time) + +00:36:44.870 --> 00:36:46.279 +from Rudolf Adamkovič, + +00:36:46.280 --> 00:36:50.159 +who is describing these three points in probably a + +00:36:50.160 --> 00:36:56.519 +more expressive way. + +00:36:56.520 --> 00:36:59.939 +Another benefit is you can actually get money from this. + +00:36:59.940 --> 00:37:03.999 +Thanks to a number of Org Mode users who kindly contribute to + +00:37:04.000 --> 00:37:07.199 +Org development, we have some amount of money + +00:37:07.200 --> 00:37:11.009 +coming in, and we don't hold on this money. + +00:37:11.010 --> 00:37:13.550 +If we get another person who contributes + +00:37:13.551 --> 00:37:17.511 +to Org regularly, we are happy to share this money, + +00:37:17.512 --> 00:37:22.539 +because we do know that + +00:37:22.540 --> 00:37:24.599 +getting some extra money, even a little bit, + +00:37:24.600 --> 00:37:27.216 +does improve motivation. + +00:37:27.217 --> 00:37:29.158 +We are really ready to share this. + +00:37:29.159 --> 00:37:33.523 +If you are serious about contributing, + +00:37:33.524 --> 00:37:34.919 +you can just request this + +00:37:34.920 --> 00:37:41.419 +and we can share a part of the donations to you. + +NOTE Contributing as non-programmer + +00:37:41.420 --> 00:37:45.199 +For non-programmers, we also have a lot of work to do. + +00:37:45.200 --> 00:37:47.092 +There's a lot of stuff we can do on the Org wiki, + +00:37:47.093 --> 00:37:48.754 +especially with CSS styles, + +00:37:48.755 --> 00:37:53.178 +with updating articles, + +00:37:53.179 --> 00:37:54.880 +with adding links to tutorials, + +00:37:54.881 --> 00:37:56.222 +or even writing tutorials about Org Mode. + +00:37:56.223 --> 00:38:01.081 +It would be nice to have more screencasts. + +00:38:01.082 --> 00:38:02.702 +It would be nice to improve Org manual, + +00:38:02.703 --> 00:38:05.283 +because that's the most difficult part for me + +00:38:05.284 --> 00:38:07.325 +because I'm too familiar with the code. + +00:38:07.326 --> 00:38:11.226 +Writing the manual when you know things internally + +00:38:11.227 --> 00:38:13.727 +is very hard. I just know too many things. + +00:38:13.728 --> 00:38:16.809 +I can assume that people know too much, + +00:38:16.810 --> 00:38:20.911 +that new users have no idea about certain things. + +00:38:20.912 --> 00:38:30.439 +I can just omit those without being aware. + +NOTE Got no free time, but still want to help? + +00:38:30.440 --> 00:38:33.319 +The final slide I would go to come back is about + +00:38:33.320 --> 00:38:37.919 +donations. Again, most important is contributing code, + +00:38:37.920 --> 00:38:42.879 +but I do hope that donations can + +00:38:42.880 --> 00:38:45.445 +increase the number of contributors. + +00:38:45.446 --> 00:38:47.999 +I don't know. I know for sure because some + +00:38:48.000 --> 00:38:52.439 +people like Timothy, who is participating in this, he did + +00:38:52.440 --> 00:38:55.319 +find the donations helpful, especially for more boring + +00:38:55.320 --> 00:39:00.079 +tasks like bug fixing and to move things + +00:39:00.080 --> 00:39:07.835 +over the long time. If you cannot contribute by other means, + +00:39:07.836 --> 00:39:12.996 +it would be appreciated to contribute money. + +NOTE Thank you + +00:39:12.997 --> 00:39:14.817 +We came to the end of my talk. + +00:39:14.818 --> 00:39:16.277 +Thank you for your attention. + +00:39:16.278 --> 00:39:19.698 +If you have any questions, please feel free to ask. + +00:39:19.699 --> 00:39:22.898 +I think we can even discuss further + +00:39:22.899 --> 00:39:28.180 +during the next Org Meetup in the coming week. + +00:39:28.181 --> 00:39:30.320 +There, if you have more detailed questions, + +00:39:30.321 --> 00:39:31.640 +we can continue discussing + +00:39:31.641 --> 00:39:34.440 +apart from what happens after this presentation. diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt new file mode 100644 index 00000000..cd09d3cb --- /dev/null +++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt @@ -0,0 +1,2017 @@ +WEBVTT + +00:00:00.000 --> 00:00:03.559 +...starting the recording here in the chat, and I see some + +00:00:03.560 --> 00:00:06.039 +questions already coming in. So thank you so much for your + +00:00:06.040 --> 00:00:09.359 +talk, Zac, and I'll step out of your way and let you field + +00:00:09.360 --> 00:00:10.279 +some of these questions. + +00:00:10.280 --> 00:00:21.999 +Sounds good. All right, so let's see. I'm going off of the + +00:00:22.000 --> 00:00:22.969 +question list. + +NOTE Q: Do you think a reduced version of this functionality could be integrated into isearch? + +00:00:22.970 --> 00:00:25.839 +So the first one is about having reduced + +00:00:25.840 --> 00:00:31.999 +version of the functionality integrated into iSearch. So + +00:00:32.000 --> 00:00:37.919 +yeah, with the way things are set up, it is essentially a + +00:00:37.920 --> 00:00:42.679 +framework. So + +00:00:42.680 --> 00:00:46.279 +you can create a candidate. So just a review from the talk. So + +00:00:46.280 --> 00:00:49.919 +you have these candidate generators which generate search + +00:00:49.920 --> 00:00:54.559 +candidates. So you can have a file system candidate which + +00:00:54.560 --> 00:00:58.519 +generates these file documents, which have text content in + +00:00:58.520 --> 00:01:01.799 +them. In theory, you could have like a website candidate + +00:01:01.800 --> 00:01:06.399 +generator, and it could be like a web crawler. I mean, so + +00:01:06.400 --> 00:01:10.519 +there's a lot of different options. So one option, it's on my + +00:01:10.520 --> 00:01:15.039 +mind, and I hope to get to this soon, is create a defun, like a + +00:01:15.040 --> 00:01:18.599 +defun candidate generator. So basically it takes a file, + +00:01:18.600 --> 00:01:22.279 +splits it up into like defunds, kind of like just like what + +00:01:22.280 --> 00:01:26.279 +iSearch would do. and then use each of those, the body of + +00:01:26.280 --> 00:01:30.959 +those, as a content for the search session. So, I mean, + +00:01:30.960 --> 00:01:35.359 +essentially you could just, you could start up a session, + +00:01:35.360 --> 00:01:39.479 +and there's like programmatic ways to start these up too. So + +00:01:39.480 --> 00:01:42.599 +you could, if such a candidate generator was created, you + +00:01:42.600 --> 00:01:49.559 +could easily, and just like, you know, one command. Get the + +00:01:49.560 --> 00:01:54.599 +defunds, create a search session with it, and then just go + +00:01:54.600 --> 00:02:01.439 +straight to your query. So, definitely, something + +00:02:01.440 --> 00:02:06.919 +just like this is in the works. And I guess another thing is + +00:02:06.920 --> 00:02:08.239 +interface. + +00:02:08.240 --> 00:02:17.079 +The whole dedicated buffer is helpful for searching, but + +00:02:17.080 --> 00:02:21.919 +with this isearch case, there's currently not a way to have a + +00:02:21.920 --> 00:02:27.839 +reduced UI, where it's just like, OK, I have these function + +00:02:27.840 --> 00:02:32.239 +defuns for the current file. I just want them to pop up at the + +00:02:32.240 --> 00:02:35.799 +bottom so I can quickly go through it. So currently, I don't + +00:02:35.800 --> 00:02:41.199 +have that. But such a UI is definitely, yeah, thinking about + +00:02:41.200 --> 00:02:45.359 +how that could be done. + +NOTE Q: Any idea how this would work with personal information like Zettlekastens? + +00:02:45.360 --> 00:02:50.359 +Alright, so yeah. So next question. Any idea how this + +00:02:50.360 --> 00:02:52.599 +will work with personal information like Zettelkasten? + +00:02:52.600 --> 00:02:58.319 +So this is, this is like, I mean, it's essentially usable as + +00:02:58.320 --> 00:03:04.559 +is with Zettelkasten method. So, I mean, that I mean + +00:03:04.560 --> 00:03:08.279 +basically what like for example org-roam, and I think other + +00:03:08.280 --> 00:03:12.159 +ones like Denote, they put all these files in the + +00:03:12.160 --> 00:03:15.919 +directory, and so with the already existing file system + +00:03:15.920 --> 00:03:19.679 +candidate generator all you'd have to do is set that to be the + +00:03:19.680 --> 00:03:23.199 +directory of your Zettelkasten system and then it would + +00:03:23.200 --> 00:03:26.799 +just pick up all the files in there and + +00:03:26.800 --> 00:03:28.799 +then add those as search candidates. So you could easily + +00:03:28.800 --> 00:03:33.279 +just search whatever system you have. + +00:03:33.280 --> 00:03:36.039 +Based off of the ways it's set up, if you had maybe your + +00:03:36.040 --> 00:03:40.999 +dailies you didn't want to search, it's just as easy to add a + +00:03:41.000 --> 00:03:44.519 +criteria saying, I don't want dailies to be searched. Like + +00:03:44.520 --> 00:03:47.599 +give, like just eliminate the date, like the things from the + +00:03:47.600 --> 00:03:51.679 +daily from the sub directory. And then there you go. you have + +00:03:51.680 --> 00:03:57.799 +your Zettelkasten search engine, and you could just copy + +00:03:57.800 --> 00:03:59.999 +the, you know, there's, I mean, I need, I'm working on + +00:04:00.000 --> 00:04:03.519 +documentation for this to kind of set this up easily, but, + +00:04:03.520 --> 00:04:06.679 +you know, you could just create your simple command, just + +00:04:06.680 --> 00:04:10.679 +like, your simple command, just like, just take in a text + +00:04:10.680 --> 00:04:14.359 +query, run it through the system, and then just get your + +00:04:14.360 --> 00:04:19.599 +search results right there. So yeah, definitely that is a + +00:04:19.600 --> 00:04:22.040 +use case that's on top of my mind. + +NOTE Q: How good does the search work for synonyms especially if you use different languages? + +00:04:22.041 --> 00:04:23.239 +So next one, how good does a + +00:04:23.240 --> 00:04:26.439 +search work for synonyms, especially if you use different + +00:04:26.440 --> 00:04:30.719 +languages? Okay, this is a good question because with the + +00:04:30.720 --> 00:04:34.719 +way that VM25 works, it's essentially just like trying to + +00:04:34.720 --> 00:04:41.119 +find where terms occur and just counts them up. + +00:04:41.120 --> 00:04:43.999 +I mean, this is something I couldn't get into. There's just + +00:04:44.000 --> 00:04:46.919 +too much on the topic of information retrieval to kind of go + +00:04:46.920 --> 00:04:52.879 +into this, but there is a whole kind of field of just like, how + +00:04:52.880 --> 00:04:58.279 +do you, given a search term, how do you know what you should + +00:04:58.280 --> 00:05:02.519 +search for? So like popular kind of industrial search + +00:05:02.520 --> 00:05:07.519 +engines, like they have kind of this feature where you can + +00:05:07.520 --> 00:05:11.039 +like define synonyms, define, term replacement. So + +00:05:11.040 --> 00:05:14.079 +whenever you see this term, it should be this. And it even + +00:05:14.080 --> 00:05:15.091 +gets even further. + +NOTE Plurals + +00:05:15.092 --> 00:05:19.439 +If someone searches for a plural string, + +00:05:19.440 --> 00:05:22.279 +how do you get the singular from that and search for that? So + +00:05:22.280 --> 00:05:27.559 +this is a huge topic that currently p-search doesn't + +00:05:27.560 --> 00:05:33.519 +address, but it's on the top of my mind as to how. So that's one + +00:05:33.520 --> 00:05:33.882 +part. + +NOTE Different languages + +00:05:33.883 --> 00:05:38.999 +The next part is for different languages, one thing + +00:05:39.000 --> 00:05:42.839 +that kind of seems like it's promising is vector search, + +00:05:42.840 --> 00:05:47.399 +which, I mean, with the way p-search is set up, you could + +00:05:47.400 --> 00:05:51.159 +easily just create a vector search prior, plug it into the + +00:05:51.160 --> 00:05:54.599 +system, and start using it. The only problem is that kind of + +00:05:54.600 --> 00:05:58.879 +the vector search functions, like you have to do like cosine + +00:05:58.880 --> 00:06:03.639 +similarity, like if you have like 10,000 documents, If + +00:06:03.640 --> 00:06:06.679 +you're writing Elisp to calculate the cosine similarity + +00:06:06.680 --> 00:06:09.879 +between the vectors, that's going to be very slow. And so now + +00:06:09.880 --> 00:06:14.159 +the whole can of worms of indexing comes up. And how do you do + +00:06:14.160 --> 00:06:17.479 +that? And is that going to be native elisp? And so that's a + +00:06:17.480 --> 00:06:21.839 +whole other can of worms. So yeah, vector search seems + +00:06:21.840 --> 00:06:25.959 +promising. And then hopefully maybe other traditional + +00:06:25.960 --> 00:06:33.439 +synonyms, stemming, that kind of stuff for alternate + +00:06:33.440 --> 00:06:40.199 +terms, that could also be incorporated. + +NOTE Q: When searching by author I know authors may setup a new machine and not put the exact same information. Is this doing anything to combine those into one author? + +00:06:40.200 --> 00:06:43.719 +Okay, next one. When searching by author, I know authors may + +00:06:43.720 --> 00:06:47.119 +set up a new machine and not put the exact same information. + +00:06:47.120 --> 00:06:49.519 +Is this doing anything to combine these two in one author? + +00:06:49.520 --> 00:06:54.399 +Okay, so for this one, it's not. So it's like the way the get + +00:06:54.400 --> 00:06:58.119 +prior is currently set up is that it just does like a get + +00:06:58.120 --> 00:07:01.999 +command to get all the get authors. You select one and then it + +00:07:02.000 --> 00:07:07.959 +just uses that. But the thing is, is if you knew the two emails + +00:07:07.960 --> 00:07:12.519 +that user might have used, the two usernames, you could just + +00:07:12.520 --> 00:07:14.279 +set up the + +00:07:14.280 --> 00:07:19.799 +two priors. One for the old user's email, and then just add + +00:07:19.800 --> 00:07:24.079 +another prior for the new user's email. And then that would + +00:07:24.080 --> 00:07:29.279 +be a way to just get both of those set up. So that's kind of a + +00:07:29.280 --> 00:07:32.959 +running theme throughout p-search is that It's made to be + +00:07:32.960 --> 00:07:36.239 +very flexible and very kind of like Lego block ish kind of + +00:07:36.240 --> 00:07:39.959 +like you can just, you know, if you need, you know, if + +00:07:39.960 --> 00:07:41.919 +something doesn't meet your needs, you know, it's easy to + +00:07:41.920 --> 00:07:45.959 +put pieces in, create new components of the search + +00:07:45.960 --> 00:07:51.799 +engine. Let's see, a cool powerful grep "Rak" to maybe have + +00:07:51.800 --> 00:07:58.839 +some good ideas. I have searches record code while + +00:07:58.840 --> 00:08:04.039 +searching. Okay. So. Okay, that's interesting. I'll have + +00:08:04.040 --> 00:08:05.239 +to look into this + +00:08:05.240 --> 00:08:15.279 +tool. I haven't seen that. I do kind of keep my eyes out for + +00:08:15.280 --> 00:08:18.199 +these kind of things. One thing I have seen that was kind of + +00:08:18.200 --> 00:08:24.439 +that, I mean, looked interesting was kind of like AST, like + +00:08:24.440 --> 00:08:29.519 +the treesitter, the treesitter grep tools. But like, you + +00:08:29.520 --> 00:08:35.359 +can grep for a string in the language itself. So that's + +00:08:35.360 --> 00:08:37.959 +something I think would be cool to implement either, + +00:08:37.960 --> 00:08:41.359 +because I mean, there's treesitter in Emacs, so it's + +00:08:41.360 --> 00:08:44.519 +possible to do a new list. If not, there are those kind of like + +00:08:44.520 --> 00:08:47.719 +treesitter. So that's, that's something that I think would + +00:08:47.720 --> 00:08:50.719 +be cool to incorporate. + +NOTE Q: Have you thought about integrating results from using cosine similarity with a deep-learning based vector embedding? + +00:08:50.720 --> 00:08:58.279 +Let's see. Have you thought about integrating results from + +00:08:58.280 --> 00:09:00.999 +using cosine similarity with a deep learning based vector + +00:09:01.000 --> 00:09:06.679 +embedding? Yeah, exactly. So yeah, this kind of goes back to + +00:09:06.680 --> 00:09:09.759 +the topic before it. Definitely the whole semantic search + +00:09:09.760 --> 00:09:12.679 +with vector embeddings, that's something that, I mean, it + +00:09:12.680 --> 00:09:15.479 +would be actually kind of trivial to implement that in + +00:09:15.480 --> 00:09:20.239 +p-search. But like I said, computing the cosine similarity + +00:09:20.240 --> 00:09:25.959 +in elisp, it's probably too slow. + +00:09:25.960 --> 00:09:34.879 +And then also there's a whole question of how do you get the embeddings? + +00:09:34.880 --> 00:09:36.919 +Like, how do you get the system running locally on your + +00:09:36.920 --> 00:09:41.239 +machine if you want to run it that or, I mean, so that's + +00:09:41.240 --> 00:09:48.879 +actually another kind of aspect that I need to look into. + +00:09:48.880 --> 00:10:01.939 +Okay, so let's see. + +NOTE Q: Is it possible to save/bookmark searches or search templates so they can be used again and again? + +00:10:01.940 --> 00:10:06.319 +Okay, next question. Let's see. I'm sorry if this has been + +00:10:06.320 --> 00:10:09.079 +covered. Is it possible to save/bookmark searches or search + +00:10:09.080 --> 00:10:14.559 +templates so they can be used again and again? Exactly. So + +00:10:14.560 --> 00:10:18.199 +just recently I added bookmarking capabilities. So + +00:10:18.200 --> 00:10:21.119 +you can essentially just bookmark whatever search session you + +00:10:21.120 --> 00:10:26.359 +have. And yeah, and it's just, it was just a bookmark. You can + +00:10:26.360 --> 00:10:29.839 +just open and just like reopen that, rerun that search from + +00:10:29.840 --> 00:10:36.119 +where you left off. So there's that. And then also, I tried to + +00:10:36.120 --> 00:10:40.559 +set this up so that there is a one-to-one mapping of a Lisp + +00:10:40.560 --> 00:10:44.759 +object to the search session. So from every search session + +00:10:44.760 --> 00:10:49.519 +you make, you should be able to get a, there's a command to do + +00:10:49.520 --> 00:10:55.199 +this, to get a data representation of the search. So it would + +00:10:55.200 --> 00:11:00.079 +just be like some plist. All you have to do is just take that + +00:11:00.080 --> 00:11:04.479 +plist, call this function p-search-setup-buffer with that + +00:11:04.480 --> 00:11:09.119 +data. And then that function should set up the session as you + +00:11:09.120 --> 00:11:12.599 +left off. So then like, you know, you could make your + +00:11:12.600 --> 00:11:15.359 +commands easy. You can make custom search commands super + +00:11:15.360 --> 00:11:18.919 +easy. You just get the data representation of that search, + +00:11:18.920 --> 00:11:22.519 +find what pieces you want the user to be able to, you know, the + +00:11:22.520 --> 00:11:26.333 +search term, make that a parameter in the + +00:11:26.334 --> 00:11:29.079 +command, in the interactive code. So you'd have like + +00:11:29.080 --> 00:11:31.906 +print on top and then there you go. You have, + +00:11:31.907 --> 00:11:34.327 +you have a command to do the search + +00:11:34.328 --> 00:11:35.759 +just like just right there. So, so + +00:11:35.760 --> 00:11:38.519 +there's a lot of those things and there's a lot more that + +00:11:38.520 --> 00:11:40.999 +could be done. Like maybe having, you know, there's kind of + +00:11:41.000 --> 00:11:45.479 +in the works and like thinking about having groups of groups + +00:11:45.480 --> 00:11:48.959 +of these things, like maybe you can set up like, Oh, I always + +00:11:48.960 --> 00:11:51.919 +add these three criteria together. So I, you know, maybe I + +00:11:51.920 --> 00:11:54.559 +can make a preset out of these and make them easy, easily + +00:11:54.560 --> 00:11:58.079 +addable. So yeah. A lot of things like that are, you know, I'm + +00:11:58.080 --> 00:12:02.799 +thinking about a lot of things about that, so. + +NOTE Q: You mentioned about candidate generators. Could you explain about to what the score is assigned to? + +00:12:02.800 --> 00:12:06.079 +Okay, so next question. You mentioned about candidate + +00:12:06.080 --> 00:12:08.479 +generators. Could you explain about what the score is + +00:12:08.480 --> 00:12:12.199 +assigned to? Is this to a line or whatever the candidate + +00:12:12.200 --> 00:12:17.079 +generates? How does it work with our junior demo? Okay, + +00:12:17.080 --> 00:12:21.799 +yeah, so this is a, this is, so actually I had to implement, I + +00:12:21.800 --> 00:12:26.719 +had to rewrite p-search just to get this part right. So the + +00:12:26.720 --> 00:12:31.159 +candidate generator generates documents. Documents have + +00:12:31.160 --> 00:12:36.919 +properties. So the most notable property is the content + +00:12:36.920 --> 00:12:40.599 +property. So essentially what happens is that when you + +00:12:40.600 --> 00:12:42.879 +create a file system candidate generator and give it a + +00:12:42.880 --> 00:12:45.919 +directory, the code goes into the directory, kind of + +00:12:45.920 --> 00:12:49.079 +recursively goes through all the directories, and + +00:12:49.080 --> 00:12:51.559 +generates a candidate, which is just like a simple list + +00:12:51.560 --> 00:12:55.679 +form. It's saying, this is a file, the file path is this. So + +00:12:55.680 --> 00:13:00.799 +that's the document ID. So this is saying, this is a file, + +00:13:00.800 --> 00:13:05.559 +it's a file, and its file path is this. And so from that, you + +00:13:05.560 --> 00:13:09.279 +get all of the different properties, the sub properties. If + +00:13:09.280 --> 00:13:11.719 +you're given that, you know how to get the content. If you're + +00:13:11.720 --> 00:13:15.439 +given that, you know how to... So all these properties come + +00:13:15.440 --> 00:13:18.839 +out. And then also the candidate generator is the thing that + +00:13:18.840 --> 00:13:25.439 +knows how best to search for the terms. So for example, there + +00:13:25.440 --> 00:13:29.159 +is a buffer candidate generator. What that does is it just + +00:13:29.160 --> 00:13:34.759 +puts all your buffers as search candidates. So obviously + +00:13:34.760 --> 00:13:37.879 +you can't, you can't run ripgrep on buffers like you can't you + +00:13:37.880 --> 00:13:41.759 +can't do that, you can't run ripgrep on just like yeah just + +00:13:41.760 --> 00:13:44.319 +just like buffers that don't have files attached or, for + +00:13:44.320 --> 00:13:47.559 +example, maybe there's like an internet search candidate + +00:13:47.560 --> 00:13:51.279 +generator, like a web crawler thing. You just imagine it + +00:13:51.280 --> 00:13:55.759 +goes to a website, kind of crawls all the links and all that, + +00:13:55.760 --> 00:13:58.119 +and then just gets your web pages for the candidates. + +00:13:58.120 --> 00:14:01.159 +Obviously, you can't use ripgrep for that either. So, every + +00:14:01.160 --> 00:14:04.679 +candidate generator knows how best to search for the terms + +00:14:04.680 --> 00:14:08.919 +of what candidate it's generating. So, the file system + +00:14:08.920 --> 00:14:12.359 +candidate generator will say, okay, I have a base + +00:14:12.360 --> 00:14:17.239 +directory. So, if you ask me, the file system candidate + +00:14:17.240 --> 00:14:21.239 +generator, how to get the terms, it knows it's set up to use + +00:14:21.240 --> 00:14:25.199 +ripgrep. And so, it runs ripgrep, and so then it goes + +00:14:25.200 --> 00:14:29.439 +through, it runs the command, gets the counts, and then + +00:14:29.440 --> 00:14:32.359 +store those counts. So, the lines have nothing. At this + +00:14:32.360 --> 00:14:35.999 +point, the lines have nothing. There's no notion of lines at + +00:14:36.000 --> 00:14:40.559 +all. It's just document, document ID with the amount of + +00:14:40.560 --> 00:14:43.839 +times it matched. And that's all you need to run this BM25 + +00:14:43.840 --> 00:14:47.519 +algorithm. But then when you get the top results, you + +00:14:47.520 --> 00:14:51.359 +obviously want to see the lines that matched. And so there's + +00:14:51.360 --> 00:14:56.399 +another thing, another method to kind of get the exact + +00:14:56.400 --> 00:15:00.559 +thing, to kind of match out the particular lines. And so + +00:15:00.560 --> 00:15:03.159 +that's a separate mechanism. And that can be done in Elist, + +00:15:03.160 --> 00:15:05.719 +because if you're not displaying, that's kind of a design + +00:15:05.720 --> 00:15:09.319 +decision of P-Search, is that it only displays like maybe 10 + +00:15:09.320 --> 00:15:12.519 +or 20. It doesn't display all the results. So you can have + +00:15:12.520 --> 00:15:16.679 +Elist just go crazy with just like highlighting things, + +00:15:16.680 --> 00:15:22.719 +picking the best kind of pieces to show. So yeah, that's how + +00:15:22.720 --> 00:15:27.359 +that's set up. + +00:15:27.360 --> 00:15:38.279 +So, here's perhaps a good moment for me to just jump in and + +00:15:38.280 --> 00:15:42.079 +comment that in a minute or so we will break away with the live + +00:15:42.080 --> 00:15:47.439 +stream to give people an hour of less content to make sure + +00:15:47.440 --> 00:15:50.639 +everybody goes and takes their lunch and break a little bit. + +00:15:50.640 --> 00:15:55.039 +But if you would like to keep going in here, Love to love to + +00:15:55.040 --> 00:15:59.839 +take as many questions. And, of course, we will include + +00:15:59.840 --> 00:16:06.159 +that all when we publish the Q and A. Sounds good. Yeah, I'll go + +00:16:06.160 --> 00:16:12.199 +and stick around on the stream as we cut away, as we've got a + +00:16:12.200 --> 00:16:15.999 +little video surprise we've all prepared to play, just some + +00:16:16.000 --> 00:16:19.359 +comments from an Emacs user dated in 2020 or something like + +00:16:19.360 --> 00:16:29.679 +this. I forget the detail. Thank you again so much, Zac, for + +00:16:29.680 --> 00:16:30.959 +your fascinating talk. + +00:16:30.960 --> 00:16:32.301 +Yeah, so, okay. + +NOTE Q: easy filtering with orderless - did this or something like this help or infulce the design of psearch? + +00:16:32.302 --> 00:16:33.359 +This makes me really think about the + +00:16:33.360 --> 00:16:35.999 +emergent workflows with Denote and easy filtering with + +00:16:36.000 --> 00:16:36.639 +orderless. + +00:16:36.640 --> 00:16:42.039 +Did this or something like this help influence the design of + +00:16:42.040 --> 00:16:47.359 +p-search? Yeah, exactly. So, I mean, yeah, I mean, there's + +00:16:47.360 --> 00:16:49.919 +just so many different searches. Like, it's just kind of + +00:16:49.920 --> 00:16:52.519 +mind-boggling. Like, you could search for whatever you want + +00:16:52.520 --> 00:16:54.599 +on your computer. Like, there's just so much, like, you + +00:16:54.600 --> 00:17:01.199 +can't, yeah, you can't just like, you can't just like hard + +00:17:01.200 --> 00:17:04.159 +code any of these things. It's all malleable. Like maybe + +00:17:04.160 --> 00:17:09.279 +somebody wants to search these directories. And so, yeah, + +00:17:09.280 --> 00:17:10.639 +like + +00:17:10.640 --> 00:17:18.399 +exactly like that use case of having a directory of files + +00:17:18.400 --> 00:17:18.959 +where + +00:17:18.960 --> 00:17:25.919 +they contain your personal knowledge management system. + +00:17:25.920 --> 00:17:33.479 +Yeah, that use case definitely was at the top of my mind. + +00:17:33.480 --> 00:17:35.879 +Let's see. + +00:17:35.880 --> 00:17:56.959 +Let's see, so Git covers the multiple names thing itself. + +NOTE Q: Notmuch with the p-search UI + +00:17:56.960 --> 00:18:00.359 +Okay, yeah, + +00:18:00.360 --> 00:18:09.599 +so something about notmuch with p-search UI. Actually, + +00:18:09.600 --> 00:18:16.399 +interestingly, I think notmuch is, I haven't used it + +00:18:16.400 --> 00:18:22.759 +myself, but that's the, email something about yeah so i mean + +00:18:22.760 --> 00:18:25.679 +this is like these things are just like these these kind of + +00:18:25.680 --> 00:18:30.479 +extensions could kind of go go forever but one thing i + +00:18:30.480 --> 00:18:33.369 +thought about is like i use mu4e for email + +00:18:33.370 --> 00:18:41.119 +and that uses a full-fledged index. And so having + +00:18:41.120 --> 00:18:44.879 +some method to kind of reach into these different systems + +00:18:44.880 --> 00:18:47.938 +and kind of be kind of like a front end for this. + +00:18:47.939 --> 00:18:52.000 +Another thing is maybe SQL database. + +00:18:52.001 --> 00:18:55.823 +You can create a candidate generator from a SQLite query + +00:18:55.824 --> 00:19:01.919 +and then... yeah... + +00:19:02.583 --> 00:19:05.519 +I've had tons of ideas of different things you could + +00:19:05.520 --> 00:19:09.559 +incorporate into the system. Slowly, + +00:19:09.560 --> 00:19:13.599 +they're being implemented. Just recently, I implemented + +NOTE Info + +00:19:13.600 --> 00:19:17.039 +an info file candidate generator. So it lists out all the + +00:19:17.040 --> 00:19:21.559 +info files, and then it creates a candidate for each of the + +00:19:21.560 --> 00:19:26.759 +info nodes. So it turns out, yeah, I mean, it works pretty, I + +00:19:26.760 --> 00:19:32.559 +mean, just as well as Google. So I'm up for my own testing. + +00:19:32.560 --> 00:19:39.999 +Let's see, you can search a buffer using ripgrep feeding in + +00:19:40.000 --> 00:19:44.759 +as standard in to the ripgrep process, can't you? Yep, yeah, + +00:19:44.760 --> 00:19:50.039 +you can definitely search a buffer that way. So, yeah, I + +00:19:50.040 --> 00:19:56.359 +mean, based off of I mean, if this, yeah, so one thing that + +00:19:56.360 --> 00:19:59.039 +came up is that the system wants, I mean, I wanted the system + +00:19:59.040 --> 00:20:03.559 +to be able to search a lot of different things. And so it came + +00:20:03.560 --> 00:20:05.999 +up that I had, you know, implementing, + +00:20:06.000 --> 00:20:10.159 +doing these search things, having an Elist + +00:20:10.160 --> 00:20:13.079 +implementation, despite it being slow, would be + +00:20:13.080 --> 00:20:17.399 +necessary. So like anything that isn't represented as a + +00:20:17.400 --> 00:20:21.639 +file, Elisp, there's a mechanism in p-search to search for + +00:20:21.640 --> 00:20:23.319 +it. + +00:20:23.320 --> 00:20:29.719 +So, yeah, so having that redundancy kind of lets you get into + +00:20:29.720 --> 00:20:32.799 +the, you know, using kind of ripgrep for the big scale + +00:20:32.800 --> 00:20:37.759 +things. But then when you get to the individual file, you + +00:20:37.760 --> 00:20:40.999 +know, just going back to Elisp to kind of get the finer + +00:20:41.000 --> 00:20:47.199 +details seems to, you know, seems to end up working pretty + +00:20:47.200 --> 00:21:04.239 +well. + +00:21:04.240 --> 00:21:27.399 +Thank you all for listening. Yeah, sounds like we're about + +00:21:27.400 --> 00:21:31.279 +out of questions. Hi, Zacc. I have a question or still a + +00:21:31.280 --> 00:21:34.119 +question. I just want to thank everybody one more time for + +00:21:34.120 --> 00:21:37.719 +their participation, especially you for speaking, Zack. I + +00:21:37.720 --> 00:21:41.239 +look forward to playing with p-search myself. Thank you. + +00:21:41.240 --> 00:21:44.039 +Yeah, there might be one last question. Is there someone? + +00:21:44.040 --> 00:21:48.519 +Yes, there is. I don't know if you can understand me, but + +00:21:48.520 --> 00:21:50.359 +thank you for making this lovely thing + +00:21:50.360 --> 00:21:57.919 +I feel inspired to try it out and I'm thinking about how to + +00:21:57.920 --> 00:22:04.199 +integrate it because it sounds modular and nicely thought + +00:22:04.200 --> 00:22:09.799 +out. One small question. Have you thought about Project L + +00:22:09.800 --> 00:22:13.719 +integration? And then I have a little bigger question about + +00:22:13.720 --> 00:22:14.879 +the interface. + +NOTE project.el integration + +00:22:14.880 --> 00:22:20.799 +Yeah, project.el integration, it's used in a couple of ways. + +00:22:20.800 --> 00:22:25.719 +It's kind of used to kind of as like kind of like a default. + +00:22:25.720 --> 00:22:31.279 +This is the directory I want to search for the default + +00:22:31.280 --> 00:22:33.639 +p-search command. It does, yeah, it kind of goes off of + +00:22:33.640 --> 00:22:37.119 +project.el. If there is a project, it kind of says, okay, this, + +00:22:37.120 --> 00:22:40.319 +I want to search this project. And so it kind of, it used that + +00:22:40.320 --> 00:22:46.119 +as a default. So there's that. Because I use the project-grep + +00:22:46.120 --> 00:22:50.679 +or git-grep search a lot and maybe this is a better solution to + +00:22:50.680 --> 00:22:55.319 +the search and the interface you have right now for the + +00:22:55.320 --> 00:22:56.476 +search results. + +NOTE Q: How happy are you with the interface? + +00:22:56.477 --> 00:22:58.719 +How happy are you with it and have you + +00:22:58.720 --> 00:23:02.599 +thought about improving or have you ideas for + +00:23:02.600 --> 00:23:06.639 +improvements? Yeah, well actually what you see in the demo + +00:23:06.640 --> 00:23:09.199 +in the video isn't... There's actually, there is an + +00:23:09.200 --> 00:23:13.959 +improvement in the current code. Basically, what it + +00:23:13.960 --> 00:23:17.239 +does is it scans there's the current default as it scans + +00:23:17.240 --> 00:23:20.054 +the entire file for all of the searches. + +00:23:20.055 --> 00:23:25.959 +It finds the window that that has the highest score. So it kind + +00:23:25.960 --> 00:23:29.599 +of goes through entire file and just says... And it kind of finds + +00:23:29.600 --> 00:23:33.479 +like the piece of the section of text that has the most + +00:23:33.480 --> 00:23:37.919 +matches with the terms that score the best. So it's, I mean, + +00:23:37.920 --> 00:23:40.119 +that section is pretty good. I mean, that, so yeah, that, + +00:23:40.120 --> 00:23:44.519 +that ends up working pretty well. So I mean, in terms of other + +00:23:44.520 --> 00:23:46.879 +UI stuff, there's, there's tons, there's tons more that + +00:23:46.880 --> 00:23:50.159 +could be done, like, especially like debug ability or like + +00:23:50.160 --> 00:23:53.799 +introspection. Like, so this, this result, like, for + +00:23:53.800 --> 00:23:57.119 +example, this result ranks really high. Maybe you don't + +00:23:57.120 --> 00:24:01.719 +know why though. It's like, because of this, this text query + +00:24:01.720 --> 00:24:04.479 +arrow, was it because of this criteria? I think + +00:24:04.480 --> 00:24:09.039 +there's some UI elements that could kind of help the user + +00:24:09.040 --> 00:24:12.519 +understand why results are scoring high or low. So that's + +00:24:12.520 --> 00:24:15.639 +definitely... And that makes a lot of sense to me. You know, a + +00:24:15.640 --> 00:24:19.039 +lot of it is demystifying, like understanding what you're + +00:24:19.040 --> 00:24:22.719 +learning better and not just finding the right thing. A lot + +00:24:22.720 --> 00:24:26.519 +of it is, you know, kind of exploring your data. I love that. + +00:24:26.520 --> 00:24:31.639 +Thanks. Okay. I'm not trying to hurry us through either by + +00:24:31.640 --> 00:24:36.599 +any stretch. I would be happy to see this be a conversation. + +00:24:36.600 --> 00:24:42.359 +I also want to be considerate of your time. And I also wanted to + +00:24:42.360 --> 00:24:45.479 +make a quick shout out to everybody who's been updating and + +00:24:45.480 --> 00:24:50.479 +helping us capture the questions and the comments and the + +00:24:50.480 --> 00:24:53.639 +etherpad. That's just a big help to the extent that people + +00:24:53.640 --> 00:24:57.199 +are jumping in there and you know, revising and extending + +00:24:57.200 --> 00:24:59.799 +and just doing the best job we can to capture all the + +00:24:59.800 --> 00:25:00.799 +thoughtful remarks. + +00:25:00.800 --> 00:25:14.839 +Yeah, thank you, Zac. I'm not too sure what to ask anymore, + +00:25:14.840 --> 00:25:20.559 +but yes, would love to try it out now. Yeah, I mean, + +00:25:20.560 --> 00:25:22.076 +definitely feel free to... + +00:25:22.077 --> 00:25:25.679 +any feedback, here's my mail, or issues... + +00:25:25.680 --> 00:25:29.039 +I mean I'm happy to get any any feedback. It's + +00:25:29.040 --> 00:25:31.679 +still in the early stages, so still kind of a lot of + +00:25:31.680 --> 00:25:35.599 +documentation that needs to be writing. There's a lot. + +00:25:35.600 --> 00:25:38.439 +There's a lot on the roadmap, but yeah, I mean, hopefully, I + +00:25:38.440 --> 00:25:42.759 +could even publish this to ELPA and have a nice + +00:25:42.760 --> 00:25:47.727 +manual so yeah hopefully yeah those come soon. Epic. + +00:25:47.728 --> 00:25:50.279 +That sounds great, yes. + +NOTE gptel + +00:25:50.280 --> 00:25:59.359 +The ability to save your searches kind of reminds me of like + +00:25:59.360 --> 00:26:05.119 +the gptel package for the AI, where you can save searches, + +00:26:05.120 --> 00:26:10.799 +which makes it feel a lot more different. And yeah, we don't + +00:26:10.800 --> 00:26:14.839 +have something for that with search, but yeah, that's a + +00:26:14.840 --> 00:26:19.279 +whole different dynamic where it's like, okay, yeah, and + +00:26:19.280 --> 00:26:24.679 +makes it a unique tool that is, I guess would be unique to + +00:26:24.680 --> 00:26:28.079 +Emacs where you don't see that with like this AI package + +00:26:28.080 --> 00:26:31.119 +where the gptel is kind of unique because it's not just throw + +00:26:31.120 --> 00:26:37.039 +away. It's how did I get this? How did I search for it? And be an + +00:26:37.040 --> 00:26:40.319 +organic search, kind of like the orderless and vertico + +00:26:40.320 --> 00:26:43.039 +and... + +00:26:43.040 --> 00:26:46.279 +Yeah, that's a good, I mean, that brings me to another thing + +00:26:46.280 --> 00:26:48.239 +in that, so, + +00:26:48.240 --> 00:26:53.199 +I mean, you could easily... + +00:26:53.200 --> 00:26:57.399 +you could create bridges from p-search to these different + +00:26:57.400 --> 00:27:01.519 +other packages, like, for example, kind of a RAG search, + +00:27:01.520 --> 00:27:04.679 +like there's this RAG, there's this thing called a RAG + +00:27:04.680 --> 00:27:06.879 +workflow, which is kind of popular these days. It's like + +00:27:06.880 --> 00:27:11.639 +retrieval augmented generation. So, you do a search and + +00:27:11.640 --> 00:27:14.199 +then based off the search results you get, then you pass + +00:27:14.200 --> 00:27:20.359 +those into LLM. So, the cool thing is that like you could use + +00:27:20.360 --> 00:27:25.119 +p-search for the retrieval. And so you could even like, I + +00:27:25.120 --> 00:27:28.799 +mean, you could even ask an LM to come up with the search terms + +00:27:28.800 --> 00:27:32.079 +and then have it search. There's no + +00:27:32.080 --> 00:27:35.439 +programmatical interface now to do this exact workflow. + +00:27:35.440 --> 00:27:39.039 +But I mean, there's another kind of direction I'm starting + +00:27:39.040 --> 00:27:43.199 +to think about. So like you could have maybe + +00:27:43.200 --> 00:27:47.759 +a question answer kind of workflow where it does + +00:27:47.760 --> 00:27:51.639 +like an initial search for the terms and then you get the top + +00:27:51.640 --> 00:27:57.199 +results and then you can put that through maybe gptel or all + +00:27:57.200 --> 00:27:59.759 +these other different systems. So that's, and that seems + +00:27:59.760 --> 00:28:01.479 +like a promising thing. And then another thing is like, + +NOTE Saving a search + +00:28:01.480 --> 00:28:10.594 +well, you mentioned the ability to save a search. + +00:28:10.595 --> 00:28:11.479 +One thing I've noticed + +00:28:11.480 --> 00:28:15.359 +kind of like with the DevOps workflows is, I'll write a + +00:28:15.360 --> 00:28:20.519 +CLI command that I do, or like a calculator command. Then I end + +00:28:20.520 --> 00:28:23.999 +up in the org mode document, write what I wrote, had the + +00:28:24.000 --> 00:28:26.943 +results in there, and then I'll go back to that. + +00:28:26.944 --> 00:28:31.966 +It's like, oh, this is why, this is that calculation I did + +00:28:31.967 --> 00:28:34.007 +and this is why I did it. + +00:28:34.008 --> 00:28:36.959 +I'll have run the same tool three different + +00:28:36.960 --> 00:28:40.519 +times to get three different answers, if it was like a + +00:28:40.520 --> 00:28:41.799 +calculator, for example. + +NOTE Workflows + +00:28:41.800 --> 00:28:49.319 +But yeah, that's a very unique feature that isn't seen and + +00:28:49.320 --> 00:28:53.959 +will make me look at it and see about integrating it into my + +00:28:53.960 --> 00:28:59.079 +workflow. Yeah, I think you get on some interesting, you + +00:28:59.080 --> 00:29:03.159 +know, kind of what makes Emacs really unique there and how + +00:29:03.160 --> 00:29:07.399 +to... interesting kind of ways to exploit + +00:29:07.400 --> 00:29:12.439 +Emacs to learn in the problem. I'm seeing a number of + +00:29:12.440 --> 00:29:15.799 +ways you're getting at that. For example, if I think about + +00:29:15.800 --> 00:29:18.999 +like an automation workflow, and there's just a million + +00:29:19.000 --> 00:29:22.719 +we'll say, assumptions that are baked into a search + +00:29:22.720 --> 00:29:26.719 +product, so to speak, like represented by a Google search or + +00:29:26.720 --> 00:29:31.639 +Bing or what have you. And then as I unpack that and repack it + +00:29:31.640 --> 00:29:35.159 +from an Emacs workflow standpoint, thinking about, well, + +00:29:35.160 --> 00:29:39.079 +first of all, what is the yak I'm shaving? And then also, what + +00:29:39.080 --> 00:29:43.759 +does doing it right mean? How would I reuse this? How would I + +00:29:43.760 --> 00:29:47.679 +make the code accessible to others for their own purposes in + +00:29:47.680 --> 00:29:52.439 +a free software world kind of way? and all of the different + +00:29:52.440 --> 00:29:57.479 +sort of say like orthogonal headspacey kind of things, + +00:29:57.480 --> 00:30:00.079 +right? Emacs brings a lot to the table from a search + +00:30:00.080 --> 00:30:03.719 +standpoint because I'm going to want to think about. I'm + +00:30:03.720 --> 00:30:07.799 +going to want to think about where does the UI come in? Where + +00:30:07.800 --> 00:30:11.399 +might the user want to get involved interactively? Where + +00:30:11.400 --> 00:30:14.359 +might the user want to get involved declaratively with + +00:30:14.360 --> 00:30:16.919 +their configuration, perhaps based on the particular + +00:30:16.920 --> 00:30:21.359 +environment where this Emacs is running? And there's just a + +00:30:21.360 --> 00:30:24.879 +lot of what Emacs users think about that really applies. + +00:30:24.880 --> 00:30:28.359 +I'll use the word again, orthogonally across all my many + +00:30:28.360 --> 00:30:33.239 +workflows as an Emacs user. You know, the search is just such + +00:30:33.240 --> 00:30:38.519 +a big word. Yeah, that's actually, this exact point I was + +00:30:38.520 --> 00:30:43.159 +thinking about with this. It's like, I mean, it seems kind of + +00:30:43.160 --> 00:30:46.319 +obvious, like just like using grep or something, just like to + +00:30:46.320 --> 00:30:49.359 +get search counts, like, okay, you can just run the command, + +00:30:49.360 --> 00:30:51.439 +get the term counts and you could just run it through a + +00:30:51.440 --> 00:30:55.959 +relatively simple algorithm. to get your search score. So + +00:30:55.960 --> 00:31:01.759 +if it's this easy, though, why don't we see this in other... And + +00:31:01.760 --> 00:31:06.919 +the results are actually surprisingly good. So why don't we + +00:31:06.920 --> 00:31:10.559 +see this anywhere, really? And it occurred to me that just + +00:31:10.560 --> 00:31:16.399 +the amount of configuration... The amount of setup you have to + +00:31:16.400 --> 00:31:20.039 +do to get it right. + +00:31:20.040 --> 00:31:24.599 +It's above this threshold that you need something like + +00:31:24.600 --> 00:31:27.856 +Emacs to kind of get pushed through that configuration. + +NOTE Transient and configuration + +00:31:27.857 --> 00:31:30.799 +So for example, that's why I rely heavily on transient + +00:31:30.800 --> 00:31:34.119 +to set up the system. 'Cause like, if you want to get good + +00:31:34.120 --> 00:31:36.079 +search results, you're going to have to configure a lot + +00:31:36.080 --> 00:31:38.519 +of stuff. I want this directory. I want this, I don't + +00:31:38.520 --> 00:31:41.559 +want this directory. I want these search terms, you know, + +00:31:41.560 --> 00:31:48.159 +there's a lot to set up. And in most programs, I mean, they + +00:31:48.160 --> 00:31:52.079 +don't have an easy way to, I mean, they'll often try and try to + +00:31:52.080 --> 00:31:55.039 +hide all this complexity. Like they say, okay, our users + +00:31:55.040 --> 00:31:59.199 +too, you know, we don't want to, you know, we don't wanna, you + +00:31:59.200 --> 00:32:02.719 +know, make our users, we don't wanna scare our users with + +00:32:02.720 --> 00:32:06.879 +like, complicated search engine configuration. So we're + +00:32:06.880 --> 00:32:09.079 +just going to do it all in the background and we're just not + +00:32:09.080 --> 00:32:12.599 +going to let the user even know that it's happening. I mean, + +00:32:12.600 --> 00:32:15.119 +that's the third time you've made me laugh out loud. Sorry + +00:32:15.120 --> 00:32:17.879 +for interrupting you, but yeah, you're just spot on there. + +00:32:17.880 --> 00:32:22.999 +You're some people's users. Am I right? like, you know, and + +00:32:23.000 --> 00:32:25.390 +also some people's workflows. + +NOTE Problem space + +00:32:25.391 --> 00:32:27.719 +And, you know, another case + +00:32:27.720 --> 00:32:30.799 +where just like, if you're thinking about Emacs, you either + +00:32:30.800 --> 00:32:33.279 +have to pick a tunnel to dive into and be like, no, this is + +00:32:33.280 --> 00:32:37.759 +going to be right for my work, or your problem space is never + +00:32:37.760 --> 00:32:40.879 +ending in terms of discovering the ways other people are + +00:32:40.880 --> 00:32:45.839 +using Emacs and how that breaks your feature. and how that + +00:32:45.840 --> 00:32:49.679 +breaks your conceptualization of the problem space, + +00:32:49.680 --> 00:32:53.559 +right? Or you just have to get so narrowed down that can + +00:32:53.560 --> 00:32:57.119 +actually be hard to find people that are quite understand + +00:32:57.120 --> 00:33:00.279 +you, right? You get into the particular, well, it solves + +00:33:00.280 --> 00:33:03.039 +these three problems for me. Well, what are these three + +00:33:03.040 --> 00:33:08.639 +problems again? And this is a month to unpack. You have Emacs + +00:33:08.640 --> 00:33:12.639 +and I don't know, it's like you got a lot of, they all agree is + +00:33:12.640 --> 00:33:16.559 +like we're going to use elisp to set variables every emacs + +00:33:16.560 --> 00:33:21.199 +package is going to do that we're going to use elisp and have a + +00:33:21.200 --> 00:33:25.479 +search in place to put our documentation and like it does + +00:33:25.480 --> 00:33:32.559 +also eliminate a lot of confusion and gives a lot of + +00:33:32.560 --> 00:33:37.719 +expectations of what they want. One thing that I'm + +00:33:37.720 --> 00:33:39.855 +surprised I haven't seen elsewhere is you have the + +NOTE consult-omni + +00:33:39.856 --> 00:33:44.239 +consult-omni package which allows you to search multiple websites + +00:33:44.240 --> 00:33:49.799 +simultaneously for multiple web search engines. and put + +00:33:49.800 --> 00:33:52.799 +them in one thing and it's like, and then you use orderless. + +NOTE orderless + +00:33:52.800 --> 00:33:55.159 +Why would you use orderless? Because that's what you + +00:33:55.160 --> 00:33:57.799 +configured and you know exactly what you wanna use and you + +00:33:57.800 --> 00:34:01.679 +use the same font and your same mini buffer and you use all + +00:34:01.680 --> 00:34:04.079 +that existing configuration because, well, you're an + +00:34:04.080 --> 00:34:07.599 +Emacs user or like you're a command line user. You know how + +00:34:07.600 --> 00:34:11.559 +you want these applications to go. You don't want them to be + +00:34:11.560 --> 00:34:17.399 +reinvented the wheel 1600 times in 1,600 different ways, + +00:34:17.400 --> 00:34:23.079 +you want it to use your mini buffer, your font, your et + +00:34:23.080 --> 00:34:28.159 +cetera, et cetera, et cetera. But I haven't + +00:34:28.160 --> 00:34:32.479 +seen a website where I can search multiple websites at the + +00:34:32.480 --> 00:34:35.159 +same time in something like Emacs before. And it's like, + +00:34:35.160 --> 00:34:38.319 +yeah, with my sorting algorithm, + +00:34:38.320 --> 00:34:49.359 +Yeah, exactly. Yeah. Yeah. Yeah. I mean, just setting the + +00:34:49.360 --> 00:34:57.079 +bar for configuration and set up just like, yeah, you have to + +00:34:57.080 --> 00:35:02.839 +have a list. Yeah. I mean, it, it does, obviously it's not, + +00:35:02.840 --> 00:35:05.839 +it's not most beginner beginner friendly, but I mean, it, + +00:35:05.840 --> 00:35:10.319 +yeah, it definitely widens the amount of the solution space + +00:35:10.320 --> 00:35:14.679 +you can have to such problems. Oh my gosh, you used the word + +00:35:14.680 --> 00:35:18.759 +solution space. I love it. But on the flip side, it's like, + +00:35:18.760 --> 00:35:25.119 +why does Emacs get this consult-omni package? Or let's see, + +00:35:25.120 --> 00:35:30.719 +you have elfeed-youtube where it will put a flowing + +00:35:30.720 --> 00:35:34.479 +transcript on a YouTube video or you got your package. Why + +00:35:34.480 --> 00:35:39.879 +does it get all these applications? And I don't see + +00:35:39.880 --> 00:35:45.679 +applications like this as much outside of Emacs. So there's + +00:35:45.680 --> 00:35:46.267 +a way that it just makes it easier. + +NOTE User interface + +00:35:46.268 --> 00:35:47.479 +It's because user + +00:35:47.480 --> 00:35:51.439 +interface is the, you know, it's the economy stupid of + +00:35:51.440 --> 00:35:58.119 +technology, right? If you grab people by the UX, you can sell + +00:35:58.120 --> 00:36:01.679 +a million of any product that solves problem that I didn't + +00:36:01.680 --> 00:36:04.639 +think technology could solve, or that I didn't think I had + +00:36:04.640 --> 00:36:08.319 +the patience to use technology to solve, which is a lot of + +00:36:08.320 --> 00:36:12.159 +times what it comes down to. And here exactly is the, you + +00:36:12.160 --> 00:36:16.799 +know, the the Emacs sort of conundrum, right? How much time + +00:36:16.800 --> 00:36:20.759 +should I spend today updating my Emacs so that tomorrow I can + +00:36:20.760 --> 00:36:26.319 +just work more, right? And, you know, I love that little + +00:36:26.320 --> 00:36:29.839 +graph of the Emacs learning curve, right? Where it's this + +00:36:29.840 --> 00:36:33.399 +concentric, it becomes this concentric spiral, right? The + +00:36:33.400 --> 00:36:38.759 +Vim learning curve is like a ladder, right? Or, you know, and + +00:36:38.760 --> 00:36:44.119 +And the nano learning curve is like just a flat plane, you + +00:36:44.120 --> 00:36:49.279 +know, or a ladder, a vertical ladder or a horizontal ladder. + +00:36:49.280 --> 00:36:56.719 +There we go. And the Emacs learning curve is this kind of + +00:36:56.720 --> 00:36:59.799 +straight up line until it curves back on itself and + +00:36:59.800 --> 00:37:03.079 +eventually spirals. And the more you learn, the harder it is + +00:37:03.080 --> 00:37:05.839 +to learn the next thing. And are you really moving forward at + +00:37:05.840 --> 00:37:09.039 +all? Like, it just works for me. What a great analogy. And + +00:37:09.040 --> 00:37:15.279 +that's my answer, I think. Yeah. You know, it's because + +00:37:15.280 --> 00:37:20.199 +we... The spiral is great. Sorry. There are each of these + +00:37:20.200 --> 00:37:26.639 +weird little packages that some of us, you know, it solves + +00:37:26.640 --> 00:37:29.279 +that one problem and lets us get back to work. And for others, + +00:37:29.280 --> 00:37:32.439 +it makes us go, gosh, now that makes me rethink a whole bunch + +00:37:32.440 --> 00:37:35.239 +of things because there's... Like I don't even know what + +00:37:35.240 --> 00:37:37.719 +you're talking about with some of your conceptualizations + +00:37:37.720 --> 00:37:41.039 +of UI. Maybe it comes from Visual Studio, and I've not + +00:37:41.040 --> 00:37:44.679 +used that or something. So for you, it's a perfectly normal UX + +00:37:44.680 --> 00:37:48.799 +paradigm that you kind of lean on for others. It's like you + +00:37:48.800 --> 00:37:51.999 +know occupying some screen space and I don't know what the + +00:37:52.000 --> 00:37:57.759 +gadgets do and when I open them up... They're thinking + +00:37:57.760 --> 00:38:00.999 +about... they have... they imply their own + +00:38:01.000 --> 00:38:03.639 +abstractions let's say logically against a programming + +00:38:03.640 --> 00:38:06.999 +language. This would be tree sitter, right. If i'm not used to + +00:38:07.000 --> 00:38:11.719 +thinking in terms of an abstract abstract syntax tree, some + +00:38:11.720 --> 00:38:14.799 +of the concepts just aren't as natural for me. If i'm used to + +00:38:14.800 --> 00:38:19.039 +like emacs at a more fundamental level is, or the old modes + +00:38:19.040 --> 00:38:23.479 +right, we're used to them thinking in terms of progressing + +00:38:23.480 --> 00:38:26.959 +forward through some text, managing a stack of markers into + +00:38:26.960 --> 00:38:29.239 +the text, right? It's a different paradigm. The world + +00:38:29.240 --> 00:38:33.559 +changes. Emacs kind of supports it all. That's why all the + +00:38:33.560 --> 00:38:37.039 +apps are built there. That's why when you're talking about + +00:38:37.040 --> 00:38:40.759 +that spiral. what that hints at is that this is really just a + +00:38:40.760 --> 00:38:44.239 +different algorithm that you're transferring out that + +00:38:44.240 --> 00:38:47.319 +makes some things a lot easier and some things a lot harder. + +00:38:47.320 --> 00:38:51.719 +That's why I was bringing in those three packages, because + +00:38:51.720 --> 00:38:59.708 +in some way it's making these search terms with reusable... + +00:38:59.709 --> 00:39:07.083 +Let's see... saveable buffers or interactive buffers in a way + +00:39:07.084 --> 00:39:10.359 +that... in a way, that is bigger than what I think it should have, + +00:39:10.360 --> 00:39:15.479 +especially in comparison to like how many people use + +00:39:15.480 --> 00:39:20.319 +YouTube, but I don't see very many YouTube apps that will + +00:39:20.320 --> 00:39:26.279 +show Rolling subtitle list that you can click on to move up + +00:39:26.280 --> 00:39:27.315 +and down the video + +00:39:27.316 --> 00:39:30.139 +even though YouTube's been around for years. + +00:39:30.140 --> 00:39:33.359 +Why does Emacs have a very good implementation + +00:39:33.360 --> 00:39:37.159 +that was duct taped together? So before I let you respond to + +00:39:37.160 --> 00:39:40.439 +that, Zac, let me just say we're coming up on eating up a + +00:39:40.440 --> 00:39:43.879 +whole half hour of your lunchtime and thank you for giving us + +00:39:43.880 --> 00:39:47.879 +that extra time. But let me just say, let's, you know, if I + +00:39:47.880 --> 00:39:50.879 +could ask you to take like up to another five minutes and then + +00:39:50.880 --> 00:39:53.759 +I'll try to kick us off here and make sure everybody does + +00:39:53.760 --> 00:39:54.999 +remember to eat. + +00:39:55.000 --> 00:40:04.119 +Yeah, so yeah, it looks like there's one other question. So + +NOTE Q: Do you think the Emacs being kinda slow will get in the way of being able to run a lot of scoring algorithms? + +00:40:04.120 --> 00:40:06.679 +yeah, do you think Emacs being kind of slow will get in the way + +00:40:06.680 --> 00:40:11.319 +of being able to run a lot of scoring algorithms? So this is + +00:40:11.320 --> 00:40:15.039 +actually a thought I had. Yeah, Emacs, because the code + +00:40:15.040 --> 00:40:19.919 +currently kind of does, I mean, it kind of does, it's kind of + +00:40:19.920 --> 00:40:24.039 +dumb in a lot of places. a lot of times it just, it does just go + +00:40:24.040 --> 00:40:27.599 +through all the files and then just compute some score for + +00:40:27.600 --> 00:40:30.679 +them. But I'm surprised that it's, that part actually isn't + +00:40:30.680 --> 00:40:34.799 +that slow. Like, like it turns out like, okay, like if you + +00:40:34.800 --> 00:40:40.759 +take, for example, Emacs, like the Emacs directory or the + +00:40:40.760 --> 00:40:44.879 +Emacs Git repository, or maybe another big Git repository, + +00:40:44.880 --> 00:40:49.079 +like you could have an Elisp function enumerate those, and + +00:40:49.080 --> 00:40:52.599 +multiply some numbers, maybe multiply 10 numbers + +00:40:52.600 --> 00:41:01.039 +together. And that isn't that slow. And that's the bulk of + +00:41:01.040 --> 00:41:05.799 +what the only thing that Elisp has to do is just like multiply + +00:41:05.800 --> 00:41:11.599 +these numbers. Obviously, if you have to resort to Elisp to + +00:41:11.600 --> 00:41:15.519 +search all the files and you have like 10 or 100,000 files, + +00:41:15.520 --> 00:41:18.759 +then yeah, Emacs will be slow + +00:41:18.760 --> 00:41:23.959 +to manually search, like if you're not using ripgrep or any + +00:41:23.960 --> 00:41:26.839 +faster tool and you have, and you have millions of files and + +00:41:26.840 --> 00:41:30.959 +yeah, it will be slow. But what I noticed though is like, for + +00:41:30.960 --> 00:41:35.119 +example, let's say you want to search for, let's say you want + +00:41:35.120 --> 00:41:40.199 +to search like info directory, like info files for Emacs and + +00:41:40.200 --> 00:41:46.039 +the Emacs info file and the Elisp info file. So those are two + +00:41:46.040 --> 00:41:49.279 +decently sized kind of books, kind of like reference + +00:41:49.280 --> 00:41:50.199 +material on Emacs. + +00:41:50.200 --> 00:41:55.999 +Relying on Elisp to search both of those together, it's + +00:41:56.000 --> 00:41:58.079 +actually pretty, it's actually like almost instant. I + +00:41:58.080 --> 00:42:00.639 +mean, it's not slow enough. So I think that's + +00:42:00.640 --> 00:42:03.679 +another thing is like scale. Like I think on, on kind of like + +00:42:03.680 --> 00:42:09.679 +individual human level scales, I think Elisp can be good + +00:42:09.680 --> 00:42:14.359 +enough. if you're going on the scale of like enterprise, + +00:42:14.360 --> 00:42:18.399 +like all the repositories, all the Git repositories of an + +00:42:18.400 --> 00:42:21.199 +enterprise, then yeah, that scale might, it might, it might + +00:42:21.200 --> 00:42:26.039 +be too much. But I think on, on the scale of what most + +00:42:26.040 --> 00:42:30.519 +individuals have to deal with on a daily basis, like for + +00:42:30.520 --> 00:42:34.719 +example, maybe somebody has some, yeah, I mean, I think it + +00:42:34.720 --> 00:42:36.959 +should, I think it hopefully should be enough. And if not, + +00:42:36.960 --> 00:42:39.639 +there's always room for optimizations. + +00:42:39.640 --> 00:42:55.999 +Yeah, so so I'll redirect you a little bit because based on a + +00:42:56.000 --> 00:43:00.279 +couple of things I got into, you know, or if you want to be done + +00:43:00.280 --> 00:43:04.759 +be like, you know, give me the hi sign by all means and we can + +00:43:04.760 --> 00:43:08.639 +we can shut up shop, but I'm curious, you know, what are what + +NOTE Boundary conditions + +00:43:08.640 --> 00:43:13.079 +are your boundary conditions? What what tends to cause you + +00:43:13.080 --> 00:43:16.679 +to to to write something more complicated and what what + +00:43:16.680 --> 00:43:20.959 +causes you to? So to work around it with more complex + +00:43:20.960 --> 00:43:23.559 +workflow in Emacs terms, like where do you break out the big + +00:43:23.560 --> 00:43:27.919 +guns? Just thinking about, like search, we talked about, + +00:43:27.920 --> 00:43:31.439 +maybe that's too abstract a question, but just general + +00:43:31.440 --> 00:43:36.679 +usage. Search is an example where almost all of us have + +00:43:36.680 --> 00:43:39.599 +probably written something to go find something, right? + +00:43:39.600 --> 00:43:43.519 +Yeah, I mean, this is a good question. I'm actually of the + +00:43:43.520 --> 00:43:51.999 +idea, at my work, for example, I tried to get rid of all, I + +00:43:52.000 --> 00:43:54.879 +mean, this is probably a typical Emacs user thing, but like, + +00:43:54.880 --> 00:43:59.319 +I mean, I think that just like getting, just like having + +00:43:59.320 --> 00:44:02.559 +Emacs expand to whatever it can get into and whatever it can + +00:44:02.560 --> 00:44:08.839 +automate, like any task, any, like, just like the more you + +00:44:08.840 --> 00:44:13.719 +can kind of get that coded, I actually find that kind of like, + +00:44:13.720 --> 00:44:20.439 +I mean, it is kind of like a meme. Like, yeah, I have to + +00:44:20.440 --> 00:44:24.199 +configure my Emacs until it's fun, and then I'll do it. But I + +00:44:24.200 --> 00:44:27.959 +actually I actually think that maybe for like a normal + +00:44:27.960 --> 00:44:31.999 +software developer, if you invest, if you invest, maybe, + +00:44:32.000 --> 00:44:34.839 +maybe you have like some spare time after you've done all + +00:44:34.840 --> 00:44:39.679 +your tasks, if you invest all that time in, in just like kind + +00:44:39.680 --> 00:44:42.359 +of going through all the workflows, all the, you know, just, + +00:44:42.360 --> 00:44:46.279 +just getting all of that in, in Emacs, then I think that that, + +00:44:46.280 --> 00:44:52.039 +that acts as kind of like a, it kind of like a productivity + +00:44:52.040 --> 00:44:56.759 +multiplier. And so. So I found that, I mean, I found to not + +00:44:56.760 --> 00:44:59.519 +have those boundaries. I mean, obviously there's things + +00:44:59.520 --> 00:45:04.599 +you can't do, like web-based things. I mean, that's a hard + +00:45:04.600 --> 00:45:10.199 +boundary, but that's more because... Yeah, there's really + +00:45:10.200 --> 00:45:13.719 +not much to do about that. Nobody's written a front-end + +00:45:13.720 --> 00:45:18.759 +engine, and too much of the forebrain is occupied with + +00:45:18.760 --> 00:45:22.559 +things that should happen on the "end-users + +00:45:22.560 --> 00:45:29.839 +infrastructure", so to speak. So with like 40 seconds left, I + +00:45:29.840 --> 00:45:33.519 +was going to say a minute, but I guess, any final thoughts? + +00:45:33.520 --> 00:45:40.159 +Yeah, I mean, just thank you for listening, and And thank you + +00:45:40.160 --> 00:45:45.559 +for putting this on. It's a really nice conference to have, + +00:45:45.560 --> 00:45:50.679 +and I'm glad things like this exist. So thank you. Yeah, it's + +00:45:50.680 --> 00:45:54.639 +you and the other folks on this call. Thank you so much, + +00:45:54.640 --> 00:45:58.639 +PlasmaStrike, and all the rest of you for hopping on the BBB + +00:45:58.640 --> 00:46:03.119 +and having such an interesting discussion. Keeps it really + +00:46:03.120 --> 00:46:08.239 +fun for us as organizers. And thanks, everybody, for being + +00:46:08.240 --> 00:46:21.320 +here. diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt new file mode 100644 index 00000000..3c81657f --- /dev/null +++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt @@ -0,0 +1,38 @@ +WEBVTT + + +00:00:00.000 --> 00:01:24.199 +Search in daily workflows + +00:01:24.200 --> 00:03:58.232 +Problems with editor search tools + +00:03:58.233 --> 00:04:34.295 +Information retrieval + +00:04:34.296 --> 00:06:21.756 +Search engine in Emacs: the index + +00:06:21.757 --> 00:06:43.552 +Search engine in Emacs: Ranking + +00:06:43.553 --> 00:07:41.159 +tf-idf: term-frequency x inverse-document-frequency + +00:07:41.160 --> 00:08:41.199 +BM25 + +00:08:41.200 --> 00:10:41.456 +Searching with p-search + +00:10:41.457 --> 00:16:06.770 +Flight AF 447 + +00:16:06.771 --> 00:20:40.404 +Modifying priors + +00:20:40.405 --> 00:21:38.559 +Importance + +00:21:38.560 --> 00:22:42.240 +Complement or inverse diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt new file mode 100644 index 00000000..111f2728 --- /dev/null +++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt @@ -0,0 +1,970 @@ +WEBVTT captioned by sachac + +NOTE Search in daily workflows + +00:00:00.000 --> 00:00:03.399 +Hello, my name is Zachary Romero, and today I'll be going + +00:00:03.400 --> 00:00:08.115 +over p-search, a local search engine in Emacs. + +00:00:08.116 --> 00:00:12.398 +Search these days is everywhere in software, from text editors, + +00:00:12.399 --> 00:00:18.359 +to IDEs, to most online websites. These tools tend to fall + +00:00:18.360 --> 00:00:25.839 +into one of two categories. One are tools that run locally, + +00:00:25.840 --> 00:00:31.279 +and work by matching string to text. The most common + +00:00:31.280 --> 00:00:35.639 +example of this is grep. In Emacs, there are a lot of + +00:00:35.640 --> 00:00:38.959 +extensions which provide functionality on top of these + +00:00:38.960 --> 00:00:42.388 +tools, such as projectile-grep, deadgrep, + +00:00:42.389 --> 00:00:46.849 +consult-ripgrep. Most editors have some sort of + +00:00:46.850 --> 00:00:52.691 +search current project feature. Most of the time, + +00:00:52.692 --> 00:00:56.393 +some of these tools have features like regular expressions, + +00:00:56.394 --> 00:00:59.215 +or you can specify file extension, + +00:00:59.216 --> 00:01:01.636 +or a directory you want to search in, + +00:01:01.637 --> 00:01:03.957 +but features are pretty limited. + +00:01:03.958 --> 00:01:07.919 +The other kind of search we use are usually hosted online, + +00:01:07.920 --> 00:01:12.302 +and they usually search a vast corpus of data. + +00:01:12.303 --> 00:01:15.639 +These are usually proprietary + +00:01:15.640 --> 00:01:18.765 +online services such as Google, GitHub, + +00:01:18.766 --> 00:01:24.199 +SourceGraph for code. + +NOTE Problems with editor search tools + +00:01:24.200 --> 00:01:28.839 +The kind of search feature that editors + +00:01:28.840 --> 00:01:36.719 +usually have have a lot of downsides to them. For one, a lot + +00:01:36.720 --> 00:01:38.839 +of times you don't know the exact search string you're + +00:01:38.840 --> 00:01:42.783 +searching for. Some complicated term like this + +00:01:42.784 --> 00:01:46.860 +high volume demand partner, you know, do you know if... + +00:01:46.861 --> 00:01:49.708 +Are some words abbreviated, is it capitalized, + +00:01:49.709 --> 00:01:53.089 +is it in kebab case, camel case, snake case? + +00:01:53.090 --> 00:01:57.571 +You often have to search all these variations. + +00:01:57.572 --> 00:02:05.434 +Another downside is that the search results returned + +00:02:05.435 --> 00:02:07.769 +contain a lot of noise. For example, + +00:02:07.770 --> 00:02:10.816 +you may get a lot of test files. + +00:02:10.817 --> 00:02:13.537 +If the tool hits your vendor directory, + +00:02:13.538 --> 00:02:17.199 +it may get a bunch of results from libraries + +00:02:17.200 --> 00:02:22.879 +you're using, which most are not helpful. Another downside + +00:02:22.880 --> 00:02:26.679 +is that the order given is, well, there's no meaning to the + +00:02:26.680 --> 00:02:30.319 +order. It's usually just the search order that the tool + +00:02:30.320 --> 00:02:34.639 +happens to look in first. + +00:02:34.640 --> 00:02:38.639 +Another thing is, so when you're searching, you oftentimes + +00:02:38.640 --> 00:02:41.639 +have to keep the state of the searches in your head. For + +00:02:41.640 --> 00:02:46.639 +example, you try one search, you see the results, find the + +00:02:46.640 --> 00:02:49.639 +results you think are relevant, keep them in your head, run + +00:02:49.640 --> 00:02:52.519 +search number two, look through the results, kind of + +00:02:52.520 --> 00:02:56.119 +combine these different search results in your head until + +00:02:56.120 --> 00:02:59.970 +you get an idea of which ones might be relevant. + +00:02:59.971 --> 00:03:04.515 +Another thing is that the search primitives are fairly limited. + +00:03:04.516 --> 00:03:10.599 +So yeah, you can search regular expressions, but you can't + +00:03:10.600 --> 00:03:14.719 +really define complex things like, I want to search files in + +00:03:14.720 --> 00:03:18.439 +this directory, and this directory, and this directory, + +00:03:18.440 --> 00:03:22.319 +except these subdirectories, and accept test files, and I + +00:03:22.320 --> 00:03:25.559 +only want files with this file extension. Criteria like + +00:03:25.560 --> 00:03:28.919 +that are really hard to... I'm sure they're possible in tools + +00:03:28.920 --> 00:03:34.479 +like grep, but they're pretty hard to construct. + +00:03:34.480 --> 00:03:38.199 +And lastly, there's no notion of any relevance. All the + +00:03:38.200 --> 00:03:42.039 +results you get back, I mean, you don't know, is the search + +00:03:42.040 --> 00:03:43.095 +more relevant? Is it twice as relevant? Is it + +00:03:43.096 --> 00:03:52.279 +100 times more relevant? These tools usually don't provide + +00:03:52.280 --> 00:03:58.232 +such information. + +NOTE Information retrieval + +00:03:58.233 --> 00:04:00.394 +There's a field called information retrieval, + +00:04:00.395 --> 00:04:02.616 +and this deals with this exact problem. + +00:04:02.617 --> 00:04:04.718 +You have lots of data you're searching for. + +00:04:04.719 --> 00:04:09.261 +How do you construct a search query? + +00:04:09.262 --> 00:04:09.839 +How do you get results back fast? How do you + +00:04:09.840 --> 00:04:14.519 +rank which ones are most relevant? How do you evaluate + +00:04:14.520 --> 00:04:20.079 +your search system to see if it's getting better or worse? + +00:04:20.080 --> 00:04:23.119 +There's a lot of work, a lot of books written on the topic of + +00:04:23.120 --> 00:04:28.159 +information retrieval. If one wants to improve + +00:04:28.160 --> 00:04:31.879 +searching in Emacs, then drawing inspiration from this + +00:04:31.880 --> 00:04:34.295 +field is necessary. + +NOTE Search engine in Emacs: the index + +00:04:34.296 --> 00:04:41.383 +The first aspect of information retrieval is the index. + +00:04:41.384 --> 00:04:46.608 +The reverse index is what search engines use to find results really fast. + +00:04:46.609 --> 00:04:51.454 +Essentially, it's a map of search term + +00:04:51.455 --> 00:04:54.738 +to locations where that term is located. + +00:04:54.739 --> 00:04:57.079 +You'll have all the terms or maybe even parts of + +00:04:57.080 --> 00:04:59.159 +the terms, and then you'll have all the locations where + +00:04:59.160 --> 00:05:02.119 +they're located. Any query could easily look up + +00:05:02.120 --> 00:05:05.919 +where things are located, join results together, and + +00:05:05.920 --> 00:05:12.879 +that's how they get the results to be really fast. For this + +00:05:12.880 --> 00:05:19.159 +project, I decided to forgo creating an index altogether. + +00:05:19.160 --> 00:05:23.759 +An index is pretty complicated to maintain because + +00:05:23.760 --> 00:05:27.319 +it always has to be in sync. Any time you open a file and save + +00:05:27.320 --> 00:05:29.959 +it, you would have to re-index, you would have to make sure + +00:05:29.960 --> 00:05:32.559 +that file is re-indexed properly. Then you have the + +00:05:32.560 --> 00:05:36.119 +whole issue of, well, if you're searching in Emacs, + +00:05:36.120 --> 00:05:38.799 +you have all these projects, this directory, + +00:05:38.800 --> 00:05:42.479 +that directory, how do you know which? Do you always have to + +00:05:42.480 --> 00:05:47.399 +keep them in sync? It's quite a hard task to handle + +00:05:47.400 --> 00:05:53.079 +that. Then on the other end, tools like ripgrep can + +00:05:53.080 --> 00:05:59.119 +search very fast. Even though they can't search maybe on the + +00:05:59.120 --> 00:06:03.919 +order of tens of thousands of repositories, for a local + +00:06:03.920 --> 00:06:06.039 +setting, they should be plenty fast enough. + +00:06:06.040 --> 00:06:12.239 +I benchmarked. Ripgrep, for example, is + +00:06:12.240 --> 00:06:15.959 +on the order of gigabytes per second. + +00:06:15.960 --> 00:06:19.239 +Definitely, it can search a few pretty big size + +00:06:19.240 --> 00:06:21.756 +repositories. + +NOTE Search engine in Emacs: Ranking + +00:06:21.757 --> 00:06:24.799 +Next main task. We decided not to use an + +00:06:24.800 --> 00:06:29.959 +index. Next task is how do we rank search results? So there's + +00:06:29.960 --> 00:06:33.439 +two main algorithms that are used these days. The first + +00:06:33.440 --> 00:06:36.519 +one is tf-idf, which stands for term frequency, inverse + +00:06:36.520 --> 00:06:43.039 +target frequency. Then there's BM25, which is sort of a + +00:06:43.040 --> 00:06:43.552 +modified tf-idf algorithm. + +NOTE tf-idf: term-frequency x inverse-document-frequency + +00:06:43.553 --> 00:06:45.679 +tf-idf, without going into + +00:06:45.680 --> 00:06:49.159 +too much detail, essentially multiplies two terms. One + +00:06:49.160 --> 00:06:51.879 +is the term frequency, and then you multiply it by the + +00:06:51.880 --> 00:06:54.559 +inverse document frequency. The term frequency is a + +00:06:54.560 --> 00:06:58.519 +measure of how often that search term occurs. The + +00:06:58.520 --> 00:07:00.799 +inverse document frequency is a measure of how much + +00:07:00.800 --> 00:07:06.199 +information that term provides. If the term occurs a lot, + +00:07:06.200 --> 00:07:08.719 +then it gets a higher score in the term frequency section. + +00:07:08.720 --> 00:07:12.399 +But if it's a common word that exists in a lot of documents, + +00:07:12.400 --> 00:07:13.900 +then its inverse document frequency goes down. + +00:07:13.901 --> 00:07:20.879 +It kind of scores it less. You'll find that words like the, + +00:07:20.880 --> 00:07:25.959 +in, is, these really common words, since they occur + +00:07:25.960 --> 00:07:29.199 +everywhere, their inverse document frequency is + +00:07:29.200 --> 00:07:32.479 +essentially zero. They don't really count towards a + +00:07:32.480 --> 00:07:35.679 +score. But when you have rare words that only occur in a + +00:07:35.680 --> 00:07:37.679 +few documents, they're weighted a lot more. So the more + +00:07:37.680 --> 00:07:41.159 +those rare words occur, they boost the score higher. + +NOTE BM25 + +00:07:41.160 --> 00:07:48.839 +BM25 is a modification of this. It's essentially TF, it's + +00:07:48.840 --> 00:07:53.119 +essentially the previous one, except it dampens out terms + +00:07:53.120 --> 00:07:55.439 +that occur more often. Imagine you have a bunch of + +00:07:55.440 --> 00:07:59.359 +documents. One has a term 10 times, one has a term, that same + +00:07:59.360 --> 00:08:02.439 +term a hundred times, another has a thousand times. + +00:08:02.440 --> 00:08:06.799 +You'll see the score dampens off as the number of + +00:08:06.800 --> 00:08:10.639 +occurrences increases. That prevents any one term from + +00:08:10.640 --> 00:08:16.559 +overpowering the score. This is the algorithm I ended up + +00:08:16.560 --> 00:08:21.039 +choosing for my implementation. So with a plan of using a + +00:08:21.040 --> 00:08:29.559 +command line tool like ripgrep to get term occurrences, and + +00:08:29.560 --> 00:08:36.799 +then using a scoring algorithm like BM25 to rank the terms, + +00:08:36.800 --> 00:08:40.079 +we can combine this together and create a simple search + +00:08:40.080 --> 00:08:41.199 +mechanism. + +NOTE Searching with p-search + +00:08:41.200 --> 00:08:47.439 +Here we're in the directory for the Emacs source code. + +00:08:47.440 --> 00:08:53.479 +Let's say we want to search for the display code. We + +00:08:53.480 --> 00:08:58.679 +run the p-search command, starting the search engine. It + +00:08:58.680 --> 00:09:01.159 +opens up. We notice it has three sections, the candidate + +00:09:01.160 --> 00:09:05.199 +generators, the priors, and the search results. The + +00:09:05.200 --> 00:09:09.999 +candidate generators generates the search space we're + +00:09:10.000 --> 00:09:14.719 +looking on. These are all composable and you can add as + +00:09:14.720 --> 00:09:19.719 +many as you want. So with this, it specifies that here + +00:09:19.720 --> 00:09:25.239 +we're searching on the file system and we're searching in + +00:09:25.240 --> 00:09:30.799 +this directory. We're using the ripgrep tool to search + +00:09:30.800 --> 00:09:33.359 +with, and we want to make sure that we're searching only on + +00:09:33.360 --> 00:09:40.479 +files committed to Git. Here we see the search results. + +00:09:40.480 --> 00:09:45.159 +Notice here is their final probability. Here, notice + +00:09:45.160 --> 00:09:47.079 +that they're all the same, and they're the same because we + +00:09:47.080 --> 00:09:50.719 +don't have any search criteria specified here. Suppose + +00:09:50.720 --> 00:09:55.679 +we want to search for display-related code. We add a + +00:09:55.680 --> 00:09:57.359 +query: display. + +00:09:57.360 --> 00:10:06.559 +So then it spins off the processes, gets the search term + +00:10:06.560 --> 00:10:10.879 +counts and calculates the new scores. Notice here that + +00:10:10.880 --> 00:10:15.759 +the results that come on top are just at first glance appear + +00:10:15.760 --> 00:10:19.919 +to be relevant to display. Remember, if we compare + +00:10:19.920 --> 00:10:25.079 +that to just running a ripgrep raw, notice here we're + +00:10:25.080 --> 00:10:31.279 +getting 53,000 results and it's pretty hard to go through + +00:10:31.280 --> 00:10:34.319 +these results and make sense of it. + +00:10:34.320 --> 00:10:41.456 +So that's p-search in a nutshell. + +NOTE Flight AF 447 + +00:10:41.457 --> 00:10:45.982 +Next, I wanted to talk about the story of Flight 447. + +00:10:45.983 --> 00:10:49.326 +Flight 447 going from Rio de Janeiro to Paris + +00:10:49.327 --> 00:10:51.509 +crashed somewhere in the Atlantic Ocean + +00:10:51.510 --> 00:10:54.713 +on June 1st, 2009, killing everyone on board. + +00:10:54.714 --> 00:10:56.894 +Four search attempts were made to find the wreckage. + +00:10:56.895 --> 00:11:01.075 +None of them were successful, except the finding of some debris + +00:11:01.076 --> 00:11:05.479 +and a dead body. It was decided that they really wanted + +00:11:05.480 --> 00:11:09.519 +to find the wreckage to retrieve data as to why the search + +00:11:09.520 --> 00:11:14.639 +occurred. This occurred two years after the + +00:11:14.640 --> 00:11:19.959 +initial crash. With this next search attempt, they + +00:11:19.960 --> 00:11:23.199 +wanted to create a probability distribution of where the + +00:11:23.200 --> 00:11:26.759 +crash could be. The only piece of concrete data they had + +00:11:26.760 --> 00:11:35.079 +was a GPS signal from the ship at 210 containing the GPS + +00:11:35.080 --> 00:11:40.239 +location of the plane was at 2.98 degrees north, 30.59 + +00:11:40.240 --> 00:11:44.719 +degrees west. That was the only data they had to go off of. + +00:11:44.720 --> 00:11:50.079 +So they drew a circle around that point + +00:11:50.080 --> 00:11:54.679 +with a radius of 40 nautical miles. They assumed that + +00:11:54.680 --> 00:11:57.479 +anything outside the circle would have been impossible for + +00:11:57.480 --> 00:12:01.239 +the ship to reach. This was the starting point for + +00:12:01.240 --> 00:12:04.799 +creating the probability distribution of where the + +00:12:04.800 --> 00:12:08.119 +wreckage occurred. Anything outside the circle, they + +00:12:08.120 --> 00:12:09.639 +assumed it was impossible to reach. + +00:12:09.640 --> 00:12:16.479 +The only other pieces of data were the four failed search + +00:12:16.480 --> 00:12:21.719 +attempts and then some of the debris found. One thing they + +00:12:21.720 --> 00:12:26.159 +did decide was to look at similar crashes where control was + +00:12:26.160 --> 00:12:30.319 +lost to analyze where the crashes landed, compared to where + +00:12:30.320 --> 00:12:37.399 +the loss of control started. This probability + +00:12:37.400 --> 00:12:43.479 +distribution, the circular normal distribution was + +00:12:43.480 --> 00:12:47.919 +decided upon. Here you can see that the center has a lot + +00:12:47.920 --> 00:12:51.879 +higher chance of finding the wreckage. As you go away + +00:12:51.880 --> 00:12:55.399 +from the center, the probability of finding the wreckage + +00:12:55.400 --> 00:13:02.319 +decreases a lot. The next thing they looked at was, well, + +00:13:02.320 --> 00:13:05.959 +they noticed they had retrieved some dead bodies from the + +00:13:05.960 --> 00:13:12.959 +wreckage. So they thought that they could calculate the + +00:13:12.960 --> 00:13:18.439 +backward drift on that particular day to find where the + +00:13:18.440 --> 00:13:21.479 +crash might've occurred. If they found bodies at a + +00:13:21.480 --> 00:13:25.119 +particular location, they can kind of work backwards from + +00:13:25.120 --> 00:13:30.665 +that in order to find where the initial crash occurred. + +00:13:30.666 --> 00:13:34.719 +So here you can see the probability distribution based off of + +00:13:34.720 --> 00:13:40.279 +the backward drift model. Here you see the darker colors + +00:13:40.280 --> 00:13:46.159 +have a higher probability of finding the location. So + +00:13:46.160 --> 00:13:50.679 +with all these pieces of data, so with that circular 40 + +00:13:50.680 --> 00:13:54.959 +nautical mile uniform distribution, with that circular + +00:13:54.960 --> 00:14:02.199 +normal distribution of comparing similar crashes, as well + +00:14:02.200 --> 00:14:07.439 +as with the backward drift, they were able to combine all + +00:14:07.440 --> 00:14:08.559 +three of these pieces + +00:14:08.560 --> 00:14:14.599 +in order to come up with a final prior distribution of where + +00:14:14.600 --> 00:14:19.519 +the wreckage occurred. So this is what the final model + +00:14:19.520 --> 00:14:24.719 +they came upon. Here you can see it has that 40 nautical + +00:14:24.720 --> 00:14:29.679 +mile radius circle. It has that darker center, which + +00:14:29.680 --> 00:14:32.039 +indicates a higher probability because of the + +00:14:32.040 --> 00:14:38.959 +crash similarity. Then here you also see along this line + +00:14:38.960 --> 00:14:50.799 +has a slightly higher probability due to the backward drift + +00:14:50.800 --> 00:14:52.119 +distribution. + +00:14:52.120 --> 00:14:56.559 +So the next thing is, since they had performed searches, + +00:14:56.560 --> 00:15:00.559 +they decided to incorporate the data from those searches + +00:15:00.560 --> 00:15:04.759 +into their new distribution. Here you can see places + +00:15:04.760 --> 00:15:08.879 +where they searched initially. If you think about it, + +00:15:08.880 --> 00:15:11.399 +you can assume that, well, if you search for something, + +00:15:11.400 --> 00:15:14.199 +there's a good chance you'll find it, but not necessarily. + +00:15:14.200 --> 00:15:18.439 +Anywhere where they searched, the probability of it + +00:15:18.440 --> 00:15:22.839 +finding it there is greatly reduced. It's not zero because + +00:15:22.840 --> 00:15:26.879 +obviously you can look for something and miss it, but it kind + +00:15:26.880 --> 00:15:31.119 +of reduces the probability that we would expect to find it in + +00:15:31.120 --> 00:15:36.679 +those already searched locations. This is the + +00:15:36.680 --> 00:15:41.919 +posterior distribution or distribution after counting + +00:15:41.920 --> 00:15:44.559 +observations made. + +00:15:44.560 --> 00:15:48.759 +Here we can see kind of these cutouts of where the + +00:15:48.760 --> 00:15:53.959 +previous searches occurred. This is the final + +00:15:53.960 --> 00:15:56.999 +distribution they went off of to perform the subsequent + +00:15:57.000 --> 00:16:01.999 +search. In the end, the wreckage was found at a point close to + +00:16:02.000 --> 00:16:06.770 +the center here, thus validating this methodology. + +NOTE Modifying priors + +00:16:06.771 --> 00:16:10.332 +We can see the power of this Bayesian search methodology + +00:16:10.333 --> 00:16:13.999 +in the way that we could take information from all the sources we had. + +00:16:14.000 --> 00:16:19.237 +We could draw analogies to similar situations. + +00:16:19.238 --> 00:16:22.479 +We can quantify these, combine them into a model, + +00:16:22.480 --> 00:16:27.893 +and then also update our model according to each observation we make. + +00:16:27.894 --> 00:16:30.359 +I think there's a lot of similarities to be drawn with + +00:16:30.360 --> 00:16:35.159 +searching on a computer in the sense that when we search for + +00:16:35.160 --> 00:16:39.399 +something, there's oftentimes a story we kind of have as to + +00:16:39.400 --> 00:16:43.959 +what search terms exist, where we expect to find the file. + +00:16:43.960 --> 00:16:46.719 +For example, if you're implementing a new feature, you'll + +00:16:46.720 --> 00:16:49.919 +often have some search terms in mind that you think will be + +00:16:49.920 --> 00:16:54.719 +relevant. Some search terms, you might think they have a + +00:16:54.720 --> 00:16:57.599 +possibility of being relevant, but maybe you're not sure. + +00:16:57.600 --> 00:17:02.879 +There's some directories where you know that they're not + +00:17:02.880 --> 00:17:07.759 +relevant. There's other criteria like, well, you know that + +00:17:07.760 --> 00:17:11.399 +maybe somebody in particular worked on this code. + +00:17:11.400 --> 00:17:16.319 +What if you could incorporate that information? Like, I know + +00:17:16.320 --> 00:17:21.399 +this author, he's always working on this feature. What if + +00:17:21.400 --> 00:17:25.519 +I just give the files that this person works on a higher + +00:17:25.520 --> 00:17:32.599 +probability than ones he doesn't work on? Or maybe you think + +00:17:32.600 --> 00:17:38.599 +that this is a file that's committed too often. You think + +00:17:38.600 --> 00:17:43.439 +that maybe the amount of times of commits it receives + +00:17:43.440 --> 00:17:47.719 +should change your probability of this file being + +00:17:47.720 --> 00:17:52.839 +relevant. That's where p-search comes in. + +00:17:52.840 --> 00:17:57.679 +Its aim is to be a framework in order to incorporate all these + +00:17:57.680 --> 00:18:01.359 +sorts of different prior information into your searching + +00:18:01.360 --> 00:18:05.999 +process. You're able to say things like, I want files + +00:18:06.000 --> 00:18:11.119 +authored by this user to be given higher probability. I want + +00:18:11.120 --> 00:18:13.919 +this author to be given a lower priority. I know this author + +00:18:13.920 --> 00:18:18.759 +never works on this code. If he has a commit, then lower its + +00:18:18.760 --> 00:18:24.679 +probability, or you can specify specific paths, or you can + +00:18:24.680 --> 00:18:30.199 +specify multiple search terms, weighing different ones + +00:18:30.200 --> 00:18:38.919 +according to how you think those terms should be relevant. + +00:18:38.920 --> 00:18:42.079 +So with p-search, we're able to incorporate information + +00:18:42.080 --> 00:18:46.279 +from multiple sources. Here, for example, we have a prior + +00:18:46.280 --> 00:18:52.079 +of type git author, and we're looking for all of the files + +00:18:52.080 --> 00:18:56.719 +that are committed to by Lars. So the more commits he has, + +00:18:56.720 --> 00:19:01.399 +the higher probability is given to that file. Suppose + +00:19:01.400 --> 00:19:04.559 +there's a feature I know he worked on, but I don't know the + +00:19:04.560 --> 00:19:09.159 +file or necessarily even key terms of it. Well, with this, I + +00:19:09.160 --> 00:19:12.140 +can incorporate that information. + +00:19:12.141 --> 00:19:15.999 +So let's search again. Let's add display. + +00:19:16.000 --> 00:19:22.959 +Let's see what responses we get back here. We can add + +00:19:22.960 --> 00:19:27.199 +as many of these criteria as we want. We can even specify that + +00:19:27.200 --> 00:19:31.519 +the title of the file name should be a certain type. Let's + +00:19:31.520 --> 00:19:36.599 +say we're only concerned about C files. We add the file + +00:19:36.600 --> 00:19:45.399 +name should contain .c in it. With this, now we + +00:19:45.400 --> 00:19:51.319 +notice that all of the C files containing display authored + +00:19:51.320 --> 00:19:56.279 +by Lars should be given higher probability. We can + +00:19:56.280 --> 00:20:02.719 +continue to add these priors as we feel fit. The workflow + +00:20:02.720 --> 00:20:07.519 +that I found helps when searching is that you'll add + +00:20:07.520 --> 00:20:11.359 +criteria, you'll see some good results come up and some bad + +00:20:11.360 --> 00:20:15.319 +results come up. So you'll often find a pattern in those + +00:20:15.320 --> 00:20:18.839 +bad results, like, oh, I don't want test files, or this + +00:20:18.840 --> 00:20:22.679 +directory isn't relevant, or something like that. Then + +00:20:22.680 --> 00:20:27.199 +you can update your prior distribution, adding its + +00:20:27.200 --> 00:20:31.119 +criteria, and then rerun it, and then it will get different + +00:20:31.120 --> 00:20:35.159 +probabilities for the files. So in the end, you'll have a + +00:20:35.160 --> 00:20:37.639 +list of results that's tailor-made to the thing you're + +00:20:37.640 --> 00:20:40.404 +searching for. + +NOTE Importance + +00:20:40.405 --> 00:20:41.639 +There's a couple of other features I + +00:20:41.640 --> 00:20:49.079 +want to go through. One thing is that each of these priors, + +00:20:49.080 --> 00:20:55.839 +you can specify the importance. In other words, how + +00:20:55.840 --> 00:21:01.119 +important is this particular piece of information to your + +00:21:01.120 --> 00:21:05.199 +search? So here, everything is of importance medium. But + +00:21:05.200 --> 00:21:07.879 +let's say I really care about something having the word + +00:21:07.880 --> 00:21:12.679 +display in it. I'm going to change its importance. + +00:21:12.680 --> 00:21:18.599 +Instead of medium, I'll change its importance to high. + +00:21:18.600 --> 00:21:23.279 +What that does essentially is things that don't have + +00:21:23.280 --> 00:21:28.079 +display in it are given a much bigger penalty and things with + +00:21:28.080 --> 00:21:28.128 +the word display in it are rated much higher. + +00:21:28.129 --> 00:21:38.559 +With this, we're able to fine-tune the results that we get. + +NOTE Complement or inverse + +00:21:38.560 --> 00:21:45.639 +Another thing you can do is that you can add the complement or + +00:21:45.640 --> 00:21:49.759 +the inverse of certain queries. Let's say you want to + +00:21:49.760 --> 00:21:53.239 +search for display, but you don't want it to contain the word + +00:21:53.240 --> 00:21:58.039 +frame. With the complement option on, when we create this + +00:21:58.040 --> 00:22:01.839 +search prior, now it's going to be searching for frame, but + +00:22:01.840 --> 00:22:04.959 +instead of increasing the search score, it's going to + +00:22:04.960 --> 00:22:06.999 +decrease it if it contains the word frame. + +00:22:07.000 --> 00:22:14.319 +So here, things related to frame are kind of + +00:22:14.320 --> 00:22:18.079 +deprioritized. We can also say that we really don't want + +00:22:18.080 --> 00:22:21.599 +the search to contain the word frame by increasing its + +00:22:21.600 --> 00:22:27.199 +importance. So with all these composable pieces, we can + +00:22:27.200 --> 00:22:33.412 +create kind of a search that's tailor-made to our needs. + +00:22:33.413 --> 00:22:35.759 +That concludes this talk. There's a lot more I could talk + +00:22:35.760 --> 00:22:37.799 +about with regards to research, so definitely follow the + +00:22:37.800 --> 00:22:40.639 +project if you're interested. Thanks for watching, and I + +00:22:40.640 --> 00:22:42.240 +hope you enjoy the rest of the conference. diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt new file mode 100644 index 00000000..1ab5dd02 --- /dev/null +++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt @@ -0,0 +1,842 @@ +WEBVTT indexed by sachac + +00:00:00.000 --> 00:00:03.667 +... mentally over the next couple of days, but I can assure you + +00:00:03.668 --> 00:00:06.759 +that it will be many organizers in the background also + +00:00:06.760 --> 00:00:10.199 +working. You'll probably get to see us later on. But for now, + +00:00:10.200 --> 00:00:12.775 +without further ado, I want to say hi to Vincent. + +00:00:12.776 --> 00:00:15.417 +Hi, Vincent. + +00:00:15.418 --> 00:00:17.458 +Hi, thanks for having me. + +00:00:17.459 --> 00:00:18.099 +Yeah, and thanks for + +00:00:18.140 --> 00:00:22.902 +coming and thanks for presenting. I mean, you didn't decide + +00:00:22.942 --> 00:00:25.704 +to go first. It's mostly the time zone for you which decided + +00:00:25.724 --> 00:00:28.883 +for you because I believe you are in Japan, correctly. Yeah, + +00:00:28.920 --> 00:00:33.039 +exactly. So I'm living there now and it's very late. It's + +00:00:33.040 --> 00:00:37.319 +really funny to see everyone saying good morning in the + +00:00:37.320 --> 00:00:39.959 +chat. It's always the same for me. So personally, I'm in + +00:00:39.960 --> 00:00:43.959 +France. So for me, it's only 3 p.m. For you, it's probably 9 or + +00:00:43.960 --> 00:00:47.959 +10 p.m. if I'm correct. Already 11 here, yeah. It's already + +00:00:47.960 --> 00:00:51.678 +11, so thank you for staying up so late for us. + +00:00:51.679 --> 00:00:55.181 +And how about we just get started with the questions + +00:00:55.182 --> 00:00:56.521 +because you've just presented something + +00:00:56.522 --> 00:00:59.200 +that is very dear to my heart, which is + +00:00:59.240 --> 00:01:01.959 +writing academic paper with Org Mode, which is, for the + +00:01:01.960 --> 00:01:05.279 +record, how I got started with Org Roam and stuff like this. + +00:01:05.280 --> 00:01:08.799 +So, unless you've got anything else to add on top of your + +00:01:08.800 --> 00:01:11.839 +presentation that wasn't able to fit in, I suggest we just + +00:01:11.840 --> 00:01:16.559 +start taking questions. All right. So yeah, right now I'm + +00:01:16.560 --> 00:01:19.439 +reading the question from IRC and also from the pad. So I + +00:01:19.440 --> 00:01:23.159 +guess I'm gonna take what's already written there. + +NOTE Q: I'd be interested how to start this journey of writing academic papers in Org-Roam when not having used Emacs Org-Mode yet? Thanks! + +00:01:23.160 --> 00:01:27.359 +So the first one is asking, I'd be interested in how to start this + +00:01:27.360 --> 00:01:30.239 +journey to write academic paper in org-roam when not having + +00:01:30.240 --> 00:01:36.639 +used Emacs org mode yet. So I saw this one before and I guess it + +00:01:36.640 --> 00:01:43.039 +would be possible to do that, to use Org documents only + +00:01:43.040 --> 00:01:46.759 +as the way that you are writing papers. Maybe you can + +00:01:46.760 --> 00:01:51.959 +just use that as a template that you're going to export. + +00:01:51.960 --> 00:01:54.959 +If you are familiar with LaTeX, it's going to be more useful, + +00:01:54.960 --> 00:01:59.599 +and maybe more convenient to work with inside of + +00:01:59.600 --> 00:02:04.999 +Emacs. But then I'm not 100% sure if that's... How do you say + +00:02:05.000 --> 00:02:10.799 +that? Maybe, in my opinion, the benefits of using + +00:02:10.800 --> 00:02:14.679 +org-roam in that setup is that you can link the things. For + +00:02:14.680 --> 00:02:18.839 +me, I'm using the search function for org-roam to just + +00:02:18.840 --> 00:02:21.959 +navigate between the files. So that's really some, a good + +00:02:21.960 --> 00:02:26.119 +advantage, but like, yeah, that could be, like Leo said in + +00:02:26.120 --> 00:02:28.039 +the presentation, that's some, maybe that's something you + +00:02:28.040 --> 00:02:35.839 +can start using org-mode with to write papers. So yeah. + +NOTE Q: How about connecting Emacs Org-Roam to Zotero? Is that something you have experience with? + +00:02:35.840 --> 00:02:38.879 +Second question. So how about connecting Emacs or Roam + +00:02:38.880 --> 00:02:42.079 +to Zotero? Is that something that you have experience with? + +00:02:42.080 --> 00:02:47.119 +Not at all. Actually, I used briefly Zotero in the past and I + +00:02:47.120 --> 00:02:51.439 +really didn't like it or didn't really get into that. I don't + +00:02:51.440 --> 00:02:55.599 +know. But right now, + +NOTE Q: Out of curiosity, how do you manage your bibliography? Do you do it from inside Emacs, or using a separate program like Zotero? + +00:02:55.600 --> 00:03:00.319 +I don't connect that at all. The question after, out of + +00:03:00.320 --> 00:03:03.559 +curiosity, how do you manage your bibliography? Do you do it + +00:03:03.560 --> 00:03:06.519 +from inside Emacs or using a separate program, ex: Zotero? + +00:03:06.520 --> 00:03:09.119 +Because personally, I have struggled to do it from Emacs, + +00:03:09.120 --> 00:03:13.879 +though I have wanted to for some time. So the way I manage that + +00:03:13.880 --> 00:03:20.799 +is I just have a couple of .bib files that I edit by hand, where + +00:03:20.800 --> 00:03:25.359 +I put the reference when I find them. + +00:03:25.360 --> 00:03:28.599 +And yeah, I just showed very briefly in the presentation, + +00:03:28.600 --> 00:03:34.119 +but the way. + +00:03:34.120 --> 00:03:39.519 +One of the great thing with the org reference system is that + +00:03:39.520 --> 00:03:43.239 +if you have your bibliographic files that are connected to + +00:03:43.240 --> 00:03:47.959 +that system, you can just like, you can put the link, the + +00:03:47.960 --> 00:03:51.879 +reference to the paper, like click on it from your org note, + +00:03:51.880 --> 00:03:56.479 +and then you can open the PDF. You can open the DOI link to open + +00:03:56.480 --> 00:04:00.719 +the whatever publisher page. + +00:04:00.720 --> 00:04:10.159 +So no, I don't use Zotero and I just edit bib or bib files by + +00:04:10.160 --> 00:04:12.959 +hand in Emacs. + +00:04:12.960 --> 00:04:16.159 +I was just going to add something because you know + +00:04:16.160 --> 00:04:19.024 +org-roam-bibtex is actually one of the packages that I + +00:04:19.025 --> 00:04:25.399 +developed and I got it working with Zotero because for me it + +00:04:25.400 --> 00:04:28.524 +was convenient. I was studying humanities and for me it was + +00:04:28.525 --> 00:04:32.599 +very easy to connect reference taken in my browser with + +00:04:32.600 --> 00:04:36.799 +Zotero and just post-processing them a little bit but it is + +00:04:36.800 --> 00:04:40.279 +possible to make org-roam, org-roam-bibtex and Zotero + +00:04:40.280 --> 00:04:44.959 +work together. But it's a little bit of an involved process to + +00:04:44.960 --> 00:04:49.439 +get everything working in Emacs. + +00:04:49.440 --> 00:04:54.519 +Yeah, for sure. And + +00:04:54.520 --> 00:05:01.999 +yeah, I guess the way I'm doing it, I understand the appeal + +00:05:02.000 --> 00:05:03.839 +for having it integrated in the browser. Maybe + +00:05:03.840 --> 00:05:06.279 +that's something I should look up, actually, because right + +00:05:06.280 --> 00:05:09.359 +now I just like doing it very much by hand, like going on the + +00:05:09.360 --> 00:05:15.199 +publisher page and copying the bibtex block and + +00:05:15.200 --> 00:05:20.039 +just using putting that in my file. Yes, it can be not a very + +00:05:20.040 --> 00:05:23.359 +efficient workflow on that side. But after that, you're + +00:05:23.360 --> 00:05:26.599 +having the PDF and having it inside the note. + +00:05:26.600 --> 00:05:30.759 +Yeah, it's great. Yeah. To some extent, it kind of depends on + +00:05:30.760 --> 00:05:33.319 +the reference system that is used by the field in which you + +00:05:33.320 --> 00:05:36.279 +are or the university in which you're publishing. Because + +00:05:36.280 --> 00:05:39.519 +sometimes, you know, you're going to have some basic BibTeX + +00:05:39.520 --> 00:05:41.479 +file and sometimes you're going to have better BibTeX + +00:05:41.480 --> 00:05:44.959 +files. And those are very different metadata that you need + +00:05:44.960 --> 00:05:49.119 +to reconcile. And depending on which LaTeX compiler you're + +00:05:49.120 --> 00:05:52.439 +using, be it zLaTeX[??], be it regular LaTeX, lualatex, it's + +00:05:52.440 --> 00:05:55.439 +going to be all different. So it's a whole can of worms that + +00:05:55.440 --> 00:05:57.799 +I'm not sure we want to be opening now. But if you are + +00:05:57.800 --> 00:06:00.999 +interested and if you're not too attached about getting + +00:06:01.000 --> 00:06:03.679 +everything right, it's really easy to get started with + +00:06:03.680 --> 00:06:06.319 +stuff like org-roam-bibtex. It's supposed to get you + +00:06:06.320 --> 00:06:11.319 +most of the way down to a working setup. And if you need to get + +00:06:11.320 --> 00:06:14.359 +everything working down to the comma based on your + +00:06:14.360 --> 00:06:16.479 +reference system, that's going to be a little harder. But + +00:06:16.480 --> 00:06:19.439 +it's possible. I managed to do it and many people actually + +00:06:19.440 --> 00:06:22.599 +managed to do it. Okay, anyway, so let's move on to the next + +NOTE Q: How do you start a new document? + +00:06:22.600 --> 00:06:26.679 +question. All right, so the next question asking how do you + +00:06:26.680 --> 00:06:30.999 +start a new document? There are a lot of headers you have to + +00:06:31.000 --> 00:06:34.639 +set up. Do you use a template? I'm curious if you use your + +00:06:34.640 --> 00:06:38.839 +snippets to deal with all of these LaTeX org metacommands. + +00:06:38.840 --> 00:06:44.759 +So I don't use a snippets template of any kind for that. + +00:06:44.760 --> 00:06:47.279 +Probably I should. That's actually a good idea. I'm + +00:06:47.280 --> 00:06:51.279 +probably going to look into that. No, the way I do actually is + +00:06:51.280 --> 00:06:56.199 +I just reuse some previous documents. I copy it, delete all + +00:06:56.200 --> 00:07:01.439 +the contents and adjust it until it works the way I like. + +00:07:01.440 --> 00:07:09.679 +The main issue in general after that step is to make it work + +00:07:09.680 --> 00:07:13.999 +with the template I receive and Let's say if I have some + +00:07:14.000 --> 00:07:20.839 +template that needs to work with another LaTeX compiler, + +00:07:20.840 --> 00:07:26.599 +I'm probably going to try to copy an existing file that I have + +00:07:26.600 --> 00:07:30.959 +that uses the same compiler to save me some work. But yeah, + +00:07:30.960 --> 00:07:37.119 +no, I don't use any snippet or something. Probably I should, + +00:07:37.120 --> 00:07:40.879 +but I'm just doing it the quick and dirty way to just copy some + +00:07:40.880 --> 00:07:41.719 +existing thing. + +NOTE Q: What do you think of using citar with org-roam-bibtex? + +00:07:41.720 --> 00:07:48.319 +Then what do you think of citar with org-roam-bibtex? It seems + +00:07:48.320 --> 00:07:55.999 +that bibtex completion is tied to org-roam-bibtex. I don't + +00:07:56.000 --> 00:08:02.079 +know. I never really looked into citar that much. I + +00:08:02.080 --> 00:08:06.799 +don't know about that. I don't know either, so I'm not going + +00:08:06.800 --> 00:08:07.759 +to be able to help on this one. + +00:08:07.760 --> 00:08:17.119 +Because yeah, the bibtex completion is tied to the overall + +00:08:17.120 --> 00:08:24.799 +bibtex. I guess so. So what I'm interpreting, because I do, + +00:08:24.800 --> 00:08:30.039 +so BibTeX completion is the single motor that drives helm + +00:08:30.040 --> 00:08:32.719 +BibTeX and Ivy BibTeX. Perhaps there's another + +00:08:32.720 --> 00:08:35.679 +alternative now that is using the Vertico stack for + +00:08:35.680 --> 00:08:40.399 +completion. But org-roam-bibtex was interfacing with BibTeX + +00:08:40.400 --> 00:08:46.679 +completion to retrieve all the references from a bib file. + +00:08:46.680 --> 00:08:50.599 +and I assume citar would be something very similar in a way + +00:08:50.600 --> 00:08:54.039 +that it interfaces with a bib file, but I couldn't tell you + +00:08:54.040 --> 00:08:57.439 +more. I need to explore a little more and sadly I haven't + +00:08:57.440 --> 00:09:00.759 +touched any of this stack in like three years, so I'm a little + +00:09:00.760 --> 00:09:03.199 +out of touch. I guess this is what comes with leaving + +00:09:03.200 --> 00:09:07.519 +academia to go work as a corporate developer. I'm no longer + +00:09:07.520 --> 00:09:10.319 +so interested in the publishing process, even though I'm + +00:09:10.320 --> 00:09:12.799 +obviously very appreciative of people who still do, and + +00:09:12.800 --> 00:09:13.679 +especially people who use + +00:09:13.680 --> 00:09:20.239 +Yeah, same here. I definitely going to look into the citar + +00:09:20.240 --> 00:09:23.399 +package to see what's possible. Maybe can be using in some + +00:09:23.400 --> 00:09:26.319 +way that is useful for me. Yeah. + +NOTE Q: Most academic journals insist that papers are formatted in their own custom LaTeX documentclass. Does org-roam make it easy to do that? + +00:09:26.320 --> 00:09:30.919 +And if I go to the next question, so most academic journal + +00:09:30.920 --> 00:09:33.639 +insist that paper are formatted in their own custom LaTeX + +00:09:33.640 --> 00:09:38.199 +document class. Does org-roam make it easy to do that? The + +00:09:38.200 --> 00:09:43.239 +answer is no. That's mostly what I was presenting in the + +00:09:43.240 --> 00:09:44.279 +slide. + +00:09:44.280 --> 00:09:48.000 +Actually, that's also why I made the presentation, because + +00:09:48.001 --> 00:09:51.940 +if someone has a solution, I would gladly take it. No, the way + +00:09:51.941 --> 00:09:57.500 +I do it is that I have to add a... I don't have that on top of my head. + +00:09:57.501 --> 00:10:09.582 +plus. Yeah, exactly. So I just make a custom org-latex class with the + +00:10:09.583 --> 00:10:16.159 +name of the latex template. In general, I think people use + +00:10:16.160 --> 00:10:19.359 +that to redefine like stuff like section and subsection, + +00:10:19.360 --> 00:10:24.279 +but for me, I just, it shows in the slide where I just map the + +00:10:24.280 --> 00:10:27.239 +section to the same section. I just changed the name of the + +00:10:27.240 --> 00:10:33.719 +class. And this way it allows to import the, the CLS and then + +00:10:33.720 --> 00:10:39.079 +the rest is just like putting the TeX template that is + +00:10:39.080 --> 00:10:48.519 +provided either in headers, in LaTeX headers at the top or + +00:10:48.520 --> 00:10:56.079 +Yeah, or just on a LaTeX block in the body of the document if + +00:10:56.080 --> 00:11:02.039 +that's needed, for example, for the acknowledgement. + +00:11:02.040 --> 00:11:05.759 +Sometimes they need some different formatting, but no, + +00:11:05.760 --> 00:11:09.079 +it's not really easy because it needs to modify some + +00:11:09.080 --> 00:11:12.359 +configuration in Emacs to do that. Then after that, a little + +00:11:12.360 --> 00:11:15.719 +bit like manually adapt the templates into your org notes. + +00:11:15.720 --> 00:11:18.799 +So that's a little bit some upfront work to do. But once it's + +00:11:18.800 --> 00:11:22.159 +done, your notes are going to be exported exactly like the + +00:11:22.160 --> 00:11:27.319 +template and you don't have to worry about it. Yeah, it's an + +00:11:27.320 --> 00:11:32.679 +interesting topic because the thing about, on one side, you + +00:11:32.680 --> 00:11:36.159 +know, you want to have, when you're using LaTeX, it kind of + +00:11:36.160 --> 00:11:39.359 +translates into you caring a lot about the document that you + +00:11:39.360 --> 00:11:42.879 +produce. Either you care about how quickly you can turn a + +00:11:42.880 --> 00:11:46.719 +plain text document into a very nicely formatted PDF at the + +00:11:46.720 --> 00:11:52.239 +end, or, you know, you just care about the output of your + +00:11:52.240 --> 00:11:54.439 +documents, making sure that everything is properly + +00:11:54.440 --> 00:11:57.039 +formatted. We were talking about references just before, + +00:11:57.040 --> 00:12:00.239 +you know, the formatting rule for references are highly + +00:12:00.240 --> 00:12:04.319 +dependent upon the manual that you're using and, you know, + +00:12:04.320 --> 00:12:07.159 +some people really care about this. And what I found in my + +00:12:07.160 --> 00:12:09.799 +particular experience, my own personal experience + +00:12:09.800 --> 00:12:15.199 +writing for academia, was that I was more in the latter crowd + +00:12:15.200 --> 00:12:17.839 +that really cared about the output format and making sure + +00:12:17.840 --> 00:12:20.599 +everything was correct and it's really a struggle to get + +00:12:20.600 --> 00:12:23.519 +everything working especially when you're transpiling + +00:12:23.520 --> 00:12:27.199 +from Org Mode documents straight into LaTeX. You're + +00:12:27.200 --> 00:12:30.119 +obviously going to be resorting to a number of hacks to get + +00:12:30.120 --> 00:12:32.439 +everything working like Vincent just mentioned with the + +00:12:32.440 --> 00:12:36.519 +class or you're going to end up with many imported files just + +00:12:36.520 --> 00:12:39.999 +to get everything working, but really you're fighting + +00:12:40.000 --> 00:12:42.839 +against the tide if you want to get something a little + +00:12:42.840 --> 00:12:45.759 +different from what is shipping with Walmart. Maybe + +00:12:45.760 --> 00:12:48.479 +everything has gotten better since I was writing my papers, + +00:12:48.480 --> 00:12:53.879 +but generally... Kindly disagree. Yeah, go on. I kindly + +00:12:53.880 --> 00:12:57.159 +disagree. I actually, I'm surprised that a lot of template + +00:12:57.160 --> 00:13:00.679 +is so complex that you don't just change the document class, + +00:13:00.680 --> 00:13:03.359 +but also need to do something else. I'd say it's rather + +00:13:03.360 --> 00:13:05.919 +uncommon. I guess it depends on the area of your search. + +00:13:05.920 --> 00:13:12.599 +Yeah, exactly. I mean, that's it. It just needs CLS and + +00:13:12.600 --> 00:13:17.559 +that's all. Yeah, but it really depends on, as you said, on + +00:13:17.560 --> 00:13:19.639 +the field in which you're publishing. Some fields are a + +00:13:19.640 --> 00:13:22.599 +little more lax with their rules. And just the fact that you + +00:13:22.600 --> 00:13:26.479 +can introduce mathematic formulas kind of makes LaTeX the + +00:13:26.480 --> 00:13:29.919 +de facto for publishing math documents. But when you're + +00:13:29.920 --> 00:13:33.599 +doing humanities, they're more attached to other kinds of + +00:13:33.600 --> 00:13:36.879 +formatting. So I think things are much better, anyway, + +00:13:36.880 --> 00:13:42.919 +since I started five years ago. Oh, yeah. I have heard from + +00:13:42.920 --> 00:13:46.639 +humanities people Microsoft Word. Yes. Sadly, that's the + +00:13:46.640 --> 00:13:51.879 +format we're fighting against. Yeah. As for document, + +00:13:51.880 --> 00:13:57.079 +yeah, for LaTeX classes, it is a customization and it is the + +00:13:57.080 --> 00:14:00.319 +right way to customize this thing, that's all. I'm not sure + +00:14:00.320 --> 00:14:03.999 +why it's a hack. It's not a hack. It's an actual user + +00:14:04.000 --> 00:14:08.959 +customization. Right. So, we've got about four more + +00:14:08.960 --> 00:14:13.559 +minutes of question. Vincent, we've got a couple of Yeah. So + +00:14:13.560 --> 00:14:15.319 +I've got a little voice talking in my ear telling me that + +00:14:15.320 --> 00:14:17.839 +exactly the same thing. So we've got about two more + +00:14:17.840 --> 00:14:21.159 +questions. Vincent, do you want to field them? Sure. So, are + +NOTE Q: Are you using zotra or org-ref? + +00:14:21.160 --> 00:14:27.799 +you using Zotra (sending some link) or org-ref? No, I don't. + +00:14:27.800 --> 00:14:31.879 +I've never heard of Zotra, actually. Looking that very + +00:14:31.880 --> 00:14:34.639 +briefly. That's something I'm going to have to look into. + +00:14:34.640 --> 00:14:38.519 +Apparently, the short for Zotero translator, so that might + +00:14:38.520 --> 00:14:41.759 +be something useful for me since I'm not using Zotero yet, + +00:14:41.760 --> 00:14:45.119 +maybe trying to combine. But no, I've never really tried + +NOTE Q: How much of this is tied to org-roam specifically? + +00:14:45.120 --> 00:14:52.519 +these, but I will. Then the last question, how much of this is + +00:14:52.520 --> 00:14:59.479 +tied to Org-roam specifically? Not a lot. Actually apart + +00:14:59.480 --> 00:15:02.959 +from the org-roam-bibtex, I think. + +00:15:02.960 --> 00:15:11.919 +Maybe I'm mixing up stuff there. But no, not a lot actually. + +00:15:11.920 --> 00:15:14.999 +It's just the fact that I'm using that as a in my org-roam + +00:15:15.000 --> 00:15:22.159 +system. But apart from that, most of, I mean, actually all of + +00:15:22.160 --> 00:15:27.519 +the exports can be done from a normal org-note or any other + +00:15:27.520 --> 00:15:31.799 +knowledge management system that you do with org-notes. So + +00:15:31.800 --> 00:15:34.119 +no, it's not specifically tied to org-roam, just that + +00:15:34.120 --> 00:15:38.399 +that's the way I'm using it. And I'm showing it this way, but + +00:15:38.400 --> 00:15:41.759 +yeah, actually the export process can be, can be done with, + +00:15:41.760 --> 00:15:49.839 +Yes, specifically tight work room. Yeah, just confirming + +00:15:49.840 --> 00:15:54.519 +this, the only way Org Roam intervenes into this process is + +00:15:54.520 --> 00:15:57.439 +just referencing + +00:15:57.440 --> 00:16:00.319 +bibliography elements. It just kind of intercedes a little + +00:16:00.320 --> 00:16:03.319 +bit between what Org Roam usually does. But when it comes to + +00:16:03.320 --> 00:16:08.759 +the exports to LaTeX and PDF eventually, that's completely + +00:16:08.760 --> 00:16:13.279 +deferring to org exports. So, ox-latex and all of this. So, + +00:16:13.280 --> 00:16:16.039 +we are not intervening in any way into this transpiling + +00:16:16.040 --> 00:16:20.719 +format. One comment. Yeah, I don't know if I imagine it is, + +00:16:20.720 --> 00:16:25.759 +but it looked from the slides that it was our graph was it. + +00:16:25.760 --> 00:16:35.439 +Sorry, that it was? org-ref, org-ref. + +00:16:35.440 --> 00:16:42.719 +Yes. Because it is a link system for citations. Built-in + +00:16:42.720 --> 00:16:46.359 +citations, which is, there is a built-in citation system in + +00:16:46.360 --> 00:16:50.639 +art mode. It uses, it doesn't use links. It has a special way + +00:16:50.640 --> 00:16:57.359 +to cite things. Yeah, because I believe, yeah, go on please, + +00:16:57.360 --> 00:17:01.519 +Vincent. No, I just wanted to say, in that case, I'm using the + +00:17:01.520 --> 00:17:10.119 +link with the cite command. I'm not using the org-roam link + +00:17:10.120 --> 00:17:14.079 +for the reference. I didn't really show that very + +00:17:14.080 --> 00:17:17.679 +carefully. But then, yeah, it's a site element that is + +00:17:17.680 --> 00:17:21.639 +exported. So the roam part is just like, you can access the + +00:17:21.640 --> 00:17:26.519 +org notes that you have attached to a reference paper. But + +00:17:26.520 --> 00:17:31.879 +that's it. Okay, because I was confused by why the + +00:17:31.880 --> 00:17:35.919 +bibliography is a link, why style is a link, because it is the + +00:17:35.920 --> 00:17:37.239 +approach org-ref uses. + +00:17:37.240 --> 00:17:47.839 +Ah, right. Okay, I see. Yeah, the thing is, actually I don't + +00:17:47.840 --> 00:17:52.159 +know why, but In my experience, using the org-roam, + +00:17:52.160 --> 00:17:57.599 +org-roam-bibtex links doesn't export or doesn't export + +00:17:57.600 --> 00:18:01.999 +properly. So like adding them with the org-ref-cite worked + +00:18:02.000 --> 00:18:05.359 +better. So that's, that's why I'm using these. If I may + +00:18:05.360 --> 00:18:07.439 +interject. If you're using org-ref-cite, you're using + +00:18:07.440 --> 00:18:11.319 +org-ref-for-export, which is slightly different. I'm + +00:18:11.320 --> 00:18:14.039 +going to interject very quickly because sadly we are a + +00:18:14.040 --> 00:18:15.919 +little pressed for time because we are heading into the next + +00:18:15.920 --> 00:18:18.559 +discussion. So just very quickly, if you want to continue + +00:18:18.560 --> 00:18:21.279 +the discussion, the BBB room is available at + +00:18:21.280 --> 00:18:24.319 +emacsconf-org. You can go to the talk and get the link to join + +00:18:24.320 --> 00:18:27.319 +the BBB. And the stream will be moving on to the next stream in + +00:18:27.320 --> 00:18:30.239 +about 5 to 10 seconds. So I'll see you on the other side. And + +00:18:30.240 --> 00:18:36.439 +thank you, Vincent. Thank you. All right, sorry for cutting + +00:18:36.440 --> 00:18:38.839 +a little abruptly. It's because we use crontabs to move to + +00:18:38.840 --> 00:18:42.519 +the next talk. And sadly, I don't have any leeway on this. So + +00:18:42.520 --> 00:18:45.279 +feel free to continue the discussion. I'll be moving on to + +00:18:45.280 --> 00:18:48.639 +make sure everything is working. So enjoy the discussion. + +00:18:48.640 --> 00:19:00.720 +Thank you very much. Bye-bye. diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt new file mode 100644 index 00000000..03e28951 --- /dev/null +++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt @@ -0,0 +1,38 @@ +WEBVTT + + +00:00:00.000 --> 00:00:20.129 +Introduction + +00:00:20.130 --> 00:01:21.376 +What? + +00:01:21.377 --> 00:02:16.214 +Why? + +00:02:16.215 --> 00:03:35.319 +Challenges + +00:03:35.320 --> 00:04:08.060 +Basic Org to PDF + +00:04:08.061 --> 00:04:32.303 +How to LaTeX properly, though? + +00:04:32.304 --> 00:04:54.624 +LaTeX-specific headers + +00:04:54.625 --> 00:05:31.394 +Using a formatting class file + +00:05:31.395 --> 00:06:13.137 +Using a different LaTeX command + +00:06:13.138 --> 00:07:09.719 +References links for bibliography + +00:07:09.720 --> 00:07:41.239 +Examples + +00:07:41.240 --> 00:10:07.400 +Tags diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt new file mode 100644 index 00000000..11fcffad --- /dev/null +++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt @@ -0,0 +1,490 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.799 +Okay. Hi, everyone. My name is Vincent. I'm a PhD student in + +00:00:04.800 --> 00:00:07.439 +Nanzan University, Japan. Today I'm going to present to + +00:00:07.440 --> 00:00:11.799 +you how I'm using Org notes and Org Roam to write academic + +00:00:11.800 --> 00:00:14.999 +papers. The slides I'm going to present here are available + +00:00:15.000 --> 00:00:17.305 +in the Git repository, so you can check them later + +00:00:17.306 --> 00:00:20.129 +if you want to. + +NOTE What? + +00:00:20.130 --> 00:00:21.910 +Firstly what are we talking about here? + +00:00:21.911 --> 00:00:26.692 +So in general, it's possible, if you have any Org nodes, + +00:00:26.693 --> 00:00:31.315 +to export them as LaTeX. Given some extra configuration, + +00:00:31.316 --> 00:00:34.956 +it's possible, basically, to reproduce any LaTeX setup + +00:00:34.957 --> 00:00:42.031 +that you would use to create documents with an Org file. + +00:00:42.032 --> 00:00:46.753 +In my case, I'm using that system to take some notes + +00:00:46.754 --> 00:00:48.453 +that I have in my org-roam system + +00:00:48.454 --> 00:00:52.239 +and to export that into finished academic papers + +00:00:52.240 --> 00:00:56.279 +that you can submit eventually to a conference and so on. + +00:00:56.280 --> 00:00:59.439 +Actually, before I submit that proposal, after I submit + +00:00:59.440 --> 00:01:03.559 +that proposal, I just noticed that Mike Hamrick in last + +00:01:03.560 --> 00:01:07.879 +year's EmacsConf made a very extensive presentation about + +00:01:07.880 --> 00:01:13.039 +org export. But in here, I just want to showcase my usage of + +00:01:13.040 --> 00:01:16.959 +org-roam and to present what are the configuration I'm + +00:01:16.960 --> 00:01:21.376 +using to be able to achieve that. Why do that? + +NOTE Why? + +00:01:21.377 --> 00:01:23.037 +In general, like I said, I'm using that + +00:01:23.038 --> 00:01:26.639 +as part of my writing system, so in + +00:01:26.640 --> 00:01:30.239 +having org-roam notes that can be exported as a document + +00:01:30.240 --> 00:01:34.159 +make for a great workflow in my opinion. It makes Org even + +00:01:34.160 --> 00:01:38.839 +more versatile, so if you use that for maybe writing code in + +00:01:38.840 --> 00:01:41.599 +the literate programming, now you're going to be also able + +00:01:41.600 --> 00:01:47.559 +to export that into any format you want. + +00:01:47.560 --> 00:01:49.879 +The Org notes are very clean. In my opinion, it looks + +00:01:49.880 --> 00:01:53.799 +better to work in Org rather than editing LaTeX code + +00:01:53.800 --> 00:01:58.959 +directly. The centralized bibliography system is also + +00:01:58.960 --> 00:02:02.559 +great because it allows to have just a few notes that you can + +00:02:02.560 --> 00:02:06.599 +reference everywhere and have links to them. Of course + +00:02:06.600 --> 00:02:09.479 +everything is happening inside of Emacs so you have access + +00:02:09.480 --> 00:02:13.359 +to all the tools you are used to like Magit or Projectile and + +00:02:13.360 --> 00:02:16.214 +whatnot. + +NOTE Challenges + +00:02:16.215 --> 00:02:18.599 +However, to quote one of the funniest recent + +00:02:18.600 --> 00:02:22.999 +video about Emacs: "[With LaTeX,] I used to spend hours trying to + +00:02:23.000 --> 00:02:25.599 +get the image on the right page. Now I use Org Mode LaTeX and + +00:02:25.600 --> 00:02:28.759 +just accept it's impossible." Like all the jokes in that + +00:02:28.760 --> 00:02:32.799 +video, it lands in very well because there is some truth to + +00:02:32.800 --> 00:02:38.239 +that in that with that system you are not getting rid of + +00:02:38.240 --> 00:02:41.239 +the complexity of LaTeX, so if you have problems, you're going to + +00:02:41.240 --> 00:02:45.959 +have to deal with the very long logs. It's a layer on top of + +00:02:45.960 --> 00:02:50.519 +LaTeX, so if you need to debug your configuration, if you + +00:02:50.520 --> 00:02:52.999 +want to adjust something specific, you would need to be + +00:02:53.000 --> 00:02:58.879 +proficient in LaTeX and also in being very at ease with + +00:02:58.880 --> 00:03:03.119 +your Emacs configuration. The way to use the Org export is + +00:03:03.120 --> 00:03:06.639 +less documented than using LaTeX so if you want to implement + +00:03:06.640 --> 00:03:09.959 +something, probably it's going to be described in pure LaTeX, + +00:03:09.960 --> 00:03:13.599 +and then you're going to need to adjust that to make it work + +00:03:13.600 --> 00:03:17.679 +inside your Org files. I explained before that the + +00:03:17.680 --> 00:03:20.959 +bibliography system is great, although it's very picky + +00:03:20.960 --> 00:03:26.359 +on the way it works, especially to be exported. Depending + +00:03:26.360 --> 00:03:29.239 +on the template you are using, you might run into issues + +00:03:29.240 --> 00:03:33.199 +with some packages that are in conflict, so there is + +00:03:33.200 --> 00:03:35.319 +that to be taken in mind. + +NOTE Basic Org to PDF + +00:03:35.320 --> 00:03:41.519 +In general, if you have a Org note, you can simply export it + +00:03:41.520 --> 00:03:46.199 +with a C-c C-e and l o with the menu that appears. I can + +00:03:46.200 --> 00:03:49.479 +show that briefly: C-e, then you have the menu. You can select + +00:03:49.480 --> 00:03:53.519 +l and o to export. That works very well. In general, + +00:03:53.520 --> 00:03:56.959 +with that, you are able to deal with everything that you have + +00:03:56.960 --> 00:03:59.959 +in your normal Org notes. If you have images, tables, + +00:03:59.960 --> 00:04:03.559 +links, it's going to be exported in a way that looks decent. + +00:04:03.560 --> 00:04:08.060 +That's what we are starting with. + +NOTE How to LaTeX properly, though? + +00:04:08.061 --> 00:04:11.543 +However, if you want to make a publication, + +00:04:11.544 --> 00:04:13.479 +if you have a template that you receive + +00:04:13.480 --> 00:04:17.479 +from a conference or whatnot, you want to be able to adapt + +00:04:17.480 --> 00:04:20.519 +your Org notes to be able to export it exactly the way you + +00:04:20.520 --> 00:04:23.039 +want. I'm going to present the four points that I'm + +00:04:23.040 --> 00:04:25.919 +showing here that are, for me, the elements that you need to + +00:04:25.920 --> 00:04:29.879 +be careful with when you try to work with templates and + +00:04:29.880 --> 00:04:32.303 +exporting to LaTeX. + +NOTE LaTeX-specific headers + +00:04:32.304 --> 00:04:34.525 +Firstly, you have headers. So basically, + +00:04:34.526 --> 00:04:37.119 +this allows to add LaTeX elements that are going + +00:04:37.120 --> 00:04:41.559 +to be at the top of the file. You're going to have the title. + +00:04:41.560 --> 00:04:44.119 +You're going to have your extra packages here. You're going + +00:04:44.120 --> 00:04:46.959 +to have your class. I'm going to present that later. That's + +00:04:46.960 --> 00:04:50.479 +the part that you're going to adjust to make it look like the + +00:04:50.480 --> 00:04:54.624 +.tex template that you receive. + +NOTE Using a formatting class file + +00:04:54.625 --> 00:04:58.625 +Then you have the formatting class file. That's a .cls file + +00:04:58.626 --> 00:05:01.786 +that you would receive as a part of the template. + +00:05:01.787 --> 00:05:08.147 +This one is used instead of the typical doc class like article. + +00:05:08.148 --> 00:05:10.588 +The way I'm using them is to add an entry, + +00:05:10.589 --> 00:05:12.759 +like add an element to the list or get a + +00:05:12.760 --> 00:05:18.599 +class in my Emacs init. This way I can use the CLS file + +00:05:18.600 --> 00:05:22.719 +directly and also give the parameters that I want. In that + +00:05:22.720 --> 00:05:26.402 +case, I'm going to have a apris.cls next to my Org note, + +00:05:26.403 --> 00:05:31.394 +and it's going to be able to to use it. + +NOTE Using a different LaTeX command + +00:05:31.395 --> 00:05:33.599 +A third element is, in some cases, + +00:05:33.600 --> 00:05:38.359 +you might want to use a different LaTeX compiler to build + +00:05:38.360 --> 00:05:41.719 +your project, to build your notes. That can be done per + +00:05:41.720 --> 00:05:45.319 +file, per note, in my opinion, that's the most flexible way, + +00:05:45.320 --> 00:05:48.519 +by editing, by adding this line as the very first line of your + +00:05:48.520 --> 00:05:52.599 +file and thus changing the LaTeX PDF process variable. And + +00:05:52.600 --> 00:06:00.461 +in there, you can put multiple commands in a row. + +00:06:00.462 --> 00:06:01.959 +For example you can have the shell + +00:06:01.960 --> 00:06:06.079 +escape to have the minted note block, the BibTeX element, so + +00:06:06.080 --> 00:06:08.959 +that works very well. When you add that, you need to + +00:06:08.960 --> 00:06:13.137 +reload your file, though. Something to keep in mind. + +NOTE References links for bibliography + +00:06:13.138 --> 00:06:16.999 +Lastly, you have the bibliography. When you have a reference, + +00:06:17.000 --> 00:06:19.879 +when you want to put a reference, you can use the + +00:06:19.880 --> 00:06:23.719 +org-roam-bibtex package that needs to be installed. Then you + +00:06:23.720 --> 00:06:27.759 +have some configuration to to be set so you have the bibtex + +00:06:27.760 --> 00:06:31.199 +compilation bibliography, where you explain where is your + +00:06:31.200 --> 00:06:35.959 +your reference file, your bib file. You can also give a path + +00:06:35.960 --> 00:06:40.079 +for where to search for PDFs. If you have matching names + +00:06:40.080 --> 00:06:44.039 +with your BibTeX entries and some PDF files in there, + +00:06:44.040 --> 00:06:46.479 +they're going to be linked. I'm going to show that later. So + +00:06:46.480 --> 00:06:49.199 +that's something that's going to be part of your init + +00:06:49.200 --> 00:06:53.039 +configuration as part of the org-roam-bibtex package + +00:06:53.040 --> 00:06:56.479 +configuration. Then in the node you are exporting, you want + +00:06:56.480 --> 00:07:01.319 +to add a section called reference. Here you can set a style + +00:07:01.320 --> 00:07:06.479 +for the bibliography. Again you put which of the + +00:07:06.480 --> 00:07:09.719 +reference file you want to use. + +NOTE Examples + +00:07:09.720 --> 00:07:15.559 +With all of that, I'm going to show some examples. Here I + +00:07:15.560 --> 00:07:21.759 +have an Org note that I used as the file to be exported into a + +00:07:21.760 --> 00:07:26.719 +publication. You can see up front, I set all my headers + +00:07:26.720 --> 00:07:30.519 +package. I have some extra package I put. I have the class + +00:07:30.520 --> 00:07:35.839 +that is something that is next to it. You can see in the + +00:07:35.840 --> 00:07:41.239 +files, I have the apris.cls just here. + +NOTE Tags + +00:07:41.240 --> 00:07:47.119 +Also, with all of that, you can also add tags. I + +00:07:47.120 --> 00:07:49.399 +didn't explain that, but you can also ignore some + +00:07:49.400 --> 00:07:52.719 +sections. That's quite convenient as well. Here we + +00:07:52.720 --> 00:07:57.359 +have some section, and if you want to add a bibliography, + +00:07:57.360 --> 00:08:04.999 +you're going to do c l cite:, you can put some cite entry, put + +00:08:05.000 --> 00:08:08.199 +any file in there, no description, and you're going to put + +00:08:08.200 --> 00:08:11.919 +some link like that. It's very convenient because, firstly, + +00:08:11.920 --> 00:08:14.519 +it's going to be exported as a reference like I'm going to + +00:08:14.520 --> 00:08:18.079 +show later, but also it gives you access to it directly from + +00:08:18.080 --> 00:08:22.679 +the note. If I click the thing here, I have some menu, I can + +00:08:22.680 --> 00:08:31.039 +open the bibliography page. + +00:08:31.040 --> 00:08:34.799 +I can also open the PDF that was linked to it. If I do + +00:08:34.800 --> 00:08:38.919 +that, here is the file that pops up that was linked to the + +00:08:38.920 --> 00:08:44.959 +bibliography. That's great. Otherwise, within + +00:08:44.960 --> 00:08:47.759 +that document, you're going to have other things you can + +00:08:47.760 --> 00:08:53.279 +have. Figures with parameters set on top, footnotes as well if + +00:08:53.280 --> 00:08:57.279 +that's something that you need. For example, here it's a + +00:08:57.280 --> 00:09:00.959 +section that's not exported, but you can have your + +00:09:00.960 --> 00:09:04.079 +normal footnotes. We can go back and forth. If they are in + +00:09:04.080 --> 00:09:07.759 +the exported section, they're going to be + +00:09:07.760 --> 00:09:11.919 +managed. So with that, you can export the notes. You're going to + +00:09:11.920 --> 00:09:16.879 +C-c C-e so you have that menu for exporting + +00:09:16.880 --> 00:09:23.479 +Org files. You do l for LaTeX and then o for running directly as + +00:09:23.480 --> 00:09:27.399 +PDF and opening it. It takes a little while to build. Here we + +00:09:27.400 --> 00:09:31.359 +are. The templates have been used, so there is a + +00:09:31.360 --> 00:09:34.879 +two-column situation happening, we have a specific header + +00:09:34.880 --> 00:09:41.519 +format and figures and the citation that we put. It's + +00:09:41.520 --> 00:09:45.079 +happening, it's shown here, and it's also going to be + +00:09:45.080 --> 00:09:49.879 +visible at the end in the reference section. Like I + +00:09:49.880 --> 00:09:55.479 +said, a fully ready, finished paper can be + +00:09:55.480 --> 00:10:01.119 +produced this way. That's all that I had for today. + +00:10:01.120 --> 00:10:03.199 +Thank you very much for your attention. I am + +00:10:03.200 --> 00:10:06.232 +available for questions on IRC or in the video chat. + +00:10:06.233 --> 00:10:07.400 +Thank you. diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt new file mode 100644 index 00000000..c361ae62 --- /dev/null +++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt @@ -0,0 +1,873 @@ +WEBVTT + +00:00:00.000 --> 00:00:10.839 +And I believe we are live. Hi, Eric, how are you doing? Very + +00:00:10.840 --> 00:00:15.599 +well, thanks. It's a pleasure to have you as one of our + +00:00:15.600 --> 00:00:19.639 +speakers but it's also very nice to see you present about + +00:00:19.640 --> 00:00:24.239 +pgmacs because I found your talk to be very didactic and very + +00:00:24.240 --> 00:00:26.479 +visual. So thank you for taking the time to do a very nice + +00:00:26.480 --> 00:00:31.079 +presentation. I wanted to give the opportunity as I do with + +00:00:31.080 --> 00:00:36.279 +other speakers to maybe talk about some stuff that you could + +00:00:36.280 --> 00:00:39.279 +not include into the talk because of the format. So is there + +00:00:39.280 --> 00:00:41.319 +anything you'd like to share with the viewers that you + +00:00:41.320 --> 00:00:45.439 +weren't able to include? + +00:00:45.440 --> 00:00:50.719 +Oh, I think I gave most of the most of the relevant + +00:00:50.720 --> 00:00:54.759 +information. This is a fairly young application. I've been + +00:00:54.760 --> 00:00:58.159 +developing this since roughly the beginning of the year. So + +00:00:58.160 --> 00:01:02.879 +there are probably some rough edges that people will run + +00:01:02.880 --> 00:01:07.479 +into if they use Postgres differently from what I do. Or they + +00:01:07.480 --> 00:01:10.919 +hear maybe conflicts with some other Emacs packages that + +00:01:10.920 --> 00:01:14.959 +people use that I don't use. So I would really welcome people + +00:01:14.960 --> 00:01:19.359 +trying it out and sending out bug reports if they do + +00:01:19.360 --> 00:01:23.479 +encounter some. Yeah, I mean, it's usually... Go on, + +00:01:23.480 --> 00:01:29.079 +please. Yeah, that would certainly help to make sure it's + +00:01:29.080 --> 00:01:31.599 +nice and robust. And of course, if you're letting this loose + +00:01:31.600 --> 00:01:35.959 +on some production database that you might have, you want + +00:01:35.960 --> 00:01:41.239 +this to be quite robust, obviously. Yeah, indeed. Because + +00:01:41.240 --> 00:01:43.879 +usually, you know, when you start publishing packages like + +00:01:43.880 --> 00:01:46.599 +this, that's when you realize that it has bad interaction + +00:01:46.600 --> 00:01:49.759 +with other modes in the Emacs of other persons. But + +00:01:49.760 --> 00:01:52.039 +especially when you're dealing with databases, you also + +00:01:52.040 --> 00:01:54.639 +realize that the domain space of what you're trying to do + +00:01:54.640 --> 00:01:58.999 +with your mode also is hugely dependent on what people have + +00:01:59.000 --> 00:02:03.839 +in their database, which schema they have. So, indeed, if + +00:02:03.840 --> 00:02:05.839 +you have been interested, and I think plenty of people have + +00:02:05.840 --> 00:02:09.039 +been interested by what you've presented, part of the + +00:02:09.040 --> 00:02:11.679 +reason a software becomes great is that you've got plenty of + +00:02:11.680 --> 00:02:14.759 +people making bug reports and making sure that all the + +00:02:14.760 --> 00:02:18.799 +faults have been ironed out. So, you know what your task is. I + +00:02:18.800 --> 00:02:21.319 +will also ask you, particularly right now, people + +00:02:21.320 --> 00:02:24.519 +currently viewing, to add your questions on the pad as + +00:02:24.520 --> 00:02:27.639 +usual, because you've had plenty of nice reactions, but I'm + +00:02:27.640 --> 00:02:30.799 +sure you have plenty of questions as well. So Eric, what I'll + +00:02:30.800 --> 00:02:33.759 +be doing, I'll be reading you the questions so that it's a + +00:02:33.760 --> 00:02:37.439 +little more didactic. Starting with the first one. This is + +NOTE Q: Do you know if PGmacs works with TRAMP? + +00:02:37.440 --> 00:02:41.079 +brilliant, thank you. Do you know if pgmacs works with TRAMP? + +00:02:41.080 --> 00:02:44.119 +I often use TRAMP multi-hop to access databases both + +00:02:44.120 --> 00:02:46.959 +remotely when accessing via bastion server and locally + +00:02:46.960 --> 00:02:49.639 +when using OCI containers. I believe you've already + +00:02:49.640 --> 00:02:53.079 +answered but if you could just perhaps read your answer as + +00:02:53.080 --> 00:02:58.799 +well for everyone to benefit from it. Yep, sure, that's my + +00:02:58.800 --> 00:03:02.319 +comment indeed. So I haven't currently implemented any + +00:03:02.320 --> 00:03:07.559 +TRAMP support. I'm not sure that TRAMP is really useful for + +00:03:07.560 --> 00:03:11.439 +this type of situation, because as I understand it, TRAMP is + +00:03:11.440 --> 00:03:17.159 +establishing SSH connections itself to remote servers. + +00:03:17.160 --> 00:03:22.519 +pgmacs is doing the same thing, so it doesn't currently have + +00:03:22.520 --> 00:03:27.399 +any support for hooking in with the TRAMP support. Right. + +00:03:27.400 --> 00:03:31.439 +Pardon me if I missed the presentation. Oh, go on, please. I + +00:03:31.440 --> 00:03:34.359 +guess you could set up an SSH tunnel. It does work with an SSH + +00:03:34.360 --> 00:03:39.919 +tunnel, obviously, but there's no support for hooking into + +00:03:39.920 --> 00:03:43.799 +an SSH tunnel that TRAMP might be able to create. I'm not sure + +00:03:43.800 --> 00:03:46.959 +TRAMP actually uses SSH tunnels rather than direct + +00:03:46.960 --> 00:03:51.439 +commands, but anyway. Yeah, I think that might be useful. + +00:03:51.440 --> 00:03:54.759 +Yeah, I don't know either. I don't have the answer whether + +00:03:54.760 --> 00:03:59.039 +TRAMP actually can create tunnels like this. I'm usually + +00:03:59.040 --> 00:04:02.039 +used to TRAMP connecting to an endpoint, be it a directory or + +00:04:02.040 --> 00:04:06.239 +a file, and the tunnel is just you accessing the file. But + +00:04:06.240 --> 00:04:08.959 +usually, if you're trying to access a remote Postgres + +00:04:08.960 --> 00:04:12.039 +database, you would probably manage the port forwarding in + +00:04:12.040 --> 00:04:15.199 +a separate terminal just to be able to make sure that + +00:04:15.200 --> 00:04:17.759 +everything maps correctly to your machine, and then you + +00:04:17.760 --> 00:04:21.959 +would launch pgmacs with the forward port information. + +00:04:21.960 --> 00:04:25.519 +That's, I assume, how you would do it anyway. But yeah, I + +00:04:25.520 --> 00:04:29.119 +mean, if you could specify what you mean by TRAMP support and + +00:04:29.120 --> 00:04:31.839 +if you have something specific in mind, I'm talking to the + +00:04:31.840 --> 00:04:35.119 +questioner, feel free to specify and we'll see if you can + +00:04:35.120 --> 00:04:38.239 +answer it. But in the meantime, moving to the next question. + +NOTE Q: How did you come up with this brilliant idea? + +00:04:38.240 --> 00:04:41.999 +Great work, I'm impressed. How did you come up with this + +00:04:42.000 --> 00:04:49.079 +brilliant idea, I assume, to create pgmacs? Well, thanks for + +00:04:49.080 --> 00:04:52.839 +the compliment. It's a lot of fun developing something + +00:04:52.840 --> 00:04:57.799 +which is, as I said, such a small amount of code and which + +00:04:57.800 --> 00:05:02.359 +provides quite a bit of useful functionality. In + +00:05:02.360 --> 00:05:06.839 +particular, if you compare it with existing Terminal mode + +00:05:06.840 --> 00:05:12.799 +applications for manipulating Postgres data, they are + +00:05:12.800 --> 00:05:19.279 +not as extensible as Emacs is naturally. So I actually got + +00:05:19.280 --> 00:05:23.439 +the idea for developing this when I first tested out the + +00:05:23.440 --> 00:05:27.439 +SQLite mode, which is available in Emacs 29.1. + +00:05:27.440 --> 00:05:31.879 +And I thought, well, that's really quite impressive. And it + +00:05:31.880 --> 00:05:37.359 +allows you to delete rows and insert content and so on. And I + +00:05:37.360 --> 00:05:42.359 +was thinking, yeah, Emacs is a, is a useful environment to do + +00:05:42.360 --> 00:05:50.079 +that. And since several years ago, when I was doing my PhD, so + +00:05:50.080 --> 00:05:53.999 +to avoid doing my PhD, I was developing Emacs, I was + +00:05:54.000 --> 00:05:58.399 +developing stuff in Emacs Lisp and one of the libraries I + +00:05:58.400 --> 00:06:02.959 +developed was an interface to Postgres over the network. So + +00:06:02.960 --> 00:06:08.039 +that's the library called pg.el, which is used by pgmacs to + +00:06:08.040 --> 00:06:14.239 +access Postgres and to do all the parsing of data which + +00:06:14.240 --> 00:06:19.279 +arrives in Postgres formats into the Emacs Lisp into the + +00:06:19.280 --> 00:06:22.999 +Emacs corresponding versions. So, for example, integers + +00:06:23.000 --> 00:06:25.399 +are passed as Emacs integers, floating point numbers as + +00:06:25.400 --> 00:06:30.839 +floating point numbers, and so on. Right, yeah. I mean, it's + +00:06:30.840 --> 00:06:34.439 +pretty needed, obviously, when you have such a tooling like + +00:06:34.440 --> 00:06:37.359 +this, to make sure that the type conversion works properly, + +00:06:37.360 --> 00:06:39.879 +because the types that you have in Postgres do not + +00:06:39.880 --> 00:06:43.879 +necessarily map over to what we have in Emacs. Like, I'm + +00:06:43.880 --> 00:06:49.239 +interested, how would you handle g's and b columns in pgmacs? + +00:06:49.240 --> 00:06:55.039 +JSON is mapped to an edis dict, a dictionary. + +00:06:55.040 --> 00:07:03.759 +It depends on the top level object type for your JSON column. + +00:07:03.760 --> 00:07:07.599 +If it's an array, it's mapped to an Emacs Lisp array. If it's a + +00:07:07.600 --> 00:07:12.639 +dict, which is most common, it's mapped to an Emacs Lisp + +00:07:12.640 --> 00:07:17.679 +dictionary. All right, well it makes perfect sense. So I can + +00:07:17.680 --> 00:07:21.839 +break in with a question. Thanks, I just helped myself to the + +00:07:21.840 --> 00:07:26.159 +BBB privilege of kind of running around backstage, being a + +00:07:26.160 --> 00:07:31.679 +helper backstage. So thanks for your awesome talk, Eric. I + +00:07:31.680 --> 00:07:36.719 +super appreciated it. You know, I noticed that you that + +00:07:36.720 --> 00:07:43.159 +you're on a slightly older version of Emacs that I deal with + +00:07:43.160 --> 00:07:49.519 +in helping with producing the Windows binaries I run into + +00:07:49.520 --> 00:07:53.839 +and with some other stuff I do. I'm dealing with that + +00:07:53.840 --> 00:07:56.919 +friction of sometimes I've got some work of my own that + +00:07:56.920 --> 00:07:59.719 +applies against a specific version of Emacs and it's a bunch + +00:07:59.720 --> 00:08:02.519 +of work to think about moving it forward. Just curious if you + +00:08:02.520 --> 00:08:06.479 +started thinking about that or if you routine, if that's a + +00:08:06.480 --> 00:08:09.919 +routine that you haven't done or there's something maybe + +00:08:09.920 --> 00:08:14.599 +specifically going on with, you know, with trunk + +00:08:14.600 --> 00:08:20.599 +development that looks intimidating to deal with. Thanks + +00:08:20.600 --> 00:08:24.959 +for the comment. I'm not sure I'm using a really old version + +00:08:24.960 --> 00:08:29.239 +for Windows. I don't really develop often on Windows, but I I + +00:08:29.240 --> 00:08:32.639 +occasionally check that it works, and I took a screenshot + +00:08:32.640 --> 00:08:34.799 +that I included in the slides here, but I think I'm using + +00:08:34.800 --> 00:08:40.559 +29.4, the current version on Windows. I thought I saw 29.1, + +00:08:40.560 --> 00:08:48.839 +so that's probably my, I probably missed it when it went by. + +00:08:48.840 --> 00:08:54.879 +My bad. No, no, I use it via the choco package updater so that + +00:08:54.880 --> 00:08:58.479 +updates the Emacs version quite easily on Windows. So + +00:08:58.480 --> 00:09:03.079 +thanks for your work on maintaining Windows binaries. I + +00:09:03.080 --> 00:09:07.519 +realize that was- I sit downstream at the end of a lot of other + +00:09:07.520 --> 00:09:11.399 +people's hard work and then just focus on trying to QA well + +00:09:11.400 --> 00:09:15.559 +and help catch problems early. It's really fun. But of + +00:09:15.560 --> 00:09:16.399 +course, my pleasure. + +00:09:16.400 --> 00:09:21.799 +Coming back to the previous question, so the the + +00:09:21.800 --> 00:09:26.919 +questionnaire actually provided a little more context. So + +NOTE TRAMP continued + +00:09:26.920 --> 00:09:30.599 +with docker.el, kubel, etc, it's often possible to, for + +00:09:30.600 --> 00:09:33.919 +example, select a container pod or whatever that is hosted + +00:09:33.920 --> 00:09:36.639 +on the machine you've connected to via TRAMP, such as + +00:09:36.640 --> 00:09:41.799 +Podman, colon image colon path and trigger a terminal shell + +00:09:41.800 --> 00:09:44.959 +as well as pull forward on other similar things. It'd be nice + +00:09:44.960 --> 00:09:47.679 +to be able to use this tool in a similar way since it would open + +00:09:47.680 --> 00:09:49.919 +up the ability to use it with complex connection + +00:09:49.920 --> 00:09:53.679 +configuration. Doing SSH tunnel manually is of course + +00:09:53.680 --> 00:09:56.879 +totally fine in practice and if it is actually the case + +00:09:56.880 --> 00:10:01.319 +personally when I need to remote into a kubernetes machine I + +00:10:01.320 --> 00:10:05.239 +use POSIX script that I use on most of my machines but I don't + +00:10:05.240 --> 00:10:08.599 +do it inside Emacs. But yeah, if such a thing is possible via + +00:10:08.600 --> 00:10:11.039 +TRAMP, it definitely feels like it would be possible to do + +00:10:11.040 --> 00:10:14.919 +something similar in pgmacs. So perhaps that's a path of + +00:10:14.920 --> 00:10:19.559 +investigation for you that has opened up. Yeah, thanks for + +00:10:19.560 --> 00:10:22.759 +these comments. I'll look into that indeed if people have + +00:10:22.760 --> 00:10:26.159 +some shortcuts registered in TRAMP. So not for a terminal, + +00:10:26.160 --> 00:10:29.599 +because pgmacs won't work through a terminal, but through a + +00:10:29.600 --> 00:10:33.439 +port forward, then that would be convenient. I'll see how + +00:10:33.440 --> 00:10:38.639 +easy that is to set up. Yeah, I'm pretty sure the way it works + +00:10:38.640 --> 00:10:41.279 +is that it starts some processes in the background in Emacs + +00:10:41.280 --> 00:10:45.359 +just to either maintain the port forward or to maybe remap + +00:10:45.360 --> 00:10:49.239 +some kubecon things or whatever. So with pgmacs, + +00:10:49.240 --> 00:10:51.879 +considering complex pipelines to get to the end + +00:10:51.880 --> 00:10:54.679 +destination, it feels like it would be possible to do + +00:10:54.680 --> 00:10:57.439 +something. But perhaps it's not the responsibility of + +00:10:57.440 --> 00:11:00.199 +pgmacs, perhaps it's the responsibility of another, + +00:11:00.200 --> 00:11:03.639 +perhaps something that would target TRAMP more so than + +00:11:03.640 --> 00:11:08.399 +pgmacs. But it's nice to see again how the beauty of Emacs + +00:11:08.400 --> 00:11:12.119 +is that everything is Elisp at the end, and the way they + +00:11:12.120 --> 00:11:16.079 +interact, you might want to question yourself whether this + +00:11:16.080 --> 00:11:18.919 +belongs more to pgmacs or more to TRAMP, but at the end of the + +00:11:18.920 --> 00:11:22.439 +day, both applications will be able to benefit from the + +00:11:22.440 --> 00:11:24.759 +functions of the other. So that's the beauty of the + +00:11:24.760 --> 00:11:29.159 +philosophy right here. I do see... Absolutely, I agree. + +00:11:29.160 --> 00:11:32.279 +Sorry, before we move to different questions, an + +00:11:32.280 --> 00:11:36.759 +additional point. I should point out that to warn people + +00:11:36.760 --> 00:11:41.159 +that probably running over an SSH tunnel is going to be a bit + +00:11:41.160 --> 00:11:46.839 +slow. I mostly use it on my own machine via a local Unix + +00:11:46.840 --> 00:11:50.439 +connection. And for some reason that I haven't understood, + +00:11:50.440 --> 00:11:55.119 +pgmacs is quite a bit slower when it's even connecting to the + +00:11:55.120 --> 00:12:00.359 +same database on the local machine, but via Emacs' network + +00:12:00.360 --> 00:12:05.039 +support instead of via the Unix socket support. There is + +00:12:05.040 --> 00:12:11.639 +like a factor 10 difference in throughput and in latency. I + +00:12:11.640 --> 00:12:15.839 +don't really understand why currently, because it's using + +00:12:15.840 --> 00:12:21.919 +exactly the same Emacs Lisp level primitives. And when you + +00:12:21.920 --> 00:12:24.799 +do this using other libraries like libpq, which is the + +00:12:24.800 --> 00:12:30.639 +Postgres standard official library for connecting to + +00:12:30.640 --> 00:12:34.319 +Postgres, there's not such a performance difference. So + +00:12:34.320 --> 00:12:39.759 +there's probably something that is not working perfectly + +00:12:39.760 --> 00:12:43.879 +in the Emacs network support. I'll have to see whether I can + +00:12:43.880 --> 00:12:48.679 +investigate how to improve that performance. Yeah, I'm + +00:12:48.680 --> 00:12:52.999 +going to say it sounds like a great bug to have because it + +00:12:53.000 --> 00:12:57.319 +feels like it will allow you to dig deeper into Emacs to + +00:12:57.320 --> 00:12:59.679 +understand what is going on here. Because as you said, + +00:12:59.680 --> 00:13:01.519 +normally it's supposed to work exactly the same, + +00:13:01.520 --> 00:13:04.319 +especially if it's still in your local machine, but it + +00:13:04.320 --> 00:13:07.919 +doesn't. Personally, that's the kind of bug that I really + +00:13:07.920 --> 00:13:11.199 +like and that I'd like to spend more time investigating. So + +00:13:11.200 --> 00:13:14.759 +perhaps you might think otherwise, but I wish you luck on the + +00:13:14.760 --> 00:13:18.599 +debugging with this particular matter. All right, moving + +00:13:18.600 --> 00:13:21.519 +to the last question that we have and then we'll probably go + +00:13:21.520 --> 00:13:22.965 +on a little bit of a break. + +NOTE Q: Is sqlite-mode also capable of all of this functionality (table relations, etc)? If not, will it be possible to abstract out this functionality from pgmacs somehow? + +00:13:22.966 --> 00:13:25.399 +Question. Is SQLite mode also + +00:13:25.400 --> 00:13:28.439 +capable of all of this functionality, table relations, + +00:13:28.440 --> 00:13:31.559 +etc.? If not, would it be possible to abstract out this + +00:13:31.560 --> 00:13:33.279 +functionality from pgmacs somehow? + +00:13:33.280 --> 00:13:41.319 +So I'm not very familiar with SQLite because I don't really + +00:13:41.320 --> 00:13:46.439 +use it very much myself. I'm not sure I can answer that + +00:13:46.440 --> 00:13:53.079 +question. Sorry about that. I think it is probably a bit more + +00:13:53.080 --> 00:13:56.639 +basic because SQLite itself is quite a bit more basic in + +00:13:56.640 --> 00:14:01.639 +terms of the types of indexes it's able to support and the + +00:14:01.640 --> 00:14:09.199 +types of constraints it's able to support. Is it relevant to + +00:14:09.200 --> 00:14:13.799 +create an abstract API for connecting to databases? I think + +00:14:13.800 --> 00:14:19.639 +there is already actually a library that abstracts out from + +00:14:19.640 --> 00:14:25.439 +SQLite and Postgres. Postgres, when you connect to it via a + +00:14:25.440 --> 00:14:29.159 +PSQL subsystem, + +00:14:29.160 --> 00:14:38.439 +it might be worthwhile doing that, but there are often a few + +00:14:38.440 --> 00:14:42.279 +minor differences in SQL syntax and so on between + +00:14:42.280 --> 00:14:45.879 +databases. So it might be difficult to have something that + +00:14:45.880 --> 00:14:53.159 +really works with generic queries in an effective way. All + +00:14:53.160 --> 00:14:58.239 +these SQL dialects are a little bit different, + +00:14:58.240 --> 00:15:02.319 +unfortunately. So there was another question about I was + +00:15:02.320 --> 00:15:06.510 +just going to read out the next question. + +NOTE Q: Would it be possible to move it into Emacs tree? Are the maintainers interested in it? + +00:15:06.511 --> 00:15:07.519 +So have you thought + +00:15:07.520 --> 00:15:12.559 +about integrating your work into the Emacs tree? Do you know + +00:15:12.560 --> 00:15:17.599 +if people are interested? This was a question from the past. + +00:15:17.600 --> 00:15:24.639 +Yeah, I think it's probably a bit young to do so, so far. + +00:15:24.640 --> 00:15:30.119 +I'm updating it quite regularly. Maybe once it's more + +00:15:30.120 --> 00:15:35.399 +stabilized, I wouldn't necessarily object to this. I have + +00:15:35.400 --> 00:15:38.559 +some sort of philosophical objections to giving away my + +00:15:38.560 --> 00:15:42.519 +copyright, so I'm not sure that will actually be possible. + +00:15:42.520 --> 00:15:48.079 +Oh, that'd be interesting. I'd love to get you on maybe a + +00:15:48.080 --> 00:15:51.639 +panel talk about that sometime. Something I'd think about. + +00:15:51.640 --> 00:15:55.999 +Well, from a very simple point of view, I think that the + +00:15:56.000 --> 00:16:01.159 +copyright and the system works well with the existing + +00:16:01.160 --> 00:16:05.319 +license and without a license transfer, so I don't feel that + +00:16:05.320 --> 00:16:07.766 +the, sorry, without a copyright transfer, + +00:16:07.767 --> 00:16:14.679 +I don't feel that the copyright transfer is really a necessary step for + +00:16:14.680 --> 00:16:21.639 +taking things away from maintainers. It feels like asking + +00:16:21.640 --> 00:16:26.559 +the maintainers to give up on some of their copyright... + +00:16:26.560 --> 00:16:29.999 +Indeed. Yeah, I see where that's a little beyond our scope, + +00:16:30.000 --> 00:16:33.519 +but it's a fascinating topic and I appreciate your sharing + +00:16:33.520 --> 00:16:36.959 +your views there. I mean, that sounds like a whole topic of + +00:16:36.960 --> 00:16:41.599 +its own, frankly. + +00:16:41.600 --> 00:16:47.039 +Yeah. Corwin, do you want to fill the last question? Sure. So + +00:16:47.040 --> 00:16:52.039 +the question was, I almost missed this one, so glad I didn't. + +00:16:52.040 --> 00:16:53.849 +This may have been answered already. + +NOTE Q: What do you use for the in-buffer tables? Vtable? + +00:16:53.850 --> 00:16:55.159 +What do you use for + +00:16:55.160 --> 00:17:00.039 +in-buffer tables? Do you use vtable? Yep. Thanks for the + +00:17:00.040 --> 00:17:04.599 +question. It is indeed vtable. However, it's not really + +00:17:04.600 --> 00:17:10.919 +vtable. It's a fork that I made, which is called pgmix table. + +00:17:10.920 --> 00:17:17.199 +because Vtable doesn't have exactly the right + +00:17:17.200 --> 00:17:22.119 +functionality in particular for recoloring rows when you + +00:17:22.120 --> 00:17:28.239 +add a row. So I've currently forked this. I'm thinking about + +00:17:28.240 --> 00:17:36.359 +giving those back as patches to Vtable, plausibly. + +00:17:36.360 --> 00:17:40.719 +I know that there is some ongoing work also on vTable in the + +00:17:40.720 --> 00:17:45.839 +core. So I'll have to look at what is plausible to feed back + +00:17:45.840 --> 00:17:46.719 +into the main version. + +00:17:46.720 --> 00:17:55.199 +All right, great. I think we are nearing the end of the Q&A. We + +00:17:55.200 --> 00:17:59.079 +are due to move to the next talk in about three minutes now. I + +00:17:59.080 --> 00:18:02.719 +can fill 30 seconds or a minute of that with I guess one more + +00:18:02.720 --> 00:18:05.079 +maybe back and forth and I'll try to be quicker this time. + +00:18:05.080 --> 00:18:08.879 +First of all, thanks for your kind remarks. But my question + +00:18:08.880 --> 00:18:11.839 +wasn't really about Windows so much, it was just how I'm + +00:18:11.840 --> 00:18:16.639 +relating... So have you, let me put it more simply, have you + +NOTE Integrating with Emacs 30? + +00:18:16.640 --> 00:18:20.639 +started looking at integrating with Emacs 30 or with the + +00:18:20.640 --> 00:18:24.679 +master branch at all? Do you have any sense of how much work + +00:18:24.680 --> 00:18:27.079 +it's going to be for you to carry things forward there? I've + +00:18:27.080 --> 00:18:31.039 +tested it with the pre-release, yes. I mean, just a very + +00:18:31.040 --> 00:18:35.079 +basic testing and everything works perfectly. There's + +00:18:35.080 --> 00:18:39.799 +really no... There was no difference that I have noticed + +00:18:39.800 --> 00:18:46.279 +between 29.4 and the 30 pre-release on the aspects that I use + +00:18:46.280 --> 00:18:48.959 +at least in Emacs. Neato. + +00:18:48.960 --> 00:18:56.439 +That was it, Leo. Thanks for letting me back in for one more + +00:18:56.440 --> 00:18:58.799 +bite at the apple there. And I appreciate everybody tuning + +00:18:58.800 --> 00:19:03.479 +in and participating in the Q&A and this awesome talk. + +00:19:03.480 --> 00:19:06.879 +Thanks for your questions. That was great. Yeah, and thank + +00:19:06.880 --> 00:19:10.319 +you for answering them and for the presentation as well. So + +00:19:10.320 --> 00:19:14.199 +we'll be moving in about two minutes to the next talk, which + +00:19:14.200 --> 00:19:20.159 +is pre-recorded as well. Well, we didn't really give you the + +00:19:20.160 --> 00:19:29.399 +chance, Eric, to have the last word. So do you have any last + +00:19:29.400 --> 00:19:29.799 +word? + +00:19:29.800 --> 00:19:34.479 +please try it out, try out pgmacs and send some feedback + +00:19:34.480 --> 00:19:39.279 +that'll help improve it over time. Sure, great. Well, thank + +00:19:39.280 --> 00:19:41.559 +you so much, Eric, for taking the time to come to the + +00:19:41.560 --> 00:19:45.999 +conference, and we'll see you soon. Thank you. Bye, + +00:19:46.000 --> 00:19:50.279 +everyone. Bye. And we'll be live with the next talk in about 1 + +00:19:50.280 --> 00:19:53.119 +minute 30. So we'll take a little bit of a breather, go make + +00:19:53.120 --> 00:19:56.599 +some coffee, go take a bio break. We'll be back soon. See you + +00:19:56.600 --> 00:20:01.880 +in a bit. diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt new file mode 100644 index 00000000..9ecf670d --- /dev/null +++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt @@ -0,0 +1,35 @@ +WEBVTT + + +00:00:01.260 --> 00:01:24.380 +Introduction + +00:01:26.710 --> 00:03:53.280 +Demo + +00:03:53.960 --> 00:05:11.160 +Deletion + +00:05:12.880 --> 00:05:41.190 +Export + +00:05:42.250 --> 00:06:10.790 +HStore + +00:06:11.510 --> 00:06:30.390 +Connecting to a different database + +00:06:31.110 --> 00:07:31.800 +SchemaSpy + +00:07:32.620 --> 00:08:17.790 +Convenience queries + +00:08:18.850 --> 00:09:35.590 +Emacs as an application development platform + +00:09:36.250 --> 00:11:48.580 +Extending pgmacs + +00:11:49.400 --> 00:13:15.420 +Conclusion diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt new file mode 100644 index 00000000..3ce11b67 --- /dev/null +++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt @@ -0,0 +1,1151 @@ +WEBVTT captioned by eric + +NOTE Introduction + +1 +00:00:01.260 --> 00:00:03.980 +Hi, this is a short presentation about PGmacs, + +2 +00:00:04.180 --> 00:00:07.100 +which is a browsing and editing interface for + +3 +00:00:07.100 --> 00:00:08.360 +Postgres databases. + +4 +00:00:08.920 --> 00:00:11.320 +My name is Eric Marsden, and I'm the + +5 +00:00:11.320 --> 00:00:13.540 +developer of this Emacs Lisp library. + +6 +00:00:14.800 --> 00:00:17.420 +PGmacs was inspired by sqlite-mode, which is a + +7 +00:00:17.420 --> 00:00:20.600 +great feature available from Emacs 29 onwards. + +8 +00:00:21.060 --> 00:00:24.560 +It allows you to view and modify SQLite + +9 +00:00:24.560 --> 00:00:26.220 +databases you might have lying around. + +10 +00:00:26.760 --> 00:00:28.140 +It's a really great feature. + +11 +00:00:28.140 --> 00:00:30.840 +It would be even better, however, if it + +12 +00:00:30.840 --> 00:00:32.900 +were able to use a real database. + +13 +00:00:34.540 --> 00:00:36.200 +And I happen to know that was possible + +14 +00:00:36.200 --> 00:00:38.120 +because a few years ago, I wrote an + +15 +00:00:38.120 --> 00:00:42.920 +Emacs Lisp library, pg.el, which implements the wire + +16 +00:00:42.920 --> 00:00:46.280 +protocol used for communication over the network between + +17 +00:00:46.280 --> 00:00:49.600 +a Postgres client and the Postgres backend, the + +18 +00:00:49.600 --> 00:00:50.440 +Postgres server. + +19 +00:00:51.580 --> 00:00:53.560 +I've included here an example of what it + +20 +00:00:53.560 --> 00:00:54.820 +looks like to use this library. + +21 +00:00:54.820 --> 00:00:58.240 +You connect to the database by specifying the + +22 +00:00:58.240 --> 00:01:01.520 +database name, your username, your password, potentially the + +23 +00:01:01.520 --> 00:01:03.099 +hostname that you're connecting to. + +24 +00:01:03.800 --> 00:01:06.680 +Once you're connected, you can then execute SQL + +25 +00:01:06.680 --> 00:01:09.640 +statements, for example, to create a new table, + +26 +00:01:10.180 --> 00:01:13.860 +to insert values into that table, and to + +27 +00:01:13.860 --> 00:01:16.140 +count the number of rows in a table. + +28 +00:01:17.100 --> 00:01:20.300 +And pg.el does automatic type conversion to + +29 +00:01:20.300 --> 00:01:24.180 +and from Emacs Lisp types and Postgres types for + +30 +00:01:24.180 --> 00:01:24.380 +you. + +NOTE Demo + +31 +00:01:26.710 --> 00:01:29.170 +Probably the best is to jump straight into + +32 +00:01:29.170 --> 00:01:30.690 +a demo of PGmacs. + +33 +00:01:31.210 --> 00:01:34.130 +When we connect to a database, we see + +34 +00:01:34.130 --> 00:01:36.330 +up the top of the buffer, some information + +35 +00:01:36.330 --> 00:01:39.070 +about the backend that we're connected to, some + +36 +00:01:39.070 --> 00:01:42.010 +version information and the total database size on + +37 +00:01:42.010 --> 00:01:42.230 +disk. + +38 +00:01:43.090 --> 00:01:45.170 +There are some shortcuts to some commands we + +39 +00:01:45.170 --> 00:01:47.370 +can run on the database, and there's a + +40 +00:01:47.370 --> 00:01:49.490 +list of tables that we have access to, + +41 +00:01:50.230 --> 00:01:52.650 +with again, metainformation about their size on + +42 +00:01:52.650 --> 00:01:53.650 +disk and their owner. + +43 +00:01:53.650 --> 00:01:56.490 +Now, we can enter a table by pressing + +44 +00:01:56.490 --> 00:01:57.090 +return. + +45 +00:01:58.510 --> 00:02:01.230 +Here we again see some metainformation about + +46 +00:02:01.230 --> 00:02:04.210 +the table, such as the list of columns, + +47 +00:02:05.510 --> 00:02:08.490 +the SQL type of each column, any defaults + +48 +00:02:08.490 --> 00:02:11.170 +that might be present and any SQL constraints. + +49 +00:02:11.970 --> 00:02:14.370 +We see any indexes that might be present + +50 +00:02:14.370 --> 00:02:16.790 +on this table, and then we see the + +51 +00:02:16.790 --> 00:02:19.070 +list of rows of data in the table. + +52 +00:02:19.830 --> 00:02:22.870 +If we see any information which is incorrect + +53 +00:02:22.870 --> 00:02:26.710 +or incomplete, we can easily fix it by + +54 +00:02:26.710 --> 00:02:36.300 +pressing enter again, and this updates the information + +55 +00:02:36.300 --> 00:02:37.900 +present in the database. + +56 +00:02:38.200 --> 00:02:39.840 +PGmacs shows us this in the minibuffer + +57 +00:02:39.840 --> 00:02:42.480 +it has updated one row. + +58 +00:02:43.540 --> 00:02:45.440 +We can look at help for the key + +59 +00:02:45.440 --> 00:02:47.440 +bindings that are present in this type of + +60 +00:02:47.440 --> 00:02:47.780 +buffer. + +61 +00:02:48.120 --> 00:02:49.580 +If we scroll down, we can see that + +62 +00:02:49.580 --> 00:02:51.580 +we can upcase the value of a cell + +63 +00:02:51.580 --> 00:02:52.680 +with M-u. + +64 +00:02:52.920 --> 00:02:53.920 +Let's try that out. + +65 +00:02:56.430 --> 00:02:58.950 +Okay, here we have updated the value of + +66 +00:02:58.950 --> 00:03:00.670 +the cell in the database. + +67 +00:03:00.830 --> 00:03:03.330 +We can now lowercase it, and we can + +68 +00:03:03.330 --> 00:03:06.510 +put it back to the initial + +69 +00:03:06.510 --> 00:03:07.930 +title case of the value. + +70 +00:03:09.010 --> 00:03:11.550 +We can also run a shell command on + +71 +00:03:11.550 --> 00:03:14.570 +a cell value, to count the number of + +72 +00:03:14.570 --> 00:03:15.670 +characters, for example. + +73 +00:03:17.570 --> 00:03:20.390 +We can run a shell command with a + +74 +00:03:20.390 --> 00:03:22.990 +prefix argument, which updates the value in the + +75 +00:03:22.990 --> 00:03:25.610 +database with the output from the shell command. + +76 +00:03:27.470 --> 00:03:29.790 +So that has updated the database. + +77 +00:03:30.270 --> 00:03:32.790 +If we do that again, that will reverse + +78 +00:03:32.790 --> 00:03:39.750 +the value. If we come back + +79 +00:03:39.750 --> 00:03:41.590 +to the list of tables, we see + +80 +00:03:41.590 --> 00:03:43.010 +that there is a table which is called + +81 +00:03:43.010 --> 00:03:43.590 +deleteme. + +82 +00:03:43.890 --> 00:03:50.140 +We can try renaming this table with R, + +83 +00:03:50.380 --> 00:03:52.880 +we can look at what is in this + +84 +00:03:52.880 --> 00:03:53.280 +table. + +NOTE Deletion + +85 +00:03:53.960 --> 00:03:56.600 +Okay, there is only one row of information + +86 +00:03:56.600 --> 00:03:59.280 +that doesn't seem very important, so let's delete + +87 +00:03:59.280 --> 00:03:59.680 +that. + +88 +00:04:02.160 --> 00:04:05.600 +Let's now delete the table with DEL. + +89 +00:04:07.980 --> 00:04:11.000 +PGmacs asks for confirmation, and we've deleted the + +90 +00:04:11.000 --> 00:04:11.240 +table. + +91 +00:04:13.390 --> 00:04:15.470 +Now when we have a big table with + +92 +00:04:15.470 --> 00:04:18.250 +a lot of data, PGmacs is going to + +93 +00:04:18.250 --> 00:04:21.150 +show us the results paginated, so we can + +94 +00:04:21.150 --> 00:04:23.350 +go chunk by chunk through the table. + +95 +00:04:24.370 --> 00:04:28.070 +We can implement a where filter on the + +96 +00:04:28.070 --> 00:04:30.570 +rows to only show the rows that match + +97 +00:04:30.570 --> 00:04:32.390 +a certain SQL clause. + +98 +00:04:33.110 --> 00:04:35.450 +So for example, here we have some temperature + +99 +00:04:35.450 --> 00:04:35.950 +measurements. + +100 +00:04:36.490 --> 00:04:38.690 +We want to focus on measurements that are + +101 +00:04:38.690 --> 00:04:41.270 +more than 40 degrees Celsius, for example. + +102 +00:04:45.980 --> 00:04:48.120 +Okay, we have now filtered on a certain + +103 +00:04:48.120 --> 00:04:49.240 +number of rows. + +104 +00:04:49.540 --> 00:04:51.240 +The filter is shown to us just up + +105 +00:04:51.240 --> 00:04:53.540 +here, and we see here that we have + +106 +00:04:53.540 --> 00:04:55.960 +some values that look anomalous. + +107 +00:04:56.500 --> 00:04:59.120 +There's one, 140, and one is 61. + +108 +00:04:59.840 --> 00:05:02.980 +We probably want to delete them, they represent + +109 +00:05:02.980 --> 00:05:03.540 +errors. + +110 +00:05:04.080 --> 00:05:06.080 +We can mark them for deletion with d, + +111 +00:05:06.560 --> 00:05:09.680 +and then really delete them, expunge them, as + +112 +00:05:09.680 --> 00:05:11.160 +in Dired, with x. + +NOTE Export + +113 +00:05:12.880 --> 00:05:16.120 +We can export this table in CSV format, + +114 +00:05:16.480 --> 00:05:17.800 +thanks to this little button up here. + +115 +00:05:19.860 --> 00:05:22.760 +Here we have our table conveniently formatted as + +116 +00:05:22.760 --> 00:05:23.400 +CSV. + +117 +00:05:23.400 --> 00:05:28.480 +We can also export a particular row to + +118 +00:05:28.480 --> 00:05:32.080 +JSON by typing j, let's look at + +119 +00:05:32.080 --> 00:05:36.270 +what that looks like. + +120 +00:05:37.810 --> 00:05:40.230 +Okay, here's the JSON for one of the + +121 +00:05:40.230 --> 00:05:41.190 +rows in the table. + +NOTE HStore + +122 +00:05:42.250 --> 00:05:44.270 +Now let's look at a table that contains + +123 +00:05:44.270 --> 00:05:46.350 +a column of type HStore. + +124 +00:05:46.430 --> 00:05:48.850 +This is a Postgres-specific key-value map. + +125 +00:05:49.110 --> 00:05:51.170 +Then the attributes column is of type + +126 +00:05:51.170 --> 00:05:54.750 +JSON, which can be stored natively in Postgres. + +127 +00:05:54.750 --> 00:05:56.910 +It's possible to edit these values using a + +128 +00:05:56.910 --> 00:06:00.490 +widget-based interface by typing w, and here + +129 +00:06:00.490 --> 00:06:03.630 +we have a convenient interface for modifying these + +130 +00:06:03.630 --> 00:06:04.450 +types of values. + +131 +00:06:05.410 --> 00:06:08.390 +Likewise, for the JSON type parameter, we can + +132 +00:06:08.390 --> 00:06:10.790 +update using a widget-based interface. + +NOTE Connecting to a different database + +133 +00:06:11.510 --> 00:06:14.270 +Let's connect to a different database. + +134 +00:06:14.490 --> 00:06:18.910 +We do that with a M-x pgmacs, and + +135 +00:06:18.910 --> 00:06:26.670 +then enter our username and password. + +136 +00:06:27.310 --> 00:06:29.390 +Here we have the list of tables present + +137 +00:06:29.390 --> 00:06:30.390 +in this database. + +NOTE SchemaSpy + +138 +00:06:31.110 --> 00:06:33.690 +PGmacs has some support for running the SchemaSpy + +139 +00:06:33.690 --> 00:06:37.950 +utility, which generates a graphical representation of the + +140 +00:06:37.950 --> 00:06:41.710 +relationships between tables in this database, which can + +141 +00:06:41.710 --> 00:06:44.470 +be useful when you're discovering the database. + +142 +00:06:45.170 --> 00:06:47.870 +Here is the SVG that's output by this + +143 +00:06:47.870 --> 00:06:48.470 +utility. + +144 +00:06:50.860 --> 00:06:53.840 +This is a test database containing information about + +145 +00:06:53.840 --> 00:06:55.460 +a digital media store. + +146 +00:06:55.880 --> 00:06:58.160 +It has a table with information about the + +147 +00:06:58.160 --> 00:06:59.300 +tracks that are available. + +148 +00:07:00.960 --> 00:07:03.480 +If we look at this table, we + +149 +00:07:03.480 --> 00:07:04.780 +see that we have the name of the + +150 +00:07:04.780 --> 00:07:08.980 +track, a reference to the album, album ID. + +151 +00:07:09.240 --> 00:07:11.240 +This is a reference to a foreign key, + +152 +00:07:11.660 --> 00:07:13.520 +a key in the table which is called + +153 +00:07:13.520 --> 00:07:13.940 +album. + +154 +00:07:14.820 --> 00:07:16.840 +Now we can follow this foreign key reference + +155 +00:07:16.840 --> 00:07:20.580 +simply by pressing Enter, and here we find + +156 +00:07:20.580 --> 00:07:23.100 +it's the album called For Those About To + +157 +00:07:23.100 --> 00:07:23.340 +Rock. + +158 +00:07:24.260 --> 00:07:26.420 +And in the same way, here we have + +159 +00:07:26.420 --> 00:07:28.780 +a foreign key reference to the relevant artist + +160 +00:07:28.780 --> 00:07:29.680 +which we can follow. + +161 +00:07:30.080 --> 00:07:31.800 +That's, of course, AC/DC. + +NOTE Convenience queries + +162 +00:07:32.620 --> 00:07:35.720 +And finally, PGmacs has some convenience queries that + +163 +00:07:35.720 --> 00:07:38.280 +allows us to list the procedures which are + +164 +00:07:38.280 --> 00:07:39.820 +defined in this database. + +165 +00:07:40.260 --> 00:07:42.820 +Here we have the built-in procedures, mostly + +166 +00:07:42.820 --> 00:07:45.300 +used by the PostGIS extension. + +167 +00:07:48.430 --> 00:07:52.110 +We can also display some more information about + +168 +00:07:52.110 --> 00:07:52.690 +our backend. + +169 +00:07:53.090 --> 00:07:56.450 +Here we have the list of extensions which + +170 +00:07:56.450 --> 00:07:56.990 +are available. + +171 +00:07:57.470 --> 00:08:00.250 +We can load one of these extensions if + +172 +00:08:00.250 --> 00:08:01.570 +we have the rights to do that. + +173 +00:08:02.350 --> 00:08:05.290 +Here we've loaded the relevant extension. + +174 +00:08:06.210 --> 00:08:08.850 +We can show some information about the Postgres + +175 +00:08:08.850 --> 00:08:16.650 +settings also, and update them if we have + +176 +00:08:16.650 --> 00:08:17.790 +the rights to do that. + +NOTE Emacs as an application development platform + +177 +00:08:18.850 --> 00:08:21.650 +Now I'm preaching to the converted, but Emacs + +178 +00:08:21.650 --> 00:08:24.870 +is a really great application development platform. + +179 +00:08:25.510 --> 00:08:29.130 +PGmacs is currently around 3000 lines of code. + +180 +00:08:29.630 --> 00:08:32.510 +A first point of comparison, PGCLI, which is + +181 +00:08:32.510 --> 00:08:36.409 +a text user interface for accessing Postgres implemented + +182 +00:08:36.409 --> 00:08:39.289 +in Python, is 17,000 lines of code. + +183 +00:08:40.390 --> 00:08:43.190 +PGAdmin4, which is a well-known Python GUI + +184 +00:08:43.190 --> 00:08:47.010 +for administrating Postgres databases, is almost half a + +185 +00:08:47.010 --> 00:08:48.050 +million lines of code. + +186 +00:08:48.410 --> 00:08:51.450 +And DBeaver, implemented in Java, is almost a + +187 +00:08:51.450 --> 00:08:52.490 +million lines of code. + +188 +00:08:53.130 --> 00:08:56.030 +Developing things on Emacs, you get for + +189 +00:08:56.030 --> 00:08:58.270 +free portability between different platforms. + +190 +00:08:58.470 --> 00:09:00.130 +As I'm showing you, it works great on + +191 +00:09:00.130 --> 00:09:02.730 +Linux, which is where I developed this library. + +192 +00:09:03.070 --> 00:09:06.530 +It also works perfectly in the terminal, except + +193 +00:09:06.530 --> 00:09:08.530 +for some of the functionality I showed, which + +194 +00:09:08.530 --> 00:09:10.190 +requires SVG support. + +195 +00:09:10.970 --> 00:09:12.630 +It also works well, if you're into that + +196 +00:09:12.630 --> 00:09:15.230 +kind of thing, on MacOS and on Windows. + +197 +00:09:15.830 --> 00:09:19.130 +And it even works perfectly on Haiku, which + +198 +00:09:19.130 --> 00:09:20.770 +is a free BeOS clone. + +199 +00:09:21.300 --> 00:09:23.870 +Emacs is actually really pretty on this operating + +200 +00:09:23.870 --> 00:09:26.590 +system, so congratulations to the people who did + +201 +00:09:26.590 --> 00:09:27.330 +the port there. + +202 +00:09:27.530 --> 00:09:29.350 +Now, of course, the main advantage of building + +203 +00:09:29.350 --> 00:09:32.430 +on the Emacs development platform, is that the + +204 +00:09:32.430 --> 00:09:35.590 +application is easy for the user to extend. + +NOTE Extending pgmacs + +205 +00:09:36.250 --> 00:09:38.690 +To illustrate that, previously we were looking at + +206 +00:09:38.690 --> 00:09:40.650 +a table of temperature measurements. + +207 +00:09:42.070 --> 00:09:44.510 +Imagine we want to highlight rows in this + +208 +00:09:44.510 --> 00:09:48.430 +table, which look anomalous, where the value looks + +209 +00:09:48.430 --> 00:09:49.450 +a bit extreme. + +210 +00:09:50.090 --> 00:09:52.150 +That's quite easy to do with a bit + +211 +00:09:52.150 --> 00:09:53.130 +of Emacs Lisp. + +212 +00:09:54.610 --> 00:09:58.410 +We define a function, which, if the cell + +213 +00:09:58.410 --> 00:10:01.570 +value is bigger than 40, is going to + +214 +00:10:01.570 --> 00:10:03.850 +display it in a face which has a + +215 +00:10:03.850 --> 00:10:04.950 +dark red foreground. + +216 +00:10:05.950 --> 00:10:08.890 +We can now register this display function for + +217 +00:10:08.890 --> 00:10:11.590 +the measurement column in the temperatures table. + +218 +00:10:12.190 --> 00:10:16.490 +And if we reopen the table now, we + +219 +00:10:16.490 --> 00:10:19.950 +see that the anomalous measurements are indeed highlighted + +220 +00:10:19.950 --> 00:10:20.810 +in red. + +221 +00:10:24.100 --> 00:10:27.320 +Another example, imagine we have a table which + +222 +00:10:27.320 --> 00:10:28.880 +contains image data. + +223 +00:10:29.200 --> 00:10:31.740 +There's a column which is of BYTEA type, + +224 +00:10:31.740 --> 00:10:35.020 +which contains images in binary form. + +225 +00:10:35.340 --> 00:10:38.920 +We can display these inline as follows. + +226 +00:10:40.340 --> 00:10:44.900 +We create an inline image display function, using + +227 +00:10:44.900 --> 00:10:47.080 +Emacs' image support. + +228 +00:10:47.080 --> 00:10:49.540 +And then we'd register this function to display + +229 +00:10:49.540 --> 00:10:52.460 +the image column in the inline image table. + +230 +00:10:52.780 --> 00:10:55.540 +If we now reopen the inline image table, + +231 +00:10:56.060 --> 00:10:59.140 +we see the images are displayed inline. + +232 +00:10:59.660 --> 00:11:03.160 +And as a final example of customisation, here's + +233 +00:11:03.160 --> 00:11:05.440 +how to bind a key to a specific + +234 +00:11:05.440 --> 00:11:07.860 +function, in the row-list buffer. + +235 +00:11:08.800 --> 00:11:12.080 +Let's define a function that does a DuckDuckGo + +236 +00:11:12.080 --> 00:11:15.500 +lookup for a particular value in + +237 +00:11:15.500 --> 00:11:16.700 +the Emacs web browser. + +238 +00:11:18.080 --> 00:11:22.140 +We can define a function which does a + +239 +00:11:22.140 --> 00:11:24.400 +funcall on the cell value for this + +240 +00:11:24.400 --> 00:11:26.200 +DuckDuckGo lookup function. + +241 +00:11:27.100 --> 00:11:30.060 +And finally we can define a key, the + +242 +00:11:30.060 --> 00:11:33.360 +capital D key, in the row-list map, + +243 +00:11:33.540 --> 00:11:35.480 +which calls this function that does a + +244 +00:11:35.480 --> 00:11:36.900 +DuckDuckGo lookup. + +245 +00:11:37.240 --> 00:11:39.600 +And now if I'm browsing information in a + +246 +00:11:39.600 --> 00:11:41.580 +table that I want to do a web + +247 +00:11:41.580 --> 00:11:45.380 +search on, I can use my D shortcut + +248 +00:11:45.380 --> 00:11:48.580 +and see some web results concerning the cell. + +NOTE Conclusion + +249 +00:11:49.400 --> 00:11:53.880 +So to conclude, the source and installation instructions + +250 +00:11:53.880 --> 00:11:56.520 +for PGmacs are available on GitHub. + +251 +00:11:56.680 --> 00:11:58.780 +It requires Emacs 29. + +252 +00:11:59.260 --> 00:12:01.620 +There is a prebuilt container image which you + +253 +00:12:01.620 --> 00:12:02.820 +can use for testing. + +254 +00:12:02.980 --> 00:12:04.100 +It's a Docker image. + +255 +00:12:04.580 --> 00:12:06.160 +The Docker image only works in terminal mode. + +256 +00:12:06.160 --> 00:12:08.380 +And of course that's a recommended way of + +257 +00:12:08.380 --> 00:12:11.020 +testing Emacs Lisp code that you load + +258 +00:12:11.020 --> 00:12:13.100 +into your Emacs before having read it. + +259 +00:12:13.360 --> 00:12:15.720 +It works with any recent version of Postgres + +260 +00:12:15.720 --> 00:12:18.580 +over the past 10 years, including the latest + +261 +00:12:18.580 --> 00:12:19.900 +release, Postgres 17. + +262 +00:12:20.440 --> 00:12:22.700 +It does work with a certain number of + +263 +00:12:22.700 --> 00:12:26.440 +databases that are compatible with Postgres, such as + +264 +00:12:26.440 --> 00:12:30.360 +ParadeDB, TimescaleDB and IvorySQL. + +265 +00:12:30.940 --> 00:12:33.560 +However, it doesn't work with all databases that + +266 +00:12:33.560 --> 00:12:35.340 +claim to be Postgres compatible. + +267 +00:12:35.340 --> 00:12:37.840 +It doesn't work, for example, with CrateDB or + +268 +00:12:37.840 --> 00:12:39.960 +with CockroachDB or some others that you see + +269 +00:12:39.960 --> 00:12:40.640 +listed here. + +270 +00:12:40.760 --> 00:12:42.660 +The reason for that is that these databases + +271 +00:12:42.660 --> 00:12:46.440 +don't implement the system tables that PGmacs queries + +272 +00:12:46.440 --> 00:12:49.600 +to obtain information about the columns present in + +273 +00:12:49.600 --> 00:12:52.220 +a table, the size on disk, the ownership + +274 +00:12:52.220 --> 00:12:53.560 +of tables, etc. + +275 +00:12:54.600 --> 00:12:58.180 +PGmacs supports TLS encrypted connections to the database, + +276 +00:12:58.380 --> 00:13:01.400 +as well as local Unix socket connections. + +277 +00:13:02.040 --> 00:13:04.600 +And in terms of stability, I would classify + +278 +00:13:04.600 --> 00:13:06.160 +it as beta status. + +279 +00:13:06.680 --> 00:13:09.200 +I do use it myself in production on + +280 +00:13:09.200 --> 00:13:11.160 +some not very important data. + +281 +00:13:11.560 --> 00:13:13.060 +Really, it works quite well. + +282 +00:13:14.300 --> 00:13:15.420 +Thanks for your attention. diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt new file mode 100644 index 00000000..803490e2 --- /dev/null +++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt @@ -0,0 +1,2423 @@ +WEBVTT + +00:00:00.000 --> 00:00:10.319 +And about, I think we are live. Okay, hi again everyone. And hi + +00:00:10.320 --> 00:00:14.679 +Blaine, how are you doing? Fantastic, happy to be here. + +00:00:14.680 --> 00:00:17.479 +Yeah, it's good to see you again. We were just reminiscing in + +00:00:17.480 --> 00:00:20.239 +a room right now that it's almost been a year exactly since we + +00:00:20.240 --> 00:00:23.879 +last spoke because you were at the EmacsConf last year. That's + +00:00:23.880 --> 00:00:28.559 +right. This is great fun. Yeah, well, thank you for coming in + +00:00:28.560 --> 00:00:33.079 +and especially every time you come with a very well-crafted + +00:00:33.080 --> 00:00:37.279 +talks talking about, you know, what you do with Org Mode, Org + +00:00:37.280 --> 00:00:41.039 +Roam and whatever. And it's really fascinating as someone + +00:00:41.040 --> 00:00:43.479 +who develops and use those tools constantly to see you put + +00:00:43.480 --> 00:00:46.199 +them in action so well. Because you, you know, the way you + +00:00:46.200 --> 00:00:49.719 +talk about your research, it really reminds me on what we + +00:00:49.720 --> 00:00:53.279 +were, sorry, I've got elves talking in my ears and I'm still + +00:00:53.280 --> 00:00:56.639 +not used to it at this point. But it's really nice to see you + +00:00:56.640 --> 00:01:00.359 +put all of this together into a very cohesive way for you to + +00:01:00.360 --> 00:01:03.759 +write. Okay, let me just share my screen and I'll be sharing + +00:01:03.760 --> 00:01:11.879 +the questions. Where is it? All right, take presenter. And I + +00:01:11.880 --> 00:01:18.079 +will be sharing the questions. All right. Can you see my + +00:01:18.080 --> 00:01:24.159 +screen all right? I can, yes. OK, cool. So we move straight to + +00:01:24.160 --> 00:01:26.999 +the question. Let me just check on the time. I think we have + +00:01:27.000 --> 00:01:31.999 +about until 10.20, which is in 17 minutes. So let's take + +00:01:32.000 --> 00:01:35.639 +about 10 to 15 minutes of question time. And if people have + +00:01:35.640 --> 00:01:38.599 +joined on BBB, we'll also be taking questions live. All + +NOTE Q: what does 0573 means in your init. file name? + +00:01:38.600 --> 00:01:44.079 +right. Starting with the first question, what does 0573 + +00:01:44.080 --> 00:01:49.719 +mean in your init file name? So this name is, you can think of + +00:01:49.720 --> 00:01:55.879 +it as a prefix or a stub. It's an index number that I utilize + +00:01:55.880 --> 00:02:01.479 +before a short name that describes the project. So I have all + +00:02:01.480 --> 00:02:06.119 +my projects in my home directory, and I just start typing the + +00:02:06.120 --> 00:02:12.199 +project number or index number. in the terminal and I have + +00:02:12.200 --> 00:02:17.879 +autocompletion available through oh my ZSH package. So I + +00:02:17.880 --> 00:02:21.199 +just hit tab and it autocompletes the name of the project and + +00:02:21.200 --> 00:02:26.319 +pops me into that folder. And so I find this to be very easy for + +00:02:26.320 --> 00:02:30.919 +navigating between projects. As you saw, I work on multiple + +00:02:30.920 --> 00:02:37.399 +projects in a given day and this helps me move about. And I + +00:02:37.400 --> 00:02:45.639 +also use this number at the start of the log file name and at + +00:02:45.640 --> 00:02:50.639 +the start of the manuscript name and the start of the, I also + +00:02:50.640 --> 00:02:54.079 +have an annotated bibliography. So all those files are + +00:02:54.080 --> 00:02:59.359 +identified just in case I accidentally save one to the wrong + +00:02:59.360 --> 00:03:04.639 +folder. I can avoid, I can sort them out later. Great + +00:03:04.640 --> 00:03:09.519 +question. Thank you. Next question, which I think is going + +NOTE Q: What does Zettelkasten mean? + +00:03:09.520 --> 00:03:16.159 +to be a long one. What does Zettelkasten mean? So this means + +00:03:16.160 --> 00:03:20.719 +like, I guess, notebox, something along those lines. You + +00:03:20.720 --> 00:03:24.879 +can think of it as a- Yeah, spitbox usually, that's the word + +00:03:24.880 --> 00:03:29.159 +we use. Thank you. So this is a kind of like a card catalog + +00:03:29.160 --> 00:03:33.359 +system that when it was done on paper, and now it's being done + +00:03:33.360 --> 00:03:38.679 +electronically through various software packages. So in + +00:03:38.680 --> 00:03:43.199 +the Emacs world, org-roam is a one of several alternate + +00:03:43.200 --> 00:03:47.999 +packages that you can use. Prot has the note and there's a + +00:03:48.000 --> 00:03:59.079 +couple others. So, idea is that you create a note, usually a, + +00:03:59.080 --> 00:04:04.239 +ultimately what you want to do is create a nugget of + +00:04:04.240 --> 00:04:09.479 +knowledge from your reading that you've done. and you add it + +00:04:09.480 --> 00:04:15.879 +to this note system in such a way that you can recover it more + +00:04:15.880 --> 00:04:20.159 +easily than what had to be done in the old days with index + +00:04:20.160 --> 00:04:23.719 +cards. + +00:04:23.720 --> 00:04:28.199 +So you set up backlinks and then you can use the search + +00:04:28.200 --> 00:04:34.919 +features in Org Roam to filter and find the notes again in the + +00:04:34.920 --> 00:04:43.079 +future. Org Roam has a wonderful GUI interface where you can + +00:04:43.080 --> 00:04:47.079 +display it as a knowledge graph, essentially, all your + +00:04:47.080 --> 00:04:52.479 +nodes and the backlinks between them. I set mine up in a + +00:04:52.480 --> 00:04:56.639 +rather hierarchical fashion to, at least right now, it's + +00:04:56.640 --> 00:05:01.959 +pretty hierarchical at this point, but it may become more + +00:05:01.960 --> 00:05:07.679 +disorganized over time. But I find it I'm sort of a visual + +00:05:07.680 --> 00:05:12.519 +person. I like mind maps a lot. I find that this visual + +00:05:12.520 --> 00:05:16.919 +display of my Zettelkasten is similar, resembles to a + +00:05:16.920 --> 00:05:22.439 +certain degree, a mind map. + +00:05:22.440 --> 00:05:25.599 +Okay, well, that's a pretty good definition of what + +00:05:25.600 --> 00:05:28.839 +Zettelkasten is, and you also went on to specify what it + +00:05:28.840 --> 00:05:31.599 +means inside Emacs, so thank you. I think that clarifies it + +00:05:31.600 --> 00:05:34.199 +for the two people in the room who still do not know, after + +00:05:34.200 --> 00:05:36.759 +attending four Emacs conferences, what is the + +00:05:36.760 --> 00:05:41.759 +Zettelkasten method. Moving on to the next question, + +NOTE Q: How many papers are you writing at the same time? + +00:05:41.760 --> 00:05:44.399 +how many papers are you writing at the same time? Because I + +00:05:44.400 --> 00:05:47.759 +believe you mentioned that you had concurrent papers being + +00:05:47.760 --> 00:05:51.959 +written during your presentation. So I'm probably working + +00:05:51.960 --> 00:05:57.839 +on, in a given year, somewhere between 10 and 15. How many do I + +00:05:57.840 --> 00:06:03.199 +get published in a year? Probably anywhere from one to four + +00:06:03.200 --> 00:06:08.639 +or five. So these papers often, the work on them spans + +00:06:08.640 --> 00:06:13.559 +multiple years. will start working on a paper when I begin, + +00:06:13.560 --> 00:06:16.519 +before I begin the experiments, ideally, because I'm + +00:06:16.520 --> 00:06:23.439 +trying to do hypothesis-driven research. And so that helps + +00:06:23.440 --> 00:06:27.559 +define the scope of the project and limit the number of + +00:06:27.560 --> 00:06:32.959 +rabbit holes I go down. So, but through the nature of the + +00:06:32.960 --> 00:06:36.919 +work, there's a lot of waiting required in my case for + +00:06:36.920 --> 00:06:39.679 +crystals to grow and then the opportunity to collect + +00:06:39.680 --> 00:06:43.879 +diffraction data on the crystals. And then the structures + +00:06:43.880 --> 00:06:48.559 +have to be determined and refined and analyzed and then + +00:06:48.560 --> 00:06:52.799 +deposited, figures have to be made. So a lot of steps are + +00:06:52.800 --> 00:06:57.759 +involved that those take generally span, that work can span + +00:06:57.760 --> 00:07:02.559 +several years. + +00:07:02.560 --> 00:07:09.399 +In a given day, I try to work on two papers, ideally. I haven't + +00:07:09.400 --> 00:07:12.279 +been doing so well lately over the past month. + +00:07:12.280 --> 00:07:19.759 +In the past year, there was a couple of days where I worked on + +00:07:19.760 --> 00:07:24.239 +five papers. There was something like a half dozen where I + +00:07:24.240 --> 00:07:29.159 +worked on four, about 40 days where I worked on three, and I + +00:07:29.160 --> 00:07:33.479 +think there was something like about 100 days where I worked + +00:07:33.480 --> 00:07:40.999 +on two papers a day, about 140 days where I just worked on one. + +00:07:41.000 --> 00:07:45.719 +So my idea is, I've been sort of developing more recently is + +00:07:45.720 --> 00:07:49.159 +that I'll start doing like the generative writing on a paper + +00:07:49.160 --> 00:07:51.959 +at the beginning of the day on the paper project I'm most + +00:07:51.960 --> 00:07:55.439 +excited about. I tried to, I'm a night owl. I tried to do this + +00:07:55.440 --> 00:08:00.519 +work early in the morning when I'm half awake to try to + +00:08:00.520 --> 00:08:03.439 +overcome my internal editor that inhibits me from writing + +00:08:03.440 --> 00:08:09.879 +prose freely. And so the idea is just to get a lot of words out, + +00:08:09.880 --> 00:08:14.639 +worry about editing them later. And then after about three + +00:08:14.640 --> 00:08:17.999 +hours, I'll switch to the second project that I'm less + +00:08:18.000 --> 00:08:21.999 +excited about. And I can go for another 90 minutes to two + +00:08:22.000 --> 00:08:27.719 +hours on that project. So I build up a lot of momentum, and + +00:08:27.720 --> 00:08:31.959 +then I do the switch. And I find that switch to be relatively + +00:08:31.960 --> 00:08:37.359 +easy. So my process will be On project A, make some final + +00:08:37.360 --> 00:08:42.359 +notes about what was accomplished in the writing log. Then + +00:08:42.360 --> 00:08:47.999 +I'll switch over to the writing log for the project B, and + +00:08:48.000 --> 00:08:51.359 +I'll go to the diary section at the beginning. I'll make a + +00:08:51.360 --> 00:08:59.333 +little to-do list and maybe look at the prior entry in the + +00:08:59.334 --> 00:09:03.199 +diary if I need to reboot my memory. And then I'll move on to + +00:09:03.200 --> 00:09:07.919 +the manuscript and go for 90 minutes or two hours. + +00:09:07.920 --> 00:09:12.479 +Generally, you're only good for somewhere between four and + +00:09:12.480 --> 00:09:15.359 +a half, five and a half hours. If you try to write in a + +00:09:15.360 --> 00:09:17.839 +generative fashion much longer than that, your + +00:09:17.840 --> 00:09:21.279 +productivity goes down quite a bit. You're better off + +00:09:21.280 --> 00:09:24.039 +switching to a completely different activity and then + +00:09:24.040 --> 00:09:30.159 +using your experience doing that writing to essentially + +00:09:30.160 --> 00:09:33.199 +launch background jobs in your subconscious. And so you + +00:09:33.200 --> 00:09:37.479 +will get those ideas in the shower the next morning. + +00:09:37.480 --> 00:09:44.519 +I find it really funny because I also relate. I've also + +00:09:44.520 --> 00:09:48.919 +worked a lot on organization as linked to paper writing but + +00:09:48.920 --> 00:09:53.719 +also to on my work as a developer and it's funny how you refer + +00:09:53.720 --> 00:09:56.999 +to your ability to think about something in very similar + +00:09:57.000 --> 00:09:59.399 +terms to how a computer would think about something. You've + +00:09:59.833 --> 00:10:02.399 +mentioned in your presentation the cost of context + +00:10:02.400 --> 00:10:04.919 +switching between different things but it's also + +00:10:04.920 --> 00:10:08.119 +something that we use in computing when a processor needs to + +00:10:08.120 --> 00:10:11.719 +be thinking about something else, well, it has a cost. And + +00:10:11.720 --> 00:10:15.359 +it's really fun for me to hear you talk about, oh, I need to + +00:10:15.360 --> 00:10:19.159 +select two topics, but no longer than 90 minutes per topic, + +00:10:19.160 --> 00:10:21.319 +because it's really about maximizing your output for + +00:10:21.320 --> 00:10:25.239 +creativity. And overall, your entire chat, your entire + +00:10:25.240 --> 00:10:28.519 +presentation here is about really maximizing the + +00:10:28.520 --> 00:10:32.959 +engagement that you have between outputs and your + +00:10:32.960 --> 00:10:37.159 +cognition. And I really find this amazing how down to the T + +00:10:37.160 --> 00:10:40.279 +you've managed to do this. And it actually leads me to + +00:10:40.280 --> 00:10:42.679 +another question which is being asked of you, which is, + +NOTE Q: How you capture those ideas when when you are away from Emacs? + +00:10:42.680 --> 00:10:45.959 +how do you capture those ideas when you are away from Emacs? And + +00:10:45.960 --> 00:10:47.999 +perhaps not only those you have in the showers, but also + +00:10:48.000 --> 00:10:53.919 +elsewhere. So that's a great question. Over the past year, I + +00:10:53.920 --> 00:10:59.239 +actually, last January, upon recommendation of a senior + +00:10:59.240 --> 00:11:05.399 +colleague, I bought a digital voice recorder for $85 from + +00:11:05.400 --> 00:11:10.279 +Sony, and it's the best investment I've made in a very long + +00:11:10.280 --> 00:11:16.399 +time. other than my laptop computer, because I then record + +00:11:16.400 --> 00:11:21.439 +my thoughts. So I have a half hour commute. And to me, that's + +00:11:21.440 --> 00:11:25.359 +largely a waste of time. I wish I lived a lot closer to work. + +00:11:25.360 --> 00:11:33.679 +But I use that time to generate ideas. So maybe I'll start my + +00:11:33.680 --> 00:11:40.559 +day at home for 90 minutes, worked on paper A, and then I might + +00:11:40.560 --> 00:11:44.799 +try to prime my mind about project B, or I might still have + +00:11:44.800 --> 00:11:48.199 +ideas that are flowing about project A. And I'll record + +00:11:48.200 --> 00:11:50.982 +those in the digital voice recorder. And then when I get to + +00:11:50.983 --> 00:11:54.441 +the lab, I'll transfer the audio file to my computer, and + +00:11:54.442 --> 00:12:00.066 +I'll transcribe it using Whisper. So I've set up some + +00:12:00.067 --> 00:12:03.759 +Python scripts and bash functions to go through and I + +00:12:03.760 --> 00:12:10.999 +convert all the sentences into one sentence per line + +00:12:11.000 --> 00:12:16.359 +because that's the way I like to write and edit things. And so + +00:12:16.360 --> 00:12:19.679 +it does all this pre-processing for me. And I have this + +00:12:19.680 --> 00:12:23.279 +transcript that's in pretty good shape. I don't have to do + +00:12:23.280 --> 00:12:29.159 +very much editing. And I'll then copy that over and work on + +00:12:29.160 --> 00:12:33.079 +it, clean it up, and pluck out the ideas that I think might be + +00:12:33.080 --> 00:12:40.439 +useful. Unfortunately, I'm not very I'm not away from my + +00:12:40.440 --> 00:12:47.959 +computer that much. I'm in front of it, 12, 14 hours a day. So + +00:12:47.960 --> 00:12:53.039 +when I'm teaching, when I'm in seminar, other committee + +00:12:53.040 --> 00:12:58.359 +meetings, traveling, then I'll capture ideas on paper. I + +00:12:58.360 --> 00:13:01.649 +don't have a cell phone. I'm trying to be the last human on + +00:13:01.650 --> 00:13:07.316 +earth without a cell phone. I think I would be so distracted + +00:13:07.317 --> 00:13:12.442 +by a cell phone. I would be the worst person on the planet, + +00:13:12.443 --> 00:13:14.163 +I would be totally focused on my cell phone + +00:13:14.164 --> 00:13:16.399 +if I had one. So I'm like one + +00:13:16.400 --> 00:13:22.999 +of the few people left who can read a map. So I do run into some + +00:13:23.000 --> 00:13:26.199 +difficulties hailing taxis and that sort of thing when I'm + +00:13:26.200 --> 00:13:30.599 +traveling. So there are some downsides to not having a cell + +00:13:30.600 --> 00:13:35.719 +phone, but these days. Yeah, but I think there's a pretty + +00:13:35.720 --> 00:13:38.639 +significant upside because, you know, you talk about cell + +00:13:38.640 --> 00:13:40.999 +phones here, but before you were talking about the 90 + +00:13:41.000 --> 00:13:44.799 +minutes of uninterrupted focus on a given topic. And I think + +00:13:44.800 --> 00:13:48.359 +plenty of people would be envious of this ability to focus + +00:13:48.360 --> 00:13:54.519 +for that long on a topic. And I guess if we are to thread the + +00:13:54.520 --> 00:13:57.239 +needle here, well, the lack of cell phone might be for + +00:13:57.240 --> 00:14:00.839 +something for this ability to focus. So take of this what you + +00:14:00.840 --> 00:14:06.799 +will. True, I am a sucker for the web browser. I can get + +00:14:06.800 --> 00:14:11.759 +distracted going down various rabbit holes thanks to + +00:14:11.760 --> 00:14:17.279 +Google searches and that sort of thing. Likewise, email is + +00:14:17.280 --> 00:14:22.399 +another tension grabber. So, there's those other battles I + +00:14:22.400 --> 00:14:27.599 +have to fight too. So, right, that is a huge battle that all of + +00:14:27.600 --> 00:14:31.839 +us face is developing focus and being able to maintain + +00:14:31.840 --> 00:14:37.159 +focus. Right. So, we have about three more minutes of + +00:14:37.160 --> 00:14:39.279 +questions. So, thank you so much already for answering many + +00:14:39.280 --> 00:14:43.319 +questions. How about we do a quick fire for the remaining + +00:14:43.320 --> 00:14:47.079 +questions and then maybe we will take a question from... from + +00:14:47.080 --> 00:14:50.272 +here or in the room. So how about we go for the next one? + +NOTE Q: What if an ideas does not belong to any current working manuscript? + +00:14:50.273 --> 00:14:51.573 +What if an ID does not belong + +00:14:51.574 --> 00:14:55.199 +to any current working manuscript? So I + +00:14:55.200 --> 00:14:57.799 +have a sandbox area in the log file. + +00:14:57.800 --> 00:15:04.319 +So if it's likely going to be related to something to a + +00:15:04.320 --> 00:15:09.119 +certain degree, if the idea is totally unrelated to + +00:15:09.120 --> 00:15:12.719 +anything I'm working on, then I will + +00:15:12.720 --> 00:15:21.359 +I maintain a 700 through 750 words. I maintain a kind of a + +00:15:21.360 --> 00:15:26.719 +external diary and I just capture those kind of ideas there. + +00:15:26.720 --> 00:15:31.199 +So, I have access to a web interface to this big text area with + +00:15:31.200 --> 00:15:37.079 +nothing in it. And I just dump ideas all day long in there. So, + +00:15:37.080 --> 00:15:42.799 +and I save that away. I have that in a big LaTeX document + +00:15:42.800 --> 00:15:49.999 +currently on Overleaf. but each day has its own page. And so + +00:15:50.000 --> 00:15:53.079 +that information is captured and I can recover it. And maybe + +00:15:53.080 --> 00:15:57.599 +it's gonna take me a week, a month, a year to take that idea and + +00:15:57.600 --> 00:16:00.279 +think about it. And then eventually I'll get to a point where + +00:16:00.280 --> 00:16:04.279 +I have a critical mass of momentum and data and so forth, + +00:16:04.280 --> 00:16:08.279 +where I could start a new writing project. But you're right, + +00:16:08.280 --> 00:16:11.399 +that is a problem, capturing those ideas and keeping track + +00:16:11.400 --> 00:16:16.719 +of them. The Xenocasting can also help with that. Right. OK, + +00:16:16.720 --> 00:16:19.159 +so we have time for one more question and I think I'm going to + +00:16:19.160 --> 00:16:22.679 +skip this one. You can take all the time you want after we're + +00:16:22.680 --> 00:16:25.679 +done with the live show for you to answer in BBB, obviously, + +00:16:25.680 --> 00:16:28.319 +and even after the conference. But I'd really like to finish + +00:16:28.320 --> 00:16:28.801 +on this one. + +NOTE Q: If there were one habit from your process (referencing your extensive flow chart) that you want active learners/professional researchers to adopt, which would it be and why? + +00:16:28.802 --> 00:16:31.879 +So, if there were one habit from your process, + +00:16:31.880 --> 00:16:35.079 +referencing your extensive flowchart, that you want + +00:16:35.080 --> 00:16:37.839 +active learners or professional researchers to adopt, + +00:16:37.840 --> 00:16:44.479 +which would it be and why? So, + +00:16:44.480 --> 00:16:49.999 +I think just keeping that daily diary, that's the essential + +00:16:50.000 --> 00:16:55.239 +part for overcoming the fear of forgetting and the fear of + +00:16:55.240 --> 00:16:58.319 +losing momentum. One reason why people don't work on two + +00:16:58.320 --> 00:17:02.399 +projects a day is that they fear losing momentum on the first + +00:17:02.400 --> 00:17:07.319 +project they're working on. But we often are stuck with + +00:17:07.320 --> 00:17:09.999 +working on multiple writing projects, and they're best + +00:17:10.000 --> 00:17:13.199 +done over longer periods of time rather than in a hasty + +00:17:13.200 --> 00:17:18.679 +fashion. I try to avoid binge writing, although I do my share + +00:17:18.680 --> 00:17:23.479 +of that, too. Okay, well, Blaine, thank you so much for all + +00:17:23.480 --> 00:17:29.199 +your questions. The stream is going to move to the next chat + +00:17:29.200 --> 00:17:31.999 +and talk. We're moving to the next talk of the day, but feel + +00:17:32.000 --> 00:17:35.159 +free to stay in a room. For everyone interested in asking + +00:17:35.160 --> 00:17:38.479 +more questions to Blaine, the BBB, sorry, BigBlueButton + +00:17:38.480 --> 00:17:41.250 +link is available on the website. You can join and ask + +00:17:41.240 --> 00:17:43.319 +questions directly to Blaine. And otherwise, we'll make + +00:17:43.320 --> 00:17:45.479 +sure that all the remaining questions on the pad get their + +00:17:45.480 --> 00:17:48.239 +answer eventually. Thank you so much, Blaine. You're + +00:17:48.240 --> 00:17:56.559 +welcome. Bye-bye. Bye. + +00:17:56.560 --> 00:18:00.079 +okay I think the stream is moving on. Just making sure. okay. Yes + +00:18:00.080 --> 00:18:02.079 +we are moving on to the next stream. So Blaine, I'm going to need to + +00:18:02.080 --> 00:18:04.919 +get ready for the next talk. Thank you so much for all your + +00:18:04.920 --> 00:18:08.079 +answers and feel free to answer your questions. I'm + +00:18:08.080 --> 00:18:11.759 +sorry that i didn't get to fill your question live. It's just + +00:18:11.760 --> 00:18:16.599 +there was a lot of questions actually. It was a comment. Okay. + +NOTE Off-stream Q&A + +00:18:16.600 --> 00:18:24.199 +Yeah, yeah. You mentioned about that you sit all the day in + +00:18:24.200 --> 00:18:27.999 +front of computer, right? And I have to say, it's not too + +00:18:28.000 --> 00:18:31.439 +different from a bathroom if you get distracted by web + +00:18:31.440 --> 00:18:34.919 +browser. I also have the same problem. And one interesting + +00:18:34.920 --> 00:18:38.679 +solution I found at some point is that I pry my mind about + +00:18:38.680 --> 00:18:44.039 +certain task, I leave my office and I go for a walk while + +00:18:44.040 --> 00:18:49.079 +thinking about this. And that really forces to focus + +00:18:49.080 --> 00:18:52.839 +because while you're working you have nothing else to do. + +00:18:52.840 --> 00:18:56.999 +You cannot go and like go like searching Google and stuff + +00:18:57.000 --> 00:19:03.359 +like that. It can really help in some cases. + +00:19:03.360 --> 00:19:09.559 +Yeah, I try to. Periodically, I'll try to restart doing the + +00:19:09.560 --> 00:19:12.879 +Pomodoro method, where you're supposed to get up every 25 + +00:19:12.880 --> 00:19:17.959 +minutes and take a break. But that requires a lot of + +00:19:17.960 --> 00:19:23.799 +discipline. And it also has, I find I'm more exhausted by + +00:19:23.800 --> 00:19:26.879 +following that method at the end of the day. But I think the + +00:19:26.880 --> 00:19:30.919 +problem with, well, I think in part- No, no, I don't mean + +00:19:30.920 --> 00:19:36.079 +Pomodoro actually. I mean, more like showers. Because when + +00:19:36.080 --> 00:19:39.079 +you take a shower, you think about something, right? When + +00:19:39.080 --> 00:19:43.159 +you just go for a walk, you again think about it. So this is not + +00:19:43.160 --> 00:19:46.119 +a break to take rest. It's a break to think away from + +00:19:46.120 --> 00:19:49.039 +computer. + +00:19:49.040 --> 00:19:54.239 +And you prime yourself, your brain by... picking something + +00:19:54.240 --> 00:19:56.719 +to work on. So I have a project, I think, like certain + +00:19:56.720 --> 00:20:01.079 +questions I want to think about. I sometimes take my, like a + +00:20:01.080 --> 00:20:05.319 +piece of paper with me. And then when I walk, I like take + +00:20:05.320 --> 00:20:10.279 +notes. You can record voice in your case. And like half an + +00:20:10.280 --> 00:20:15.239 +hour and you can really generate ideas. + +00:20:15.240 --> 00:20:18.519 +I have been doing a similar thing. I will take a clipboard. + +00:20:18.520 --> 00:20:24.799 +Maybe I'll have, um, Some blank pages where I'll write, jot + +00:20:24.800 --> 00:20:29.799 +down ideas as I walk. I'll go for like a half hour, hour-long + +00:20:29.800 --> 00:20:33.879 +walk and also read a paper sometimes, and in the process of + +00:20:33.880 --> 00:20:39.159 +reading, I get ideas. + +00:20:39.160 --> 00:20:45.159 +The clipboard though is socially less acceptable. It + +00:20:45.160 --> 00:20:49.359 +reminds people of their gym teacher, I think, or their + +00:20:49.360 --> 00:20:53.799 +marine drill sergeant, and they give me all kinds of weird + +00:20:53.800 --> 00:20:59.279 +looks. Even though they're walking and reading their cell + +00:20:59.280 --> 00:21:03.759 +phone, looking down at their cell phone, they give me weird + +00:21:03.760 --> 00:21:08.599 +looks for looking down at a clipboard as I walk. So there's + +00:21:08.600 --> 00:21:16.719 +that weird aspect to it. It's kind of hilarious. + +00:21:16.720 --> 00:21:21.479 +Thank you very much for the comment. Yeah, hopefully it's + +00:21:21.480 --> 00:21:24.799 +helpful. Because I really struggled about this web browser + +00:21:24.800 --> 00:21:28.346 +in the past. Not so much these days. Very good. + +00:21:28.347 --> 00:21:57.279 +That's good to hear. + +00:21:57.280 --> 00:21:57.639 +I asked, + +00:21:57.640 --> 00:22:06.519 +when I write notes, I've noticed like with the + +00:22:06.520 --> 00:22:10.360 +Getting Things Done and the Zettelkasten, I like to separate them + +00:22:10.400 --> 00:22:14.759 +out. And beyond that, I also like to separate them out on + +00:22:14.760 --> 00:22:19.959 +daily things and the global things. So that, for instance, + +00:22:19.960 --> 00:22:24.719 +your Zettelkasten, a daily would be like a journal. If you + +00:22:24.720 --> 00:22:29.599 +separate it out, It gives a lot of tension of, oh, well, if + +00:22:29.600 --> 00:22:33.119 +it's just a stray thought, I'll write it into my journal if I + +00:22:33.120 --> 00:22:36.959 +don't know where it goes. If I can think of a permanent place + +00:22:36.960 --> 00:22:41.479 +for it to go, it goes into the Zettelkasten. Same thing with, + +00:22:41.480 --> 00:22:44.599 +and then with like the getting things done is like, I don't, + +00:22:44.600 --> 00:22:48.159 +you start with like a fresh sheet of paper every single day or + +00:22:48.160 --> 00:22:54.639 +note or whatever. You ever done, you have tricks like that + +00:22:54.640 --> 00:22:59.359 +that you've noticed? So I'm sort of doing something similar + +00:22:59.360 --> 00:23:04.279 +through this. Well, to be honest, I like at the start of the + +00:23:04.280 --> 00:23:07.399 +day, I actually will just do sort of a brain dump of what + +00:23:07.400 --> 00:23:11.879 +happened the day before, just to try to get writing again. + +00:23:11.880 --> 00:23:16.959 +And these days, because of carpal tunnel syndrome, I'll use + +00:23:16.960 --> 00:23:22.159 +a voice speech to text to generate that initial text. And I'm + +00:23:22.160 --> 00:23:28.479 +just trying to, build up momentum of generating words. And + +00:23:28.480 --> 00:23:35.559 +so I capture, but I'm also adding to that document + +00:23:35.560 --> 00:23:40.719 +throughout the day. And so that is available through the web + +00:23:40.720 --> 00:23:47.279 +browser. I have a tab open to 750 words all the time. There's + +00:23:47.280 --> 00:23:51.719 +an alternate to it that is called Write Honey, that somebody + +00:23:51.720 --> 00:23:55.919 +in Berlin started, because they benefited so greatly from + +00:23:55.920 --> 00:23:58.679 +this practice. They have made it available for free, + +00:23:58.680 --> 00:24:05.039 +apparently for life. And so there's no word limit, whereas I + +00:24:05.040 --> 00:24:10.599 +have a grandfathered version of 750 words, and I have a word + +00:24:10.600 --> 00:24:15.519 +limit of 5,000 words. I rarely hit it. It's nice to know that + +00:24:15.520 --> 00:24:20.599 +right honey doesn't have that limit. So, that's how I'm + +00:24:20.600 --> 00:24:26.199 +capturing things. And then, so some of that text winds up + +00:24:26.200 --> 00:24:32.279 +being moved into my log file or even sometimes into the + +00:24:32.280 --> 00:24:37.799 +manuscript. + +00:24:37.800 --> 00:24:42.079 +So maybe a little less organized than the getting things + +00:24:42.080 --> 00:24:47.559 +done approach with the dailies and then the refiling + +00:24:47.560 --> 00:24:54.319 +process. So I don't do any refiling. I want to file once. I + +00:24:54.320 --> 00:24:58.079 +don't want to file a second time or have to go back and handle + +00:24:58.080 --> 00:25:03.319 +something a second time. So that's my rationale for the + +00:25:03.320 --> 00:25:08.159 +approach I take. I'm not using it. I've had various + +00:25:08.160 --> 00:25:12.759 +iterations of systems I've used, but I think my favorite one + +00:25:12.760 --> 00:25:15.559 +for like getting things done is actually not using + +00:25:15.560 --> 00:25:18.799 +Org Agenda, just like making a blank sheet and kind of doing + +00:25:18.800 --> 00:25:24.039 +like a template where it's just like, and separating my + +00:25:24.040 --> 00:25:28.119 +tasks out into three categories, like core tasks, like, and + +00:25:28.120 --> 00:25:32.279 +rule of thumb is like, if it's beyond three, it's too much too + +00:25:32.280 --> 00:25:36.359 +many. And like core tasks, secondary tasks and unplanned + +00:25:36.360 --> 00:25:39.759 +tasks. So these, those three categories, like for + +00:25:39.760 --> 00:25:42.039 +instance, the core task, if it's greater than three, it's + +00:25:42.040 --> 00:25:46.999 +too many. That way is like, when you look back, then you can + +00:25:47.000 --> 00:25:51.439 +see, like, if I got my core tasks done, I did really good. or if + +00:25:51.440 --> 00:25:56.879 +I got a lot of secondary tasks but not my core tasks done, I got + +00:25:56.880 --> 00:25:58.873 +side reactions with things that don't matter. + +00:25:58.874 --> 00:26:00.674 +If I got a lot of unplanned tasks, + +00:26:00.640 --> 00:26:03.679 +I could look at those unplanned tasks to see, oh yeah, okay, + +00:26:03.680 --> 00:26:07.639 +that was fine. Okay, the day didn't go as + +00:26:07.640 --> 00:26:14.999 +planned, but it was, yeah. That's an excellent suggestion. + +00:26:15.000 --> 00:26:20.119 +I generally just And I ended up long of a to-do list. It's + +00:26:20.120 --> 00:26:25.079 +impossible to accomplish in a day. Then I just like + +00:26:25.080 --> 00:26:29.799 +furnaces. Another trick that I liked was I also put like that + +00:26:29.800 --> 00:26:34.719 +under like a week. Cause it makes more sense to do it under a + +00:26:34.720 --> 00:26:39.079 +week. And then I'd have like subheadings under that, like, + +00:26:39.080 --> 00:26:45.079 +you know, so week day. Um, then I'd have those three + +00:26:45.080 --> 00:26:48.599 +categories for each of the tasks and then kind of as an + +00:26:48.600 --> 00:26:51.719 +unofficial day at the end, I just like have a staging area for + +00:26:51.720 --> 00:26:56.199 +all tasks. So I just kind of, then I just, I want to be using org + +00:26:56.200 --> 00:27:00.319 +agenda. So then I just be moving up and down, you know, cause + +00:27:00.320 --> 00:27:03.199 +you could, cause you're able to rearrange stuff in org mode + +00:27:03.200 --> 00:27:08.079 +so easily. I don't know if there's a good way of, that's been + +00:27:08.080 --> 00:27:11.919 +my favorite iteration + +00:27:11.920 --> 00:27:20.759 +of doing it. So I wrote a little function that pops in the + +00:27:20.760 --> 00:27:25.439 +to-dos that are specific to a particular project in the log + +00:27:25.440 --> 00:27:31.359 +file for that project. + +00:27:31.360 --> 00:27:36.599 +And then I add the log file name to the list of org files that + +00:27:36.600 --> 00:27:41.919 +Org Agenda searches, so those to-dos will show up. But my + +00:27:41.920 --> 00:27:46.199 +list is too long, and that becomes overwhelming. So I'll + +00:27:46.200 --> 00:27:51.399 +just assign a to-do heading to the top item in my to-do list to + +00:27:51.400 --> 00:27:54.479 +try to, but maybe it should be three. That would be a + +00:27:54.480 --> 00:27:58.479 +reasonable compromise. + +00:27:58.480 --> 00:28:03.879 +That's a good idea. + +00:28:03.880 --> 00:28:12.879 +So you're doing weekly planning then? I can show up. I was. + +00:28:12.880 --> 00:28:16.879 +This is, yeah, this was, yeah. What ended up making me stop is + +00:28:16.880 --> 00:28:20.439 +I didn't know how to make a template of it. And I, I ended up + +00:28:20.440 --> 00:28:25.879 +getting annoyed by manually changing the days every single + +00:28:25.880 --> 00:28:29.759 +time and naming like my files and stuff like that. If I Maybe + +00:28:29.760 --> 00:28:34.159 +if I did it now, I could figure out how to program it or if I + +00:28:34.160 --> 00:28:36.439 +spent enough time, but that's what I think eventually made + +00:28:36.440 --> 00:28:42.479 +me stop doing it. So there's a, um, you can make a snippet for + +00:28:42.480 --> 00:28:45.640 +the week and then you could have code in the snippet that + +00:28:45.680 --> 00:28:51.519 +would generate the dates automatically. Um, So I have like + +00:28:51.520 --> 00:28:56.599 +for my daily entry, I have a snippet called entry and then I + +00:28:56.600 --> 00:29:02.079 +hit tab and our control or whatever to insert the snippet and + +00:29:02.080 --> 00:29:07.919 +that has the current date already entered. So I skip that, I + +00:29:07.920 --> 00:29:13.479 +don't have to deal with that. So I think you could probably + +00:29:13.480 --> 00:29:18.639 +feed what you want to accomplish to a copilot, for example, + +00:29:18.640 --> 00:29:21.801 +being copilot. I've been using Bing Copilot + +00:29:21.802 --> 00:29:25.833 +for the past three or four months to return + +00:29:25.834 --> 00:29:29.227 +Elisp code that works 90% of the time. + +00:29:29.228 --> 00:29:34.399 +I've been pretty impressed. And it's free. So no + +00:29:34.400 --> 00:29:43.119 +API key required. It runs. So I guess I installed the Bing + +00:29:43.120 --> 00:29:49.362 +Copilot plugin in the Google Chrome. + +00:29:49.363 --> 00:29:50.199 +And that's what I've been using. + +00:29:50.200 --> 00:30:00.807 +Yeah, I can show you my screen if + +00:30:00.808 --> 00:30:05.852 +you want to see what the screen looks like. + +00:30:05.853 --> 00:30:06.839 +I can email you the template. I kind of have it saved as a + +00:30:06.840 --> 00:30:12.639 +template. I've got to find it, though. Let's see. + +00:30:12.640 --> 00:30:17.439 +Not exactly set up to. + +00:30:17.440 --> 00:30:44.159 +Alright, so. I + +00:30:44.160 --> 00:30:50.159 +don't know if you can see this well enough, but... + +00:30:50.160 --> 00:30:59.599 +Yeah, let's make it bigger. Can you see that at all? I can see a + +00:30:59.600 --> 00:31:01.279 +little bit of it. Yeah, it's kind of blurry. + +00:31:01.280 --> 00:31:07.399 +Alright, well. But then you just do that right there. So it's + +00:31:07.400 --> 00:31:13.239 +all color coded. I, so I get a sense of, uh, uh, what the kind of + +00:31:13.240 --> 00:31:18.599 +greenish blue lines must be or days, I guess, or. Okay. Well, + +00:31:18.600 --> 00:31:22.639 +right. There's like, so you can see like startup show two + +00:31:22.640 --> 00:31:27.519 +levels. Then I have like numbers right there. So right on one + +00:31:27.520 --> 00:31:30.919 +day you have like the core tasks, there's three out of four + +00:31:30.920 --> 00:31:37.119 +done. Then I have like secondary and unplanned and then. + +00:31:37.120 --> 00:31:42.079 +Yeah, that's just the general idea + +00:31:42.080 --> 00:31:50.319 +So that this is you raise you know the so the dilemma I face of + +00:31:50.320 --> 00:31:55.119 +course is that I have maintain like a to-do list and our + +00:31:55.120 --> 00:31:58.799 +project specific and then there's the all the other things I + +00:31:58.800 --> 00:32:04.439 +have to do and So there should be like some The org agenda + +00:32:04.440 --> 00:32:09.879 +should be a way of being able to pull the two sets together, I + +00:32:09.880 --> 00:32:10.319 +guess. + +00:32:10.320 --> 00:32:16.959 +I had broken up my, + +00:32:16.960 --> 00:32:25.359 +well, I had way too many to-do lists stored in various + +00:32:25.360 --> 00:32:25.919 +places. + +00:32:25.920 --> 00:32:32.199 +And so that's a problem, I guess, when you have too many + +00:32:32.200 --> 00:32:37.359 +to-dos and the org Agenda becomes overwhelming and sort of + +00:32:37.360 --> 00:32:44.479 +discourages Yeah, I figure that the general task on that is + +00:32:44.480 --> 00:32:49.199 +like I start writing things up. I get more and more items. + +00:32:49.200 --> 00:32:52.319 +I'll make a master to-do list. Oh my master to-do list has too + +00:32:52.320 --> 00:32:58.759 +many items. Let me throw it out Well, there's another name + +00:32:58.760 --> 00:33:01.559 +for that kind of list you could you know called a grass + +NOTE Time Power + +00:33:01.560 --> 00:33:06.959 +catcher list. So Charles Hobbs was this, he wrote a book in + +00:33:06.960 --> 00:33:16.079 +the 80s called Time Power. And he had like, you know, so he was + +00:33:16.080 --> 00:33:22.679 +one of these time management gurus. And so, let's + +00:33:22.680 --> 00:33:26.519 +see, you get the name of some, like Tony Robbins and, + +00:33:26.520 --> 00:33:34.879 +I forget the name of the other guy, that's Brian Tracy. So + +00:33:34.880 --> 00:33:39.119 +that they have kind of pushed the same kind of similar + +00:33:39.120 --> 00:33:43.279 +approaches. But Charles Hobbs had a very more organized + +00:33:43.280 --> 00:33:46.679 +approach, I think, and more disciplined. And he identified + +00:33:46.680 --> 00:33:49.439 +that kind of list as a grass catcher list, where you have a + +00:33:49.440 --> 00:33:52.839 +list of items that you think you might want to do, but you + +00:33:52.840 --> 00:33:57.359 +haven't prioritized them yet. And you haven't scheduled + +00:33:57.360 --> 00:34:03.199 +them yet. but they need a safe place to be stored. When time + +00:34:03.200 --> 00:34:06.199 +permits, the idea was you would pull items off that grass + +00:34:06.200 --> 00:34:10.599 +catcher list and move it into a to-do item that you will + +00:34:10.600 --> 00:34:18.079 +schedule and commit to getting done. That was the idea, + +00:34:18.080 --> 00:34:20.999 +separating them between core tasks, secondary tasks, + +00:34:21.000 --> 00:34:24.119 +unplanned tasks, because your whole day can't be planned. + +00:34:24.120 --> 00:34:27.919 +Right, right. You have things you have to do that are + +00:34:27.920 --> 00:34:31.319 +unscheduled that come through your door or land in your + +00:34:31.320 --> 00:34:35.239 +inbox or land in your email. You've got to do them. And then + +00:34:35.240 --> 00:34:38.799 +core tasks, I don't know, like to-do lists, their whole + +00:34:38.800 --> 00:34:43.279 +point is. So for instance, like journal and Zettelkasten + +00:34:43.280 --> 00:34:46.679 +are kind of, and like that's global lists versus the daily + +00:34:46.680 --> 00:34:49.399 +lists are kind of. done a little differently. With + +00:34:49.400 --> 00:34:53.639 +Zettelkasten, it's organic. Things build up. If you make a + +00:34:53.640 --> 00:34:56.359 +note, it's great. If you don't, if it has a small amount, + +00:34:56.360 --> 00:35:00.479 +that's great. Have a small note. With a daily to-do, you want + +00:35:00.480 --> 00:35:05.199 +to use it to make decisions. That's the idea of having the + +00:35:05.200 --> 00:35:08.639 +core task and the secondary task separate because the whole + +00:35:08.640 --> 00:35:12.719 +thing about it is, I wanna use this to eliminate what I'm + +00:35:12.720 --> 00:35:15.759 +going to do. It's to choose what I'm going to do, like the core + +00:35:15.760 --> 00:35:19.839 +tasks. Because if I can get my core tasks, I can be happy with + +00:35:19.840 --> 00:35:26.519 +my previous days. And then I would probably start using + +00:35:26.520 --> 00:35:30.639 +agenda a lot more if I was more consistent with using like + +00:35:30.640 --> 00:35:34.439 +these as like weekly files. I don't know. But then the whole + +00:35:34.440 --> 00:35:37.559 +goal thing is just like, let me see what I wanna populate the + +00:35:37.560 --> 00:35:43.879 +day list with. So how many core tasks wind up spanning + +00:35:43.880 --> 00:35:47.359 +multiple days because they're such big projects? + +00:35:47.360 --> 00:35:54.519 +I would need more time using the system before I'd figure + +00:35:54.520 --> 00:35:59.679 +something like that out. As I said, I'm not using it right + +00:35:59.680 --> 00:36:04.759 +now, but that has been my favorite iteration of using these. + +00:36:04.760 --> 00:36:13.519 +So within the core tasks, do you assign priorities? So the + +00:36:13.520 --> 00:36:20.279 +way I would translate this a little bit would be like in this + +00:36:20.280 --> 00:36:24.999 +method that Charles Hobbs had, he had a category for the + +00:36:25.000 --> 00:36:29.399 +items that you really have to get done, and they're really + +00:36:29.400 --> 00:36:34.119 +important. And so they get a priority of A. And then the + +00:36:34.120 --> 00:36:39.519 +secondary tasks would get a priority of B. But then within + +00:36:39.520 --> 00:36:42.079 +the A category, you would number them like one through + +00:36:42.080 --> 00:36:45.039 +three, I guess. All right, so this would be part of the + +00:36:45.040 --> 00:36:49.079 +purpose of separating the daily list or like the weekly list + +00:36:49.080 --> 00:36:51.719 +from the global list. So for instance, your global list, + +00:36:51.720 --> 00:36:55.679 +you'd say, I want this project that will take a long duration + +00:36:55.680 --> 00:37:00.639 +of time. But your daily list would just say, I want to work on + +00:37:00.640 --> 00:37:05.039 +it today, even if I don't get it done today. Like, I want to + +00:37:05.040 --> 00:37:11.399 +work on it today. then maybe you can link like for instance + +00:37:11.400 --> 00:37:16.239 +that your daily list to that global list or something along + +00:37:16.240 --> 00:37:20.479 +those lines. But that would be I think a good answer to that + +00:37:20.480 --> 00:37:24.719 +type of problem because yeah, the daily list is like + +00:37:24.720 --> 00:37:30.999 +supposed to be for that day, not for, Like for instance, you + +00:37:31.000 --> 00:37:34.679 +start out clean, you make the list like that would probably + +00:37:34.680 --> 00:37:38.599 +be your first task for the week is what do I want for the week? + +00:37:38.600 --> 00:37:41.639 +Then you have some tasks that you do with staging. And then + +00:37:41.640 --> 00:37:43.799 +like for instance, since you look at it as a whole week at a + +00:37:43.800 --> 00:37:47.559 +time, you're able to rearrange it and say, these are the + +00:37:47.560 --> 00:37:51.159 +things I wanna get done this week. This is what I really wanna + +00:37:51.160 --> 00:37:53.639 +get done on this day. This is what I don't care about on this + +00:37:53.640 --> 00:37:53.959 +day or yeah. + +00:37:53.960 --> 00:38:03.079 +Another person that kind of, and this is kind of related, + +00:38:03.080 --> 00:38:05.559 +there's this idea of + +00:38:05.560 --> 00:38:14.039 +of time blocking. So obviously, three tasks, core tasks, + +00:38:14.040 --> 00:38:18.839 +maybe they're going to take three or four hours each or two or + +00:38:18.840 --> 00:38:23.919 +three. And you can assign blocks of time in your schedule to + +00:38:23.920 --> 00:38:30.039 +get them done. And often, what happens is they take longer + +00:38:30.040 --> 00:38:33.799 +than you expect. And you have to extend the blocks. Calvin + +00:38:33.800 --> 00:38:39.359 +Newport has a that's a kind of approach he advocates is you + +00:38:39.360 --> 00:38:43.519 +and I think the power to that is you're you. you're mapping + +00:38:43.520 --> 00:38:48.599 +out, you know, you're allocating the time to do these things + +00:38:48.600 --> 00:38:52.679 +and you're seeing how you actually, how much time things + +00:38:52.680 --> 00:38:56.119 +actually take. And then you, so you wind up adjusting in the + +00:38:56.120 --> 00:39:00.079 +future. And the idea is with this approach is do it on paper. + +00:39:00.080 --> 00:39:03.559 +And then you have to like, uh, if something takes longer, + +00:39:03.560 --> 00:39:06.599 +that pushes everything else down. You just wind up + +00:39:06.600 --> 00:39:12.799 +redrawing your schedule for the day, uh, manually. And, um, + +00:39:12.800 --> 00:39:17.399 +So it's kind of laborious, and that labor is supposed to + +00:39:17.400 --> 00:39:21.799 +inhibit you from spending too much time on a project. As you + +00:39:21.800 --> 00:39:24.959 +know, you've got the pain of redrawing everything if you + +00:39:24.960 --> 00:39:27.919 +spend too much time on the first project. + +00:39:27.920 --> 00:39:36.999 +Yeah, there was a, let's see. It's whatever you strategy you + +00:39:37.000 --> 00:39:40.359 +want to do. Like for instance, to me, it's like doing it this + +00:39:40.360 --> 00:39:45.519 +way makes me say, I want to focus on like what matters. Then + +00:39:45.520 --> 00:39:49.239 +it'll tell me if I feel good about that day, depends on what + +00:39:49.240 --> 00:39:52.759 +algorithm, what level and what type of strategy you're + +00:39:52.760 --> 00:39:56.119 +using. If you're using time blocking, you're optimizing + +00:39:56.120 --> 00:40:02.879 +for each level of time block where I'm, where's like, And you + +00:40:02.880 --> 00:40:09.359 +can combine the approaches. It'd be trickier. But like, now + +00:40:09.360 --> 00:40:12.919 +let's see. I was listening to a talk with Jordan Peterson. + +00:40:12.920 --> 00:40:15.159 +One of the things he said that really resonated with me is + +00:40:15.160 --> 00:40:19.119 +like, you wanna use a calendar, but the first rule of using a + +00:40:19.120 --> 00:40:24.599 +calendar is don't let the calendar tyrannize you. Because + +00:40:24.600 --> 00:40:27.999 +like the first thing you wanna do whenever you use a calendar + +00:40:28.000 --> 00:40:33.039 +is schedule every single minute of the day Now you don't have + +00:40:33.040 --> 00:40:37.279 +any room for if any task overruns at all. And after a couple of + +00:40:37.280 --> 00:40:42.719 +tests, you're like, I don't want to do this anymore. I rebel. + +00:40:42.720 --> 00:40:49.879 +I'm going to throw it out. So one kind of combination is + +00:40:49.880 --> 00:40:53.799 +through this Pomodoro method I mentioned earlier, where + +00:40:53.800 --> 00:40:57.719 +you would sort of like block out, say, two hours. You work for + +00:40:57.720 --> 00:41:02.199 +like 25 minutes, take a little, break for up to five minutes + +00:41:02.200 --> 00:41:07.279 +and get back to work. And then after two hours, you're to take + +00:41:07.280 --> 00:41:11.119 +like a 15 minute break in the morning. In the afternoon, you + +00:41:11.120 --> 00:41:14.599 +might even let that break run longer and you might only have + +00:41:14.600 --> 00:41:19.279 +three work sessions between breaks. So because you're + +00:41:19.280 --> 00:41:24.319 +going to be more run down in the afternoon. And so you build in + +00:41:24.320 --> 00:41:26.919 +some + +00:41:26.920 --> 00:41:31.639 +into your schedule, some flex like, okay, that's supposed + +00:41:31.640 --> 00:41:34.439 +to be a break time, but you know, maybe some urgency comes up + +00:41:34.440 --> 00:41:37.999 +and you got to deal with, um, and you have to break out of this, + +00:41:38.000 --> 00:41:44.039 +uh, Pomodoro technique. So, uh, that, that, that's one way + +00:41:44.040 --> 00:41:48.799 +of kind of scheduling in some, uh, flexibility is through + +00:41:48.800 --> 00:41:54.399 +the breaks at Peterson's[??], right. Right. That... I can't, I + +00:41:54.400 --> 00:41:59.239 +can't... I don't schedule to that kind of detail. That's just + +00:41:59.240 --> 00:42:00.039 +too oppressive. + +00:42:00.040 --> 00:42:05.399 +Well, neither do I, but it's like that, like I, that's, I + +00:42:05.400 --> 00:42:09.119 +don't try to, to me, the much more interesting question that + +00:42:09.120 --> 00:42:12.479 +I tried to do is like, let's try to make sure I do the important + +00:42:12.480 --> 00:42:15.199 +things. Cause if I do those, my life would probably move a lot + +00:42:15.200 --> 00:42:19.319 +quicker. If I get, if I choose a couple items that I really + +00:42:19.320 --> 00:42:22.239 +want and am able to consistently do them, I think my life + +00:42:22.240 --> 00:42:26.319 +would bastically start improving. Not necessarily if I can + +00:42:26.320 --> 00:42:28.879 +play the game of optimizing every hour. + +00:42:28.880 --> 00:42:36.879 +Maybe that could be, and it's a place to start rather, and I + +00:42:36.880 --> 00:42:39.079 +think it'd be the most effective place to start. And if I got + +00:42:39.080 --> 00:42:42.719 +better at using it all the time, perhaps I'd be playing + +00:42:42.720 --> 00:42:46.999 +optimizing every hour game. But this is the game I think + +00:42:47.000 --> 00:42:52.719 +would be best bang for buck for me to optimize now. What + +00:42:52.720 --> 00:42:56.039 +you're trying to optimize for is accomplishing these core + +00:42:56.040 --> 00:43:03.559 +tasks, getting them done as quickly as possible, or as + +00:43:03.560 --> 00:43:10.559 +effectively as possible, and as effectively as you need, or + +00:43:10.560 --> 00:43:15.359 +whatever your goal is. But yeah, focusing on that rather + +00:43:15.360 --> 00:43:19.679 +than the scheduling, I think. Plus, a core task could be, I + +00:43:19.680 --> 00:43:26.119 +don't know, catch up on all my house chores, or let, or do a + +00:43:26.120 --> 00:43:28.879 +specific one if it's really big or like, I don't know, it's + +00:43:28.880 --> 00:43:32.159 +whatever you want it to be. It's like, you can make them + +00:43:32.160 --> 00:43:37.559 +bigger or smaller depending on, on how you word them and + +00:43:37.560 --> 00:43:40.919 +everything. Cause like, if you say cap, capture all of your + +00:43:40.920 --> 00:43:44.879 +house chores up for like one week and you haven't done + +00:43:44.880 --> 00:43:47.279 +anything, that's probably a little too ambitious. + +00:43:47.280 --> 00:43:56.439 +That's right. Yeah, well, a lot of. Yeah. + +00:43:56.440 --> 00:44:03.039 +I spend, I don't know, at least 15 minutes, half an hour at the + +00:44:03.040 --> 00:44:07.119 +beginning of the day, sort of my my planning and sort of my + +00:44:07.120 --> 00:44:12.359 +initial writing session is involves a bit of planning and + +00:44:12.360 --> 00:44:20.399 +there's always. A lot more time. So generally, depending on + +00:44:20.400 --> 00:44:21.279 +the nature of your work, + +00:44:21.280 --> 00:44:28.119 +it can take up to 15% of your time. It can take quite a bit of + +00:44:28.120 --> 00:44:33.919 +time. And I think people don't really acknowledge that as + +00:44:33.920 --> 00:44:39.039 +part of your work is planning. And it can take a significant + +00:44:39.040 --> 00:44:39.839 +amount of time. + +00:44:39.840 --> 00:44:44.799 +Yeah, that's what I was meaning though is like the very first + +00:44:44.800 --> 00:44:48.119 +thing I think people generally always try to do with the + +00:44:48.120 --> 00:44:51.279 +scanners like look at how productive I can be let's schedule + +00:44:51.280 --> 00:44:55.319 +every single minute up and it's like You're not gonna want to + +00:44:55.320 --> 00:45:00.519 +do that for very long and it's not gonna work out And what you + +00:45:00.520 --> 00:45:06.359 +were saying about The pomodoro technique one of the core + +00:45:06.360 --> 00:45:11.919 +Let's see, one of the benefits could be described of another + +00:45:11.920 --> 00:45:16.879 +benefit I've seen of like multiple habits books is if you + +00:45:16.880 --> 00:45:19.599 +start multiple small habits where you try to do them + +00:45:19.600 --> 00:45:23.319 +consistently, you give yourself an opening to where if you + +00:45:23.320 --> 00:45:28.279 +get into the flow state, you can do a lot more of it. Like, I + +00:45:28.280 --> 00:45:31.759 +don't know, let's say you got a habit of, I don't know, just + +00:45:31.760 --> 00:45:36.519 +write a journal entry. You're a journal entry of like at + +00:45:36.520 --> 00:45:39.279 +least two lines. I don't know that could very easily turn to + +00:45:39.280 --> 00:45:42.759 +like three paragraphs and if you have like a whole bunch of + +00:45:42.760 --> 00:45:46.279 +Like the pomodoro technique it could be like stubs to allow + +00:45:46.280 --> 00:45:47.639 +you to do more stuff + +00:45:47.640 --> 00:45:54.319 +Where are they in spur to allow inspiration to allow you to + +00:45:54.320 --> 00:45:57.239 +generate inspiration and then capture it when it strikes if + +00:45:57.240 --> 00:45:58.759 +the mood fancies you + +00:45:58.760 --> 00:46:08.319 +Yeah, so that's kind of an issue with the Pomodoro + +00:46:08.320 --> 00:46:13.839 +technique. So, one idea is that you just, if you really have + +00:46:13.840 --> 00:46:19.359 +to break out, because the idea is too big to put on the back + +00:46:19.360 --> 00:46:24.359 +burner and hold in place, then you do have to break out of the + +00:46:24.360 --> 00:46:30.039 +Pomodoro and go, you know, jot down a quick note or three + +00:46:30.040 --> 00:46:30.719 +paragraphs. + +00:46:30.720 --> 00:46:36.839 +but like how much... You don't get to count that as a + +00:46:36.840 --> 00:46:40.679 +Pomodoro. You have to like reset your count because you've + +00:46:40.680 --> 00:46:48.759 +broken it. I mean, according to that method, it's + +00:46:48.760 --> 00:46:52.879 +kind of rigid. It's a different algorithm optimizing for + +00:46:52.880 --> 00:46:55.479 +different things. And this may just be like a by-product, + +00:46:55.480 --> 00:47:00.759 +but this could be very easily like a core advantage that may + +00:47:00.760 --> 00:47:05.599 +or may not be the core reason that you were using it but didn't + +00:47:05.600 --> 00:47:08.719 +realize it, and may not be something that it's optimizing + +00:47:08.720 --> 00:47:17.399 +for. So + +00:47:17.400 --> 00:47:22.159 +are you developing a Emacs package then with your template? + +00:47:22.160 --> 00:47:30.319 +No. As I said, + +00:47:30.320 --> 00:47:36.319 +My next steps where I think would make it work a lot better is + +00:47:36.320 --> 00:47:39.999 +if I figured out some way of automatically filling out the + +00:47:40.000 --> 00:47:45.439 +dates or maybe automatically adding the file per week into + +00:47:45.440 --> 00:47:51.999 +and out of Org Agenda. That would be my next steps. I think if I + +00:47:52.000 --> 00:47:55.719 +did that, it would have a much greater chance of becoming + +00:47:55.720 --> 00:48:01.879 +part of my workflow at all times. Yeah, I bet you could do it + +00:48:01.880 --> 00:48:08.439 +pretty Something I got to work with the help of copilot. I'm + +00:48:08.440 --> 00:48:14.959 +not a wizard yet at Emacs Lisp, but I find that copilot is + +00:48:14.960 --> 00:48:26.439 +quite helpful. + +00:48:26.440 --> 00:48:32.799 +Yeah, their AIs are definitely interesting. + +NOTE Do you use a lot of TeX inside Org Mode? + +00:48:32.800 --> 00:48:38.279 +So. do you ever use any, uh, a lot of TeX inside of org mode? + +00:48:38.280 --> 00:48:49.639 +No, mostly because I know that like I could try to learn it, + +00:48:49.640 --> 00:48:57.639 +but I just don't have a need for it. So yeah. And then also like + +00:48:57.640 --> 00:49:05.279 +I remember learning, when I learned HTML, I like writing + +00:49:05.280 --> 00:49:08.519 +HTML more than like, for instance, Word, because it was a lot + +00:49:08.520 --> 00:49:14.959 +more transparent, like a plain text document is, and kind of + +00:49:14.960 --> 00:49:20.159 +wrote the ordered list, unordered list, in such a way that it + +00:49:20.160 --> 00:49:25.599 +kind of looked similar to the page. But I find that I like Org + +00:49:25.600 --> 00:49:26.439 +Mode more than, + +00:49:26.440 --> 00:49:35.479 +HTML because, well, it's optimized for, like, my writing + +00:49:35.480 --> 00:49:38.479 +and consumption and overall use case rather than, like, + +00:49:38.480 --> 00:49:43.359 +optimizing it for somebody else to view, which I generally + +00:49:43.360 --> 00:49:45.039 +don't have as much. + +00:49:45.040 --> 00:49:52.799 +But, so, like, I don't know. Org Mode is what I'm going to end + +00:49:52.800 --> 00:49:57.879 +up using the most, so. I just want to use LaTeX enough. + +00:49:57.880 --> 00:50:00.999 +Although I'd be interested in learning LaTeX snippets + +00:50:01.000 --> 00:50:06.519 +inside of Org Mode for like the math stuff, but then again, I + +00:50:06.520 --> 00:50:13.479 +just never have to type it. So my attitude towards Org Mode + +00:50:13.480 --> 00:50:18.199 +changed radically over the summer. I was avoiding it + +00:50:18.200 --> 00:50:25.439 +somewhat before and then when I realized I can keep all the + +00:50:25.440 --> 00:50:33.279 +great aspects of LaTeX and still use all the great features + +00:50:33.280 --> 00:50:39.959 +of Org Mode. So I view now, I think of Org Mode as a wrapper + +00:50:39.960 --> 00:50:44.559 +around LaTeX. I know it's not really that, but by thinking + +00:50:44.560 --> 00:50:49.159 +about it that way, uh, it's much more palatable to me to, uh, + +00:50:49.160 --> 00:50:54.679 +uh, just go, uh, commit to doing as much as possible in org + +00:50:54.680 --> 00:50:58.559 +mode. So I've been, that's what I've been doing. Um, this + +00:50:58.560 --> 00:51:01.839 +fall is just, uh, every document I started as an org file. + +00:51:01.840 --> 00:51:09.959 +I imagine I would like it if I knew it, it's just because I, + +00:51:09.960 --> 00:51:13.319 +because I imagine it would feel to me like HTML, or it's just + +00:51:13.320 --> 00:51:18.519 +like, Yeah, I can write it, I can format it the way I want to. + +00:51:18.520 --> 00:51:24.439 +This is just guesses from my experience with HTML. I can read + +00:51:24.440 --> 00:51:27.679 +the source code of it and kind of get an idea of how it will look + +00:51:27.680 --> 00:51:30.919 +like, but I just... + +00:51:30.920 --> 00:51:36.799 +It's like if you're gonna use the Linux terminal, but you're + +00:51:36.800 --> 00:51:41.639 +gonna use it for an hour a week every... Yeah, an hour a week. + +00:51:41.640 --> 00:51:45.199 +It's just like, it's just not enough time to dedicate to + +00:51:45.200 --> 00:51:48.279 +learn it for to start paying off. That's right. And you can + +00:51:48.280 --> 00:51:52.559 +always export your org file to an HTML file. + +00:51:52.560 --> 00:51:56.079 +Yeah. + +00:51:56.080 --> 00:52:06.039 +But the org file is what I stare at 95% of the time or more. I + +00:52:06.040 --> 00:52:10.519 +only use a PDF. So I export to PDF generally. And when I export + +00:52:10.520 --> 00:52:16.239 +to HTML, it's very cool. I like looking at the document in the + +00:52:16.240 --> 00:52:20.879 +web browser. I like navigating it. But I generally will + +00:52:20.880 --> 00:52:24.879 +export it to PDF so I can print it out when I'm traveling to + +00:52:24.880 --> 00:52:30.439 +carry out editing. But that's just a small, tiny fraction of + +00:52:30.440 --> 00:52:34.039 +the time that I'm actually working with the document. So + +00:52:34.040 --> 00:52:38.119 +most of the time it's in org mode. You know, maybe it doesn't + +00:52:38.120 --> 00:52:44.199 +look as pretty as in, you know, uh, HTML, but it's, uh, it's so + +00:52:44.200 --> 00:52:48.679 +such a pleasure to work in because of the way you can reorder + +NOTE Org Mode versus Markdown + +00:52:48.680 --> 00:52:55.119 +lists, you know, create headlines. So what about org mode + +00:52:55.120 --> 00:52:57.719 +versus Markdown? Cause I know when, cause when I looked at + +00:52:57.720 --> 00:53:00.559 +org mode versus Markdown, I was like, yeah, more stuff + +00:53:00.560 --> 00:53:05.039 +supports Markdown, but. Org mode has more stuff built into + +00:53:05.040 --> 00:53:10.519 +it, like the calendar and agenda stuff. And it's obvious + +00:53:10.520 --> 00:53:14.559 +what this is supposed to be in org mode. And Emacs has got the + +00:53:14.560 --> 00:53:18.919 +best client. I use Emacs. And I think it's got a better syntax + +00:53:18.920 --> 00:53:23.319 +than Markdown. You've got stuff like Obsidian and Notes. + +00:53:23.320 --> 00:53:30.959 +And what about the Markdown? So Markdown, I use it a lot on + +00:53:30.960 --> 00:53:35.479 +GitHub repositories for the readme files. Sometimes I'll + +00:53:35.480 --> 00:53:38.959 +do them in org, but generally just go with the GitHub + +00:53:38.960 --> 00:53:44.159 +Markdown. But tables are still kind of a pain in Markdown, + +00:53:44.160 --> 00:53:48.719 +whereas tables are such a pleasure to build in org mode, + +00:53:48.720 --> 00:53:52.959 +because you have that dynamic adjusting of the column width + +00:53:52.960 --> 00:53:59.239 +as you make entries that become wider. And it's so easy to add + +00:53:59.240 --> 00:54:04.159 +columns. And it's so hard to add columns. It's much harder in + +00:54:04.160 --> 00:54:12.479 +Markdown and in LaTeX. It's more of a pain to add new columns. + +00:54:12.480 --> 00:54:16.919 +So the table aspect, that, to me, was one of the killer + +00:54:16.920 --> 00:54:20.439 +features. And then the other killer feature, of course, is + +00:54:20.440 --> 00:54:24.159 +the literate programming or interactive programming. So + +00:54:24.160 --> 00:54:26.559 +interactive computing that you can do where you have a code + +00:54:26.560 --> 00:54:30.639 +block and then you can execute it and have the output show up + +00:54:30.640 --> 00:54:35.159 +right below the code block. And + +00:54:35.160 --> 00:54:40.839 +org modes support for that kind of interactive computing is + +00:54:40.840 --> 00:54:46.039 +I'm not aware of anything more sophisticated, because you + +00:54:46.040 --> 00:54:50.799 +could have parallel sessions. You could have four Python + +00:54:50.800 --> 00:54:55.039 +sessions going, each of them labeled differently. And + +00:54:55.040 --> 00:54:57.519 +they're all walled off from each other. They don't see each + +00:54:57.520 --> 00:55:07.079 +other. Or you can have different programming languages. So + +00:55:07.080 --> 00:55:11.039 +you can do polyglottic + +00:55:11.040 --> 00:55:14.359 +programming where you have... Maybe Python's generating a + +00:55:14.360 --> 00:55:18.239 +table, and then that table gets, you decide you want to plot + +00:55:18.240 --> 00:55:24.199 +it using R, or you want to use ggplot2 and R to plot it, so that + +00:55:24.200 --> 00:55:29.719 +table gets fed into R in the next code block down, and then + +00:55:29.720 --> 00:55:33.559 +below it, you get a graph made in R, or you can make it in new + +00:55:33.560 --> 00:55:39.559 +plot, or you could, or some other, or you could move it into a + +00:55:39.560 --> 00:55:47.399 +LaTeX code block, plot the data in with Tikz, + +00:55:47.400 --> 00:55:52.719 +or you could move it into Clojure and use one of the + +00:55:52.720 --> 00:55:56.399 +Clojure plotting programs. Just kind of limitless what you + +00:55:56.400 --> 00:56:00.119 +can do in terms of recombining the best of different + +00:56:00.120 --> 00:56:01.599 +programming languages. + +00:56:01.600 --> 00:56:09.239 +Yeah, let's see. The literate DevOps are really good talks + +00:56:09.240 --> 00:56:13.359 +and subjects to get into this type of stuff. And they give a + +00:56:13.360 --> 00:56:17.119 +very good example of some tips on how to do this. You start + +00:56:17.120 --> 00:56:20.359 +writing in the previous or past tenses, though. You got the + +00:56:20.360 --> 00:56:23.719 +answer already, and then your notes are already formatted + +00:56:23.720 --> 00:56:28.559 +out as you're doing it for after the fact. And like, one thing + +NOTE Raku + +00:56:28.560 --> 00:56:32.679 +I like doing a lot is using the Raku language as a calculator, + +00:56:32.680 --> 00:56:37.239 +because I can just type in math as normal and it all works. + +00:56:37.240 --> 00:56:44.919 +I've tried that. Yeah, you can just say like, I don't know, 25 + +00:56:44.920 --> 00:56:49.559 +times four with, and you can put like parentheses in it. I'm + +00:56:49.560 --> 00:56:55.039 +not exactly, I haven't used it very heavily. Oh, it also + +00:56:55.040 --> 00:57:01.839 +supports Unicode. So if you wanted to have + +00:57:01.840 --> 00:57:07.319 +the not equals sign, the Unicode not equals sign, it will + +00:57:07.320 --> 00:57:12.919 +actually do that. Cool. Or like the division sign. I don't + +00:57:12.920 --> 00:57:22.759 +know how it will do it. Yeah. But yeah. And then using that in, + +00:57:22.760 --> 00:57:28.239 +I also wrote a shell script where it would just help me do a + +00:57:28.240 --> 00:57:31.879 +calculation. I was trying to do a business calculation + +00:57:31.880 --> 00:57:35.359 +where I was, and I'd have variable names and I ended up + +00:57:35.360 --> 00:57:39.319 +writing the, in the parentheses I'd have enters, returns, + +00:57:39.320 --> 00:57:42.319 +and then just a variable name with like a dollar sign, kind of + +00:57:42.320 --> 00:57:45.799 +like how you'd have in the shell. And I outputted every + +00:57:45.800 --> 00:57:47.479 +single line that I had in the enter. + +00:57:47.480 --> 00:57:54.479 +six or 10 variables in this paragraph, the paragraph + +00:57:54.480 --> 00:57:57.759 +spanned, I don't know, like four lines or something like + +00:57:57.760 --> 00:58:01.039 +that. Maybe, yeah, something, I think it was along those + +00:58:01.040 --> 00:58:04.599 +lines. And I was just thinking of like what this would be in + +00:58:04.600 --> 00:58:07.879 +something else, just like, it was a lot nicer. Yeah, I had + +00:58:07.880 --> 00:58:10.879 +like equations for the variable, like in like one line, but + +00:58:10.880 --> 00:58:13.839 +when I wrote that, what my output should be is like, like I + +00:58:13.840 --> 00:58:16.359 +wasn't putting all of these like, you know, string join, + +00:58:16.360 --> 00:58:21.159 +string join, string join, It looked relatively close to + +00:58:21.160 --> 00:58:25.239 +what my terminal output would be, and then a later iteration + +00:58:25.240 --> 00:58:29.039 +I found on this was, let's write what I'm going to put into the + +00:58:29.040 --> 00:58:36.119 +command line, made a couple changeable variables in it, and + +00:58:36.120 --> 00:58:40.039 +then I can see my results, and that ended up being very nice. + +00:58:40.040 --> 00:58:44.199 +Ended up being nicer than the shells. Yeah, ended up + +00:58:44.200 --> 00:58:45.959 +enhancing that shell script that I wrote. + +00:58:45.960 --> 00:58:50.919 +That's a Raku calculator. + +00:58:50.920 --> 00:58:57.759 +Uh, it's the Raku programming language, which I was just + +00:58:57.760 --> 00:59:02.479 +using it, which I was just using as, which I'll just use as + +00:59:02.480 --> 00:59:06.079 +just straight up that calculator. Cause I'll do like, + +00:59:06.080 --> 00:59:11.999 +because it supports math well enough that I, like I, yeah, + +00:59:12.000 --> 00:59:17.239 +you can put like 25 divided by four and it doesn't start + +00:59:17.240 --> 00:59:24.439 +doing, what's the word, modular fractal, the double math, + +00:59:24.440 --> 00:59:28.079 +like it, + +00:59:28.080 --> 00:59:28.639 +if it's, + +00:59:28.640 --> 00:59:34.439 +the double math where it's like negative .2 versus like + +00:59:34.440 --> 00:59:40.399 +minus one, or sometimes it'll do optimized computer math + +00:59:40.400 --> 00:59:43.999 +where it doesn't give you the right answer, why people will + +00:59:44.000 --> 00:59:44.639 +like Mathematica. + +00:59:44.640 --> 00:59:56.439 +So, how do you, do you access it through, in org mode then? + +00:59:56.440 --> 01:00:05.199 +I'll do it in that. Sometimes I just fire up a Raku shell, but + +01:00:05.200 --> 01:00:09.159 +one of the biggest things I'll fire up a Raku shell for is like + +01:00:09.160 --> 01:00:17.399 +just, um, what's oh just recently I was just like doing it for + +01:00:17.400 --> 01:00:20.399 +some math and like how many people how much money will I have + +01:00:20.400 --> 01:00:24.559 +to spend on Christmas oh I've got I'm gonna buy this gift it's + +01:00:24.560 --> 01:00:33.799 +gonna cost this much and then I've got so let's I think 15 + +01:00:33.800 --> 01:00:37.959 +times four because it's no 60 divided by four because it was a + +01:00:37.960 --> 01:00:42.919 +four pack And then times, and then I put it in parentheses, + +01:00:42.920 --> 01:00:47.519 +oh, four plus like two plus two, because like of the + +01:00:47.520 --> 01:00:49.119 +families, each of the units, and I just started doing it that + +01:00:49.120 --> 01:00:53.479 +way. And I put them all in a parentheses. And then at the end of + +01:00:53.480 --> 01:00:55.959 +this spit out the numbers, like, so I could just use the + +01:00:55.960 --> 01:00:58.279 +parentheses without thinking about, you know, like, oh, + +01:00:58.280 --> 01:01:02.679 +I'm actually in a programming language. No, I just kind of + +01:01:02.680 --> 01:01:07.279 +wrote it like I was in algebra, algebra, not in, + +01:01:07.280 --> 01:01:11.359 +not finding some special program, not finding a + +01:01:11.360 --> 01:01:14.999 +calculator, because it's easy for me to file up a terminal. + +01:01:15.000 --> 01:01:20.439 +Then I open that up, and it all just works. Plus, I also got a + +01:01:20.440 --> 01:01:22.639 +full programming language behind it if I ever need it. + +01:01:22.640 --> 01:01:33.679 +I wasn't aware that it utilizes standard math notation + +01:01:33.680 --> 01:01:37.279 +rather than the Polish math notation that we use in ELISP. + +01:01:37.280 --> 01:01:42.839 +Um, that's interesting because it's, it's in the list + +01:01:42.840 --> 01:01:45.279 +family of programming languages. + +01:01:45.280 --> 01:01:54.399 +Yeah. It's like, Hey, I can use, I can actually use my math + +01:01:54.400 --> 01:01:57.879 +knowledge. I can use the order of operations. + +01:01:57.880 --> 01:02:00.879 +Yep. + +01:02:00.880 --> 01:02:07.999 +I just wish that when I was in high school, they started + +01:02:08.000 --> 01:02:10.239 +telling me how to practically use this rather than me + +01:02:10.240 --> 01:02:14.119 +discover it years later when I'm out of it. Yeah. + +01:02:14.120 --> 01:02:27.399 +Well, I probably better move along to attend the other + +01:02:27.400 --> 01:02:32.839 +talks. All right. So it's been great talking to you, Plasma + +01:02:32.840 --> 01:02:35.159 +Strike. Yep, you too. diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt new file mode 100644 index 00000000..9c239169 --- /dev/null +++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt @@ -0,0 +1,59 @@ +WEBVTT + + +00:00:00.000 --> 00:02:20.079 +Introduction + +00:02:20.080 --> 00:04:05.479 +Starting a new writing project + +00:04:05.480 --> 00:04:36.959 +The writing log + +00:04:36.960 --> 00:05:25.309 +Starting the research paper + +00:05:25.310 --> 00:06:11.439 +Outline + +00:06:11.440 --> 00:07:17.457 +Another kind of writing log - accountability + +00:07:17.458 --> 00:07:46.479 +Reducing switching costs + +00:07:46.480 --> 00:09:31.519 +Motivation + +00:09:31.520 --> 00:10:17.294 +Overview of the writing log + +00:10:17.295 --> 00:10:42.667 +LaTeX preamble in opened drawer + +00:10:42.668 --> 00:12:21.399 +Informative header + +00:12:21.400 --> 00:13:28.079 +Four workflows + +00:13:28.080 --> 00:14:56.959 +Project initiation workflow + +00:14:56.960 --> 00:17:05.750 +Daily workflow + +00:17:05.751 --> 00:17:48.884 +Metadata and metacognition + +00:17:48.885 --> 00:18:56.959 +Periodic assessment workflow + +00:18:56.960 --> 00:19:49.639 +Project closeout workflow + +00:19:49.640 --> 00:20:34.519 +Conclusions + +00:20:34.520 --> 00:21:37.720 +Acknowledgements diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt new file mode 100644 index 00000000..d728c78e --- /dev/null +++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt @@ -0,0 +1,894 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:09.999 +Good morning. I'm Blaine Mooers. I'm an associate + +00:00:10.000 --> 00:00:12.399 +professor of biochemistry and physiology at the + +00:00:12.400 --> 00:00:15.079 +University of Oklahoma Health Sciences in Oklahoma City. + +00:00:15.080 --> 00:00:21.639 +I'm going to be talking about the utilization of Org mode to + +00:00:21.640 --> 00:00:26.799 +write a specific kind of log file for thinking about writing + +00:00:26.800 --> 00:00:31.599 +projects, in particular research articles. I have stored a + +00:00:31.600 --> 00:00:35.919 +template for this file on GitHub. You can find it at Mooers + +00:00:35.920 --> 00:00:40.759 +Lab. If you go to the landing page and scroll down to + +00:00:40.760 --> 00:00:47.279 +Emacs-related, you'll find a link to it. + +00:00:47.280 --> 00:00:50.679 +I am a structural biologist. I utilize X-ray + +00:00:50.680 --> 00:00:53.359 +crystallography to determine the structures of proteins + +00:00:53.360 --> 00:00:58.919 +and nucleic acids that are important in human health. Our + +00:00:58.920 --> 00:01:01.879 +workflow is shown across the top. We start out with a + +00:01:01.880 --> 00:01:04.959 +purified material that we crystallize as shown by that + +00:01:04.960 --> 00:01:09.599 +elongated rod-shaped crystal on the left. We will mount + +00:01:09.600 --> 00:01:14.959 +that in a cold stream and collect diffraction data with + +00:01:14.960 --> 00:01:20.399 +X-rays in the instrument to the right. That instrument will + +00:01:20.400 --> 00:01:23.559 +generate an image like the one to the right where you see a + +00:01:23.560 --> 00:01:26.319 +bunch of spots. That's a diffraction pattern from the + +00:01:26.320 --> 00:01:29.799 +crystal. After rotating the crystal for one degree, we'll + +00:01:29.800 --> 00:01:33.079 +rotate the crystal 180 degrees to get a full data set that + +00:01:33.080 --> 00:01:37.359 +we'll process with a computer. This will lead to the + +00:01:37.360 --> 00:01:43.719 +chicken-wire map of electron density shown further to the + +00:01:43.720 --> 00:01:49.999 +right. Then on the far right, we have compared + +00:01:50.000 --> 00:01:54.799 +electrostructures of two drug molecules from two + +00:01:54.800 --> 00:01:59.399 +different structures, overlapped after superimposing + +00:01:59.400 --> 00:02:02.919 +a wild type protein and a mutant protein. We're trying to + +00:02:02.920 --> 00:02:05.959 +analyze how the mutant was preventing one of the drugs from + +00:02:05.960 --> 00:02:12.199 +binding. These kind of analyses we can develop that are + +00:02:12.200 --> 00:02:16.519 +drugs. In this case, the drugs are being used to treat lung + +00:02:16.520 --> 00:02:20.079 +cancer. + +NOTE Starting a new writing project + +00:02:20.080 --> 00:02:24.919 +When I start a new writing project, I will assign it a number. + +00:02:24.920 --> 00:02:29.639 +In this case, I'm developing a review article about the + +00:02:29.640 --> 00:02:32.479 +detection of crystals in images collected with + +00:02:32.480 --> 00:02:33.861 +microscopes like the image in the upper left. + +00:02:33.862 --> 00:02:42.639 +The article is about the utilization of AI to help with that + +00:02:42.640 --> 00:02:49.039 +detection of crystals. I start the name of the folder with + +00:02:49.040 --> 00:02:55.079 +this index number, and I store the manuscript folders in the + +00:02:55.080 --> 00:02:59.159 +top level of my home directory to ease navigation. + +00:02:59.160 --> 00:03:03.839 +Whenever I pop open a terminal window, I just enter 0573, hit + +00:03:03.840 --> 00:03:07.279 +TAB to autocomplete the name of the folder, and I'll be right + +00:03:07.280 --> 00:03:11.599 +in the appropriate folder. I also use that index number to + +00:03:11.600 --> 00:03:14.879 +label the names of the files. I start every project with + +00:03:14.880 --> 00:03:19.519 +three files: a manuscript, the log file that I'll be talking + +00:03:19.520 --> 00:03:22.759 +about today, and an annotated bibliography, which is kind + +00:03:22.760 --> 00:03:25.999 +of like one on steroids. Annotated bibliography for the + +00:03:26.000 --> 00:03:30.759 +21st century, not the 20th century annotated bibliography + +00:03:30.760 --> 00:03:37.239 +you worked on as an undergraduate. + +00:03:37.240 --> 00:03:40.279 +I have developed templates not only for Org Mode, but also + +00:03:40.280 --> 00:03:45.359 +for other markup languages, like R Markdown and LaTeX. I + +00:03:45.360 --> 00:03:49.399 +actually developed this + +00:03:49.400 --> 00:03:54.839 +log file template over a dozen years ago in LaTeX. I also + +00:03:54.840 --> 00:03:58.159 +have developed it for Typst. Typst is independent of LaTeX. + +00:03:58.160 --> 00:04:04.079 +It's inspired by LaTeX, but it's written in Rust, and + +00:04:04.080 --> 00:04:05.479 +it's extremely fast. + +NOTE The writing log + +00:04:05.480 --> 00:04:11.799 +My writing process involves having the writing log at the + +00:04:11.800 --> 00:04:14.479 +center of the process. That's where I began the writing + +00:04:14.480 --> 00:04:19.679 +project. On the right, I have the manuscript and all its + +00:04:19.680 --> 00:04:25.839 +components highlighted in yellow. On the right, + +00:04:25.840 --> 00:04:29.839 +hopefully I said on the right, I have the manuscript with all + +00:04:29.840 --> 00:04:33.199 +its components highlighted in yellow. On the left, I have + +00:04:33.200 --> 00:04:36.959 +the annotated bibliography. + +NOTE Starting the research paper + +00:04:36.960 --> 00:04:42.199 +When I start a research paper, I will do this after I have + +00:04:42.200 --> 00:04:49.639 +built up a strong idea from various sources, and then I'll + +00:04:49.640 --> 00:04:54.919 +sit down and go through a series of steps outlined in the + +00:04:54.920 --> 00:04:59.839 +writing log to develop that central hypothesis into + +00:04:59.840 --> 00:05:03.839 +several paragraphs that are used in the introduction of the + +00:05:03.840 --> 00:05:08.159 +manuscript. The rest of the manuscript is built around that + +00:05:08.160 --> 00:05:11.599 +central hypothesis, so the results section will include + +00:05:11.600 --> 00:05:15.799 +experiments that address the central hypothesis, and it + +00:05:15.800 --> 00:05:19.479 +will exclude experiments that have nothing to do with it. + +00:05:19.480 --> 00:05:22.719 +Likewise, the discussion points address the central + +00:05:22.720 --> 00:05:25.309 +hypothesis. + +NOTE Outline + +00:05:25.310 --> 00:05:27.919 +When I'm done developing that introduction + +00:05:27.920 --> 00:05:33.439 +in, say, three or four hours, I'll have an outline in hand. At + +00:05:33.440 --> 00:05:38.199 +least for the results and discussion section, the outline + +00:05:38.200 --> 00:05:44.199 +will be detailed down to at least a sub-heading level. + +00:05:44.200 --> 00:05:47.239 +I'll move those components over to the manuscript on the + +00:05:47.240 --> 00:05:53.079 +right. As work is done to address that central + +00:05:53.080 --> 00:05:58.119 +hypothesis, the manuscript will be updated. Also as + +00:05:58.120 --> 00:06:01.359 +exploration of the literature continues, new ideas will + +00:06:01.360 --> 00:06:11.439 +flow in to the manuscript through the log file. + +NOTE Another kind of writing log - accountability + +00:06:11.440 --> 00:06:13.519 +You've probably heard of another kind of writing log, which + +00:06:13.520 --> 00:06:16.719 +is more of an accountability tool, a tool you use to hold + +00:06:16.720 --> 00:06:20.599 +yourself accountable in terms of your commitment to work on + +00:06:20.600 --> 00:06:24.716 +your writing projects. + +00:06:24.717 --> 00:06:28.999 +So, this idea of carrying out this + +00:06:29.000 --> 00:06:32.716 +documentation is supported by research done by + +00:06:32.717 --> 00:06:35.838 +Robert Boice. He found that those academics + +00:06:35.839 --> 00:06:39.100 +who record their writing + +00:06:39.101 --> 00:06:42.002 +are four times more productive than those that do not. + +00:06:42.003 --> 00:06:44.119 +Those that actually share their writing with + +00:06:44.120 --> 00:06:47.719 +colleagues are nine times more productive. This is sort of a + +00:06:47.720 --> 00:06:55.479 +case in point. This is a snapshot of a Google sheet of such a + +00:06:55.480 --> 00:07:03.279 +writing log that I was sharing as part of a Google workbook. + +00:07:03.280 --> 00:07:06.959 +I was sharing it with three other colleagues. I had the + +00:07:06.960 --> 00:07:14.319 +possibility of them taking a peek at my Google sheet, and that + +00:07:14.320 --> 00:07:17.457 +possibility I found to be highly motivating. + +NOTE Reducing switching costs + +00:07:17.458 --> 00:07:22.599 +As you can see, on July 24th, 2023, I worked on five different writing + +00:07:22.600 --> 00:07:25.959 +projects. This would not have been possible if it had not + +00:07:25.960 --> 00:07:29.399 +been for having five separate writing logs where I could + +00:07:29.400 --> 00:07:32.759 +figure out where I had started and where I would report the + +00:07:32.760 --> 00:07:36.959 +day's progress before maybe taking a break and then + +00:07:36.960 --> 00:07:41.199 +switching to another writing project. The writing log + +00:07:41.200 --> 00:07:46.479 +helps reduce switching costs between projects. + +NOTE Motivation + +00:07:46.480 --> 00:07:57.959 +My motivation for developing this project-specific log + +00:07:57.960 --> 00:08:02.959 +that I'm presenting here is to support clearer thinking + +00:08:02.960 --> 00:08:06.879 +about the science that I'm trying to do, hopefully leading + +00:08:06.880 --> 00:08:10.399 +to better science, as well as accelerating the completion + +00:08:10.400 --> 00:08:13.439 +of the writing project. The secondary purpose is to enable + +00:08:13.440 --> 00:08:17.719 +working on multiple writing projects in parallel. This is + +00:08:17.720 --> 00:08:21.799 +important to be able to harness your subconscious. If you + +00:08:21.800 --> 00:08:25.919 +work on project A for a few hours in the morning, say early + +00:08:25.920 --> 00:08:28.210 +morning, then late morning you work on project B. + +00:08:28.211 --> 00:08:33.860 +While you're working on project B, + +00:08:33.861 --> 00:08:39.141 +your subconscious is busy working away on project A. + +00:08:39.142 --> 00:08:43.479 +As a result, perhaps the following morning, + +00:08:43.480 --> 00:08:46.279 +when you wake up or while you're taking a shower or + +00:08:46.280 --> 00:08:51.999 +commuting, new ideas will emerge for projects A and B as a + +00:08:52.000 --> 00:08:55.239 +result of these background jobs that you have launched. If + +00:08:55.240 --> 00:08:58.799 +you don't work on project A, then you're not going to get the + +00:08:58.800 --> 00:09:04.319 +benefit the following morning. The side effects of using + +00:09:04.320 --> 00:09:07.439 +this writing log are that it reduces the fear of forgetting + +00:09:07.440 --> 00:09:10.199 +and also reduces the fear of losing momentum. These are two + +00:09:10.200 --> 00:09:14.999 +barriers to attempting to carry out work on multiple + +00:09:15.000 --> 00:09:19.239 +writing projects in a given day. This problem of dealing + +00:09:19.240 --> 00:09:22.719 +with multiple writing projects is one that is not discussed + +00:09:22.720 --> 00:09:26.039 +in books about writing. It's apparently a very difficult + +00:09:26.040 --> 00:09:29.759 +problem. I think my writing log is a successful solution to + +00:09:29.760 --> 00:09:31.519 +that problem. + +NOTE Overview of the writing log + +00:09:31.520 --> 00:09:39.919 +This is an overview of the writing log in Org mode. It has + +00:09:39.920 --> 00:09:42.959 +various components. I don't have time to go through all of + +00:09:42.960 --> 00:09:48.679 +them in detail, but you can see its structure. We get this + +00:09:48.680 --> 00:09:54.319 +summary view when you open up the file. You have this in the + +00:09:54.320 --> 00:10:04.119 +header for a startup command overview. Then I just click + +00:10:04.120 --> 00:10:08.079 +on the heading and hit TAB to see the contents below. So + +00:10:08.080 --> 00:10:11.439 +normally, I'm just going to go straight to the daily log. + +00:10:11.440 --> 00:10:17.294 +In this case, it starts on line 944. + +NOTE LaTeX preamble in opened drawer + +00:10:17.295 --> 00:10:19.255 +I don't have to scroll all the way down to it, + +00:10:19.256 --> 00:10:21.239 +because thanks to the support + +00:10:21.240 --> 00:10:27.319 +for folding of these sections in Org mode, if I open up the + +00:10:27.320 --> 00:10:31.319 +drawer labeled :PREAMBLE:, you can see that I have imported a + +00:10:31.320 --> 00:10:38.879 +number of LaTeX packages to enhance the format of the PDF + +00:10:38.880 --> 00:10:42.667 +file that is upon export. + +NOTE Informative header + +00:10:42.668 --> 00:10:44.319 +I have commands that are listed + +00:10:44.320 --> 00:10:48.999 +below at the bottom for providing a fancy header. This + +00:10:49.000 --> 00:10:54.519 +header has the current date as well as a running title and the + +00:10:54.520 --> 00:10:58.199 +current page number and total number of pages. You can see + +00:10:58.200 --> 00:11:04.199 +in the center the header at the start of page 2. You can see the + +00:11:04.200 --> 00:11:09.399 +bottom of page 1 where the page number is at the bottom of the + +00:11:09.400 --> 00:11:17.719 +page. These headers are very useful if you happen to print + +00:11:17.720 --> 00:11:22.879 +out several log files and their corresponding manuscripts + +00:11:22.880 --> 00:11:25.359 +and take them with you to work on them while traveling. + +00:11:25.360 --> 00:11:29.439 +Invariably, the pages will get intermingled, and you'll have + +00:11:29.440 --> 00:11:33.679 +to sort them out when you return home. These headers ease + +00:11:33.680 --> 00:11:39.799 +that problem. You can see that the table of contents that begin + +00:11:39.800 --> 00:11:44.759 +the writing log is hyperlinked to various sections. In + +00:11:44.760 --> 00:11:48.519 +addition to the table of contents, the log file, of course, + +00:11:48.520 --> 00:11:51.559 +will support various graphical objects like images, + +00:11:51.560 --> 00:11:56.039 +tables, equations, code listings. I also have added + +00:11:56.040 --> 00:12:00.279 +LaTeX support for an index, a list of acronyms, glossary, + +00:12:00.280 --> 00:12:04.999 +mathematical notation, and literature cited. It takes no + +00:12:05.000 --> 00:12:10.039 +effort to add these in, so why not have them available? These + +00:12:10.040 --> 00:12:12.919 +features are also available in the annotated bibliography + +00:12:12.920 --> 00:12:16.359 +template, which helps support making that annotated + +00:12:16.360 --> 00:12:21.399 +bibliography far more relevant and interesting. + +NOTE Four workflows + +00:12:21.400 --> 00:12:28.079 +This shows a list of four workflows that I'm going to + +00:12:28.080 --> 00:12:32.599 +discuss, since I don't have time to go through each + +00:12:32.600 --> 00:12:36.279 +of the items. Obviously, project initiation + +00:12:36.280 --> 00:12:39.719 +occurs on day one. If I have a three- or four-hour block of time, + +00:12:39.720 --> 00:12:45.759 +that's sufficient to finish project initiation. Then + +00:12:45.760 --> 00:12:49.359 +the daily workflow is obviously what occurs every day to + +00:12:49.360 --> 00:12:54.239 +move the project forward. The periodic assessments are + +00:12:54.240 --> 00:12:57.079 +done on a monthly or weekly basis, generally on the weekly + +00:12:57.080 --> 00:13:02.559 +basis as the submission deadline approaches. Then + +00:13:02.560 --> 00:13:05.639 +after you have received the galley proofs and sent them + +00:13:05.640 --> 00:13:09.839 +back, there are a few chores that need to be done in terms of + +00:13:09.840 --> 00:13:13.959 +project closeout. This is an example of a protocol + +00:13:13.960 --> 00:13:18.519 +that could be followed to do that, and an example of the kinds + +00:13:18.520 --> 00:13:21.799 +of more or less appendix material that could be included in + +00:13:21.800 --> 00:13:28.079 +the writing log to help get these things done. + +NOTE Project initiation workflow + +00:13:28.080 --> 00:13:31.679 +This shows a project initiation section of the workflow. + +00:13:31.680 --> 00:13:39.119 +I go through a series of sections that include advice + +00:13:39.120 --> 00:13:45.719 +about what I need to do to complete each section. The + +00:13:45.720 --> 00:13:50.759 +rationale section asks me like, why are you doing this? Why + +00:13:50.760 --> 00:13:54.319 +should you do this? Why not somebody else? Those sort of + +00:13:54.320 --> 00:14:01.287 +fundamental questions. Then I have + +00:14:01.288 --> 00:14:05.329 +a drawer labeled guidance that I have, + +00:14:05.330 --> 00:14:07.190 +and that headline immediately above, + +00:14:07.191 --> 00:14:11.839 +I have this :noexport: keyword so that guidance is not + +00:14:11.840 --> 00:14:17.039 +written out upon export to the PDF unless you want it. If you + +00:14:17.040 --> 00:14:20.439 +want it, you have to remove the :noexport: tag. Then I have the + +00:14:20.440 --> 00:14:25.199 +response to these questions--in this case, a list of + +00:14:25.200 --> 00:14:29.199 +journals that I'm targeting for submission of this review + +00:14:29.200 --> 00:14:32.959 +article. I have a plan B journal picked out in case the + +00:14:32.960 --> 00:14:43.399 +editors decide to reject it. Having a plan B journal + +00:14:43.400 --> 00:14:47.999 +picked out is a decision you can make at the time of + +00:14:48.000 --> 00:14:55.959 +submission, so that you're prepared to move quickly if the + +00:14:55.960 --> 00:14:56.959 +article is rejected. + +NOTE Daily workflow + +00:14:56.960 --> 00:15:04.639 +This shows the daily workflow section. Each entry has a + +00:15:04.640 --> 00:15:09.439 +date. I sometimes annotate the dated entries with a small + +00:15:09.440 --> 00:15:14.479 +phrase to highlight certain events. Within a given entry, + +00:15:14.480 --> 00:15:17.319 +I'll have a list of accomplishments. That's sort of the bare + +00:15:17.320 --> 00:15:20.719 +minimum of what I include. This just demonstrates how + +00:15:20.720 --> 00:15:25.639 +relatively brief these entries are. Just whatever + +00:15:25.640 --> 00:15:30.599 +distinct accomplishments were made are listed. + +00:15:30.600 --> 00:15:37.239 +Sometimes I'll include the goals for that day. + +00:15:37.240 --> 00:15:40.599 +I'll always include the correspondence related to the + +00:15:40.600 --> 00:15:44.439 +project. I'll copy and paste an email into a quote + +00:15:44.440 --> 00:15:49.719 +environment from LaTeX. + +00:15:49.720 --> 00:15:54.319 +I have a snippet template for auto-generating these + +00:15:54.320 --> 00:15:59.919 +entries. It will insert the date, for example, in the + +00:15:59.920 --> 00:16:04.239 +subheading. Then below that, I'll have the next action, + +00:16:04.240 --> 00:16:06.919 +following David Allen's Getting Things Done approach + +00:16:06.920 --> 00:16:08.550 +where you identify the next thing that needs to be done. + +00:16:08.551 --> 00:16:14.759 +That may have come from a to-do list that's indicated below that. + +00:16:14.760 --> 00:16:19.039 +Beyond that, there's sections for some writing + +00:16:19.040 --> 00:16:23.919 +accountability, and then a reminder to go about updating + +00:16:23.920 --> 00:16:28.919 +your Zettelkasten and Org-roam if you have come across any + +00:16:28.920 --> 00:16:32.359 +nuggets of knowledge you want to add to your Org-roam. Then + +00:16:32.360 --> 00:16:38.999 +below that, there's another section for the storage of + +00:16:39.000 --> 00:16:42.919 +additions to be made to the manuscript. Maybe they're not + +00:16:42.920 --> 00:16:47.599 +ready to go yet, so this provides a spot for them to be + +00:16:47.600 --> 00:16:51.599 +incubated, a sandbox, if you will, where you have room to + +00:16:51.600 --> 00:16:53.239 +develop them further before they're ready to be + +00:16:53.240 --> 00:16:58.399 +transferred over to the main manuscript. I also have a + +00:16:58.400 --> 00:17:04.239 +section there too for the incubation of new ideas for new + +00:17:04.240 --> 00:17:05.750 +projects. + +NOTE Metadata and metacognition + +00:17:05.751 --> 00:17:09.639 +So this kind of metadata and metacognition about + +00:17:09.640 --> 00:17:13.759 +the project are often stored in commented out regions or in + +00:17:13.760 --> 00:17:18.039 +comments, like MS Word documents. These are often stripped + +00:17:18.040 --> 00:17:21.839 +out in the rush to submit the manuscript, and they're quite + +00:17:21.840 --> 00:17:26.479 +often lost. Yet they can be invaluable, not only for the + +00:17:26.480 --> 00:17:30.239 +preparation of future manuscripts, but they can be very + +00:17:30.240 --> 00:17:38.279 +invaluable for responding to critiques by reviewers. This + +00:17:38.280 --> 00:17:42.839 +writing log provides ample room for the safe storage of such + +00:17:42.840 --> 00:17:48.884 +information, such knowledge. + +NOTE Periodic assessment workflow + +00:17:48.885 --> 00:17:53.666 +Then periodically, every several months or weeks, + +00:17:53.667 --> 00:17:55.159 +we'll carry out an assessment of + +00:17:55.160 --> 00:18:02.119 +the project. We go through a checklist for the completion of + +00:18:02.120 --> 00:18:06.319 +the manuscript. We also have a timeline with milestones + +00:18:06.320 --> 00:18:07.439 +identified. + +00:18:07.440 --> 00:18:13.759 +Of course, Org has these wonderful tables that are very + +00:18:13.760 --> 00:18:18.879 +dynamic. If you need a wider column to accommodate a new + +00:18:18.880 --> 00:18:23.359 +entry, it self-adjusts. These self-adjusting tables + +00:18:23.360 --> 00:18:29.639 +are one reason why I was attracted to Org mode, because coming + +00:18:29.640 --> 00:18:33.039 +from LaTex, where trying to make changes to + +00:18:33.040 --> 00:18:36.999 +tables is quite difficult. Below that, there's a + +00:18:37.000 --> 00:18:39.639 +section to make assessments. There are four questions that + +00:18:39.640 --> 00:18:43.839 +I address about the status of the project. One really good + +00:18:43.840 --> 00:18:46.559 +question is, why can't you submit this project today? + +00:18:46.560 --> 00:18:49.350 +What's holding it back? + +00:18:49.351 --> 00:18:55.214 +Other such existential questions + +00:18:55.215 --> 00:18:56.959 +are important to ask from time to time. + +NOTE Project closeout workflow + +00:18:56.960 --> 00:19:03.633 +Then finally, the project closeout workflow. + +00:19:03.634 --> 00:19:06.477 +So this is in the form of a checklist. + +00:19:06.478 --> 00:19:09.079 +This checklist in the main template + +00:19:09.080 --> 00:19:13.479 +is already included, but you could include it from an + +00:19:13.480 --> 00:19:19.959 +external file. Of course, that checklist will be only in + +00:19:19.960 --> 00:19:22.799 +the PDF when it's included in this fashion. It won't be in the + +00:19:22.800 --> 00:19:27.599 +Org file, but you can view that checklist by clicking on its + +00:19:27.600 --> 00:19:32.719 +file path. It serves as a link that will open up in an Org + +00:19:32.720 --> 00:19:40.119 +buffer. The advantage of taking a modular approach to this + +00:19:40.120 --> 00:19:42.999 +sort of appendix material is that you can update your + +00:19:43.000 --> 00:19:46.399 +protocols and the updated protocols will be available to + +00:19:46.400 --> 00:19:49.639 +all log files across all projects. + +NOTE Conclusions + +00:19:49.640 --> 00:19:56.319 +In conclusion, this project-specific log file helps + +00:19:56.320 --> 00:20:02.759 +narrow the focus on one project. It provides space to harbor + +00:20:02.760 --> 00:20:08.679 +the thinking about that project, and it helps support the + +00:20:08.680 --> 00:20:13.999 +project initiation and sustain its momentum and + +00:20:14.000 --> 00:20:21.799 +facilitate its completion. The side effects of using this + +00:20:21.800 --> 00:20:27.399 +log file for one project is that it dampens the fear of + +00:20:27.400 --> 00:20:31.439 +forgetting, the fear of losing momentum, which inhibits us + +00:20:31.440 --> 00:20:34.519 +working on more than one project in a given day. + +NOTE Acknowledgements + +00:20:34.520 --> 00:20:42.559 +I would like to thank my friends at the Oklahoma Data Science + +00:20:42.560 --> 00:20:47.799 +Workshop. We hold this workshop every third Friday at noon + +00:20:47.800 --> 00:20:53.759 +central time by Zoom. It's open to participation by people + +00:20:53.760 --> 00:20:56.879 +from all around the world. Send me an email if you are + +00:20:56.880 --> 00:21:01.519 +interested in the applications of computing to scientific + +00:21:01.520 --> 00:21:06.799 +research. I participate occasionally in these Emacs + +00:21:06.800 --> 00:21:11.359 +meetups, and I have shared this writing blog with members of + +00:21:11.360 --> 00:21:18.719 +the UK Research Software Engineer group through the Emacs + +00:21:18.720 --> 00:21:24.279 +Research Slack channel. My efforts are supported by + +00:21:24.280 --> 00:21:28.799 +funding from these grants. I'll be happy to take any + +00:21:28.800 --> 00:21:37.720 +questions. diff --git a/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt b/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt new file mode 100644 index 00000000..bad03237 --- /dev/null +++ b/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt @@ -0,0 +1,1198 @@ +WEBVTT captioned by sachac + +00:00:00.000 --> 00:00:13.359 +Hello, I'm Danny McClanahan. This is EmacsConf 2024. And + +00:00:13.360 --> 00:00:17.159 +this presentation is ostensibly about Emacs Regex + +00:00:17.160 --> 00:00:22.639 +compilation. But it'll lead a lot more in future + +00:00:22.640 --> 00:00:30.879 +directions. Thanks for coming on this journey with me. + +00:00:30.880 --> 00:00:36.719 +This presentation is 50 slides, 50 footnotes, and that's + +00:00:36.720 --> 00:00:40.679 +intended for it to be a resource later on for your perusal. We + +00:00:40.680 --> 00:00:44.199 +are unfortunately not going to be able to go into all of it, + +00:00:44.200 --> 00:00:49.439 +but I will try to be within 20 minutes so we can make it + +00:00:49.440 --> 00:00:56.199 +throughout Q&A. This is the structure of the talk. + +00:00:56.200 --> 00:01:03.519 +But enough about me. Who are you? And why are you here? + +00:01:03.520 --> 00:01:09.479 +I'm Danny McClanahan. + +00:01:09.480 --> 00:01:13.439 +My experience is a lot in build tools, especially in the + +00:01:13.440 --> 00:01:19.399 +package managers. That started because I realized I was + +00:01:19.400 --> 00:01:23.319 +wasting a lot of time. Then I didn't like that. I + +00:01:23.320 --> 00:01:29.439 +started wasting a lot of time, trying to avoid wasting time. + +00:01:29.440 --> 00:01:35.479 +Then I ended up... going so far around that I ended up + +00:01:35.480 --> 00:01:40.319 +stopping other people from wasting their own time, in this + +00:01:40.320 --> 00:01:44.359 +case, regarding failing builds. But this is a kind of + +00:01:44.360 --> 00:01:47.479 +pattern that you'll see. I'm talking a lot about patterns in + +00:01:47.480 --> 00:01:52.399 +this presentation. Parsing in text is another one of + +00:01:52.400 --> 00:01:57.479 +those tendencies that I have. Why am I here? I've got a lot + +00:01:57.480 --> 00:02:00.639 +of feelings about text. For the next 20 minutes, I'm + +00:02:00.640 --> 00:02:06.079 +making it your problem. + +00:02:06.080 --> 00:02:09.639 +First off, a huge shout out to Emacs Devel and the Emacs + +00:02:09.640 --> 00:02:12.919 +community in general. I spent a lot of time learning about + +00:02:12.920 --> 00:02:15.559 +what I'm about to talk about. I was definitely super + +00:02:15.560 --> 00:02:19.439 +confused at first. Then when I became less confused and I + +00:02:19.440 --> 00:02:23.919 +decided I was going to look at the regular expressions of the + +00:02:23.920 --> 00:02:28.039 +Regex engine, I was like, oh, it's old C code. It's + +00:02:28.040 --> 00:02:33.559 +Emacs. We can just use modern techniques. Turns out that's + +00:02:33.560 --> 00:02:37.839 +wrong for kind of two reasons. One, because using modern + +00:02:37.840 --> 00:02:41.479 +techniques or other engines don't necessarily do what + +00:02:41.480 --> 00:02:44.799 +Emacs regex engine currently does. Then secondarily, + +00:02:44.800 --> 00:02:48.719 +that's not actually as interesting as the other kind of + +00:02:48.720 --> 00:02:52.359 +larger goals that emacs-devel discussed. Thank you, Eli + +00:02:52.360 --> 00:02:56.279 +Zaretskii, so, so much, especially Pip Cet and everyone else + +00:02:56.280 --> 00:02:59.319 +as well--I believe--Pip Cet, I hope I'm pronouncing that + +00:02:59.320 --> 00:03:01.799 +correctly. Thank you so much. I'll be shouting you out + +00:03:01.800 --> 00:03:04.319 +later as well. Then these larger goals ended up + +00:03:04.320 --> 00:03:07.199 +overlapping a lot with my own research interests. And + +00:03:07.200 --> 00:03:09.879 +that's very exciting. I'm hoping it's exciting for you + +00:03:09.880 --> 00:03:14.079 +too. What is a regular expression? And when and how does + +00:03:14.080 --> 00:03:16.559 +implementation match formal theory? So what does formal + +00:03:16.560 --> 00:03:24.079 +theory mean? And we'll talk about that. + +00:03:24.080 --> 00:03:27.519 +What is a regular expression? So I might ask you this + +00:03:27.520 --> 00:03:30.799 +question, and you might give an answer. Then I might ask + +00:03:30.800 --> 00:03:33.519 +someone else, and they might have an answer. Then I might + +00:03:33.520 --> 00:03:38.039 +ask myself, and I might try to think of an answer. Our + +00:03:38.040 --> 00:03:41.799 +answers would, you know, see, the thing is, they'd all be + +00:03:41.800 --> 00:03:45.359 +correct, but they'd probably be slightly different, and + +00:03:45.360 --> 00:03:50.319 +they'd be different in kind of important ways. I'm + +00:03:50.320 --> 00:03:55.039 +using formal theory to kind of describe what unifies these + +00:03:55.040 --> 00:04:00.119 +interpretations and what causes this sort of divergence, + +00:04:00.120 --> 00:04:05.439 +both over time and then across code bases. I'm kind of + +00:04:05.440 --> 00:04:09.319 +putting a flag in the ground here and saying formal theory is + +00:04:09.320 --> 00:04:12.999 +actually a really, really negative influence, I think, but + +00:04:13.000 --> 00:04:15.999 +it can be better. That's what I'm going to talk about in + +00:04:16.000 --> 00:04:19.519 +this talk, in this presentation. We might ask, how did + +00:04:19.520 --> 00:04:26.679 +this happen? and we might try to find a start state. We + +00:04:26.680 --> 00:04:30.519 +might put that place at the theories of formal languages + +00:04:30.520 --> 00:04:34.679 +that kind of arose, especially post Turing and post + +00:04:34.680 --> 00:04:37.519 +Chomsky. Especially there was this really, really + +00:04:37.520 --> 00:04:40.119 +interesting and powerful relationship with formal + +00:04:40.120 --> 00:04:43.959 +languages between representation and computation. And + +00:04:43.960 --> 00:04:48.599 +then on top of that, we have regex as this really powerful + +00:04:48.600 --> 00:04:52.159 +union of theory and practice And then, like I mentioned, + +00:04:52.160 --> 00:04:55.799 +this is kind of divergence that kind of occurs. This + +00:04:55.800 --> 00:04:58.079 +divergence happens for a good reason. This happens because + +00:04:58.080 --> 00:05:01.999 +people were adding implementations and people adding + +00:05:02.000 --> 00:05:04.639 +features to implementations. While the people adding + +00:05:04.640 --> 00:05:06.679 +these features were often academics, they were + +00:05:06.680 --> 00:05:09.199 +industries, people that were hobbyists, they were + +00:05:09.200 --> 00:05:11.999 +interested in building practical tools. This is a good + +00:05:12.000 --> 00:05:14.879 +thing. This is still a good thing, even though it moves a + +00:05:14.880 --> 00:05:18.199 +little bit away from formal theory. But we start seeing some + +00:05:18.200 --> 00:05:22.639 +cracks developing, and we'll go into that in a second. We're + +00:05:22.640 --> 00:05:27.519 +just going to kind of electric slide into the 1980s here, and + +00:05:27.520 --> 00:05:31.879 +we're going to be confronted with two occurrences very + +00:05:31.880 --> 00:05:35.639 +similarly. We might call it simultaneous discovery. In + +00:05:35.640 --> 00:05:38.559 +1983, you have Michael Jackson demonstrating the + +00:05:38.560 --> 00:05:41.999 +moonwalk. Three years later, we have backtracking + +00:05:42.000 --> 00:05:44.999 +developed to stimulate EGREP-style regular expressions. + +00:05:45.000 --> 00:05:48.599 +These would both be incredibly influential in their own + +00:05:48.600 --> 00:05:54.039 +kind of branching paths. Here's where the gloves come + +00:05:54.040 --> 00:06:00.759 +off. Formal theory, I claim, remains largely concerned + +00:06:00.760 --> 00:06:03.359 +with incremental improvements to artificial benchmarks, + +00:06:03.360 --> 00:06:07.279 +and much less with expanding models to cover actual user + +00:06:07.280 --> 00:06:11.799 +needs. This isn't just about, oh, if you listened to + +00:06:11.800 --> 00:06:15.999 +users, that you'd be a nicer person, you'd be a better + +00:06:16.000 --> 00:06:19.359 +engineer. What I'm actually saying is that they're missing + +00:06:19.360 --> 00:06:23.919 +out. When you don't listen to applications, you miss out on a + +00:06:23.920 --> 00:06:26.639 +lot of fantastic opportunities for novel theory. So + +00:06:26.640 --> 00:06:30.839 +this is, again, my complaint with formal theory as it + +00:06:30.840 --> 00:06:34.599 +stands. But we're gonna do better. Before we get better, + +00:06:34.600 --> 00:06:36.959 +we're gonna get, a little bit worse for a bit. We're going to + +00:06:36.960 --> 00:06:40.359 +actually get a little bit worse is better. What I mean by + +00:06:40.360 --> 00:06:43.239 +that is, by the 1990s, we start looking into these + +00:06:43.240 --> 00:06:46.479 +non-backtracking engines. This is a bit of a reaction to + +00:06:46.480 --> 00:06:50.399 +backtracking. The current ones include RE2, + +00:06:50.400 --> 00:06:53.919 +hyperscan, and the rust regex library. These are all + +00:06:53.920 --> 00:06:56.439 +great. I'll talk about them later as well. They make use + +00:06:56.440 --> 00:06:58.719 +of these. They kind of call back to the earlier formal + +00:06:58.720 --> 00:07:01.479 +theory. They have linear runtimes for well-specified + +00:07:01.480 --> 00:07:02.519 +search tasks. + +00:07:02.520 --> 00:07:08.079 +What happens if that doesn't fit your needs? We're going to + +00:07:08.080 --> 00:07:11.479 +talk about that. We're going to table that for a second, + +00:07:11.480 --> 00:07:15.319 +and we're going to focus more on Emacs, the subject of this + +00:07:15.320 --> 00:07:19.359 +conference. What are regex used for? And in this + +00:07:19.360 --> 00:07:22.439 +particular case, they're used for lots of things, with + +00:07:22.440 --> 00:07:25.199 +practically, and I think they should be. But more + +00:07:25.200 --> 00:07:29.559 +specifically, how do Emacs users use them? And I'm going to + +00:07:29.560 --> 00:07:32.679 +focus in on this text as input and output. I'll be kind of + +00:07:32.680 --> 00:07:38.959 +elaborating on this analogy as we continue. Why is text + +00:07:38.960 --> 00:07:43.399 +powerful? Text as I/O. The reason text programming + +00:07:43.400 --> 00:07:45.759 +languages and not just programming languages, but + +00:07:45.760 --> 00:07:49.159 +languages themselves, the reason why they're successful + +00:07:49.160 --> 00:07:52.279 +and why they propagate, I claim, is because text is both + +00:07:52.280 --> 00:07:56.439 +input readable and output writable. What this means + +00:07:56.440 --> 00:08:01.199 +is that if you receive something in text, you can read it, And + +00:08:01.200 --> 00:08:04.239 +then you can also write it, you can modify it, and you can + +00:08:04.240 --> 00:08:06.959 +produce a new version of it. You're on a kind of level + +00:08:06.960 --> 00:08:10.959 +playing field. That's not always the case, though. You + +00:08:10.960 --> 00:08:15.959 +recall that I've worked a lot with build systems and package + +00:08:15.960 --> 00:08:20.999 +managers. There's a discussion that goes by the name of + +00:08:21.000 --> 00:08:25.319 +software supply chain security. I think it's a massive + +00:08:25.320 --> 00:08:29.079 +joke. The reason why is because people largely raise it + +00:08:29.080 --> 00:08:34.279 +to explain why their for-profit company with their + +00:08:34.280 --> 00:08:38.079 +for-profit product is going to solve the problem for you, as + +00:08:38.080 --> 00:08:41.959 +opposed to the commons of open source. If you are unable to + +00:08:41.960 --> 00:08:44.999 +modify or deploy your code without employing an opaque + +00:08:45.000 --> 00:08:48.599 +external system, I think, then you have a hidden + +00:08:48.600 --> 00:08:53.879 +dependency. you don't remove a dependency, you just, by, + +00:08:53.880 --> 00:08:59.239 +for example, paying into a for-profit product or using a + +00:08:59.240 --> 00:09:01.519 +closed-off supply chain, you end up just having a hidden + +00:09:01.520 --> 00:09:04.719 +dependency, you end up just displacing that. This can + +00:09:04.720 --> 00:09:07.639 +actually exert arbitrary control over your programming + +00:09:07.640 --> 00:09:11.279 +output and potentially even your thoughts. This is really + +00:09:11.280 --> 00:09:15.839 +important. I'm going to dive in a little bit deeper and I'm + +00:09:15.840 --> 00:09:18.999 +going to overload the term locality here. I'm going to + +00:09:19.000 --> 00:09:22.239 +say, if you cannot reproduce a system locally, it becomes an + +00:09:22.240 --> 00:09:24.999 +opaque external system. I'm going to give examples + +00:09:25.000 --> 00:09:27.479 +here, and these are going to be a bit of a hot take. First + +00:09:27.480 --> 00:09:30.519 +off, GUI IDEs. I think we might, well, some of us might agree + +00:09:30.520 --> 00:09:34.519 +with that here. I say development environments that only + +00:09:34.520 --> 00:09:38.119 +allow you to use a graphical interface, do not expose + +00:09:38.120 --> 00:09:42.799 +interaction with text, are explicitly trying to kind of + +00:09:42.800 --> 00:09:46.239 +place you on a separate kind of plane where you're not an + +00:09:46.240 --> 00:09:50.439 +equal contributor to the people who make the development + +00:09:50.440 --> 00:09:53.079 +environment, make the development kind of frameworks + +00:09:53.080 --> 00:09:57.399 +here. We'll go one further. Cloud services are precisely, + +00:09:57.400 --> 00:10:00.039 +you know, they're useful for things that, you know, that + +00:10:00.040 --> 00:10:04.399 +require large domain computation, but, you know, Twitter, + +00:10:04.400 --> 00:10:08.679 +for example, didn't actually ever use any cloud services, + +00:10:08.680 --> 00:10:12.199 +external ones, because it was really important for them to + +00:10:12.200 --> 00:10:14.999 +actually own their own hardware, their own computation, + +00:10:15.000 --> 00:10:20.199 +their own thinking. Cloud services are a way to ensure + +00:10:20.200 --> 00:10:24.919 +that you're unable to reproduce a system without paying an + +00:10:24.920 --> 00:10:28.039 +amount per month, an amount per day, an amount per second, an + +00:10:28.040 --> 00:10:32.439 +amount per cycle to an external entity. I'm just going to + +00:10:32.440 --> 00:10:35.559 +conclude this with, I'd say, the argumentum ad absurdum, + +00:10:35.560 --> 00:10:39.239 +here, where large language models are all of these at once. + +00:10:39.240 --> 00:10:42.879 +They are a cloud service, specifically, and this is what + +00:10:42.880 --> 00:10:48.439 +makes them very evil, to make it so that, similar to GUI IDEs, + +00:10:48.440 --> 00:10:52.919 +so that text itself loses that ability to be both readable + +00:10:52.920 --> 00:10:56.199 +and writable. Instead, text is both unreadable, because + +00:10:56.200 --> 00:10:59.519 +it's produced by a machine, and then also unwritable, + +00:10:59.520 --> 00:11:02.999 +because you're subservient and subjugated to the machine, + +00:11:03.000 --> 00:11:05.359 +to the large language model to produce the code in the first + +00:11:05.360 --> 00:11:08.919 +place. You lose this input, output, readable, writable + +00:11:08.920 --> 00:11:13.359 +behavior that I claim text has specifically. To + +00:11:13.360 --> 00:11:19.439 +underline this, what is text? Text is local. Finally, + +00:11:19.440 --> 00:11:23.639 +we're at the subject of this conference. Emacs, I have + +00:11:23.640 --> 00:11:27.479 +double hearts with text. I start off the slide saying Emacs + +00:11:27.480 --> 00:11:31.519 +is a text editor. I think that's a good start. Which + +00:11:31.520 --> 00:11:34.319 +implements much of its own logic and user interface via + +00:11:34.320 --> 00:11:38.399 +text. What this means is that, you know, I say without + +00:11:38.400 --> 00:11:42.639 +trying, Emacs tries very hard, but without trying so hard, + +00:11:42.640 --> 00:11:47.639 +Emacs, is imbued with all of the capabilities that text has + +00:11:47.640 --> 00:11:51.319 +specifically. When you use text like Emacs does, and + +00:11:51.320 --> 00:11:55.519 +particularly you then start offering mechanisms to query, + +00:11:55.520 --> 00:11:59.999 +to transform, and to generally metaprogram text itself, + +00:12:00.000 --> 00:12:03.319 +you don't just have the ability to edit code in new ways. And + +00:12:03.320 --> 00:12:06.999 +this is something that I think is often lost, maybe not by + +00:12:07.000 --> 00:12:11.239 +participants of this conference, you particularly start + +00:12:11.240 --> 00:12:14.319 +being able to not only just edit code differently, but to + +00:12:14.320 --> 00:12:16.599 +change the way that you think about code and actually to + +00:12:16.600 --> 00:12:20.239 +expand your range of thought, the range of actions that you + +00:12:20.240 --> 00:12:22.719 +can perform. You can actually start then editing at the + +00:12:22.720 --> 00:12:25.799 +speed of thought. This is where especially Regex kind of + +00:12:25.800 --> 00:12:30.319 +comes into play. Finally, we get to the subject of the + +00:12:30.320 --> 00:12:33.599 +title of this talk. I'm about to disappoint a lot of + +00:12:33.600 --> 00:12:38.759 +people. I claim for good reason. Unfortunately, it's a + +00:12:38.760 --> 00:12:41.599 +very brief walkthrough, but I'm going to go over what the + +00:12:41.600 --> 00:12:43.799 +current Emacs Redix engine is. This is going to give us + +00:12:43.800 --> 00:12:48.119 +enough context for the next section on future directions. + +00:12:48.120 --> 00:12:51.799 +Quickly, it's a backtracking engine over a multi-byte + +00:12:51.800 --> 00:12:53.919 +code point. I'll define what that means. It's in + +00:12:53.920 --> 00:12:58.439 +regex-emacs.c. It's invoked in two ways, which you'll see + +00:12:58.440 --> 00:13:01.759 +is actually the same way, over a single contiguous string + +00:13:01.760 --> 00:13:05.359 +input. This is a Lisp string that you pass in. or over the + +00:13:05.360 --> 00:13:07.039 +two halves of the gap buffer. This is when you match + +00:13:07.040 --> 00:13:11.879 +against a buffer text. We'll go into that a little bit + +00:13:11.880 --> 00:13:13.919 +more, but this is one of the really actually interesting and + +00:13:13.920 --> 00:13:17.839 +specific things about Emacs Regex Engine as it stands. So + +00:13:17.840 --> 00:13:21.559 +very, very quickly, this is the data layout. This is just, if + +00:13:21.560 --> 00:13:24.879 +you're interested, this is where the code lies. So + +00:13:24.880 --> 00:13:30.159 +regex-emacs.h has re-pattern buffer, which is a struct + +00:13:30.160 --> 00:13:34.239 +Actually, you know, I love, by the way, I love the Emacs C + +00:13:34.240 --> 00:13:37.359 +source code. It's so nice to read. It made all this so, so + +00:13:37.360 --> 00:13:41.119 +easy. I really appreciated it. In this particular case, + +00:13:41.120 --> 00:13:44.039 +I'm just going to focus on re-pattern buffer actually has + +00:13:44.040 --> 00:13:47.999 +the compiler. It's a C struct. It has every single thing + +00:13:48.000 --> 00:13:52.559 +that is needed to execute the regular expression against a + +00:13:52.560 --> 00:13:56.319 +string input or against a buffer input. This buffer, + +00:13:56.320 --> 00:13:59.839 +It's not an Emacs buffer. It refers to just the instruction + +00:13:59.840 --> 00:14:04.039 +table and the match loop. Again, this is very, very + +00:14:04.040 --> 00:14:07.839 +brief, but I want to specifically focus on the first part. So + +00:14:07.840 --> 00:14:11.879 +this is this inner matching loop, and there's a prologue, + +00:14:11.880 --> 00:14:15.679 +and then there's a loop body, and there's an epilogue. And + +00:14:15.680 --> 00:14:18.279 +the prologue is the really, really interesting part. I say + +00:14:18.280 --> 00:14:22.839 +extract current and next char. What Emacs does here, it + +00:14:22.840 --> 00:14:27.159 +doesn't just reach for the next byte. It actually will + +00:14:27.160 --> 00:14:31.879 +perform lazily in some sense, this variable integer size + +00:14:31.880 --> 00:14:36.039 +VAR decoding for multi-byte, and it'll actually then + +00:14:36.040 --> 00:14:43.959 +decode the next one to four bytes. Up to 32 bits at once, and + +00:14:43.960 --> 00:14:46.799 +then it'll actually go into the loop. We'll talk about the + +00:14:46.800 --> 00:14:52.519 +implications of that later. Next, in the body of the loop, we + +00:14:52.520 --> 00:14:54.239 +read the instruction from the instruction pointer, which + +00:14:54.240 --> 00:14:57.319 +is, again, in that buffer field. Then we have this big + +00:14:57.320 --> 00:14:59.479 +switch statement, which is actually, love a big switch + +00:14:59.480 --> 00:15:02.079 +statement, super easy to read, super easy to understand + +00:15:02.080 --> 00:15:05.399 +kind of what's occurring. Then that's the loop body. And + +00:15:05.400 --> 00:15:08.279 +then at the end of it, we either increment the instruction + +00:15:08.280 --> 00:15:11.119 +pointer if it was matching a single character or something + +00:15:11.120 --> 00:15:14.839 +along those lines, or if it was a jump, we don't do that. A + +00:15:14.840 --> 00:15:18.199 +jump, however, it's not referring to a jump in the sense of a + +00:15:18.200 --> 00:15:22.519 +go-to, but a jump that's elsewhere within that table, that + +00:15:22.520 --> 00:15:25.839 +buffer field. If you've included a capture, we write + +00:15:25.840 --> 00:15:29.479 +that end position there. Of course, well, as you may + +00:15:29.480 --> 00:15:34.439 +recall, the zeroth capture is, of course, the entire match + +00:15:34.440 --> 00:15:36.559 +string. If the capture is zero, then we know we've + +00:15:36.560 --> 00:15:39.839 +actually completed that match. That's really great. + +00:15:39.840 --> 00:15:43.599 +I would love to receive Q&A about this as well. I've spent a + +00:15:43.600 --> 00:15:46.719 +lot of time kind of learning and understanding it. But it's + +00:15:46.720 --> 00:15:49.879 +really interesting that this can be described in a single + +00:15:49.880 --> 00:15:52.159 +slide because it's really simple. That simplicity is + +00:15:52.160 --> 00:15:54.639 +actually a really powerful thing. I'll mention that in + +00:15:54.640 --> 00:15:58.759 +the next section. I say, is that all? And I apologize for + +00:15:58.760 --> 00:16:02.239 +not doing so. But please, please ask questions in Q&A or + +00:16:02.240 --> 00:16:04.999 +message me about this, because I think it's really, really, + +00:16:05.000 --> 00:16:07.079 +again, interesting. Again, I find the code relatively + +00:16:07.080 --> 00:16:11.999 +easy to read. Now, here's, I think this is actually the + +00:16:12.000 --> 00:16:15.519 +point of the talk. The rest of it was, you know, I think just me + +00:16:15.520 --> 00:16:18.839 +posturing. This is the really, really interesting part. + +00:16:18.840 --> 00:16:22.039 +This is the ways that we can improve, well, not just we can + +00:16:22.040 --> 00:16:25.839 +improve stuff in Emacs, but why those are the right things to + +00:16:25.840 --> 00:16:30.279 +improve. Then also how that can be a model for even things + +00:16:30.280 --> 00:16:35.079 +outside of Emacs. This is gonna be a lot of text. I'm not + +00:16:35.080 --> 00:16:38.879 +gonna go through all of it. This is the one thing that I tried. + +00:16:38.880 --> 00:16:42.239 +This is the thing that I thought would be a slam dunk, easy + +00:16:42.240 --> 00:16:47.439 +solution. My initial thought process was, well, We tried + +00:16:47.440 --> 00:16:52.919 +very hard to do an LRU cache here. It works. It's actually + +00:16:52.920 --> 00:16:57.399 +very effective. However, though, we don't actually give + +00:16:57.400 --> 00:17:00.479 +the user, the list programmer, the ability to then say, I + +00:17:00.480 --> 00:17:03.079 +know that this regex is something that is going to be used + +00:17:03.080 --> 00:17:06.399 +again. I made an artificial benchmark. I made an + +00:17:06.400 --> 00:17:10.039 +artificial benchmark because I wanted to show there is one + +00:17:10.040 --> 00:17:13.639 +very specific case that it does solve, but it's the same + +00:17:13.640 --> 00:17:16.919 +issue with the artificial benchmarks. mentioned earlier. + +00:17:16.920 --> 00:17:21.559 +It's very specifically crafted in order to show that this + +00:17:21.560 --> 00:17:25.319 +particular solution would produce some speedup. What + +00:17:25.320 --> 00:17:29.599 +this means is it just creates more than 20 regexps in a row. It + +00:17:29.600 --> 00:17:31.959 +compiles them. Then, of course, because we just don't + +00:17:31.960 --> 00:17:35.159 +pay the compile costs, because we don't go through that + +00:17:35.160 --> 00:17:39.079 +cache eviction process, it ends up being faster. But this + +00:17:39.080 --> 00:17:42.079 +isn't really mean very much, particularly the goal here, + +00:17:42.080 --> 00:17:45.559 +you know, the goal would have been to show that the compile + +00:17:45.560 --> 00:17:48.359 +cache is actually causing the performance issue in + +00:17:48.360 --> 00:17:51.359 +comparison to pre-compiling it. That's not something + +00:17:51.360 --> 00:17:56.039 +I've been able to show. Match over bytes, not cars. So + +00:17:56.040 --> 00:17:59.079 +this is when I said at the beginning, oh, I came in and I think, + +00:17:59.080 --> 00:18:02.079 +oh, we can just use modern regex engine techniques. This is + +00:18:02.080 --> 00:18:05.239 +really what I meant. In particular, I mentioned in this + +00:18:05.240 --> 00:18:09.279 +match loop here that there's this, prolog that does this + +00:18:09.280 --> 00:18:13.359 +varring decoding. What this means is that every single + +00:18:13.360 --> 00:18:18.519 +iteration of that loop is going to be interspersed with this + +00:18:18.520 --> 00:18:21.919 +not being able to read a fixed number of bytes, but a variable + +00:18:21.920 --> 00:18:24.359 +number of bytes just depending upon the Unicode character + +00:18:24.360 --> 00:18:27.039 +or the Unicode code point or the multibyte code point. So + +00:18:27.040 --> 00:18:29.799 +this ends up, again, being relatively difficult to + +00:18:29.800 --> 00:18:32.919 +optimize because processors operate over bytes and not + +00:18:32.920 --> 00:18:38.479 +over code points. Yes, we might consider a multi-byte CPU at + +00:18:38.480 --> 00:18:41.039 +some point. But this is a really, really simple thing. It's + +00:18:41.040 --> 00:18:44.999 +just generating automata that operate over bytes as + +00:18:45.000 --> 00:18:48.839 +opposed to code points. This kind of goes into the much more + +00:18:48.840 --> 00:18:51.839 +abstract one. There's a lot of text here, and we're not + +00:18:51.840 --> 00:18:56.159 +going to go into it. But the really, really important point + +00:18:56.160 --> 00:18:57.999 +that I'm specifically mentioning here is this explicit + +00:18:58.000 --> 00:19:02.079 +control over linguistic complexity. That's the + +00:19:02.080 --> 00:19:06.159 +abstract kind of point. I want to introduce the inputs and + +00:19:06.160 --> 00:19:11.279 +the outputs. Basically, when you perform a search, or a + +00:19:11.280 --> 00:19:14.799 +match, or a parse, those are different tasks. They'll + +00:19:14.800 --> 00:19:17.799 +have different expected inputs and different desired + +00:19:17.800 --> 00:19:21.559 +outputs. Right now, Emacs, the API for the regular + +00:19:21.560 --> 00:19:24.919 +expression engine and for matching, It doesn't allow + +00:19:24.920 --> 00:19:27.959 +specialization on this. Or rather, if we do specialize on + +00:19:27.960 --> 00:19:30.999 +particular inputs, if we have a heuristic to check if a regex + +00:19:31.000 --> 00:19:33.519 +is actually a literal string, that's not something that the + +00:19:33.520 --> 00:19:36.959 +user actually has control over. For example, you can make + +00:19:36.960 --> 00:19:38.999 +a mistake escaping something, and then you don't have a + +00:19:39.000 --> 00:19:42.039 +literal, and then you accidentally have behavior that you + +00:19:42.040 --> 00:19:44.279 +totally didn't expect. Not just correctness issues, but + +00:19:44.280 --> 00:19:48.599 +also performance issues. I really like this one. I like + +00:19:48.600 --> 00:19:52.239 +this a lot, because I didn't think of it at all. I think it's + +00:19:52.240 --> 00:19:58.119 +better than in all of my ideas. This was proposed, at least + +00:19:58.120 --> 00:20:01.839 +to me, by Pip Cet, and I really hope that I'm pronouncing your + +00:20:01.840 --> 00:20:04.479 +name correctly. I'm sorry I didn't ask you beforehand, + +00:20:04.480 --> 00:20:08.399 +emacs-devel. In particular, this was after a couple of + +00:20:08.400 --> 00:20:11.999 +responses where I was trying to say, oh, I want to give the + +00:20:12.000 --> 00:20:15.879 +list programmer, way back in here, I want to give the list + +00:20:15.880 --> 00:20:20.559 +programmer the ability to control compilation in some + +00:20:20.560 --> 00:20:25.759 +sense. you know, he mentioned, I think he is correct, you + +00:20:25.760 --> 00:20:28.439 +know, there's no real introspection. That happens + +00:20:28.440 --> 00:20:33.119 +because it's written in C. I was thinking, oh, if I turn + +00:20:33.120 --> 00:20:35.639 +this into a list object that gives the list programmer the + +00:20:35.640 --> 00:20:40.039 +power and the ability to do more with that, but it doesn't + +00:20:40.040 --> 00:20:42.839 +actually because it's still in C. At first, I was + +00:20:42.840 --> 00:20:46.679 +thinking, oh, we can make the C part more flexible. But + +00:20:46.680 --> 00:20:50.039 +actually, especially if we want to do almost any of the + +00:20:50.040 --> 00:20:52.719 +things we previously mentioned, I think basically that + +00:20:52.720 --> 00:20:56.599 +this is... I think that if I'm not going to do it, somebody + +00:20:56.600 --> 00:20:58.879 +else really should do it, and I think we should maybe even do + +00:20:58.880 --> 00:21:01.519 +it together, because I think this is really, I think, how we + +00:21:01.520 --> 00:21:04.079 +can start experimenting, and not just experimenting, but + +00:21:04.080 --> 00:21:07.039 +because, as mentioned here, we have libgccjit, we have the + +00:21:07.040 --> 00:21:09.519 +native compiler, we have the ability to opt, like, + +00:21:09.520 --> 00:21:12.639 +specifically to generate specific code for this, so why not + +00:21:12.640 --> 00:21:15.919 +implement the or a Redix engine itself in list, And this + +00:21:15.920 --> 00:21:18.359 +gives us the ability to introspect it. That's one of the + +00:21:18.360 --> 00:21:20.759 +things I mentioned at the beginning. But it actually gives + +00:21:20.760 --> 00:21:23.879 +us the ability to then actually look at all the previous + +00:21:23.880 --> 00:21:28.159 +implementations, to explicitly compile beforehand, to + +00:21:28.160 --> 00:21:32.519 +match against bytes, to specialize and dispatch based upon + +00:21:32.520 --> 00:21:36.799 +input and output. This is something that, you know, it's + +00:21:36.800 --> 00:21:37.999 +super simple. + +00:21:38.000 --> 00:21:40.799 +It's really smart. I'm really, really glad that Pip + +00:21:40.800 --> 00:21:44.839 +mentioned this because it is, I think, the right way to solve + +00:21:44.840 --> 00:21:49.879 +the rest of it. We're at the final section. I talked a + +00:21:49.880 --> 00:21:52.679 +lot about, you know, kind of abstract, you know, thoughts. + +00:21:52.680 --> 00:21:55.679 +I talked a little about, you know, specific solutions. + +00:21:55.680 --> 00:21:59.999 +But I especially talked about, you know, what is Regex and + +00:22:00.000 --> 00:22:02.959 +Emacs? And I don't know if I had a lot of specific examples of + +00:22:02.960 --> 00:22:06.079 +it. I'm going to just describe kind of my, I guess, + +00:22:06.080 --> 00:22:09.799 +motivation, my impetus. Then I think something that's + +00:22:09.800 --> 00:22:12.639 +really something to chew on for the future. Do I have any + +00:22:12.640 --> 00:22:15.799 +concrete examples? Yes. Well, you can decide if they're + +00:22:15.800 --> 00:22:22.799 +concrete. Or am I just posturing? Also, yes. helm, rg. Helm, + +00:22:22.800 --> 00:22:27.679 +Erg, it's literally just M-x grep, it uses ripgrep, which + +00:22:27.680 --> 00:22:31.999 +is written by the same author of the Rust regex [??]. It + +00:22:32.000 --> 00:22:36.199 +happens to be very, very fast. In particular, I use this tool + +00:22:36.200 --> 00:22:39.319 +with ripgrep on the Twitter monorepo, and I was able to + +00:22:39.320 --> 00:22:42.559 +search very, very large amounts of code that was on my local + +00:22:42.560 --> 00:22:46.399 +machine using regular expressions. I think this is one + +00:22:46.400 --> 00:22:49.199 +thing that I think is really, really important, because + +00:22:49.200 --> 00:22:52.919 +when you want to scale, People say the word scaling and they + +00:22:52.920 --> 00:22:56.719 +assume there's a specific kind of answer for that. I've + +00:22:56.720 --> 00:23:01.679 +just found that text is not only flexible, it's actually + +00:23:01.680 --> 00:23:04.359 +something that can be more performant than the alternative + +00:23:04.360 --> 00:23:07.399 +and not only more performant, but more productive. It's + +00:23:07.400 --> 00:23:10.359 +again, it's just M-x grep using ripgrep. There's a tool + +00:23:10.360 --> 00:23:12.719 +deadgrep by Wilfred Hughes, which is also fantastic. I + +00:23:12.720 --> 00:23:15.759 +think it's actually better than this, but this one's mine so + +00:23:15.760 --> 00:23:19.199 +I can mess around with it. But this tool is kind of why, + +00:23:19.200 --> 00:23:21.799 +especially I started looking into Emacs and looking into + +00:23:21.800 --> 00:23:24.919 +changing the way that, or at least diving into how the + +00:23:24.920 --> 00:23:27.559 +regular expression matching actually kind of works, both + +00:23:27.560 --> 00:23:30.359 +in Emacs and then in ripgrep. We'll go to the next one. + +00:23:30.360 --> 00:23:34.119 +This is something that does exist and continues to exist. + +00:23:34.120 --> 00:23:36.799 +This is something that doesn't quite exist yet. I'm + +00:23:36.800 --> 00:23:41.359 +calling it telepathy grams. It's, you know, it's the name, + +00:23:41.360 --> 00:23:44.719 +and it's very, you know, it doesn't work, but it's a code + +00:23:44.720 --> 00:23:47.919 +search tool that, in this case, precompiles the database to + +00:23:47.920 --> 00:23:51.879 +execute NFAs against. I was thinking, how can I beat And + +00:23:51.880 --> 00:23:55.039 +the first thing I thought is, well, as I have worked on build + +00:23:55.040 --> 00:23:57.759 +tools, especially in monorepos, one of the things that the + +00:23:57.760 --> 00:24:00.799 +pants build tool from Twitter does is it uses a file watcher + +00:24:00.800 --> 00:24:04.239 +to ensure that instead of having to constantly read in the + +00:24:04.240 --> 00:24:10.079 +entire contents of a file, which may be very, very large, it + +00:24:10.080 --> 00:24:13.679 +only does so when the file has been changed. Finally, I + +00:24:13.680 --> 00:24:16.919 +want to conclude on this note, which is just that the stuff I + +00:24:16.920 --> 00:24:20.839 +didn't learn from emacs devel, I learned from Paul + +00:24:20.840 --> 00:24:25.319 +Wankadia, Jr., who is the RE2 maintainer, and he taught me + +00:24:25.320 --> 00:24:32.399 +quite a lot from 2023 to 2024. I'm thankful for the time + +00:24:32.400 --> 00:24:37.959 +that I learned from you, so thank you, Paul. With that, we're + +00:24:37.960 --> 00:24:42.759 +at point-max. Call me, beat me, if you want to reach me and or + +00:24:42.760 --> 00:24:45.839 +hire me. These are places that you can reach me at. There are + +00:24:45.840 --> 00:24:49.719 +probably others. Feel free to suggest other ways to contact + +00:24:49.720 --> 00:24:53.199 +me. But for now, this is the end. Thank you so much for your + +00:24:53.200 --> 00:24:56.080 +time. I really appreciate it. diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt new file mode 100644 index 00000000..1b881325 --- /dev/null +++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt @@ -0,0 +1,926 @@ +WEBVTT + +00:00:00.000 --> 00:00:06.519 +Okay, so I'm going to look at some of the questions showing up + +00:00:06.520 --> 00:00:08.499 +in the etherpad we got here. + +NOTE Q: Have you considered using CRDTs to share buffers between threads and merge any concurrent edits automatically? + +00:00:08.500 --> 00:00:09.439 +It says, have you considered + +00:00:09.440 --> 00:00:12.799 +using a CRDT to share buffers between threads and merge any + +00:00:12.800 --> 00:00:16.039 +concurrent edits automatically? So I have looked at that. + +00:00:16.040 --> 00:00:20.559 +And the problem with CRDTs is that even though they give you a + +00:00:20.560 --> 00:00:22.839 +mathematically correct answer when you're trying to merge + +00:00:22.840 --> 00:00:26.479 +two conflicts, it's not always a useful answer. Like, it's + +00:00:26.480 --> 00:00:29.199 +not coherent. If you have two things trying to edit the same + +00:00:29.200 --> 00:00:31.359 +thing, there's no good way to resolve that. And so they + +00:00:31.360 --> 00:00:33.559 +really work well when you have two people working live, both + +00:00:33.560 --> 00:00:35.639 +editing the same document, because they can fix any + +00:00:35.640 --> 00:00:37.199 +particular issues like that, like you would with Google + +00:00:37.200 --> 00:00:39.919 +Docs. But you have different packages that aren't aware of + +00:00:39.920 --> 00:00:42.159 +each other, and you're going to run into problems. And so + +00:00:42.160 --> 00:00:44.999 +this is something, if you read from the Xi editor, which was + +00:00:45.000 --> 00:00:48.039 +one of the first ones to use CRDTs, in the retrospective, he + +00:00:48.040 --> 00:00:52.359 +talks about how they had this problem, where the CRDTs They + +00:00:52.360 --> 00:00:53.999 +give you an answer, but it's not always an answer that's + +00:00:54.000 --> 00:00:59.079 +useful. And so I feel like locks at least are going to make it. + +00:00:59.080 --> 00:01:00.439 +It's not going to be as efficient if you have a whole bunch of + +00:01:00.440 --> 00:01:02.319 +packages, but I don't imagine there's going to be a ton of + +00:01:02.320 --> 00:01:04.799 +those. It can actually, I think it'll be more useful in + +00:01:04.800 --> 00:01:05.873 +practice. + +NOTE Q: Why hosted on GitHub? GitHub is nonfree. Is it possible to report bugs/send patches without using GitHub? + +00:01:05.874 --> 00:01:11.239 +I host on GitHub because that's what I know. + +00:01:11.240 --> 00:01:13.239 +If there's a way to host it on somewhere else, I'd be + +00:01:13.240 --> 00:01:15.439 +interested in doing that. If you're interested in setting + +00:01:15.440 --> 00:01:17.799 +patches without using GitHub, you could always send an + +00:01:17.800 --> 00:01:22.959 +email. I'm more than happy to accept email patches. + +NOTE Q: Do you think it's possible to achieve 100% compatibility with current Emacs code? + +00:01:22.960 --> 00:01:24.959 +Do you think it's possible to achieve with the current Emacs + +00:01:24.960 --> 00:01:29.719 +code? I do. I think, I think you can do that. Um, like I said, + +00:01:29.720 --> 00:01:33.279 +there's a couple things inside there that are intentional + +00:01:33.280 --> 00:01:37.919 +breaks with existing Emacs code. And some of those being + +00:01:37.920 --> 00:01:43.159 +like functions are immutable. As well as having data shared + +00:01:43.160 --> 00:01:44.759 +switch between different threads, which means there's + +00:01:44.760 --> 00:01:46.599 +going to be some copying going on. So there's going to be + +00:01:46.600 --> 00:01:48.399 +subtle things that are going to be different. And we've + +00:01:48.400 --> 00:01:50.359 +really got to think about those intentionally, but I'm + +00:01:50.360 --> 00:01:54.519 +really going for bug compatibility with GNU Emacs so that + +00:01:54.520 --> 00:01:57.159 +you can take an existing Elisp package and just run it and it + +00:01:57.160 --> 00:01:59.879 +just works, 'cause I think that's one of the big strengths of + +00:01:59.880 --> 00:02:03.399 +the Emacs ecosystem is the millions of lines of Elisp that + +00:02:03.400 --> 00:02:07.479 +people have written. + +00:02:07.480 --> 00:02:11.912 +Um, So I'm not, okay... + +NOTE Q: so you're re-implementing elisp in rust? have you considered using a more modern lisp, such as scheme? [11:03] + +00:02:11.913 --> 00:02:14.279 +So since you're re-implementing Elisp and + +00:02:14.280 --> 00:02:17.039 +Rust, have you considered using more modern Lisp such as + +00:02:17.040 --> 00:02:20.919 +Scheme? So I'm not re-implementing Elisp and Rust. I'm + +00:02:20.920 --> 00:02:25.439 +re-implementing the C in Rust. In fact, I would like to make + +00:02:25.440 --> 00:02:30.479 +more of the core that's written in C in Elisp instead of C or + +00:02:30.480 --> 00:02:33.839 +Rust, because then it's actually introspectible. There's + +00:02:33.840 --> 00:02:38.719 +a talk by Tom Tromney that he gave a while ago about Emacs + +00:02:38.720 --> 00:02:42.239 +should be Emacs Lisp. I kind of like that philosophy, + +00:02:42.240 --> 00:02:44.799 +that as much of it as should be Elisp as possible, and we + +00:02:44.800 --> 00:02:48.079 +should only have C or Rust or some systems level language for + +00:02:48.080 --> 00:02:52.319 +really low-level stuff. Using a more modern LISP such as + +00:02:52.320 --> 00:02:54.839 +Scheme. I know there's, I mean, there's two talks, I think, + +00:02:54.840 --> 00:02:58.239 +in this conference about using Scheme inside Emacs. And I + +00:02:58.240 --> 00:03:00.719 +looked at this at one point about what if you wrote it inside + +00:03:00.720 --> 00:03:03.919 +Common LISP, because that's also has some really low level + +00:03:03.920 --> 00:03:05.879 +details. And then you could go from Elisp down to Common + +00:03:05.880 --> 00:03:09.199 +Lisp. But the problem is, is under the hood, you still need a + +00:03:09.200 --> 00:03:12.559 +systems language. You can't, you still need either C or Rust + +00:03:12.560 --> 00:03:15.639 +or something underneath the Common Lisp to implement the + +00:03:15.640 --> 00:03:17.799 +primitives. And so it's not going to give you just two + +00:03:17.800 --> 00:03:19.719 +languages, you know, you'll have three. You'll have the + +00:03:19.720 --> 00:03:24.919 +elisp, common lisp, and C under the hood. And so in this case + +00:03:24.920 --> 00:03:29.559 +we just have the two. We have the Elisp and the rest. + +00:03:29.560 --> 00:03:42.999 +All right that's all the questions I see there. Let + +00:03:43.000 --> 00:03:54.079 +me go look at... Okay, + +00:03:54.080 --> 00:04:01.399 +so I see into the chat. + +NOTE Q: Do you have specific features from the Rust compiler that are missing (or are nightly-only) that you would take advantage of? + +00:04:01.400 --> 00:04:03.839 +Does it features from the Rust compiler that are missing + +00:04:03.840 --> 00:04:06.239 +that way you would take advantage of? Oh, that is a great + +00:04:06.240 --> 00:04:10.679 +question. Um, there's a handful of them. Uh, I should've + +00:04:10.680 --> 00:04:13.599 +written down a list of these. One of them is Polonius, which + +00:04:13.600 --> 00:04:17.959 +is the new borrow checker because we're trying to be used + +00:04:17.960 --> 00:04:21.759 +lifetime to track our objects. We often run into situations + +00:04:21.760 --> 00:04:24.239 +where we've kind of got a hack around things because the + +00:04:24.240 --> 00:04:26.199 +limitations with the borrow checker. And so I have a whole + +00:04:26.200 --> 00:04:29.559 +bunch of like notes inside there about where. A better + +00:04:29.560 --> 00:04:34.959 +Polonius would help inside there and help ease some of the + +00:04:34.960 --> 00:04:40.599 +issues. Another thing is enum variances types, because + +00:04:40.600 --> 00:04:42.999 +right now we have an object which is defined as a big enum that + +00:04:43.000 --> 00:04:46.079 +had all the possible objects, but if we want to have a subset + +00:04:46.080 --> 00:04:47.479 +of those objects or just pass in one of those objects, we've + +00:04:47.480 --> 00:04:50.079 +got to define a new struct. And so we have a whole bunch of + +00:04:50.080 --> 00:04:52.839 +boilerplate code to define that all out. And if we had + +00:04:52.840 --> 00:04:56.719 +variances types, that would make the code a lot easier. + +00:04:56.720 --> 00:05:00.079 +Another one is the allocator API. Right now we're kind of + +00:05:00.080 --> 00:05:02.479 +working around it, but ultimately we're going to need our + +00:05:02.480 --> 00:05:07.719 +own allocator. And the allocator API is still nightly only. + +00:05:07.720 --> 00:05:10.919 +So there's a couple more. I'll look at that more, but that's a + +00:05:10.920 --> 00:05:24.279 +great question. + +00:05:24.280 --> 00:05:26.879 +Let's see. + +NOTE Q: Can remacs be reused? + +00:05:26.880 --> 00:05:30.799 +Okay. I see a question you might not have noticed just asking + +00:05:30.800 --> 00:05:37.159 +about reuse of Remacs. Oh, yes, so I have reused some of Remacs + +00:05:37.160 --> 00:05:40.159 +code, and some taken, like I mentioned, taken some of their + +00:05:40.160 --> 00:05:45.319 +ideas, but ultimately we're using a different model + +00:05:45.320 --> 00:05:49.439 +because under the hood in Remacs, everything is just defined + +00:05:49.440 --> 00:05:53.799 +as an opaque external type that's defined inside Emacs and + +00:05:53.800 --> 00:05:56.159 +so it just pulls those in interacts with those and passes + +00:05:56.160 --> 00:05:58.879 +them back into C. We're trying to see what we can do if we + +00:05:58.880 --> 00:06:02.279 +say okay we're not going to take the same... So they're bound to + +00:06:02.280 --> 00:06:06.839 +the implementation details of Emacs, and we don't want to do + +00:06:06.840 --> 00:06:09.559 +that. We've re-implemented all the core types + +00:06:09.560 --> 00:06:12.559 +ourselves. So that means that we can't just take the + +00:06:12.560 --> 00:06:16.559 +Remacs code one for one and use it in our project, but we can + +00:06:16.560 --> 00:06:18.799 +take a lot of their ideas. I've spent some time reading + +00:06:18.800 --> 00:06:20.439 +through their documentation, different things about how + +00:06:20.440 --> 00:06:23.856 +they approached strings and GC + +00:06:23.857 --> 00:06:24.759 +and different stuff like that. + +00:06:24.760 --> 00:07:23.599 +Looks like all the questions. + +NOTE Q: What are you thoughts on the GUI layer. Any plans on how to reimplement it? + +00:07:23.600 --> 00:07:26.199 +Okay, so another question. What are your thoughts on the GUI + +00:07:26.200 --> 00:07:30.959 +layer? Any plans on how to reimplement it? This is something + +00:07:30.960 --> 00:07:34.079 +I've thought a lot about, but I still don't have a solid plan + +00:07:34.080 --> 00:07:37.253 +for. I'm not really a GUI person. I mostly work with + +00:07:37.254 --> 00:07:42.719 +low-level. And so my two thoughts is you can go the GTK route. + +00:07:42.720 --> 00:07:45.519 +There's Rust bindings for that. That's well understood. + +00:07:45.520 --> 00:07:48.319 +It's got a good support. But there's also some interesting + +00:07:48.320 --> 00:07:53.919 +projects to try and do GUI in Rust, native Rust, and have it + +00:07:53.920 --> 00:07:57.399 +use Rust idioms and stuff like that. And so those are things + +00:07:57.400 --> 00:08:01.439 +like Druid and there's eGUI and a bunch of those that are that + +00:08:01.440 --> 00:08:05.359 +way. And I've never used one of them, but I'd be interested to + +00:08:05.360 --> 00:08:08.879 +try that out first and see how well does this work and how well + +00:08:08.880 --> 00:08:21.239 +supported is this doing a Rust-first GUI. + +NOTE Q: If money could fix the problem, how much would it cost to ship this with feature parity before 2026? + +00:08:21.240 --> 00:08:23.639 +If money could fix the problem, how much would it cost to ship + +00:08:23.640 --> 00:08:28.399 +this with feature parity before 2026? Ooh, in a year. Uh, + +00:08:28.400 --> 00:08:32.079 +that's a good question. Even if we had the money, it would + +00:08:32.080 --> 00:08:36.639 +take more than just me, even if I was working on it full time. + +00:08:36.640 --> 00:08:40.630 +Um, I don't know. That's a good question. + +00:08:40.631 --> 00:08:41.769 +I would think it would take a team + +00:08:41.770 --> 00:08:45.239 +of at least a handful of people to get this + +00:08:45.240 --> 00:08:48.559 +shipping within one year. Because there's still a lot of + +00:08:48.560 --> 00:08:50.759 +work to do. And even once you have everything implemented, + +00:08:50.760 --> 00:08:55.119 +there's a lot of bug finding and smoothing it out so that it + +00:08:55.120 --> 00:08:57.519 +runs as well as Emacs, which has been, you know, battle + +00:08:57.520 --> 00:08:58.359 +tested for a long time. + +00:08:58.360 --> 00:09:06.599 +Um, okay, so this might be a good moment for me to break in and + +00:09:06.600 --> 00:09:09.039 +just say that we've got about 10 minutes left before we + +00:09:09.040 --> 00:09:12.519 +resume new talks on on both tracks. Of course, we're happy to + +00:09:12.520 --> 00:09:18.119 +keep this. This chat open and keep the recording going here, + +00:09:18.120 --> 00:09:21.599 +which will share after the conference as long as as long as + +00:09:21.600 --> 00:09:28.349 +there's discussion here. Thank you. + +NOTE GObject implementation + +00:09:28.350 --> 00:09:29.119 +GTK project has + +00:09:29.120 --> 00:09:31.079 +automatic binding with a framework called GObject + +00:09:31.080 --> 00:09:33.599 +introspection, which is what I'm using for gypsum project. + +00:09:33.600 --> 00:09:35.959 +Probably Rust has a G object implementation, which you can + +00:09:35.960 --> 00:09:39.119 +use. Yeah, I know it has some GTK bindings. Um, I'm not sure if + +00:09:39.120 --> 00:09:41.954 +it's specifically GObject, but that's a good path + +00:09:41.955 --> 00:09:44.335 +because I feel like the problem + +00:09:44.336 --> 00:09:46.759 +with the Rust GUIs is that they're all + +00:09:46.760 --> 00:09:50.359 +very new. And so, you know, everything works in a demo, but + +00:09:50.360 --> 00:09:52.319 +you need something that can work across all different + +00:09:52.320 --> 00:09:54.319 +devices and all different platforms and have really good + +00:09:54.320 --> 00:09:56.599 +support and good accessibility and stuff like that. + +NOTE Q: elisp is implemented in c, so if you're not implementing elisp in rust, are you using/keeping the c implementation of elisp? + +00:09:56.600 --> 00:10:03.399 +All right, Elisp is implemented in C. So if you're not + +00:10:03.400 --> 00:10:07.359 +implementing Elisp in Rust, we're keeping the C + +00:10:07.360 --> 00:10:13.639 +implementation of Elisp. So let me see if I can do a better job + +00:10:13.640 --> 00:10:18.439 +of explaining this. So inside Emacs, you have about a + +00:10:18.440 --> 00:10:21.519 +million lines of Elisp. And underneath that, you have the C, + +00:10:21.520 --> 00:10:24.079 +which is the primitives everything's implemented yet. And + +00:10:24.080 --> 00:10:27.079 +so we're keeping all of the Elisp, and we're just taking that + +00:10:27.080 --> 00:10:30.559 +C layer and replacing it with Rust. And so when you call a + +00:10:30.560 --> 00:10:33.079 +built-in function, it's calling into a Rust function + +00:10:33.080 --> 00:10:40.079 +instead of a C function under the hood. So all the Elisp stays + +00:10:40.080 --> 00:10:42.679 +Elisp, but the C becomes Rust. + +NOTE Clarifying rewriting Elisp in Rust + +00:10:42.680 --> 00:10:54.599 +So looking at the IRC chat, it feels to me like maybe there's a + +00:10:54.600 --> 00:10:59.159 +little bit of confusion around what do we mean when we say + +00:10:59.160 --> 00:11:04.839 +rewriting Elisp in Rust, right? I think there are some + +00:11:04.840 --> 00:11:07.399 +people that are like, A, we're reinventing ELISP, and + +00:11:07.400 --> 00:11:09.679 +there's other people that are like, no, we're trying to be + +00:11:09.680 --> 00:11:12.879 +byte-for-byte compatible with Rust. + +00:11:12.880 --> 00:11:17.500 +So some people are questioning your no answer on that. + +00:11:17.501 --> 00:11:20.000 +Aren't you really, maybe, is what I'm reading in there. + +00:11:20.001 --> 00:11:21.769 +Do you want to respond to that? + +00:11:21.770 --> 00:11:26.119 +Yeah, I'm trying to think about how I can make this + +00:11:26.120 --> 00:11:29.559 +clearer. So the Elisp stays Elisp. We're not changing the + +00:11:29.560 --> 00:11:33.239 +Elisp at all, or at least very minimally. We want to be able to + +00:11:33.240 --> 00:11:36.519 +take, like I said, bug compatible. So whatever works inside + +00:11:36.520 --> 00:11:39.999 +existing Emacs, you can take all the Lisp and you can run it in + +00:11:40.000 --> 00:11:43.599 +Rune and it works the same. So the Elisp stays the same. It's + +00:11:43.600 --> 00:11:47.119 +just the under the hood core that is getting replaced. And + +00:11:47.120 --> 00:11:49.199 +this in turn adds some new features such as + +00:11:49.200 --> 00:11:52.799 +multi-threading. So it's not exactly compatible, but + +00:11:52.800 --> 00:11:55.559 +you should be able to use your existing code and the Elisp will + +00:11:55.560 --> 00:12:00.639 +stay Elisp. So the idea is that anything that I've written as + +00:12:00.640 --> 00:12:04.559 +an Emacs user, my config, my custom packages, whatever it + +00:12:04.560 --> 00:12:08.999 +may be, that's all going to be valid code. If you take, you + +00:12:09.000 --> 00:12:13.163 +know, the Elisp implementation as being the C code + +00:12:13.164 --> 00:12:15.745 +and the parts of Elisp written in Elisp + +00:12:15.746 --> 00:12:18.448 +that represent opportunity space + +00:12:18.449 --> 00:12:20.799 +thinking about Rust as an implementation language... + +00:12:20.800 --> 00:12:24.479 +Okay fine. You know, you can make a semantic argument, okay + +00:12:24.480 --> 00:12:25.995 +we're re-implementing, we're creating + +00:12:25.996 --> 00:12:29.018 +an alternate implementation of Elisp + +00:12:29.019 --> 00:12:31.639 +but what Elisp is isn't the problem + +00:12:31.640 --> 00:12:35.039 +space here. That's a fixed, a given, if you will. + +00:12:35.040 --> 00:12:36.065 +Is that all right? + +00:12:36.066 --> 00:12:39.199 +That's a good way of saying it. Okay. Yeah, what you + +00:12:39.200 --> 00:12:42.559 +said makes sense. I was kind of responding to some comments, + +00:12:42.560 --> 00:12:44.959 +like I'm not sure it connected for everybody. Makes a lot of + +00:12:44.960 --> 00:12:47.399 +sense. Yeah, I wasn't sure how much I needed to expand on that + +00:12:47.400 --> 00:12:51.119 +and explain that, but I appreciate you jumping in. + +00:12:51.120 --> 00:12:57.907 +Um, okay. So if I were just going to, but... + +NOTE Q: Will your Rust implementation also be able to run Emacs bytecode? Or are you implementing it at the Lisp level? + +00:12:57.908 --> 00:13:02.239 +Will your Rust implementation also be able to run Emacs bytecode or the + +00:13:02.240 --> 00:13:04.359 +implemented at the Lisp level? So I already have a bytecode + +00:13:04.360 --> 00:13:06.759 +interpreter inside there that runs the existing Elisp + +00:13:06.760 --> 00:13:09.519 +bytecode. And so that was one of the first things I did was + +00:13:09.520 --> 00:13:11.679 +bootstrap the interpreter and then bootstrap the bytecode + +00:13:11.680 --> 00:13:14.999 +engine. And so we compile, we use the... because the bytecode + +00:13:15.000 --> 00:13:19.079 +compiler is written in Emacs Lisp. So you bootstrap that + +00:13:19.080 --> 00:13:22.919 +and it gives you the Emacs bytecode. I have a bytecode + +00:13:22.920 --> 00:13:26.039 +engine that runs the bytecode. So that's already done. And + +00:13:26.040 --> 00:13:28.239 +you can potentially, on top of that, do something like the + +00:13:28.240 --> 00:13:31.999 +data compilation or a JIT. But we have both an + +00:13:32.000 --> 00:13:47.019 +interpreter and a bytecode compiler. + +00:13:47.020 --> 00:13:50.799 +And I'll just break in one more time to say with about five + +00:13:50.800 --> 00:13:56.319 +minutes left in our live time with this Q&A session, which + +00:13:56.320 --> 00:13:58.439 +we're happy to keep going as long as there are questions. + +00:13:58.440 --> 00:14:03.959 +Coming up in five minutes, we'll have a talk on color on the + +00:14:03.960 --> 00:14:09.639 +gen track. And then right here, we'll have the p-search + +00:14:09.640 --> 00:14:09.959 +talk. + +00:14:09.960 --> 00:14:20.099 +Thank you. + +NOTE Q: Is it possible to bootstrap with just the bytecode interpreter? + +00:14:20.100 --> 00:14:22.559 +Is it possible to bootstrap with just the bytecode + +00:14:22.560 --> 00:14:25.759 +interpreter? So I'll have to put in a link to one of my blog + +00:14:25.760 --> 00:14:28.519 +posts. So that was my original idea was to say, I don't want to + +00:14:28.520 --> 00:14:31.559 +have an interpreter, a bytecode interpreter and a native + +00:14:31.560 --> 00:14:33.180 +compiler. I want to just have just one. + +00:14:33.181 --> 00:14:36.741 +So I'm only going to have the bytecode. + +00:14:36.742 --> 00:14:37.708 +And so that's what I did initially. + +00:14:37.709 --> 00:14:42.079 +The problem with that is, is that a bunch of the early bootstrap + +00:14:42.080 --> 00:14:45.117 +Emacs code is written with the assumption + +00:14:45.118 --> 00:14:47.278 +that it's going to be interpreted. + +00:14:47.279 --> 00:14:49.019 +This is especially true with macros, + +00:14:49.020 --> 00:14:50.821 +where you'll have a function defined, + +00:14:50.822 --> 00:14:52.642 +you'll evaluate part of the function. + +00:14:52.643 --> 00:14:55.599 +The other half of the function has macros in it + +00:14:55.600 --> 00:14:59.719 +that are not defined yet, but it doesn't matter because they + +00:14:59.720 --> 00:15:02.399 +don't get used. But with the bytecode interpreter, it + +00:15:02.400 --> 00:15:04.639 +expands all macros when it gets the function definition. + +00:15:04.640 --> 00:15:08.799 +And so those weren't macros when the function was expanded, + +00:15:08.800 --> 00:15:12.359 +and therefore they got instantiated as functions, but + +00:15:12.360 --> 00:15:15.759 +they're not functions, they're macros. And so I initially + +00:15:15.760 --> 00:15:18.999 +spent a bunch of time trying to work around this, trying to + +00:15:19.000 --> 00:15:21.599 +move code around, work stuff around, refactor the code to + +00:15:21.600 --> 00:15:24.759 +try and get it to work with only bytecode interpreter. And + +00:15:24.760 --> 00:15:27.039 +eventually I just gave up. I said, you know what, I'm just + +00:15:27.040 --> 00:15:30.039 +going to write an actual interpreter to handle this because + +00:15:30.040 --> 00:15:33.799 +trying to handle all these lazy macros is too much work. And + +00:15:33.800 --> 00:15:35.759 +everything in the bootstrap is built with the assumption + +00:15:35.760 --> 00:15:37.799 +that you have lazy macro expansion. + +00:15:37.800 --> 00:15:45.159 +I'm guessing the Emacs bytecode interpreter isn't + +00:15:45.160 --> 00:15:45.959 +complete. + +00:15:45.960 --> 00:15:52.279 +So it's mostly complete. There's a handful of opcodes that + +00:15:52.280 --> 00:15:55.239 +aren't implemented that are pretty easy to add that I + +00:15:55.240 --> 00:15:57.879 +haven't run into. And there's some of them that are + +00:15:57.880 --> 00:16:00.119 +deprecated that aren't implemented, but it's essentially + +00:16:00.120 --> 00:16:00.479 +complete. + +00:16:00.480 --> 00:16:11.999 +We also provide a bytecode JIT compilation via libgcc the + +00:16:12.000 --> 00:16:17.344 +way Emacs currently does it. Eventually I would like to... + +00:16:17.345 --> 00:16:22.919 +I'm more inclined to have a proper runtime JIT than an + +00:16:22.920 --> 00:16:27.399 +ahead-of-time compiler like libgcc, like the current + +00:16:27.400 --> 00:16:29.919 +Emacs native compilation, because it allows you to take + +00:16:29.920 --> 00:16:34.559 +type information and actually apply that to the code, which + +00:16:34.560 --> 00:17:03.959 +can let you do more aggressive optimizations to it. + +NOTE What would it take to bootstrap Guile in Rune? + +00:17:03.960 --> 00:17:06.319 +He said, we may either get a new Emacs with an ancient C core + +00:17:06.320 --> 00:17:09.039 +with a modern Lisp, or an Emacs with modern core, but stuck + +00:17:09.040 --> 00:17:11.879 +with ancient Elisp. So there was another project I was + +00:17:11.880 --> 00:17:16.639 +talking to, one of the Guile implementations, about how we + +00:17:16.640 --> 00:17:19.119 +could potentially, he was like, what would it take to + +00:17:19.120 --> 00:17:24.479 +bootstrap Guile in Rune, where you have both, you could have + +00:17:24.480 --> 00:17:27.399 +Elisp and Guile running inside this project. And so we've + +00:17:27.400 --> 00:17:28.999 +started that discussion, which I think would be, which + +00:17:29.000 --> 00:17:33.999 +would be interesting. But it's tricky too, because + +00:17:34.000 --> 00:17:36.199 +fundamentally Elisp and Guile are two different + +00:17:36.200 --> 00:17:38.119 +languages. They have different semantics. They have + +00:17:38.120 --> 00:17:39.879 +different ways of handling things. You've really got to + +00:17:39.880 --> 00:17:42.479 +consider both of those when you're trying to make them work + +00:17:42.480 --> 00:17:42.799 +together. + +00:17:42.800 --> 00:17:57.319 +How would you do the native module system? What would be + +00:17:57.320 --> 00:17:59.799 +different? We can do the same thing. We have an FFI. So I + +00:17:59.800 --> 00:18:03.839 +haven't looked into it a ton, but I feel like it could be + +00:18:03.840 --> 00:18:06.359 +similar. And I'm actually interested, there's a couple + +00:18:06.360 --> 00:18:12.759 +projects on GitHub right now to have an FFI written in Elisp. + +00:18:12.760 --> 00:18:17.239 +So you don't even need to create a separate C or Rust module, + +00:18:17.240 --> 00:18:21.679 +because you can actually write native modules in Rust or C. + +00:18:21.680 --> 00:18:25.559 +And so you can just have direct bindings to a C FFI written in + +00:18:25.560 --> 00:18:27.799 +Elisp. You don't need any C code inside there. And I think + +00:18:27.800 --> 00:18:33.699 +that would be an interesting approach to look at as well. + +00:18:33.700 --> 00:18:35.839 +Oh, Ramin. Yeah, that's right. We were talking about that, + +00:18:35.840 --> 00:18:41.539 +about bootstrapping Scheme. + +00:18:41.540 --> 00:18:45.519 +And at this point, we have broken away from, uh, from this + +00:18:45.520 --> 00:18:47.399 +talk, but we're continuing to record and this will all be + +00:18:47.400 --> 00:18:50.439 +published. I'd say, go ahead and keep going as long as you'd + +00:18:50.440 --> 00:18:54.959 +like in here. And, um, thanks once again for the awesome + +00:18:54.960 --> 00:18:58.639 +discussion. Thank you so much. So I'll just pay attention to + +00:18:58.640 --> 00:19:02.919 +the ether pad and the chat and see. + +00:19:02.920 --> 00:19:05.919 +That sounds good. I'll keep an eye on IRC. And if there are + +00:19:05.920 --> 00:19:08.559 +more questions here, I'll bounce people toward the ether + +00:19:08.560 --> 00:19:12.760 +pad or this, uh, chat room. All right, thank you. diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt new file mode 100644 index 00000000..ef14c4ae --- /dev/null +++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt @@ -0,0 +1,92 @@ +WEBVTT + + +00:00:00.000 --> 00:00:17.081 +Rune + +00:00:17.082 --> 00:00:57.167 +The Emacs core + +00:00:57.168 --> 00:01:55.864 +Why create this? + +00:01:55.865 --> 00:03:01.314 +How does this compare to other projects? + +00:03:01.315 --> 00:03:32.440 +Multi-threading + +00:03:32.441 --> 00:03:47.647 +Multi-threading elisp + +00:03:47.648 --> 00:04:32.637 +No-GIL method + +00:04:32.638 --> 00:04:51.251 +Actors + +00:04:51.252 --> 00:05:34.679 +Multi-threading elisp (functions) + +00:05:34.680 --> 00:05:57.089 +Caveats + +00:05:57.090 --> 00:06:38.248 +Multi-threading elisp (data) + +00:06:38.249 --> 00:06:57.883 +Copy values to other threads on demands + +00:06:57.884 --> 00:08:11.902 +Multi-threading elisp (buffers) + +00:08:11.903 --> 00:08:46.918 +Would this actually be useful? + +00:08:46.919 --> 00:09:16.536 +Precise garbage collection + +00:09:16.537 --> 00:10:38.712 +How Emacs used to deal with roots + +00:10:38.713 --> 00:11:00.156 +Conservative stack scanning + +00:11:00.157 --> 00:12:38.828 +Movable objects + +00:12:38.829 --> 00:14:13.226 +How Rust makes precise GC easy + +00:14:13.227 --> 00:15:14.559 +Other Rust niceties: proc macro + +00:15:14.560 --> 00:16:01.040 +sum types + +00:16:01.041 --> 00:16:16.051 +Regex + +00:16:16.052 --> 00:16:27.209 +Parsers + +00:16:27.210 --> 00:16:58.918 +Other changes: GUI first, terminal second + +00:16:58.919 --> 00:17:16.304 +Off-screen cursor + +00:17:16.305 --> 00:17:24.439 +Image flow + +00:17:24.440 --> 00:18:36.344 +Testing + +00:18:36.345 --> 00:19:07.246 +Status + +00:19:07.247 --> 00:19:22.738 +Next directions + +00:19:22.739 --> 00:20:06.000 +How to get involved diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt new file mode 100644 index 00000000..05826fb8 --- /dev/null +++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt @@ -0,0 +1,1351 @@ +WEBVTT captioned by sachac, checked by bhavin + +NOTE Rune + +00:00:00.000 --> 00:00:05.119 +Hello, EmacsConf. My name is Troy Hinckley, and this is my + +00:00:05.120 --> 00:00:08.759 +talk on Rune, a Rust implementation in Emacs. We strive to be + +00:00:08.760 --> 00:00:11.839 +bug compatible with Emacs, so you can use the same Elisp. + +00:00:11.840 --> 00:00:14.879 +It's still a fairly early stage experimental project, and + +00:00:14.880 --> 00:00:17.081 +we have some basic things implemented. + +NOTE The Emacs core + +00:00:17.082 --> 00:00:19.946 +Before I get started, I want to talk a bit more + +00:00:19.947 --> 00:00:21.847 +about what the core is. + +00:00:21.848 --> 00:00:24.559 +So the Emacs core, it includes the runtime, the interpreter, + +00:00:24.560 --> 00:00:26.439 +garbage collector, everything used to run the code. + +00:00:26.440 --> 00:00:29.799 +It includes the GUI. It includes all the data structures. + +00:00:29.800 --> 00:00:31.919 +If you look underneath all the Elisp data structures, + +00:00:31.920 --> 00:00:33.599 +there's C code underneath there, + +00:00:33.600 --> 00:00:35.559 +as well as the auxiliary functions + +00:00:35.560 --> 00:00:39.239 +of which there's about 1500. In making this talk, I don't + +00:00:39.240 --> 00:00:40.919 +want to give the impression that I'm saying the core is + +00:00:40.920 --> 00:00:42.879 +outdated or that needs to be replaced or that it can't be + +00:00:42.880 --> 00:00:45.519 +evolved on its own, because clearly it has continued to + +00:00:45.520 --> 00:00:48.319 +evolve. If we look in just the last few years, we can see that + +00:00:48.320 --> 00:00:50.439 +we've added native compilation, we've added tree-sitter + +00:00:50.440 --> 00:00:52.759 +support, we've added color emoji, and there's work right + +00:00:52.760 --> 00:00:57.167 +now to add a new garbage collector to Emacs as well. + +NOTE Why create this? + +00:00:57.168 --> 00:01:01.071 +Why create this project? Emacs has a long history. + +00:01:01.072 --> 00:01:04.535 +It has a lot of users. It needs to support a big community. + +00:01:04.536 --> 00:01:06.837 +Because of that, it has to be very conservative + +00:01:06.838 --> 00:01:10.321 +about what things it can allow into the project. + +00:01:10.322 --> 00:01:11.639 +Forks like this create an + +00:01:11.640 --> 00:01:15.586 +opportunity to experiment and try new approaches. + +00:01:15.587 --> 00:01:18.799 +This is particularly a good use case for Rust because the C core, + +00:01:18.800 --> 00:01:20.849 +it's pretty well tested. It's been around for a long time. + +00:01:20.850 --> 00:01:22.959 +A lot of the bugs have been ironed out, but when you're doing a + +00:01:22.960 --> 00:01:26.439 +new greenfield project, it's very easy to introduce new + +00:01:26.440 --> 00:01:28.774 +undefined behavior and memory unsafety + +00:01:28.775 --> 00:01:32.376 +and stuff like that. Rust protects us from most of that, + +00:01:32.377 --> 00:01:34.937 +but it also gives us the ability to be fast + +00:01:34.938 --> 00:01:37.883 +and has a strong ecosystem behind it. + +00:01:37.884 --> 00:01:40.399 +Rust is also really good at multi-threading. + +00:01:40.400 --> 00:01:43.399 +Their phrase in the community is fearless concurrency. + +00:01:43.400 --> 00:01:45.559 +They should be able to write concurrent programs without + +00:01:45.560 --> 00:01:49.319 +having to worry about data races. It's also really high + +00:01:49.320 --> 00:01:51.839 +performance. It has a really good regex engine. It's known + +00:01:51.840 --> 00:01:55.864 +for its non-copy I/O as well. + +NOTE How does this compare to other projects? + +00:01:55.865 --> 00:01:57.479 +How does this compare to other + +00:01:57.480 --> 00:01:59.919 +Rust and Emacs projects, whether there's been a couple? The + +00:01:59.920 --> 00:02:02.799 +first is Remacs. This project was the first. It took an + +00:02:02.800 --> 00:02:05.519 +outside-in approach. Basically you could take a C + +00:02:05.520 --> 00:02:09.319 +function and replace it with a Rust function and build it + +00:02:09.320 --> 00:02:11.799 +together as one executable. This is pretty easy to do + +00:02:11.800 --> 00:02:14.639 +because they could both talk over the C ABI. You could + +00:02:14.640 --> 00:02:16.479 +swap out functions once at a time. They made really good + +00:02:16.480 --> 00:02:20.279 +progress at first, but eventually they ran into the problem + +00:02:20.280 --> 00:02:23.079 +that as you get down to the really core parts of it, you can't + +00:02:23.080 --> 00:02:25.919 +just replace one function at a time anymore, because some of + +00:02:25.920 --> 00:02:28.159 +that functionality is connected to other things. Like for + +00:02:28.160 --> 00:02:30.359 +example, you can't replace the garbage collector without + +00:02:30.360 --> 00:02:32.759 +replacing the entire garbage collection system. So the + +00:02:32.760 --> 00:02:36.279 +progress really kind of slowed down. Another issue with it + +00:02:36.280 --> 00:02:38.839 +was, is that they were doing a one-to-one rewrite, so they + +00:02:38.840 --> 00:02:41.079 +weren't adding any new features or functionality, just + +00:02:41.080 --> 00:02:43.879 +taking the same code and replacing it in Rust, which doesn't + +00:02:43.880 --> 00:02:46.801 +add any advantages in and of itself. + +00:02:46.802 --> 00:02:50.399 +This spawned Emacs-NG, which was kind of the spiritual successor to + +00:02:50.400 --> 00:02:52.746 +Remacs, where they decided to add new functionality, + +00:02:52.747 --> 00:02:55.808 +the biggest one being a JavaScript runtime, + +00:02:55.809 --> 00:02:58.230 +as well as some new renderers to Emacs. + +00:02:58.231 --> 00:03:01.314 +This is no longer actively developed though. + +NOTE Multi-threading + +00:03:01.315 --> 00:03:04.079 +In this project, one of the big focuses we have is + +00:03:04.080 --> 00:03:07.559 +on multi-threading. The C core itself is, everything is + +00:03:07.560 --> 00:03:09.959 +designed around being single-threaded, all the data + +00:03:09.960 --> 00:03:13.039 +structures and everything like that. Rust has a great + +00:03:13.040 --> 00:03:15.719 +concurrency story. In Rust, everything is intended to be + +00:03:15.720 --> 00:03:18.199 +multi-threaded. That doesn't mean that everything has to + +00:03:18.200 --> 00:03:20.719 +run on multiple threads, but you can't write something that + +00:03:20.720 --> 00:03:22.719 +is limited to only running in a single-threaded + +00:03:22.720 --> 00:03:25.799 +environment. So this makes it really easy to use all the + +00:03:25.800 --> 00:03:28.039 +existing packages and build something that is + +00:03:28.040 --> 00:03:30.480 +concurrency safe. which is what we've done here, + +00:03:30.481 --> 00:03:32.440 +and that was relatively easy to do. + +NOTE Multi-threading elisp + +00:03:32.441 --> 00:03:34.781 +But adding it to Elisp is the hard part, + +00:03:34.782 --> 00:03:36.502 +because we've got to come up with a good model + +00:03:36.503 --> 00:03:39.624 +for Lisp, and Elisp is just a giant ball + +00:03:39.625 --> 00:03:41.479 +of mutable state. We need to find some + +00:03:41.480 --> 00:03:44.566 +way to tame that so we can make workable concurrency + +00:03:44.567 --> 00:03:47.647 +out of it. There's really two ways you can do this. + +NOTE No-GIL method + +00:03:47.648 --> 00:03:49.268 +One is what I call the no-GIL method. + +00:03:49.269 --> 00:03:51.399 +This is what Python is doing, where + +00:03:51.400 --> 00:03:53.919 +you take all of your data structures, you make them + +00:03:53.920 --> 00:03:56.439 +concurrency safe, and then you just leave it up to the + +00:03:56.440 --> 00:03:58.119 +programmer to decide what they're going to do with it. + +00:03:58.120 --> 00:04:00.467 +They've got to build safe abstractions on top of that. + +00:04:00.468 --> 00:04:03.086 +One of the big downsides with this is that + +00:04:03.087 --> 00:04:05.247 +it comes with a pretty high cost. + +00:04:05.248 --> 00:04:07.799 +The last benchmarks I've seen is that by making + +00:04:07.800 --> 00:04:10.879 +everything concurrency safe in Python, single-threaded + +00:04:10.880 --> 00:04:15.799 +code is about 20% slower in some benchmarks. + +00:04:15.800 --> 00:04:19.079 +Since most code is single-threaded, this has a big + +00:04:19.080 --> 00:04:21.039 +performance impact for most code that isn't taking + +00:04:21.040 --> 00:04:23.719 +advantage of the multi-threading. The other thing is this + +00:04:23.720 --> 00:04:26.279 +introduces a lot of nasty concurrency bugs because you can + +00:04:26.280 --> 00:04:29.039 +have anything mutating any part of the data from any thread, + +00:04:29.040 --> 00:04:32.637 +even if you can't have memory unsafety per se. + +NOTE Actors + +00:04:32.638 --> 00:04:34.738 +The other option is actors, + +00:04:34.739 --> 00:04:36.639 +which are a really known way to approach this, + +00:04:36.640 --> 00:04:39.079 +where you trade some of that flexibility that you get + +00:04:39.080 --> 00:04:43.719 +with fully concurrent for more control and. Code and + +00:04:43.720 --> 00:04:45.839 +functions are shared between all the different threads, + +00:04:45.840 --> 00:04:50.599 +but data has to be passed along channels between different + +00:04:50.600 --> 00:04:51.251 +actors. + +NOTE Multi-threading elisp (functions) + +00:04:51.252 --> 00:04:52.919 +We want the functions to be shared, and this + +00:04:52.920 --> 00:04:55.159 +should be pretty easy because we don't mutate functions + +00:04:55.160 --> 00:05:00.119 +like we do data, except when we do. In Lisp, functions are + +00:05:00.120 --> 00:05:03.239 +just lists like anything else. So you can mutate them + +00:05:03.240 --> 00:05:06.279 +just like lists. Even if you're not talking about + +00:05:06.280 --> 00:05:09.159 +interpreted code, like if you have a native compiled + +00:05:09.160 --> 00:05:11.959 +function, you can still mutate the constants inside the + +00:05:11.960 --> 00:05:14.839 +function. For example, here we have a function returns a + +00:05:14.840 --> 00:05:17.679 +string. We take that string out, we mutate that string, and + +00:05:17.680 --> 00:05:23.079 +now the function returns a different string. In Rune, we + +00:05:23.080 --> 00:05:24.999 +enforce that all functions, their constants are + +00:05:25.000 --> 00:05:27.199 +immutable. You can't mutate the insides of a function. You + +00:05:27.200 --> 00:05:29.239 +can still swap out functions and redefine them, but you + +00:05:29.240 --> 00:05:32.239 +can't mutate the inside of a function. This enables them + +00:05:32.240 --> 00:05:34.679 +to be safely shared across threads. + +NOTE Caveats + +00:05:34.680 --> 00:05:36.400 +However, there are some caveats to this. + +00:05:36.401 --> 00:05:38.159 +For example, some functions actually do + +00:05:38.160 --> 00:05:41.439 +need to mutate their own data. The example that we run into is + +00:05:41.440 --> 00:05:44.839 +cl-generic. It uses a method cache. So it has to be able to + +00:05:44.840 --> 00:05:47.639 +update that cache. In this case, we just made a special + +00:05:47.640 --> 00:05:50.799 +case for this particular situation, but we don't know what + +00:05:50.800 --> 00:05:53.159 +more of these we're gonna run into the future where this is + +00:05:53.160 --> 00:05:57.089 +needed behavior to be able to mutate a function. + +NOTE Multi-threading elisp (data) + +00:05:57.090 --> 00:05:59.810 +Okay, so functions are pretty easy. + +00:05:59.811 --> 00:06:00.919 +They just can be shared between + +00:06:00.920 --> 00:06:05.159 +threads, but data can't be immutable, at least not into the + +00:06:05.160 --> 00:06:08.759 +model that Emacs currently has. We have two different + +00:06:08.760 --> 00:06:12.039 +ways to handle this. One is we require whenever you're + +00:06:12.040 --> 00:06:14.399 +calling some other code in a different thread, you have to + +00:06:14.400 --> 00:06:17.039 +send all the variables that it's going to need over to that + +00:06:17.040 --> 00:06:19.159 +thread. This is how you traditionally do inside actors. + +00:06:19.160 --> 00:06:21.919 +Any data that needs to go to a different actor needs to be sent + +00:06:21.920 --> 00:06:25.519 +over a channel. It's relatively easy implementation, but + +00:06:25.520 --> 00:06:28.159 +this is difficult in the Emacs case because everything is + +00:06:28.160 --> 00:06:30.799 +going to be accessing different variables. That means + +00:06:30.800 --> 00:06:33.119 +when you call something, you have to know ahead of time, all + +00:06:33.120 --> 00:06:34.879 +the different variables that are gonna be accessed inside + +00:06:34.880 --> 00:06:38.248 +that other thread and put those in when you call it. + +NOTE Copy values to other threads on demands + +00:06:38.249 --> 00:06:40.959 +The other option we're using is we're copying values to the + +00:06:40.960 --> 00:06:43.439 +other threads on demand. If you're running a thread, it + +00:06:43.440 --> 00:06:45.759 +tries to look up a variable. It doesn't have any value for + +00:06:45.760 --> 00:06:48.759 +that variable. It will go back and ask the main thread and it + +00:06:48.760 --> 00:06:50.959 +will copy that value into that thread and it can continue + +00:06:50.960 --> 00:06:53.399 +execution. This is nice because you can just launch some + +00:06:53.400 --> 00:06:55.639 +code and it'll take care of handling all the data transfer + +00:06:55.640 --> 00:06:57.883 +for you. + +NOTE Multi-threading elisp (buffers) + +00:06:57.884 --> 00:07:00.359 +But we don't want to be copying around is buffers, + +00:07:00.360 --> 00:07:04.199 +because they can be really large. In this case, we have a + +00:07:04.200 --> 00:07:07.599 +mutex. Each thread could only have one current buffer that + +00:07:07.600 --> 00:07:12.279 +it has an exclusive lock to. This comes with some + +00:07:12.280 --> 00:07:16.079 +trade-offs, big one being that if the user tries to access + +00:07:16.080 --> 00:07:18.359 +some buffer, they want to type something, and a background + +00:07:18.360 --> 00:07:20.239 +thread is holding onto that buffer, what do we do in that + +00:07:20.240 --> 00:07:24.959 +situation? And we still need to hold an exclusive lock, even + +00:07:24.960 --> 00:07:26.359 +if we're only going to read a buffer. If you have multiple + +00:07:26.360 --> 00:07:29.159 +readers, they each still need to take turns because we can't + +00:07:29.160 --> 00:07:30.999 +determine if at some point a thread is going to try and mutate + +00:07:31.000 --> 00:07:33.879 +the buffer. It has to be an exclusive lock. The other issue + +00:07:33.880 --> 00:07:37.799 +is buffer-locals. This is less of a implementation issue + +00:07:37.800 --> 00:07:40.519 +as much as it is a technical issue. Because you think about + +00:07:40.520 --> 00:07:42.759 +when we switch to a buffer, it has some buffer-local data and + +00:07:42.760 --> 00:07:45.399 +we have some thread-local data. As we go through, we're + +00:07:45.400 --> 00:07:47.599 +mutating everything. Those can get intertwined and + +00:07:47.600 --> 00:07:49.719 +pointing to each other. Then we switch away from that + +00:07:49.720 --> 00:07:51.679 +buffer. We need some quick way to be able to separate those + +00:07:51.680 --> 00:07:54.279 +out. The buffer-locals can go with the buffer-locals and + +00:07:54.280 --> 00:07:56.439 +the thread data can stay with thread data and make copies of + +00:07:56.440 --> 00:07:58.719 +anything that was pointing to the other side. But we don't + +00:07:58.720 --> 00:08:02.839 +have a good method to determine how to separate those two, + +00:08:02.840 --> 00:08:05.359 +like what data belongs to this and what data belongs to this, + +00:08:05.360 --> 00:08:08.199 +so that we can do that quickly. We haven't found a good + +00:08:08.200 --> 00:08:09.599 +solution to that yet, but it's something we're still + +00:08:09.600 --> 00:08:11.902 +working on. + +NOTE Would this actually be useful? + +00:08:11.903 --> 00:08:13.079 +The question is, would this actually be + +00:08:13.080 --> 00:08:15.959 +useful for doing real work inside Emacs? I would say, + +00:08:15.960 --> 00:08:17.959 +yes, there's a lot of things you can do with this. You could + +00:08:17.960 --> 00:08:20.239 +handle process output in the background. You can do syntax + +00:08:20.240 --> 00:08:23.479 +highlighting. You can do buffer search in parallel. You can + +00:08:23.480 --> 00:08:26.679 +do LSP. You can do fetching your mail in the background. You + +00:08:26.680 --> 00:08:29.639 +can have a window manager that doesn't block your window + +00:08:29.640 --> 00:08:32.319 +manager when Emacs is blocked. You could do + +00:08:32.320 --> 00:08:34.479 +something like a file system watcher that keeps up on files + +00:08:34.480 --> 00:08:37.559 +without blocking Emacs. This wouldn't be so great for + +00:08:37.560 --> 00:08:39.159 +building concurrent data structures or operating on + +00:08:39.160 --> 00:08:42.199 +shared data or building your own abstractions, because of the + +00:08:42.200 --> 00:08:46.039 +trade-offs that we've made here. Okay. That's talking + +00:08:46.040 --> 00:08:46.918 +about multi-threading. + +NOTE Precise garbage collection + +00:08:46.919 --> 00:08:47.599 +The other thing we're going to talk + +00:08:47.600 --> 00:08:51.319 +about is precise garbage collection. In Rune, we have a + +00:08:51.320 --> 00:08:54.439 +safe, precise garbage collection because of the Rust type + +00:08:54.440 --> 00:08:58.119 +system. Let's look at what the problem is with garbage + +00:08:58.120 --> 00:09:00.479 +collection in the first place. Really, the tricky part + +00:09:00.480 --> 00:09:03.719 +about garbage collection is rooting. How do we find out what + +00:09:03.720 --> 00:09:06.159 +the roots are? These are all the values that are on the + +00:09:06.160 --> 00:09:08.679 +stack or inside the registers. In this example here, we + +00:09:08.680 --> 00:09:11.919 +allocate an object. We call garbage_collect, that object's + +00:09:11.920 --> 00:09:13.536 +collected, and then we try and return it. + +00:09:13.537 --> 00:09:16.536 +It's no longer valid. + +NOTE How Emacs used to deal with roots + +00:09:16.537 --> 00:09:19.039 +Let's look at how Emacs used to deal with this + +00:09:19.040 --> 00:09:22.559 +problem way back in the day. There was a system called gcpro + +00:09:22.560 --> 00:09:26.319 +or GC Protect, which is basically designed that every time a + +00:09:26.320 --> 00:09:28.919 +value needed to survive past a garbage collection point, + +00:09:28.920 --> 00:09:32.359 +you had to try and protect it. In order to do this, you had + +00:09:32.360 --> 00:09:35.439 +to declare a struct, you had to put a macro around it to root + +00:09:35.440 --> 00:09:37.999 +the object, and then you had to unroot it when you were done-- + +00:09:38.000 --> 00:09:41.559 +past the garbage collection. Now the value is safe. You + +00:09:41.560 --> 00:09:44.039 +can see down here, I pulled these eight rules out from a + +00:09:44.040 --> 00:09:46.919 +really old version of the Emacs manual about all the things + +00:09:46.920 --> 00:09:49.279 +you had to keep track of when you were trying to use this + +00:09:49.280 --> 00:09:52.319 +system. All right, so there was a special handling for + +00:09:52.320 --> 00:09:54.639 +nested GC protects. You had to make sure the memory was + +00:09:54.640 --> 00:09:58.239 +initialized. You had to make sure that traps couldn't occur + +00:09:58.240 --> 00:10:00.839 +between allocating and when GC protect would happen. It + +00:10:00.840 --> 00:10:03.319 +can be tricky because you don't always know when a function + +00:10:03.320 --> 00:10:06.879 +that's getting called could potentially call garbage + +00:10:06.880 --> 00:10:10.719 +collection. So if you got something wrong, you also + +00:10:10.720 --> 00:10:12.719 +might not catch it for a long time because garbage + +00:10:12.720 --> 00:10:15.719 +collection may only get called one out of 99 times. The other + +00:10:15.720 --> 00:10:18.999 +99 times is just fine. That one time it happens and you + +00:10:19.000 --> 00:10:22.559 +can't reproduce the issue. When you do get this wrong and + +00:10:22.560 --> 00:10:24.439 +some, something doesn't get rooted and it gets + +00:10:24.440 --> 00:10:26.319 +overwritten, it generally doesn't show up right where the + +00:10:26.320 --> 00:10:28.799 +problem is. It gets showed up way later when you actually try + +00:10:28.800 --> 00:10:31.479 +and access the value and the value is invalid. You've got + +00:10:31.480 --> 00:10:33.639 +to track it back to where that thing did not get properly + +00:10:33.640 --> 00:10:37.359 +rooted. It's a huge source of bugs and very hard to + +00:10:37.360 --> 00:10:38.712 +maintain. + +NOTE Conservative stack scanning + +00:10:38.713 --> 00:10:40.119 +Emacs decided to go with a different path, + +00:10:40.120 --> 00:10:42.399 +which we call conservative stack scanning. Basically, + +00:10:42.400 --> 00:10:45.239 +the garbage collector just looks at the stack and all the + +00:10:45.240 --> 00:10:47.959 +registers and any data inside there that looks like it could + +00:10:47.960 --> 00:10:52.279 +be a pointer, it treats it as a pointer. This is nice because + +00:10:52.280 --> 00:10:54.711 +you get really easy root tracking, + +00:10:54.712 --> 00:10:56.113 +but it also comes with some trade-offs, + +00:10:56.114 --> 00:11:00.156 +mostly that your objects are no longer movable. + +NOTE Movable objects + +00:11:00.157 --> 00:11:03.079 +Why would we want movable objects in Emacs? + +00:11:03.080 --> 00:11:05.839 +There's a couple of different reasons. One is compaction. + +00:11:05.840 --> 00:11:08.199 +You can take all your heap, you can pack that on down because + +00:11:08.200 --> 00:11:11.239 +you can coalesce all your objects together. Another is that + +00:11:11.240 --> 00:11:13.239 +it's easy to implement generational garbage collection. + +00:11:13.240 --> 00:11:16.039 +You can just copy everything out of your minor heap into your + +00:11:16.040 --> 00:11:21.839 +older heap. Really, Emacs is kind of uniquely ideal for + +00:11:21.840 --> 00:11:24.279 +generational collection, because the typical way we + +00:11:24.280 --> 00:11:27.799 +interact with Emacs is as a series of commands. You execute + +00:11:27.800 --> 00:11:29.959 +some command, you'd execute the next command, you execute + +00:11:29.960 --> 00:11:33.199 +a command. It could be happening every key press, it could be + +00:11:33.200 --> 00:11:36.759 +happening with M-x. However long that command is, that is + +00:11:36.760 --> 00:11:40.959 +the ideal length for the minor collection generation, the + +00:11:40.960 --> 00:11:43.399 +first generation. Because once you're done with that + +00:11:43.400 --> 00:11:45.879 +generation, anything that's still existing is going to be + +00:11:45.880 --> 00:11:49.079 +around for a very long time. So that works out really well + +00:11:49.080 --> 00:11:52.279 +for Emacs. We want to make this a generational collector. + +00:11:52.280 --> 00:11:56.199 +The other thing is with object layout. We use a lot of lists + +00:11:56.200 --> 00:12:00.559 +inside Emacs Lisp. Every time you go to the cdr, you've + +00:12:00.560 --> 00:12:03.039 +got to be chasing a pointer around the heap and following + +00:12:03.040 --> 00:12:05.439 +that. That can potentially result in cache misses and + +00:12:05.440 --> 00:12:08.239 +all sorts of other things like that. So it can take a long + +00:12:08.240 --> 00:12:12.159 +time. It can be quite slow. But if you have the ability to move + +00:12:12.160 --> 00:12:16.559 +objects, you can just relocate an entire list and lay it out + +00:12:16.560 --> 00:12:19.168 +in an array right next to each other inside memory. + +00:12:19.169 --> 00:12:22.479 +So iterating over it is just as fast as iterating over an array. + +00:12:22.480 --> 00:12:25.421 +But you can only do that if you have movable objects. + +00:12:25.422 --> 00:12:28.399 +I'll point out here too, that with conservative stack scanning, + +00:12:28.400 --> 00:12:31.599 +it's not that all objects are immovable. It's only ones that + +00:12:31.600 --> 00:12:35.519 +are pointed to from the stack or from the registers that have + +00:12:35.520 --> 00:12:38.828 +to become immovable. + +NOTE How Rust makes precise GC easy + +00:12:38.829 --> 00:12:41.039 +Let's look at how Rust makes precise + +00:12:41.040 --> 00:12:44.439 +garbage collection easy. Here I have some Rust code to + +00:12:44.440 --> 00:12:47.279 +show kind of how the lifetime system works and what we call + +00:12:47.280 --> 00:12:49.879 +XOR mutability, where we can only have one mutable + +00:12:49.880 --> 00:12:52.879 +reference or multiple immutable references to the same + +00:12:52.880 --> 00:12:56.199 +thing. Here we declare a vector, we take a reference to the + +00:12:56.200 --> 00:12:59.199 +first element of the vector, and then we mutate the vector. + +00:12:59.200 --> 00:13:02.239 +Now this could potentially resize the vector and move it to a + +00:13:02.240 --> 00:13:04.919 +different location in memory, so that reference is no + +00:13:04.920 --> 00:13:07.759 +longer valid. The nice thing is, Rust catches this for + +00:13:07.760 --> 00:13:10.479 +us. It says, hey, this is no longer valid. This reference + +00:13:10.480 --> 00:13:14.519 +can't survive past when you mutated it. Okay? That's + +00:13:14.520 --> 00:13:17.559 +exactly what we want for a garbage collector. You can see + +00:13:17.560 --> 00:13:19.879 +here, we take this in a garbage collection context, we + +00:13:19.880 --> 00:13:23.359 +create a new context object, we add an object, we call + +00:13:23.360 --> 00:13:26.759 +garbage_collect, then we try and access that object. It's no + +00:13:26.760 --> 00:13:29.199 +longer accessible, and Rust will prevent us from trying to + +00:13:29.200 --> 00:13:34.839 +access that variable. So, how do we solve this? We have a + +00:13:34.840 --> 00:13:39.759 +root macro. We declared this root macro, it lets us take the + +00:13:39.760 --> 00:13:41.759 +object and let it live past garbage collection, and + +00:13:41.760 --> 00:13:45.319 +everything works out. The nice thing is, this root macro + +00:13:45.320 --> 00:13:47.799 +will get dropped when it's out of scope, so we don't have to + +00:13:47.800 --> 00:13:51.519 +worry about the un-gc-protect step of this. Statically, + +00:13:51.520 --> 00:13:55.799 +Rust will verify and tell us any object that needs to be + +00:13:55.800 --> 00:13:58.279 +rooted. If we try and access it, it'll tell us it's invalid. + +00:13:58.280 --> 00:14:00.999 +We have this root macro and then we can access it. So in + +00:14:01.000 --> 00:14:03.759 +that way, we have safe, precise garbage collection without + +00:14:03.760 --> 00:14:07.479 +any chance of introducing undefined behavior, which is + +00:14:07.480 --> 00:14:09.999 +really, really powerful. It's really easy because the + +00:14:10.000 --> 00:14:13.226 +type system will catch it all for us. + +NOTE Other Rust niceties: proc macro + +00:14:13.227 --> 00:14:15.147 +There's some other Rust niceties I want to kind of + +00:14:15.148 --> 00:14:16.799 +talk through that are useful, but + +00:14:16.800 --> 00:14:21.079 +are not, you know, star features. One is proc macros. You + +00:14:21.080 --> 00:14:23.679 +can see up on the top, you can see how you declare a function + +00:14:23.680 --> 00:14:27.359 +inside the C core. All right. You have to use the macro. You + +00:14:27.360 --> 00:14:29.141 +have to put the list type, the function type, + +00:14:29.142 --> 00:14:30.963 +the struct type, the different types of arguments + +00:14:30.964 --> 00:14:33.225 +or different number of arguments, the doc string, + +00:14:33.226 --> 00:14:36.023 +and then you can put your argument listing down inside there. + +00:14:36.024 --> 00:14:37.984 +On the Rust side, we just write this like we would + +00:14:37.985 --> 00:14:40.044 +any other Rust function. And then we put + +00:14:40.045 --> 00:14:41.285 +the defun proc macro on there + +00:14:41.286 --> 00:14:44.186 +and it takes care of everything for us behind the scenes. + +00:14:44.187 --> 00:14:46.407 +A couple of cool additional things we can do with this + +00:14:46.408 --> 00:14:48.727 +is that we don't have to make everything just an object. + +00:14:48.728 --> 00:14:49.759 +We can actually make things + +00:14:49.760 --> 00:14:54.239 +more specific types. Here we have symbols. As well as + +00:14:54.240 --> 00:14:56.279 +you can see subfeature, it's an optional parameter, and we + +00:14:56.280 --> 00:15:00.919 +just make it an option inside Rust and it automatically make + +00:15:00.920 --> 00:15:03.599 +it an optional inside Elisp. + +00:15:03.600 --> 00:15:05.181 +This makes them really easy to write. + +00:15:05.182 --> 00:15:06.439 +I can't take credit for this is because this is + +00:15:06.440 --> 00:15:09.119 +something that I saw inside Remacs and I stole from them, but + +00:15:09.120 --> 00:15:11.439 +it makes the functions really easy to call from each other + +00:15:11.440 --> 00:15:14.559 +and really easy to write as well. + +NOTE sum types + +00:15:14.560 --> 00:15:18.523 +Another thing that's really nice is sum types. + +00:15:18.524 --> 00:15:21.039 +In the C core, if I wanted to get a + +00:15:21.040 --> 00:15:23.759 +string out of an object, I would first need to check that it's + +00:15:23.760 --> 00:15:28.319 +a string and then dereference it as a string. But if it's not a + +00:15:28.320 --> 00:15:30.679 +string, I may introduce undefined behavior. So in + +00:15:30.680 --> 00:15:32.799 +complicated code, I have to make sure that I have always + +00:15:32.800 --> 00:15:34.959 +checked what type it is before I try and dereference that + +00:15:34.960 --> 00:15:37.879 +type. We don't have to worry about any of that inside Rust + +00:15:37.880 --> 00:15:41.319 +because we can untag a value and we can use their some types, + +00:15:41.320 --> 00:15:44.399 +basically create an enum and we can match on what the + +00:15:44.400 --> 00:15:47.639 +different values can be. Then we only get out the types + +00:15:47.640 --> 00:15:50.359 +that are viable or are actually there. So we never + +00:15:50.360 --> 00:15:52.159 +accidentally get something out of an object that we didn't + +00:15:52.160 --> 00:15:54.239 +mean to, or dereference it as something that doesn't + +00:15:54.240 --> 00:15:56.879 +really exist. We can just match on it and we can get out the + +00:15:56.880 --> 00:16:01.040 +values that we need, which is really, really powerful. + +NOTE Regex + +00:16:01.041 --> 00:16:03.639 +So there's some other Rust niceties as well working with here. + +00:16:03.640 --> 00:16:07.799 +One is the regex engine inside Rust is really fast, high + +00:16:07.800 --> 00:16:10.959 +performance. We are using that for the Elixir regex + +00:16:10.960 --> 00:16:14.879 +engine to give it high performance and worst-case + +00:16:14.880 --> 00:16:16.051 +guarantees. + +NOTE Parsers + +00:16:16.052 --> 00:16:18.599 +The other is that Rust has a lot of really good + +00:16:18.600 --> 00:16:21.559 +parsers for things like JSON that are no copy parsers that + +00:16:21.560 --> 00:16:24.719 +are high performance. We can use those inside Rune as + +00:16:24.720 --> 00:16:27.209 +well. + +NOTE Other changes: GUI first, terminal second + +00:16:27.210 --> 00:16:29.439 +There's a handful of other changes we're working on + +00:16:29.440 --> 00:16:33.119 +that are not Rust-specific, but we'd like to see. The first is + +00:16:33.120 --> 00:16:36.759 +being GUI first, terminal second. This means two things. + +00:16:36.760 --> 00:16:40.039 +First is that we have all of our key bindings. Right now + +00:16:40.040 --> 00:16:43.279 +inside Emacs, C-i and TAB are bound to the same key + +00:16:43.280 --> 00:16:45.039 +binding by default, because that's how it works inside the + +00:16:45.040 --> 00:16:48.119 +terminal. In the GUI, you shouldn't have that limitation. + +00:16:48.120 --> 00:16:52.559 +The second is that the GUI should not block when Lisp is + +00:16:52.560 --> 00:16:55.199 +blocked. It should be independent of that. Your GUI can + +00:16:55.200 --> 00:16:58.918 +still continue to operate when Lisp is running. + +NOTE Off-screen cursor + +00:16:58.919 --> 00:17:01.279 +The other is the ability to have an off-screen cursor + +00:17:01.280 --> 00:17:02.699 +so that you can be typing on something, + +00:17:02.700 --> 00:17:04.319 +you can scroll up and down and the point + +00:17:04.320 --> 00:17:06.719 +doesn't have to follow you where you lose your place where + +00:17:06.720 --> 00:17:09.399 +you were before. You don't have to intentionally set a mark. + +00:17:09.400 --> 00:17:11.199 +You can just scroll and then start typing and it'll go back up + +00:17:11.200 --> 00:17:13.879 +to where it was before, like it works in most applications. + +00:17:13.880 --> 00:17:16.304 +And this can be optional. + +NOTE Image flow + +00:17:16.305 --> 00:17:18.079 +The other is image flow. We want it + +00:17:18.080 --> 00:17:20.879 +so that you can easily flow images and you can have large + +00:17:20.880 --> 00:17:23.159 +images and scroll past them without jumping and you can flow + +00:17:23.160 --> 00:17:24.439 +text around images. + +NOTE Testing + +00:17:24.440 --> 00:17:29.799 +How are we testing this project? Because there's a lot of + +00:17:29.800 --> 00:17:33.159 +things that you could get wrong here. One thing we're doing + +00:17:33.160 --> 00:17:38.039 +is we're using ERT. Emacs ships with over 7,000 built-in + +00:17:38.040 --> 00:17:42.879 +tests--Elisp tests. We are using this test suite to test + +00:17:42.880 --> 00:17:45.079 +our project as well. We can kind of use this as a dashboard + +00:17:45.080 --> 00:17:47.679 +of saying how close are we to getting to parity with GNU + +00:17:47.680 --> 00:17:52.319 +Emacs. The other thing that we have is a tool called elprop, + +00:17:52.320 --> 00:17:55.279 +which is an external utility that basically tests for + +00:17:55.280 --> 00:17:58.719 +correctness. Because really, the correctness of Rune is + +00:17:58.720 --> 00:18:00.999 +whatever Emacs does, because there's no official spec on + +00:18:01.000 --> 00:18:04.079 +how things should behave. To do this, we can go look at + +00:18:04.080 --> 00:18:07.159 +the Rust function signature. We know what the arguments + +00:18:07.160 --> 00:18:09.319 +are, we know how many they are, and we know what types they + +00:18:09.320 --> 00:18:11.679 +should be. Given that information, we can generate a + +00:18:11.680 --> 00:18:15.279 +whole bunch of random functions feeding those types in. And + +00:18:15.280 --> 00:18:18.959 +then we send a copy over to Emacs, we send a copy over to Rune. + +00:18:18.960 --> 00:18:21.679 +They each evaluate it and they return the result and we make + +00:18:21.680 --> 00:18:23.519 +sure the results are the same. Then you do that for + +00:18:23.520 --> 00:18:26.199 +thousands of different implementations of the function. + +00:18:26.200 --> 00:18:29.039 +And it helps us find corner cases really easy without having + +00:18:29.040 --> 00:18:31.639 +to handwrite a whole bunch of different cases to test things + +00:18:31.640 --> 00:18:36.344 +and say, where are these two functions different? + +NOTE Status + +00:18:36.345 --> 00:18:39.359 +So the current status: we already have a multi-threaded Elixir + +00:18:39.360 --> 00:18:42.999 +interpreter and bytecode engine inside there. There's no + +00:18:43.000 --> 00:18:45.679 +actual text editor in there yet, but the primitives are + +00:18:45.680 --> 00:18:48.679 +there. Like you can insert text, move point around, + +00:18:48.680 --> 00:18:52.039 +delete text, do different things like that. But we don't + +00:18:52.040 --> 00:18:53.679 +have a GUI hooked up to different key bindings to actually + +00:18:53.680 --> 00:18:58.159 +type on. There's just a REPL to operate in. We have about + +00:18:58.160 --> 00:19:01.279 +250 of the 1500 built-in functions already implemented + +00:19:01.280 --> 00:19:04.119 +inside there. There's a lot of low-hanging fruit inside this + +00:19:04.120 --> 00:19:07.246 +area to still be implemented. + +NOTE Next directions + +00:19:07.247 --> 00:19:07.719 +The next directions we're + +00:19:07.720 --> 00:19:11.959 +working on is we're optimizing the GC. We want to make it + +00:19:11.960 --> 00:19:13.839 +generational. Like I said, right now, it's just a simple + +00:19:13.840 --> 00:19:17.359 +semi-spaced copying GC. We want to add a proper GUI. We need + +00:19:17.360 --> 00:19:19.599 +to implement text properties, overlays, process and job + +00:19:19.600 --> 00:19:22.738 +control, all that goodness right there. + +NOTE How to get involved + +00:19:22.739 --> 00:19:25.378 +How can you get involved? This is hosted on GitHub. + +00:19:25.379 --> 00:19:26.424 +You can come on over. + +00:19:26.425 --> 00:19:28.639 +If you have any ideas about how to implement something or + +00:19:28.640 --> 00:19:30.639 +something you'd like to see done, go ahead and just open an + +00:19:30.640 --> 00:19:32.799 +issue so we can have a discussion about it. We've had lots of + +00:19:32.800 --> 00:19:34.599 +interesting discussions with different people coming in + +00:19:34.600 --> 00:19:37.639 +to the GitHub repo. If you're interested in contributing, + +00:19:37.640 --> 00:19:40.439 +the easiest way is probably to run elprop, pick some + +00:19:40.440 --> 00:19:43.279 +function, run elprop on it. I promise it won't take long to + +00:19:43.280 --> 00:19:45.639 +find some issues, some discrepancy between Emacs and Rune, + +00:19:45.640 --> 00:19:48.959 +and that lets you dive into the Rust code and figure out, and + +00:19:48.960 --> 00:19:50.879 +the C code, and figure out what the difference is between the + +00:19:50.880 --> 00:19:53.119 +two. or come along and help implement your favorite + +00:19:53.120 --> 00:19:55.679 +functionality. This has been a really interesting project + +00:19:55.680 --> 00:19:58.359 +so far, and we've had a handful of different contributors on + +00:19:58.360 --> 00:20:01.799 +it who just kind of want to learn Rust or get more into + +00:20:01.800 --> 00:20:06.000 +systems-level programming. Thank you. diff --git a/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt new file mode 100644 index 00000000..b75132d7 --- /dev/null +++ b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt @@ -0,0 +1,35 @@ +WEBVTT + + +00:00:00.007 --> 00:00:06.125 +General and Development tracks + +00:00:06.126 --> 00:00:59.965 +Watching and participating + +00:00:59.966 --> 00:02:30.001 +Questions and answers + +00:02:30.002 --> 00:03:02.056 +Etherpad + +00:03:02.057 --> 00:03:46.229 +Internet Relay Chat + +00:03:46.230 --> 00:04:07.334 +Open captions + +00:04:07.335 --> 00:04:18.928 +Status + +00:04:18.929 --> 00:04:26.423 +Conduct + +00:04:26.424 --> 00:04:37.332 +Recordings + +00:04:37.333 --> 00:04:42.248 +emacsconf-discuss updates + +00:04:42.249 --> 00:04:59.991 +Let's go! diff --git a/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt new file mode 100644 index 00000000..b7e47d82 --- /dev/null +++ b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt @@ -0,0 +1,367 @@ +WEBVTT + +00:00.007 --> 00:03.484 +Welcome to EmacsConf 2024, where we have fun + +00:03.485 --> 00:06.125 +exploring how much we can do with a text editor. + +00:06.126 --> 00:08.161 +It's hard to give a general overview + +00:08.162 --> 00:10.039 +of all the cool talks today and tomorrow, + +00:10.040 --> 00:11.237 +so you can flip through the talks + +00:11.238 --> 00:12.902 +and see what sparks your interests. + +00:12.903 --> 00:15.334 +Don't feel limited to one track or another. + +00:15.335 --> 00:18.492 +The best parts of EmacsConf are the conversations. + +00:18.493 --> 00:21.290 +The wiki has a page on how to watch and participate, + +00:21.291 --> 00:23.688 +and I'll give you a quick overview as well. + +00:23.689 --> 00:26.886 +You can watch both streams at live.emacsconf.org + +00:26.887 --> 00:29.364 +using free and open source software. + +00:29.365 --> 00:31.442 +Using a streaming media player like mpv + +00:31.443 --> 00:34.640 +seems to be the best way to watch in terms of performance + +00:34.641 --> 00:36.359 +but there are also web-based players + +00:36.360 --> 00:37.917 +just in case that's all you've got. + +00:37.918 --> 00:39.915 +The schedule shows the General track on top + +00:39.916 --> 00:41.533 +and the Development track on the bottom, + +00:41.534 --> 00:43.631 +so you can see what else is going on. + +00:43.632 --> 00:45.168 +As you're watching the talks, + +00:45.169 --> 00:47.488 +you can refer to the schedule in another window. + +00:47.489 --> 00:50.406 +Hover over the boxes to see the times and titles, + +00:50.407 --> 00:52.044 +and click on the boxes in the schedule + +00:52.045 --> 00:54.643 +to jump to the talk's page for more details. + +00:54.644 --> 00:57.821 +You can also get the schedule as an iCalendar file + +00:57.822 --> 00:59.965 +or as an Org file in different time zones. + +00:59.966 --> 01:01.438 +Many talks will be followed by + +01:01.439 --> 01:04.076 +live Q&A web conferences with the speaker, + +01:04.077 --> 01:06.583 +which will be done in BigBlueButton or BBB. + +01:06.584 --> 01:09.333 +These are indicated with a solid border on the schedule + +01:09.334 --> 01:12.482 +and by Q&A: BBB on the schedule page. + +01:12.483 --> 01:14.410 +You can join the web conference room + +01:14.411 --> 01:15.989 +by clicking on the BBB link + +01:15.990 --> 01:18.747 +on the schedule page or the talk's webpage. + +01:18.748 --> 01:21.846 +Then you can ask your questions yourself when the Q&A starts. + +01:21.847 --> 01:24.824 +To improve performance, please keep your webcam off + +01:24.825 --> 01:27.043 +and stay muted until it's your turn to talk. + +01:27.044 --> 01:28.261 +If you don't like Javascript, + +01:28.262 --> 01:30.259 +you can still ask questions via IRC + +01:30.260 --> 01:32.434 +and the hosts can read them out for you. + +01:32.435 --> 01:34.192 +We're probably going to automatically switch + +01:34.193 --> 01:36.190 +between talks and Q&A sessions, + +01:36.191 --> 01:38.868 +so the transitions on the stream might be a little sudden. + +01:38.869 --> 01:40.387 +People in the BigBlueButton room + +01:40.388 --> 01:42.025 +can continue the conversation + +01:42.026 --> 01:44.463 +even after the talk moves off-stream. + +01:44.464 --> 01:46.181 +and you can also reach out to the speakers + +01:46.182 --> 01:48.724 +using the contact information on the talk page. + +01:48.725 --> 01:52.222 +Other talks will have Q&A via Etherpad or IRC, + +01:52.223 --> 01:54.180 +depending on what the speakers prefer. + +01:54.181 --> 01:56.738 +This is indicated in the schedule with a dashed border + +01:56.739 --> 01:58.264 +and on the schedule page as well. + +01:58.265 --> 01:59.603 +As an experiment, + +01:59.604 --> 02:02.002 +the Q&A for the mcclim talk this afternoon + +02:02.003 --> 02:03.881 +will also be in LambdaMOO. + +02:03.882 --> 02:05.040 +If you'd like to try it out, + +02:05.041 --> 02:07.039 +see the mcclim talk page for instructions + +02:07.040 --> 02:08.759 +so you can join the discussion there. + +02:08.760 --> 02:11.557 +The schedule pages and track pages have quick shortcuts + +02:11.558 --> 02:14.675 +so that you can find out more about talks, open the Etherpads, + +02:14.676 --> 02:16.402 +and join the Q&A sessions. + +02:16.403 --> 02:18.192 +The watch page has more tips + +02:18.193 --> 02:19.731 +on how to make the most of Q&A. + +02:19.732 --> 02:22.609 +If you can, please add notes and ask questions + +02:22.610 --> 02:25.087 +in the Etherpad for the talk. That makes it easier + +02:25.088 --> 02:26.725 +for everyone to share their notes, + +02:26.726 --> 02:29.603 +and speakers and hosts can read the questions from there. + +02:29.604 --> 02:31.841 +We'll copy the notes to the talk pages afterwards. + +02:31.842 --> 02:33.719 +We have one pad for each talk, + +02:33.720 --> 02:36.197 +so you can follow the links to get to the next one + +02:36.198 --> 02:39.115 +or go back to the schedule and get the link from there. + +02:39.116 --> 02:40.633 +If you have general feedback about + +02:40.634 --> 02:42.791 +the conference itself, please put it in + +02:42.792 --> 02:47.389 +pad.emacsconf.org/2024 , which is linked on each pad. + +02:47.390 --> 02:49.547 +You can also use this as a general community message board + +02:49.548 --> 02:51.786 +for things like Help Wanted. + +02:51.787 --> 02:54.864 +Internet Relay Chat or IRC can be another great way + +02:54.865 --> 02:56.982 +to be part of lots of conversations. + +02:56.983 --> 03:01.180 +You can use chat.emacsconf.org to join the IRC channels + +03:01.181 --> 03:02.712 +through your web browser. + +03:02.713 --> 03:04.657 +The tabs on the left can help you + +03:04.658 --> 03:06.775 +switch between the different channels. + +03:06.776 --> 03:09.453 +There's #emacsconf-gen for the General track + +03:09.454 --> 03:12.171 +and #emacsconf-dev for the Development track. + +03:12.172 --> 03:16.089 +If you need to reach us, you can join #emacsconf-org + +03:16.090 --> 03:21.248 +or e-mail emacsconf-org-private@gnu.org. + +03:21.249 --> 03:25.205 +You can use #emacsconf for hallway conversations. + +03:25.206 --> 03:27.283 +Of course, you can join any of these channels + +03:27.284 --> 03:29.182 +with your favourite IRC client + +03:29.183 --> 03:32.080 +by connecting to irc.libera.chat + +03:32.081 --> 03:35.959 +port 6697 using TLS. + +03:35.960 --> 03:38.597 +Once again, we're going to be streaming with open captions + +03:38.598 --> 03:41.355 +for most of the talks this year, thanks to our speakers and + +03:41.356 --> 03:44.793 +captioning volunteers. The captioned talks are indicated + +03:44.794 --> 03:47.231 +on the schedule, and with any luck, we'll be posting + +03:47.232 --> 03:50.709 +transcripts on talk pages shortly after the talks start. + +03:50.710 --> 03:52.307 +If you need additional accommodations, + +03:52.308 --> 03:54.566 +please let us know in #emacsconf-org + +03:54.567 --> 03:57.064 +and we'll see if we can make things happen. + +03:57.065 --> 04:00.942 +If something goes down, we'll update status.emacsconf.org. + +04:00.943 --> 04:02.700 +If it doesn't look like we've noticed yet, + +04:02.701 --> 04:06.099 +please let us know in the #emacsconf-org IRC channel, + +04:06.100 --> 04:08.658 +where we will be quietly panicking. + +04:08.659 --> 04:11.216 +In all of these conversations, please keep in mind + +04:11.217 --> 04:13.534 +our guidelines for conduct. You can find them on the wiki. + +04:13.535 --> 04:16.153 +They basically boil down to: please be nice. + +04:16.154 --> 04:18.430 +If all goes well, the prerecorded talks and transcripts + +04:18.431 --> 04:20.348 +should be available from the talk pages + +04:20.349 --> 04:21.906 +shortly after they start playing, + +04:21.907 --> 04:24.304 +and we'll post the recordings of live talks + +04:24.305 --> 04:27.062 +and Q&A sessions within the next month or so. + +04:27.063 --> 04:29.300 +If you'd like to get an update, you can subscribe to + +04:29.301 --> 04:31.978 +the emacsconf-discuss mailing list. + +04:31.979 --> 04:33.056 +All right, let's get going. + +04:33.057 --> 04:34.974 +Leo is hosting the general track, + +04:34.975 --> 04:36.772 +and Corwin is hosting the development track. + +04:36.773 --> 04:39.850 +The other volunteers and I will run around mostly backstage, + +04:39.851 --> 04:41.888 +and you'll probably meet us in the closing remarks. + +04:41.889 --> 04:43.326 +That's also where we get to thank + +04:43.327 --> 04:45.124 +all the people and organizations + +04:45.125 --> 04:46.322 +who make EmacsConf possible. + +04:46.323 --> 04:49.721 +Thanks for coming to EmacsConf 2024. diff --git a/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt new file mode 100644 index 00000000..01d22a35 --- /dev/null +++ b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt @@ -0,0 +1,26 @@ +WEBVTT + + +00:00:00.000 --> 00:03:23.309 +Introduction + +00:03:23.310 --> 00:07:39.187 +Q&A technical issues + +00:07:39.188 --> 00:08:08.531 +Q: Can you describe some potential interactive uses for this within Emacs? + +00:08:08.532 --> 00:09:12.066 +Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo? + +00:09:12.067 --> 00:10:23.629 +Q: How do you decide whether to use SOPS or other solutions such as pass-cli? + +00:10:23.630 --> 00:11:11.982 +Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this? + +00:11:11.983 --> 00:11:49.438 +Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext? + +00:11:49.439 --> 00:14:57.085 +Q: can you describe some potential interactive uses for this within Emacs diff --git a/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt new file mode 100644 index 00000000..fd90802a --- /dev/null +++ b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt @@ -0,0 +1,725 @@ +WEBVTT + +NOTE Introduction + +00:00:00.000 --> 00:00:01.349 +Yeah, my talk is committing + +00:00:01.350 --> 00:00:10.189 +secrets with Git via SOPS mode. So what is SOPS? SOPS + +00:00:10.190 --> 00:00:15.069 +came originally from Mozilla, and their acronym was Secret + +00:00:15.070 --> 00:00:19.669 +Operations, so S-O-P-S. It's a utility that allows you to + +00:00:19.670 --> 00:00:24.269 +encrypt pretty much any file you want and then have the + +00:00:24.270 --> 00:00:27.869 +ability to commit it or just share it with somebody that has + +00:00:27.870 --> 00:00:32.709 +the ability to decrypt it. I've mostly used it with AWS KMS, + +00:00:32.710 --> 00:00:36.829 +but there's a number of encryptions, ways you can encrypt + +00:00:36.830 --> 00:00:41.909 +it. Um, so yeah, that's what SOPS mode is. Most of the + +00:00:41.910 --> 00:00:45.709 +time I've used it is with application or deployment + +00:00:45.710 --> 00:00:48.269 +secrets--decrypt them on the fly during a + +00:00:48.270 --> 00:00:52.109 +pipeline run and then use them. We've also + +00:00:52.110 --> 00:00:56.549 +been using it for kind of a self-service for engineers + +00:00:56.550 --> 00:00:59.629 +to be able to say, if there's an API token that they + +00:00:59.630 --> 00:01:03.429 +need either in the container or that gets put + +00:01:03.430 --> 00:01:09.109 +somewhere else, that's another way to use SOPS. + +00:01:09.110 --> 00:01:13.949 +Just sharing secrets. The tooling, there's + +00:01:13.950 --> 00:01:16.814 +quite a bit of tooling for Terraform. + +00:01:16.815 --> 00:01:19.090 +You can just decrypt it and then use it + +00:01:19.091 --> 00:01:21.309 +however you want. Ansible, it's another + +00:01:21.310 --> 00:01:23.648 +place, and then Kubernetes... + +00:01:23.649 --> 00:01:26.124 +There'll be links at the very end. + +00:01:26.125 --> 00:01:28.982 +There's actually a Nix SOPS too. + +00:01:28.983 --> 00:01:30.237 +I think there's a link in the end. + +00:01:30.238 --> 00:01:32.830 +So yeah, I'll just show a quick demo. + +00:01:32.831 --> 00:01:35.286 +I'll actually show it in Emacs too, + +00:01:35.287 --> 00:01:36.983 +but this is the idea. + +00:01:36.984 --> 00:01:39.450 +I'm just going to create a file + +00:01:39.451 --> 00:01:42.051 +and then I'm going to encrypt it with age. + +00:01:42.052 --> 00:01:46.874 +Then we should see the encrypted file + +00:01:46.875 --> 00:01:53.189 +be output here. The idea is you can decrypt it + +00:01:53.190 --> 00:01:59.349 +there. So my talk was... the reason how my + +00:01:59.350 --> 00:02:04.429 +talk came about was there was no mode like this yet. + +00:02:04.430 --> 00:02:08.829 +So I didn't want to have to... + +00:02:08.830 --> 00:02:10.269 +What you can do is you can pass + +00:02:10.270 --> 00:02:13.029 +in the editor variable, set your Emacs, + +00:02:13.030 --> 00:02:16.441 +then call the command, but that opens + +00:02:16.442 --> 00:02:20.589 +a whole new window. I wanted to live in my + +00:02:20.590 --> 00:02:22.994 +current Emacs. So this is that + +00:02:22.995 --> 00:02:25.555 +same encrypted file that we just created. + +00:02:25.556 --> 00:02:28.566 +I'm going to quickly do C-c C-d. + +00:02:28.567 --> 00:02:32.309 +So now we're in the SOPS decrypted mode of the + +00:02:32.310 --> 00:02:38.057 +file. I can save this, or make changes and save it. + +00:02:38.058 --> 00:02:39.963 +And then it resaves it. + +00:02:39.964 --> 00:02:42.918 +I'll just show you that decrypting it + +00:02:42.919 --> 00:02:44.629 +shows what we changed. + +00:02:44.630 --> 00:02:52.831 +I think that's most of my talk. + +00:02:52.832 --> 00:02:55.882 +There's future stuff that I would like to do + +00:02:55.883 --> 00:03:00.447 +with this. There's no way to create SOPS files + +00:03:00.448 --> 00:03:03.191 +from scratch. And then just putting more + +00:03:03.192 --> 00:03:06.069 +documentation around the other ways you can + +00:03:06.070 --> 00:03:14.029 +set up your editor to decrypt. But yeah, + +00:03:14.030 --> 00:03:19.109 +here's all the links. I haven't uploaded + +00:03:19.110 --> 00:03:23.309 +this yet, but yeah, that is my talk. + +NOTE Q&A technical issues + +00:03:23.310 --> 00:03:27.770 +[Leo] Okay. Thank you, Jonathan. + +00:03:27.771 --> 00:03:32.692 +Let me just make sure. So everything you've mentioned + +00:03:32.693 --> 00:03:34.887 +about putting stuff available to everyone, + +00:03:34.888 --> 00:03:36.469 +we'll make sure that everything + +00:03:36.470 --> 00:03:38.513 +ends up on the pad and on the website, + +00:03:38.514 --> 00:03:40.850 +so don't worry. Let me see if we can get up + +00:03:40.851 --> 00:03:41.753 +the pad for you. + +00:03:41.754 --> 00:03:43.284 +Do you have any preference with regards + +00:03:43.285 --> 00:03:45.467 +to the questions? Do you want to read them yourself + +00:03:45.468 --> 00:03:50.121 +or do you want one of us to read them for you? + +00:03:50.122 --> 00:03:53.389 +[Jonathan]: I'm okay with talking first, + +00:03:53.390 --> 00:03:57.461 +saying it out loud if there are some. + +00:03:57.462 --> 00:04:00.749 +[Leo]: Sure. Let me just find you the pads. + +00:04:00.750 --> 00:04:02.757 +Where is it? There you go. + +00:04:02.758 --> 00:04:05.409 +Do you have access to the pad on your end? + +00:04:05.410 --> 00:04:06.153 +Yep. + +00:04:06.154 --> 00:04:09.549 +Okay. Well, if you, since you're already showing + +00:04:09.550 --> 00:04:12.389 +your screen, if you can maybe switch the window to the one + +00:04:12.390 --> 00:04:13.435 +that is hosting the pad + +00:04:13.436 --> 00:04:15.814 +and feel free to start answering questions. + +00:04:15.815 --> 00:04:16.262 +Yep. + +00:04:16.263 --> 00:04:20.109 +It didn't look like we have any yet, but... + +00:04:20.110 --> 00:04:21.942 +Well, there's still coming, don't worry. + +00:04:21.943 --> 00:04:29.149 +We're just waiting for people to catch up. + +00:04:29.150 --> 00:04:31.533 +I probably need to make it bigger. + +00:04:31.534 --> 00:04:34.460 +Is it big enough or do I need to make it bigger? + +00:04:34.461 --> 00:04:40.247 +Right now, it's just a black screen on my end, so... + +00:04:40.248 --> 00:04:45.269 +Oh, wow. Weird. I can see it on mine, weirdly. + +00:04:45.270 --> 00:04:47.536 +Maybe it's just me. Let me check here. + +00:04:47.537 --> 00:04:48.989 +No, it seems to be just a + +00:04:48.990 --> 00:04:50.069 +black square, even on the stream. + +00:04:50.070 --> 00:05:00.927 +Try it again. That change at all? No, it's still black. + +00:05:00.928 --> 00:05:02.743 +Can you maybe start switching window + +00:05:02.744 --> 00:05:04.069 +and coming back to the one? + +00:05:04.070 --> 00:05:08.869 +Otherwise, I'll just stream it on my end. + +00:05:08.870 --> 00:05:13.629 +Yeah. All right, I'll do it. I'll take presenter in just a + +00:05:13.630 --> 00:05:22.229 +second. Yeah, sorry about that. Thank you. + +00:05:22.230 --> 00:05:27.069 +If I can take presenter, and I will share the screen. + +00:05:27.070 --> 00:05:36.749 +Sorry, I'm just trying to find a chat. There we go. + +00:05:36.750 --> 00:05:39.509 +Normally, I'm not supposed to be on the dev track, which is + +00:05:39.510 --> 00:05:42.309 +why I'm confusing all my windows. Give me just a second. + +00:05:42.310 --> 00:05:53.709 +Shell, casual. So we are on the dev track, and it is this + +00:05:53.710 --> 00:05:54.189 +one. + +00:05:54.190 --> 00:06:08.229 +There we go. No, that's not a guide, damn it. Secrets. + +00:06:08.230 --> 00:06:10.109 +And... + +00:06:10.110 --> 00:06:15.509 +There we go, finally. + +00:06:15.510 --> 00:06:19.109 +Ah. Probably just for the delay, do some jazz hands in the + +00:06:19.110 --> 00:06:20.889 +background as we did in the start. + +00:06:20.890 --> 00:06:23.600 +It feels like Yordle[??] Castle this year, + +00:06:23.601 --> 00:06:25.462 +where nothing works properly. + +00:06:25.463 --> 00:06:26.269 +That's right. + +00:06:26.270 --> 00:06:39.149 +All right. There we go. It's loading up. Obviously. + +00:06:39.150 --> 00:06:44.189 +There we go. + +00:06:44.190 --> 00:06:49.189 +All right. You should be able to see my screen now. Yep. All + +00:06:49.190 --> 00:06:53.789 +right. So, well, we've gone so far. Oh, it did stop. Damn it. + +00:06:53.790 --> 00:07:02.989 +Sorry, now it's BBB not behaving properly. That's right. + +00:07:02.990 --> 00:07:10.309 +Okay, let me just join, leave and join again. Okay. I just did + +00:07:10.310 --> 00:07:11.909 +exactly that for what it's worth. + +00:07:11.910 --> 00:07:26.189 +Nothing. All right. + +00:07:26.190 --> 00:07:29.029 +All right, I seem to be back. Let me show. And there we go. + +00:07:29.030 --> 00:07:36.909 +All right, everything is working. I'm not touching + +00:07:36.910 --> 00:07:39.187 +anything. So. Cool. + +NOTE Q: Can you describe some potential interactive uses for this within Emacs? + +00:07:39.188 --> 00:07:43.629 +Yeah, I'll just start with the top. Can + +00:07:43.630 --> 00:07:47.349 +you describe some potential interactive uses for this with + +00:07:47.350 --> 00:07:52.789 +an Emacs? Um, I'm, I'm not actually sure what this means. + +00:07:52.790 --> 00:08:01.029 +Could we, could you add some more context maybe? Or, um, + +00:08:01.030 --> 00:08:03.549 +I think we'll maybe come back to that one. I'm not sure what, + +00:08:03.550 --> 00:08:08.531 +uh, potential interactive uses mean, but. + +NOTE Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo? + +00:08:08.532 --> 00:08:10.429 +Yep. Uh, is this + +00:08:10.430 --> 00:08:18.749 +saved in the repo or file as run SOPs here? Oh, encrypted. + +00:08:18.750 --> 00:08:24.829 +They're saved as just text files so that you can do + +00:08:24.830 --> 00:08:28.103 +SOPs and encrypt like a binary. I think in the end, + +00:08:28.104 --> 00:08:30.819 +no matter what, they become just a text file, + +00:08:30.820 --> 00:08:34.520 +and then it does the encoding and decoding on the fly + +00:08:34.521 --> 00:08:36.753 +when you encrypt or decrypt. So no matter + +00:08:36.754 --> 00:08:41.984 +what it's going to be, I think it might just be + +00:08:41.985 --> 00:08:44.989 +a JSON in the end. Uh, so yeah. + +00:08:44.990 --> 00:08:56.309 +I'll try to, well, I can type out that answer, but all + +00:08:56.310 --> 00:08:56.855 +right. + +00:08:56.856 --> 00:08:59.429 +Don't worry about typing it out. + +00:08:59.430 --> 00:09:00.989 +We are gathering the + +00:09:00.990 --> 00:09:04.069 +recordings at the end, you know, even answers that are not + +00:09:04.070 --> 00:09:05.782 +provided, we'll type them out eventually. + +00:09:05.783 --> 00:09:09.029 +So don't stress too much about the actual answers being written. + +00:09:09.030 --> 00:09:12.066 +Okay. All right. So I'll go to the third one. + +NOTE Q: How do you decide whether to use SOPS or other solutions such as pass-cli? + +00:09:12.067 --> 00:09:13.189 +How do you decide + +00:09:13.190 --> 00:09:18.949 +whether to use SOPS or other solutions such as pass-cli? + +00:09:18.950 --> 00:09:24.469 +The biggest use case that I've been using it recently is, + +00:09:24.470 --> 00:09:29.109 +Bitbucket has a way to... In a repository, + +00:09:29.110 --> 00:09:35.829 +you can store non-secrets and secrets. So + +00:09:35.830 --> 00:09:39.549 +we're trying to move the secrets into the repository + +00:09:39.550 --> 00:09:43.109 +and then allow the engineers to have + +00:09:43.110 --> 00:09:48.789 +access to that. + +00:09:48.790 --> 00:09:52.389 +Bitbucket variables is a black box. Since the devs can + +00:09:52.390 --> 00:09:56.841 +access it, it's manual work for everybody + +00:09:56.842 --> 00:10:00.869 +that has to deal with it. Since we're moving + +00:10:00.870 --> 00:10:04.339 +SOPS-encrypted files into the repo, + +00:10:04.340 --> 00:10:06.830 +now there's that trackability + +00:10:06.831 --> 00:10:10.942 +from who made the change and what it changed from, + +00:10:10.943 --> 00:10:16.589 +what did it go to, and just things like that. + +00:10:16.590 --> 00:10:23.629 +You can use it anytime you'd want to commit them. + +NOTE Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this? + +00:10:23.630 --> 00:10:32.029 +One limitation with GUIX is there's no great way to store + +00:10:32.030 --> 00:10:36.869 +secrets in the store. Yeah, I think, sorry... Let me. One + +00:10:36.870 --> 00:10:40.189 +limitation of GUIX is there's no way to store secrets in the + +00:10:40.190 --> 00:10:42.108 +store. Would SOPS be useful for this? + +00:10:42.109 --> 00:10:44.829 +I think so, but I don't know how + +00:10:44.830 --> 00:10:48.869 +that package manager works, if it's just like + +00:10:48.870 --> 00:10:52.989 +some sort of "you decrypt and then you run the package + +00:10:52.990 --> 00:10:56.109 +manager," then yeah, that's a lot of our workflows. + +00:10:56.110 --> 00:10:58.989 +If we're doing a deployment and the container + +00:10:58.990 --> 00:11:01.629 +needs it, we'll decrypt, put that in + +00:11:01.630 --> 00:11:03.829 +whatever place, or source it if it's an + +00:11:03.830 --> 00:11:06.629 +environment file for the container, and then + +00:11:06.630 --> 00:11:11.982 +pass it in. I think it'd be a great choice there. + +NOTE Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext? + +00:11:11.983 --> 00:11:17.069 +A wacky question. What happens in sops mode if you + +00:11:17.070 --> 00:11:21.709 +encrypt an already encrypted file as if it was plain text? + +00:11:21.710 --> 00:11:24.949 +You know, I might have actually accidentally did that + +00:11:24.950 --> 00:11:29.709 +today. I didn't actually see the resulting file. But that's + +00:11:29.710 --> 00:11:31.709 +a great question. + +00:11:31.710 --> 00:11:38.189 +Well, it's technically still binary, isn't it, at the end? + +00:11:38.190 --> 00:11:40.389 +You've got binary stuff that is being encrypted + +00:11:40.390 --> 00:11:42.949 +again. It's just double encryption. + +00:11:42.950 --> 00:11:44.842 +I'm pretty sure it works. + +00:11:44.843 --> 00:11:48.869 +Yeah, probably. I'm going to go back up to the + +00:11:48.870 --> 00:11:49.438 +top one. + +NOTE Q: can you describe some potential interactive uses for this within Emacs + +00:11:49.439 --> 00:11:52.469 +Can you describe some potential interactive uses + +00:11:52.470 --> 00:11:57.349 +for this within Emacs? Is there some other activity that + +00:11:57.350 --> 00:12:01.909 +would enable or it would be enabled with SOPS decryption + +00:12:01.910 --> 00:12:12.529 +first, like an IT configuration task. + +00:12:12.530 --> 00:12:18.509 +So in the README right now, + +00:12:18.510 --> 00:12:22.629 +there is a block and it's called SOPS setup + +00:12:22.630 --> 00:12:27.687 +environment. I think it's a hook. Don't quote me. + +00:12:27.688 --> 00:12:29.596 +I haven't touched it in a while. + +00:12:29.597 --> 00:12:32.051 +I think that hook runs prior to + +00:12:32.052 --> 00:12:35.349 +doing any sort of decryption or encryption. + +00:12:35.350 --> 00:12:40.654 +So there's an example in the README for ways + +00:12:40.655 --> 00:12:44.669 +that you can set up your SOPS mode for AWS. + +00:12:44.670 --> 00:12:51.136 +You can set the profile. It was actually + +00:12:51.137 --> 00:12:58.829 +a pretty fun thing to add because with that bit of code, + +00:12:58.830 --> 00:13:01.199 +I can pretty much go to any one of our repos + +00:13:01.200 --> 00:13:04.085 +and decrypt and encrypt on the fly and + +00:13:04.086 --> 00:13:06.749 +not have to do much fanfare of like, + +00:13:06.750 --> 00:13:09.269 +well, what account or what profile + +00:13:09.270 --> 00:13:12.324 +do I need to switch to? I haven't looked at + +00:13:12.325 --> 00:13:15.309 +GCP yet or Azure, and that's kind of one of + +00:13:15.310 --> 00:13:19.079 +my future things. I need to maybe look into those + +00:13:19.080 --> 00:13:21.055 +to see what they look like + +00:13:21.056 --> 00:13:23.909 +and give example configs to help users. + +00:13:23.910 --> 00:13:28.993 +Hopefully that answered your question. + +00:13:28.994 --> 00:13:30.949 +I think so. + +00:13:30.950 --> 00:13:34.849 +Continuing the theme of this, both of you being cursed, + +00:13:34.850 --> 00:13:36.947 +my X11 decided to crash. + +00:13:36.948 --> 00:13:40.201 +Nothing is going well with this one. + +00:13:40.202 --> 00:13:44.509 +Have you answered all the questions? I think so. + +00:13:44.510 --> 00:13:46.438 +Well, do you have anything else to add, perhaps? + +00:13:46.439 --> 00:13:48.327 +Maybe something that wasn't enough + +00:13:48.328 --> 00:13:50.109 +to fit in your live presentation? + +00:13:50.110 --> 00:13:56.669 +No, I'm excited to see the other talks and I hope everybody + +00:13:56.670 --> 00:13:57.811 +has fun too. + +00:13:57.812 --> 00:14:03.303 +Yeah, if you have any other questions, just email me. + +00:14:03.304 --> 00:14:05.210 +That's all. + +00:14:05.211 --> 00:14:07.594 +I got nothing. + +00:14:07.595 --> 00:14:08.222 +Okay, cool. + +00:14:08.223 --> 00:14:10.469 +[Leo]: Well, thank you so much, Jonathan, for your + +00:14:10.470 --> 00:14:12.789 +presentation. It was, sorry for all the technical + +00:14:12.790 --> 00:14:14.162 +problems, we tried our best, + +00:14:14.163 --> 00:14:15.532 +but I think we still managed to have + +00:14:15.533 --> 00:14:17.309 +a live presentation, and we managed to have some + +00:14:17.310 --> 00:14:20.137 +questions from the crowd. So, as far as I'm concerned, + +00:14:20.138 --> 00:14:21.837 +I think we did a good job. + +00:14:21.838 --> 00:14:24.894 +[Jonathan]: Yeah, you stomped it in this whole dev track, + +00:14:24.895 --> 00:14:28.349 +I just have to say. It's been a privilege to jump in + +00:14:28.350 --> 00:14:31.069 +with it here and there and to just listen to the great + +00:14:31.070 --> 00:14:33.180 +conversations. + +00:14:33.181 --> 00:14:38.949 +[Leo]: I think next up we have Emacs and McCLIM, + +00:14:38.950 --> 00:14:41.904 +which is going to be a similar format to this talk. + +00:14:41.905 --> 00:14:44.709 +We'll probably jump right into that in just about two minutes. + +00:14:44.710 --> 00:14:47.821 +We'll give you another countdown here. One second. + +00:14:47.822 --> 00:14:49.916 +Well, we arranged that and meanwhile, + +00:14:49.917 --> 00:14:51.349 +I just want to take my own + +00:14:51.350 --> 00:14:55.309 +little humble opportunity to thank you Jonathan, and I + +00:14:55.310 --> 00:14:57.085 +guess everybody else. diff --git a/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt new file mode 100644 index 00000000..b1e3121d --- /dev/null +++ b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt @@ -0,0 +1,59 @@ +WEBVTT + + +00:00:00.000 --> 00:00:12.433 +Introduction + +00:00:12.466 --> 00:00:36.300 +Knowledge grows when it is shared + +00:00:36.333 --> 00:01:07.200 +When's the last time you shared something? + +00:01:07.200 --> 00:02:41.533 +Sharing Emacs + +00:02:41.566 --> 00:03:06.733 +My background + +00:03:06.766 --> 00:03:44.066 +Why you should make Emacs videos (or other formats) + +00:03:44.100 --> 00:05:22.933 +Beginners + +00:05:22.966 --> 00:05:56.100 +Intermediate + +00:05:56.133 --> 00:06:22.833 +Advanced + +00:06:22.866 --> 00:07:28.433 +Impostor syndrome + +00:07:28.466 --> 00:08:46.400 +Process for recording + +00:08:46.400 --> 00:09:36.666 +Details: recording + +00:09:36.700 --> 00:13:33.439 +Tips: Recording + +00:13:33.440 --> 00:14:38.319 +Details: Editing + +00:14:38.320 --> 00:15:44.000 +Tips: Editing + +00:15:44.000 --> 00:16:06.819 +Details: Uploading + +00:16:06.820 --> 00:18:06.133 +Tips: Uploading + +00:18:06.166 --> 00:19:04.900 +Your secret sauce + +00:19:04.933 --> 00:21:40.266 +Cons of YouTube diff --git a/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt new file mode 100644 index 00000000..23e0a699 --- /dev/null +++ b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt @@ -0,0 +1,1653 @@ +WEBVTT captioned by anush and sachac + +NOTE Introduction + +00:00.000 --> 00:01.233 +Hey, I'm Gopar + +00:01.266 --> 00:00:03.244 +and today I'm going to talk about + +00:00:03.245 --> 00:00:04.700 +being an Emacs influencer + +00:04.733 --> 00:07.066 +and try to convince you to be one too. + +00:07.100 --> 00:08.466 +Hopefully that goes well. + +00:08.500 --> 00:12.433 +If not, we'll see at the end of the talk. + +NOTE Knowledge grows when it is shared + +00:12.466 --> 00:14.833 +But first, I want to share something, + +00:14.866 --> 00:17.500 +and that is: that knowledge grows when it is shared. + +00:17.533 --> 00:19.500 +This is usually how I end my videos. + +00:19.533 --> 00:21.233 +Some of you may be familiar with this. + +00:21.266 --> 00:25.466 +I say this quote because I believe there is truth to it. + +00:25.500 --> 00:27.833 +The more you share something, the more you reinforce it, + +00:27.866 --> 00:30.466 +and the more the knowledge grows, not just for you, + +00:30.500 --> 00:33.466 +but for everybody else around it with who you share it with. + +00:33.500 --> 00:34.400 +With that being said, + +00:34.400 --> 00:36.300 +there's only one question I want to ask you. + +NOTE When's the last time you shared something? + +00:36.333 --> 00:39.300 +That is: what is the last time you shared something? + +00:39.333 --> 00:41.333 +Now, the sharing of knowledge + +00:41.366 --> 00:43.000 +doesn't just have to be about Emacs. + +00:43.000 --> 00:45.633 +It can just be about other things that you learn in life. + +00:45.666 --> 00:47.200 +There's plenty of things + +00:47.200 --> 00:50.833 +that I share with people that I've learned in life, + +00:50.866 --> 00:53.500 +and I hope that they learn from what I'm saying as well. + +00:53.533 --> 00:54.866 +Learn from the mistakes in others + +00:54.900 --> 00:56.100 +type of deal, things like that. + +00:56.133 --> 00:58.333 +But anyway, since this is EmacsConf, + +00:58.366 --> 01:01.066 +we're gonna keep it to Emacs-related, + +01:01.100 --> 01:02.633 +so we're going to find ways + +01:02.666 --> 01:04.700 +on how to share all that Emacs knowledge + +01:04.733 --> 01:07.200 +that is locked up inside you guys' brain. + +NOTE Sharing Emacs + +01:07.200 --> 01:09.266 +So sharing Emacs, how can we do that? + +01:09.300 --> 01:10.800 +Well, there's a few ways. + +01:10.800 --> 01:13.666 +We can do meetups and conferences, aka EmacsConf, + +01:13.700 --> 01:16.033 +like we're doing now. So hopefully one of you guys + +01:16.066 --> 01:18.300 +might be incentivized to share the knowledge + +01:18.333 --> 01:20.700 +that you have in the next upcoming year, + +01:20.733 --> 01:23.466 +or the future ones, or be a repeated presenter. + +01:23.500 --> 00:01:25.960 +The list goes on and on. + +00:01:25.961 --> 01:30.233 +Blog posts. So, one of the easier entries to [??] + +01:30.266 --> 01:31.200 +because it is writing + +01:31.200 --> 01:32.666 +and you don't have to do video, + +01:32.700 --> 01:34.900 +not like the other formats that I'm about to present. + +01:34.933 --> 01:37.400 +Tweeting is also an easier format as well + +01:37.400 --> 01:40.000 +because it's even smaller than a blog post, more condensed, + +01:40.000 --> 01:43.433 +and you can use hashtags. When I was learning, + +01:43.466 --> 01:46.000 +when I was reading the Org Mode manual, + +01:46.000 --> 01:49.733 +I would use the hashtag #OrgTip on on Twitter. + +01:49.766 --> 01:52.666 +Even if you search right now, + +01:52.700 --> 01:53.933 +I believe you'll find some of my tweets. + +01:53.966 --> 01:55.866 +But yeah, that's one way + +01:55.900 --> 01:57.633 +that you can go about it: simple tweets + +01:57.666 --> 02:00.100 +that you find, little things, little nuggets of gold + +02:00.133 --> 02:02.500 +as I would say. Of course, there's podcasts, + +02:02.533 --> 00:02:03.855 +which I'm pretty sure + +00:02:03.856 --> 00:02:06.200 +the Emacs community would love to have, + +02:06.200 --> 02:08.500 +so if anybody wants to pick up a podcast + +02:08.533 --> 02:12.133 +go right ahead. Twitch live streaming, + +02:12.166 --> 02:13.900 +which is... Twitch is a platform + +02:13.933 --> 02:15.233 +in which you can do live streaming + +02:15.266 --> 02:16.900 +for those who are not familiar. + +02:16.933 --> 02:19.500 +And people, I've seen people use the Emacs tag in there + +02:19.533 --> 02:21.833 +and, you know, just pop up, say hello, + +02:21.866 --> 02:23.133 +ask questions, things like that. + +02:23.166 --> 02:24.700 +You can be working on the configuration + +02:24.733 --> 02:26.033 +or just reading Emacs source code, + +02:26.066 --> 02:28.233 +you know, fun stuff like that. + +02:28.266 --> 02:29.700 +Videos, which is what I do, + +02:29.733 --> 02:31.833 +which I will touch on in a second. + +02:31.866 --> 02:33.800 +There's probably more formats + +02:33.800 --> 02:35.000 +that I'm not thinking at the moment + +02:35.000 --> 02:36.866 +and that you guys can probably fill in the gaps. + +02:36.900 --> 02:38.633 +But yeah, these are just some of the ways + +02:38.666 --> 02:41.533 +that we can share Emacs. So how do we get started? + +NOTE My background + +02:41.566 --> 02:42.700 +Well, before we get started, + +02:42.733 --> 02:44.633 +I want to talk about my credentials, right? + +02:44.666 --> 02:45.700 +I mean, who is this guy + +02:45.733 --> 02:47.633 +that you're just listening in this little square + +02:47.666 --> 02:49.800 +talking about creating videos? + +02:49.800 --> 02:52.633 +Well, I run a channel called goparism on YouTube. + +02:52.666 --> 02:55.333 +It has around 2700 subscribers at the moment. + +02:55.366 --> 02:57.500 +I kind of know a little bit of the flow. + +02:57.533 --> 03:00.333 +I'm not an expert, but I've done enough videos + +03:00.366 --> 03:03.300 +that I kind of understand the flow of all of + +03:03.333 --> 03:06.733 +at least the simple way of doing it, which I want to share. + +NOTE Why you should make Emacs videos (or other formats) + +03:06.766 --> 03:08.733 +So right now you're probably thinking, + +03:08.766 --> 03:11.000 +OK, I get that you want to sell us + +03:11.000 --> 03:12.900 +on the whole video making formats + +03:12.933 --> 03:15.433 +or you know sharing just Emacs in general, + +03:15.466 --> 03:19.533 +but I'm a beginner, I'm an intermediate, I'm advanced, + +03:19.566 --> 03:21.633 +I don't know if I can provide input. + +03:21.666 --> 03:23.700 +Each of those, I want to tackle each of those, + +03:23.733 --> 03:26.200 +and say that yeah, each of you have input. + +03:26.200 --> 03:28.000 +You know, for a beginner it might be say, + +03:28.000 --> 03:29.500 +oh, an intermediate and an advanced person + +03:29.533 --> 03:30.933 +already has information. + +03:30.966 --> 03:32.933 +Intermediate might say, oh, I'm not at that level yet. + +03:32.966 --> 03:35.700 +An advanced person might say, oh, I have nothing to say. + +03:35.733 --> 03:38.100 +You know, I don't... What I know, + +03:38.133 --> 03:39.033 +everybody else knows. + +03:39.066 --> 03:43.200 +So I want to, you know, dispel all that and just tell you that, + +03:43.200 --> 03:44.066 +hey, it doesn't matter. + +NOTE Beginners + +03:44.100 --> 03:48.300 +So for beginners, you guys are in a beautiful place, + +03:48.333 --> 03:51.333 +which is that you have a clean slate. + +03:51.366 --> 03:55.233 +So the way I imagine is that every Emacs user + +03:55.266 --> 03:58.300 +is presented[??] upon themselves, + +03:58.333 --> 04:00.133 +you know, kind of like this world. + +04:00.166 --> 04:02.066 +And in this world, you can either build a road + +04:02.100 --> 04:06.266 +that goes to the mountains, the city, or to the beach. + +04:06.300 --> 04:08.666 +Some of us have decided which way we want to go. + +04:08.700 --> 04:09.733 +Some of us might be building + +04:09.766 --> 04:13.333 +the road to the city, to the beach, for example. + +04:13.366 --> 04:16.400 +If someone starts a road to the city, + +04:16.400 --> 04:19.533 +they are probably stuck in their ways, right? + +04:19.566 --> 04:21.933 +And then what leads them to the goal to the city, + +04:21.966 --> 04:24.400 +they're not going to make a detour towards the mountain + +04:24.400 --> 04:26.300 +or towards the beach to get to the city. + +04:26.333 --> 04:27.833 +They just want the straightest path. + +04:27.866 --> 04:32.200 +And when you are used to doing things a certain way, + +04:32.200 --> 04:33.533 +you're going to have a ton of vision. + +04:33.566 --> 04:35.433 +So as a beginner, you don't have any of that + +04:35.466 --> 04:36.933 +because you're just starting brand new. + +04:36.966 --> 04:40.700 +Everything is, you know, a world of possibilities. + +04:40.733 --> 04:43.066 +So I would say that this is a very big advantage. + +04:43.100 --> 04:46.400 +The second one is that people enjoy the journey, right? + +04:46.400 --> 04:49.033 +People want to see someone grow from this spot + +04:49.066 --> 04:51.300 +to the next level, etc, etc. + +04:51.333 --> 04:53.466 +This is one of the reasons why we watch movies, + +04:53.500 --> 04:54.866 +TV shows, anime, right? + +04:54.900 --> 04:57.400 +Because there's a character that needs a problem + +04:57.400 --> 04:59.900 +and they're working their way up to solve that problem. + +04:59.933 --> 05:01.633 +If we just get to see the ending + +05:01.666 --> 05:03.000 +of where they solve the problem, + +05:03.000 --> 05:04.300 +we don't really feel anything + +05:04.333 --> 05:05.733 +because we weren't part of that journey. + +05:05.766 --> 05:08.866 +I would say that starting from scratch + +05:08.900 --> 05:10.800 +is a pretty good place to be. + +05:10.800 --> 05:12.700 +Of course, if you're going + +05:12.733 --> 05:14.300 +to be writing or making videos + +05:14.333 --> 05:16.500 +or anything related to Emacs, you kind of have to force... + +05:16.533 --> 05:19.500 +If you want to teach people, you kind of have to learn it. + +05:19.533 --> 05:20.800 +You're kind of forced to learn, + +05:20.800 --> 05:22.933 +which is always encouraged. + +NOTE Intermediate + +05:22.966 --> 05:25.900 +For intermediates now, you might be saying, + +05:25.933 --> 05:28.400 +hey, I'm a little past intermediate. + +05:28.400 --> 05:30.033 +I'm sorry, past beginner, + +05:30.066 --> 05:32.133 +but I don't feel confident enough to share. + +05:32.166 --> 05:34.666 +Well, let's say that you're wrong. Once you're intermediate, + +05:34.700 --> 05:37.300 +you're probably fiddling with your Emacs config, + +05:37.333 --> 05:39.266 +maybe doing something with Org Mode, + +05:39.300 --> 05:40.500 +like a lot of people are doing it, + +05:40.533 --> 05:43.500 +and you can document, talk about the things that you do, + +05:43.533 --> 05:46.466 +and also those functions that you write in Elisp + +05:46.500 --> 05:49.000 +to just improve quality of life, things like that. + +05:49.000 --> 05:51.100 +There's a whole list of things that you can do. + +05:51.133 --> 05:54.233 +These are just two things out of a plethora. + +05:54.266 --> 05:56.100 +of items that you can talk about. + +NOTE Advanced + +05:56.133 --> 05:59.833 +For my advanced folks, you guys are in a position + +05:59.866 --> 06:02.900 +where you guys know more about the Emacs internals. + +06:02.933 --> 06:05.100 +You might have read the source code. + +06:05.133 --> 06:08.133 +You might know a Emacs manual section pretty well + +06:08.166 --> 06:09.833 +that you can talk about. + +06:09.866 --> 06:11.866 +Usually when you're at the advanced + +06:11.900 --> 06:12.600 +or intermediate level, + +06:12.600 --> 06:15.466 +you start, or at least some people start writing packages. + +06:15.500 --> 06:17.400 +You can talk about the best practices + +06:17.400 --> 06:20.133 +for creating packages, the troubles that you face, you know, + +06:20.166 --> 06:22.833 +the things that you learn, things like that. + +NOTE Impostor syndrome + +06:22.866 --> 06:25.133 +Now that I've given a little bit of examples + +06:25.166 --> 06:27.400 +for each of these tiers, there's probably still + +06:27.400 --> 06:30.400 +something going on in each of you guys' mind, + +06:30.400 --> 06:32.400 +which is something all of us get to face, + +06:32.400 --> 06:37.033 +and that is impostor syndrome. Now, with impostor syndrome, + +06:37.066 --> 06:40.100 +the sad reality is that we all have it at some point, + +06:40.133 --> 06:41.000 +we're going to, you know, + +06:41.000 --> 06:43.266 +at the beginner, intermediate, or even advanced stage, + +06:43.300 --> 06:43.833 +it doesn't matter, + +06:43.866 --> 06:46.800 +there's always that little voice of imposter syndrome saying, + +06:46.800 --> 06:49.333 +hey, "You're probably not good enough" or not... + +06:49.366 --> 06:50.933 +but questioning if you're good enough + +06:50.966 --> 06:53.800 +or if you deserve to be at this level and things like that. + +06:53.800 --> 06:56.266 +I believe it's very common with software engineers. + +06:56.300 --> 06:59.233 +The other sad thing is that it will never go away + +06:59.266 --> 07:02.200 +But the way I see it with impostor syndrome + +07:02.200 --> 07:03.433 +is that we embrace it. + +07:03.466 --> 07:04.833 +If we are getting an impostor syndrome, + +07:04.866 --> 07:07.500 +it's because we're pushing ourself to a next level + +07:07.533 --> 07:12.000 +that we haven't been able to to overcome or to progress in. + +07:12.000 --> 07:14.733 +If you're pushing yourself, you will get impostor syndrome. + +07:14.766 --> 07:16.900 +Like, hey, am I good enough to lead this project? + +07:16.933 --> 07:19.500 +To finish this? To optimize this part + +07:19.533 --> 07:21.900 +or whatever? I feel it's a good way. + +07:21.933 --> 07:24.466 +Impostor syndrome, yeah, it feels horrible, + +07:24.500 --> 07:26.033 +but I believe that if you have it, + +07:26.066 --> 07:28.433 +it's because you're doing something right. + +NOTE Process for recording + +07:28.466 --> 07:29.533 +Okay, now that we've gotten + +07:29.566 --> 07:32.833 +that out of the way, what's the process for recording? + +07:32.866 --> 07:34.800 +Well, it's actually a lot simpler than you think. + +07:34.800 --> 07:36.866 +There's three steps, and one of them + +07:36.900 --> 07:37.866 +you might not even have to do, + +07:37.900 --> 07:39.866 +depending on how you want to go about it. + +07:39.900 --> 07:40.733 +The first one is that you have + +07:40.766 --> 07:42.933 +to record your voice and screen, + +07:42.966 --> 07:45.200 +because if you do want to make video, + +07:45.200 --> 07:46.300 +people have to see what you're doing + +07:46.333 --> 07:48.100 +and they have to hear what you're talking, + +07:48.133 --> 07:50.900 +otherwise it's going to be not as engaging. + +07:50.933 --> 07:52.800 +Of course, you can make the face optional + +07:52.800 --> 07:54.066 +when recording videos. + +07:54.100 --> 07:56.033 +If you watch some of my videos, sometimes + +07:56.066 --> 07:57.600 +I show my face, sometimes I don't. + +07:57.600 --> 08:02.300 +It just really depends on the mood of what I'm doing + +08:02.333 --> 08:05.433 +when I'm recording the video. But yeah, completely up to you. + +08:05.466 --> 08:08.333 +After recording, you can edit if desired. + +08:08.366 --> 08:10.600 +I remember when I first started making the videos, + +08:10.600 --> 08:13.100 +I was not editing them at all. + +08:13.133 --> 08:15.433 +I was just one shot and upload. + +08:15.466 --> 08:16.866 +That can either be good or bad + +08:16.900 --> 08:19.233 +depending on how you view it, + +08:19.266 --> 08:22.500 +but it is what it is. Nowadays I do some light editing, + +08:22.533 --> 08:26.066 +mainly just to remove the silences + +08:26.100 --> 08:29.633 +or when I'm going through debugging something. + +08:29.666 --> 08:32.900 +Third one is to upload it, + +08:32.933 --> 08:34.100 +which might be the easiest section, + +08:34.133 --> 08:35.666 +depending on your goals. + +08:35.700 --> 08:38.100 +At minimum, you would put title, description, + +08:38.133 --> 08:39.133 +and a little bit more. + +08:39.166 --> 08:42.466 +You'll get why I see it can be as easy + +08:42.500 --> 08:44.233 +or as complicated as you want, + +08:44.266 --> 08:46.400 +which I'll go over later at the end. + +NOTE Details: recording + +08:46.400 --> 08:50.100 +Let's go over details for recording. + +08:50.133 --> 08:53.833 +For recording, thankfully, all OSes, + +08:53.866 --> 08:56.466 +or at least the major OSes, have free recording software, + +08:56.500 --> 08:59.066 +or you can go a little fancy and get paid [software], + +08:59.100 --> 09:01.400 +which usually, you know, depending on your viewpoint, + +09:01.400 --> 09:03.266 +might make things easier or not. + +09:03.300 --> 09:05.400 +Personally, I use, I'm on Mac, + +09:05.400 --> 09:07.000 +so I use the built-in screen recording, + +09:07.000 --> 09:08.800 +which, if you do Command-Shift-5, + +09:08.800 --> 09:13.066 +it will pop up a little dialog, and if you did it just now, + +09:13.100 --> 09:14.400 +you can press the Escape key + +09:14.400 --> 09:16.933 +to get rid of it, and life goes on. + +09:16.966 --> 09:20.600 +Also for all major 3 OSes, OBS + +09:20.600 --> 09:22.600 +is a pretty popular choice not just for streaming, + +09:22.600 --> 09:23.866 +but for recording as well. + +09:23.900 --> 09:25.633 +That's something you might want to look at. + +09:25.666 --> 09:29.700 +If you do decide to record videos. + +09:29.733 --> 09:32.066 +All up to you. These are just things + +09:32.100 --> 09:35.300 +that I've come along or encountered along the way. + +09:35.333 --> 09:36.666 +When it comes to recording, + +NOTE Tips: Recording + +09:36.700 --> 09:38.933 +I do have some tips that might help you out. + +09:38.966 --> 09:40.833 +At least, if I could go back in time, + +09:40.866 --> 09:43.333 +this is what I would tell myself: that + +09:43.366 --> 09:44.700 +audio quality matter matters. + +09:44.733 --> 09:46.700 +If possible, get an external mic. + +09:46.733 --> 09:48.300 +That is not always feasible, + +09:48.333 --> 09:50.033 +because extra mic costs money, + +09:50.066 --> 09:51.066 +and when you're starting out with YouTube, + +09:51.100 --> 09:54.000 +you are not going to make a penny. + +09:54.000 --> 09:57.533 +YouTube has very high restrictions + +09:57.566 --> 10:01.033 +or bars that you need to pass + +10:01.066 --> 10:03.866 +before you start getting any revenue. For example, + +10:03.900 --> 10:06.633 +my channel, I still haven't met those bars, + +10:06.666 --> 10:08.433 +so i'm still not generating any revenue. + +10:08.466 --> 10:11.100 +Anything that I buy is just out of pocket. + +10:11.133 --> 10:13.700 +Since I work from home, I already had a mic + +10:13.733 --> 10:15.533 +and things like that set up. + +10:15.566 --> 10:17.333 +I just use that for recording videos. + +10:17.366 --> 10:20.266 +But if you have... You can use + +10:20.300 --> 10:23.333 +the built-in mic in your laptop if you have one. + +10:23.366 --> 10:25.233 +I would strongly suggest if you do that, + +10:25.266 --> 10:28.233 +try to minimize the noise. Go into a quiet room + +10:28.266 --> 10:30.700 +and make sure there's no washing machine + +10:30.733 --> 10:32.700 +or anything going off right now, + +10:32.733 --> 10:35.266 +because people do not... They can handle, + +10:35.300 --> 10:36.866 +you know, not the greatest quality of video. + +10:36.900 --> 10:38.400 +But when it comes to audio, picky + +10:38.400 --> 10:40.733 +people are a lot more pickier when it comes to that. + +10:40.766 --> 10:43.100 +Next is don't start with recording the face. + +10:43.133 --> 10:44.700 +Voice and screen are just fine. + +10:44.733 --> 10:49.000 +Personally, I feel when I started recording my face, + +10:49.000 --> 10:51.133 +it made it harder in a sense, + +10:51.166 --> 10:53.666 +because now I was just not only concentrating + +10:53.700 --> 10:55.433 +on what I was showing, how it was sounding, + +10:55.466 --> 10:58.000 +but how I look, if I was making any faces like that. + +10:58.000 --> 11:01.233 +It's just one less thing to have on your brain + +11:01.266 --> 11:02.133 +when you're recording. + +11:02.166 --> 11:05.133 +Another thing is that when I started recording, + +11:05.166 --> 11:08.266 +I was very passionate or excited about doing this. + +11:08.300 --> 11:10.866 +What I would do is--I took that to the advantage-- + +11:10.900 --> 11:13.700 +is that I just recorded a lot of videos + +11:13.733 --> 11:16.333 +in one go or in sessions. + +11:16.366 --> 11:18.300 +As soon as I recorded, start the next one, + +11:18.333 --> 11:20.866 +next one, et cetera. I strongly believe that helped + +11:20.900 --> 11:22.100 +because later down the road, + +11:22.133 --> 11:24.833 +once I got busy with work or life or whatever, + +11:24.866 --> 11:26.866 +I didn't really have to worry about making time. + +11:26.900 --> 11:28.433 +I already had a batch ready to go + +11:28.466 --> 11:31.500 +that I can just slowly pull out and edit and upload. + +11:31.533 --> 11:35.033 +That's something helpful whenever you know work is slow + +11:35.066 --> 11:37.333 +or your vacations or things like that, you want to record, + +11:37.366 --> 11:39.266 +just go for it. + +11:39.300 --> 11:43.066 +Another one is when you are editing, you can use pauses + +11:43.100 --> 11:45.666 +so that it's easier to edit + +11:45.700 --> 00:11:48.159 +because what happens to... At least this + +00:11:48.160 --> 00:11:48.880 +is what happened to me + +00:11:48.881 --> 11:49.700 +when I was beginning, + +11:49.733 --> 11:53.000 +I would say, oh I can mumble fumble, + +11:53.000 --> 00:11:54.500 +you know, do a lot of verbal fillers, + +00:11:54.501 --> 00:11:55.833 +and I can just edit it, + +11:55.866 --> 11:57.233 +but if you don't do any pauses + +11:57.266 --> 00:12:01.560 +it's hard to fix the mistakes, + +00:12:01.561 --> 12:03.400 +the things that you don't want people seeing + +12:03.400 --> 00:12:05.839 +because then it doesn't blend well + +00:12:05.840 --> 12:08.300 +if you do editing. If you do any editing, + +12:08.333 --> 12:09.500 +you know what I'm talking about, + +12:09.533 --> 12:12.033 +because then there's chops of audio + +12:12.066 --> 00:12:13.840 +from the previous clip. + +00:12:13.841 --> 12:17.266 +Trying to edit... There's ways to mitigate that, + +12:17.300 --> 12:19.500 +but my editing skills are very minimal. + +12:19.533 --> 12:21.833 +It's just what I need to know to get things done. + +12:21.866 --> 12:25.066 +Just using pauses helps out a lot. + +12:25.100 --> 12:26.066 +Another thing is that + +12:26.100 --> 12:30.133 +some people want to record in like super-high quality, + +12:30.166 --> 12:32.633 +you know, get the highest quality possible for the video. + +12:32.666 --> 12:34.900 +I would say instead of focusing on the video recording, + +12:34.933 --> 12:36.900 +focus on the audio, like I mentioned, + +12:36.933 --> 00:12:37.819 +because at the end of the day, + +00:12:37.820 --> 12:41.033 +we're in Emacs and we're only sharing text. + +12:41.066 --> 12:43.833 +You know, there's only so much definition + +12:43.866 --> 12:44.700 +that you can show on text. + +12:44.733 --> 12:48.400 +If anything, just increase the font. Simple as that. + +12:48.400 --> 12:50.666 +My personal favorite, + +12:50.700 --> 12:53.233 +or at least the one that I still encounter even now, + +12:53.266 --> 12:56.733 +is that when I'm recording, my voice still feels dry. + +12:56.766 --> 12:59.533 +Right when I'm about to record, + +12:59.566 --> 13:01.800 +all of a sudden, I get dry. I need to drink water. + +13:01.800 --> 13:03.900 +It feels uncomfortable. I get nervous + +13:03.933 --> 13:06.000 +because it's something new. I'm staring at myself. + +13:06.000 --> 00:13:08.599 +It's like, oh man, all the... I mentioned just extra things + +00:13:08.600 --> 00:13:10.119 +that I need to worry about. + +00:13:10.120 --> 13:13.466 +But all of this goes less with practice. + +13:13.500 --> 13:15.300 +The more you do it, the more comfortable you are. + +13:15.333 --> 13:17.066 +It's just like everything else. + +13:17.100 --> 13:18.400 +When you start learning guitar, + +13:18.400 --> 13:21.600 +your fingers are very hard. When you start learning piano, + +13:21.600 --> 13:24.866 +the independence of fingers don't want to work. + +13:24.900 --> 13:25.866 +When you're learning drums, + +13:25.900 --> 13:27.466 +each limb needs to be independent. + +13:27.500 --> 13:29.266 +It's very hard. You have to start very slow. + +13:29.300 --> 13:31.033 +Everything in life, you know, practice + +13:31.066 --> 00:13:33.439 +and it will get better. All right now . + +NOTE Details: Editing + +00:13:33.440 --> 00:13:34.852 +Editing, well, like I mentioned, + +00:13:34.853 --> 00:13:36.939 +this is not always going to be necessary, + +00:13:36.940 --> 00:13:37.894 +depending on your style. + +00:13:37.895 --> 00:13:41.100 +There's some Youtube Emacs creators + +13:41.133 --> 00:13:43.959 +that simply record everything in one go. + +00:13:43.960 --> 13:46.533 +They might get up, get a coffee or something, + +13:46.566 --> 13:48.100 +and they'll just leave that in the clip, + +13:48.133 --> 13:49.400 +which is totally fine. + +13:49.400 --> 13:51.933 +No shame. It's the way they they want to do the video. + +13:51.966 --> 13:54.666 +Sometimes they just don't have any time + +13:54.700 --> 00:13:56.925 +to edit the videos themselves + +00:13:56.926 --> 00:13:57.900 +or pay someone else to do it. + +13:57.933 --> 00:14:00.466 +What's the best next thing? just leave it as is, + +00:14:00.467 --> 00:14:04.300 +upload, and that's fine. That completely works. + +14:04.333 --> 14:07.466 +I will say that if you do end up editing + +14:07.500 --> 14:09.666 +or deciding to edit, and you want software + +14:09.700 --> 14:11.266 +I would say check out DaVinci Resolve. + +14:11.300 --> 14:14.666 +It's free. It's available on the three major OSes. + +14:14.700 --> 14:19.000 +Honestly, DaVinci Resolve by itself + +14:19.000 --> 14:20.833 +has a plethora of features. + +14:20.866 --> 14:27.233 +I personally, I only use like 5% max of the features. + +14:27.266 --> 14:29.433 +It's professional, + +14:29.466 --> 14:33.000 +it's like professional studio all the way, things like that. + +14:33.000 --> 14:35.466 +But yeah, I would say DaVinci Resolve + +14:35.500 --> 00:14:38.319 +is a pretty solid choice. + +NOTE Tips: Editing + +00:14:38.320 --> 14:40.933 +Okay, what about the tips for editing? + +14:40.966 --> 14:42.833 +Well, most of them are pretty straightforward. + +14:42.866 --> 00:14:46.039 +Just learn enough to get going, like in all things. + +00:14:46.040 --> 14:48.266 +Like if you have a band practice + +14:48.300 --> 14:50.333 +and you're rehearsing a song, + +14:50.366 --> 14:52.100 +you just need to know the chords, + +14:52.133 --> 14:53.233 +you don't need to know improvise, + +14:53.266 --> 14:55.733 +just enough to get you through this gig + +14:55.766 --> 14:57.933 +that you're playing. That's pretty much it. + +14:57.966 --> 14:59.900 +Of course, learn the keyboard shortcuts. + +14:59.933 --> 15:02.266 +We all come from Emacs, so we all know how valuable, + +15:02.300 --> 15:05.133 +how much we treasure shortcuts to avoid the mouse. + +15:05.166 --> 15:06.833 +unfortunately since you're editing, + +15:06.866 --> 15:08.433 +you will still have to use the mouse, + +15:08.466 --> 15:10.666 +but the more keyboard shortcuts you use, + +15:10.700 --> 15:13.633 +the less the mouse is used. So there's that. + +15:13.666 --> 15:17.100 +One thing is that--I didn't know you can actually do this + +15:17.133 --> 15:18.900 +until I started editing-- + +15:18.933 --> 15:22.733 +is that you can play the speed of the video in 2x. + +15:22.766 --> 15:24.900 +For me this is great because + +15:24.933 --> 15:28.200 +since I'm mainly just listening for pauses in my video, + +15:28.200 --> 15:29.900 +I just wait until there's silence. + +15:29.933 --> 15:31.233 +Oh, that's the part I need to trim, + +15:31.266 --> 15:35.233 +or that's the part I need to remove. Simple as that. + +15:35.266 --> 15:37.800 +Also batch edit, the same thing + +15:37.800 --> 15:41.500 +as I said about recording videos, just do it in batch. + +15:41.533 --> 15:44.000 +You can also just batch edit as well. + +NOTE Details: Uploading + +15:44.000 --> 15:48.033 +Uploading, the final step. YouTube, + +15:48.066 --> 15:49.600 +if you do end up using YouTube + +15:49.600 --> 15:52.466 +which is the most popular choice for uploading videos, + +15:52.500 --> 00:15:55.119 +is that the uploading process + +00:15:55.120 --> 15:56.000 +is pretty straightforward. + +15:56.000 --> 15:58.433 +I imagine this is the same for every other platform + +15:58.466 --> 16:01.000 +that you choose. It's pretty straightforward, + +16:01.000 --> 00:16:04.119 +but it can be a little complicated + +00:16:04.120 --> 00:16:06.819 +depending on what you want to do. + +NOTE Tips: Uploading + +00:16:06.820 --> 16:09.066 +What are my tips for uploading? + +16:09.100 --> 16:10.866 +Well, first of all, at minimum, + +16:10.900 --> 16:13.266 +you need to have a descriptive title + +16:13.300 --> 16:16.100 +and a description of what you talk about in the video, + +16:16.133 --> 16:20.733 +just to help out with SEO and things like that + +16:20.766 --> 16:24.433 +when people are searching for Emacs on YouTube. + +16:24.466 --> 00:16:25.479 +Also, if possible, use a thumbnail. + +00:16:25.480 --> 16:29.466 +There's a whole community about Emacs creators + +16:29.500 --> 16:32.100 +discussing best practices to get the highest engagement, + +16:32.133 --> 16:34.733 +how to get people watching your videos, things like that, + +16:34.766 --> 00:16:35.579 +and one of the things + +00:16:35.580 --> 16:39.133 +is they highly recommend a thumbnail. + +16:39.166 --> 16:42.666 +If you mainly watch, or if you watch any Emacs content, + +16:42.700 --> 16:45.000 +a lot of us do not use thumbnails, + +16:45.000 --> 16:46.333 +and that's perfectly fine. + +16:46.366 --> 16:48.633 +I think the Emacs community is pretty used + +16:48.666 --> 16:51.133 +to just watching videos with just a thumbnail, + +16:51.166 --> 16:52.933 +it's just a screenshot of the video, + +16:52.966 --> 00:16:55.019 +and we just go there for the content, right? + +00:16:55.020 --> 16:57.900 +We're not really going there for anything else, + +16:57.933 --> 00:17:01.899 +for the knowledge that the person is spreading. + +00:17:01.900 --> 17:04.433 +I say that it can be as simple or as complex, + +17:04.466 --> 00:17:07.219 +because if your goal is to potentially + +00:17:07.220 --> 17:08.633 +earn revenue down the line, + +17:08.666 --> 17:11.933 +you will want to spend some time configuring + +17:11.966 --> 00:17:17.459 +some of the settings for uploading, like the tags, + +00:17:17.460 --> 17:18.733 +I forget what they're called, but they're + +17:18.766 --> 00:17:20.875 +a little embedded so that people can watch + +00:17:20.876 --> 00:17:22.233 +other videos and things like that. + +17:22.266 --> 17:25.500 +So there's a plethora of options, an abundance of options. + +17:25.533 --> 17:27.300 +Honestly, there's too many, + +17:27.333 --> 17:31.300 +but it all depends if you potentially want + +17:31.333 --> 17:33.066 +to make some type of income in the future + +17:33.100 --> 17:35.033 +with Emacs, making videos on Emacs. + +17:35.066 --> 17:37.700 +And yeah, that's just something + +17:37.733 --> 17:39.666 +that you will have to discover + +17:39.700 --> 17:42.633 +and read and learn more about what the Emacs community, + +17:42.666 --> 00:17:45.133 +Emacs creator community suggest, + +00:17:45.134 --> 00:17:47.200 +and best practices and things like that. + +17:47.200 --> 17:48.933 +But if anybody ever wants to talk about it, + +17:48.966 --> 17:50.266 +feel free to reach out to me. + +17:50.300 --> 00:17:54.579 +I would love to talk about things + +00:17:54.580 --> 00:17:55.740 +about YouTube and all this, + +00:17:55.741 --> 00:17:58.440 +because I find it interesting. Potentially, hopefully, + +00:17:58.441 --> 00:18:01.259 +one day, I'll be able to make some revenue. + +00:18:01.260 --> 18:03.066 +Hopefully, maybe some of you guys + +18:03.100 --> 18:04.266 +might knock it out of the park + +18:04.300 --> 18:06.133 +with what I'm going to talk about next. + +NOTE Your secret sauce + +18:06.166 --> 18:10.866 +That is your secret sauce. This is your ultimate weapon + +18:10.900 --> 18:13.466 +as to get viewers, to get subscribers, you know, + +18:13.500 --> 18:14.733 +to get anybody that wants + +18:14.766 --> 18:17.266 +to watch your... to reach a higher audience. + +18:17.300 --> 18:20.200 +That can be your humor. You might be naturally funny. + +18:20.200 --> 18:21.500 +You can make comments. + +18:21.533 --> 18:24.700 +You have a natural skill on the way you talk, + +18:24.733 --> 18:26.300 +on the way you articulate things, + +18:26.333 --> 18:29.300 +so you might be able to get people drawn to that, + +18:29.333 --> 18:32.733 +or you might be someone who just does animations + +18:32.766 --> 18:35.700 +for your videos, which does highly well as well. + +18:35.733 --> 18:38.633 +or you can do a mix of all these. + +18:38.666 --> 18:40.500 +You can just insert your superpower + +18:40.533 --> 18:42.700 +whatever you want. You can go ahead + +18:42.733 --> 18:45.266 +and use that to your advantage + +18:45.300 --> 18:47.100 +to grow user base, a viewer base. + +18:47.133 --> 18:50.000 +Hopefully, if all things align, + +18:50.000 --> 18:52.600 +you'll be able to get paid + +18:52.600 --> 18:56.200 +to also create Emacs videos soon, spread the knowledge, + +18:56.200 --> 18:58.800 +which would be pretty cool--become an Emacs influencer, + +18:58.800 --> 19:00.200 +which is the goal, right? Okay. + +19:00.200 --> 19:03.800 +I believe I painted this in a pretty good light, + +19:03.800 --> 19:04.900 +at least personal opinion. + +NOTE Cons of YouTube + +19:04.933 --> 19:07.900 +But like everything, every good also has a bad. + +19:07.933 --> 19:09.666 +Nothing is always perfect. + +19:09.700 --> 19:11.633 +That's also the same for Youtube. + +19:11.666 --> 19:14.466 +What are the bads of Youtube? + +19:14.500 --> 19:18.266 +Well, it's not going to be an overnight success. + +19:18.300 --> 19:21.533 +That is very very rare. You're not going to create a video + +19:21.566 --> 19:24.900 +and then all of a sudden get like a hundred thousand views. + +19:24.933 --> 19:27.200 +I believe by from what I've seen in the community + +19:27.200 --> 19:29.033 +if a video gets over 10k + +19:29.066 --> 19:33.100 +that it means that it did really well in the Emacs community. + +19:33.133 --> 19:38.300 +I think on average is under 3k for a video within... + +19:38.333 --> 19:40.466 +This is within the time span of + +19:40.500 --> 19:43.333 +I'd say like two weeks or so or a month, around there. + +19:43.366 --> 19:46.066 +So it varies. All these metrics you'll learn + +19:46.100 --> 19:48.466 +if you really actually want to be able + +19:48.500 --> 19:50.066 +to create something in the Emacs... + +19:50.100 --> 19:53.266 +But like I said, it does take work and it does take time. + +19:53.300 --> 19:56.733 +Another thing is that negative feedback people are very quick + +19:56.766 --> 20:00.533 +as we all have been accustomed to that. + +20:00.566 --> 20:04.300 +People are do not shy from being very negative. + +20:04.333 --> 20:07.833 +It is so easy to just say negative and mean things online + +20:07.866 --> 20:09.900 +because there's no repercussions. + +20:09.933 --> 20:12.666 +I don't understand why people do that, but it is what it is. + +20:12.700 --> 20:17.500 +But most of these comments are from the younger population. + +20:17.533 --> 20:20.700 +You know, just ignore them. + +20:20.733 --> 20:22.866 +Most of the time, they're just ignorant. + +20:22.900 --> 20:24.066 +They don't know what they're saying. + +20:24.100 --> 20:27.800 +It will help you get them, you know, grow some thick skin. + +20:27.800 --> 20:30.133 +If you already have thick skin, then you don't. + +20:30.166 --> 20:31.833 +This is not going to be a problem. + +20:31.866 --> 20:35.233 +But most of the negative comments that I've receive our + +20:35.266 --> 20:38.066 +or childish, I would say, + +20:38.100 --> 20:42.700 +that it's not really based on anything that has substance. + +20:42.733 --> 20:44.400 +Yeah, just ignore it. It's fine. + +20:44.400 --> 20:46.066 +It's not going to affect your day. + +20:46.100 --> 20:47.100 +"Don't let it affect your day" + +20:47.133 --> 20:48.866 +is the most important thing. + +20:48.900 --> 20:51.466 +Third, like I was mentioning, revenue is very hard + +20:51.500 --> 20:54.700 +to get monetized on by YouTube standards. + +20:54.733 --> 20:58.600 +That will definitely take some time and dedication. + +20:58.600 --> 21:01.300 +But if you really want it, you will work for it. + +21:01.333 --> 21:03.266 +Hopefully all of us, + +21:03.300 --> 21:05.866 +the people that are constantly creating content + +21:05.900 --> 21:09.233 +via these platforms are able to get compensated + +21:09.266 --> 21:10.400 +in some way or another, + +21:10.400 --> 21:13.000 +because we do share it because we love it, + +21:13.000 --> 21:15.833 +but also it would be nice to get some compensation. + +21:15.866 --> 21:17.933 +I'm not speaking for everybody. I'm speaking personally + +21:17.966 --> 21:22.133 +because time is a valuable asset. + +21:22.166 --> 21:23.866 +You can choose what you want to spend it + +21:23.900 --> 21:25.866 +and right now I'm having fun making videos. + +21:25.900 --> 21:29.733 +That's what I'm deciding to spend it. + +21:29.766 --> 21:31.866 +But yeah now, with all this that I've said, + +21:31.900 --> 21:36.033 +there's only one question that I want to ask all of you, + +21:36.066 --> 21:40.266 +and that is: what are you going to share? diff --git a/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt new file mode 100644 index 00000000..2f81b8be --- /dev/null +++ b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt @@ -0,0 +1,44 @@ +WEBVTT + + +00:00:02.940 --> 00:00:37.880 +Introduction + +00:00:37.881 --> 00:01:38.559 +What do I mean by shell? + +00:01:38.560 --> 00:04:50.159 +What I do not mean + +00:04:50.160 --> 00:09:26.911 +What is a shell? + +00:09:26.912 --> 00:11:57.299 +Launching external processes + +00:11:57.300 --> 00:14:33.413 +Environment variables + +00:14:54.400 --> 00:16:02.546 +Processes + +00:17:00.180 --> 00:20:07.719 +Redirecting and pipelining input and output + +00:20:09.440 --> 00:21:01.999 +Scripts + +00:21:11.780 --> 00:23:30.079 +File system management + +00:23:43.560 --> 00:24:23.639 +Networking + +00:24:30.120 --> 00:34:21.127 +A brief tour of Eshell + +00:34:21.128 --> 00:36:36.979 +Login shell + +00:36:36.980 --> 00:37:13.000 +Resources diff --git a/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt new file mode 100644 index 00000000..7f16a859 --- /dev/null +++ b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt @@ -0,0 +1,1142 @@ +WEBVTT captioned by mark + +NOTE Introduction + +00:00:02.940 --> 00:00:08.719 +Welcome to Emacs as a Shell, a talk by Christopher Howard for + +00:00:08.720 --> 00:00:13.799 +Emacs Conference 2024. + +00:00:13.800 --> 00:00:18.399 +In this talk, I would like to explore, or advocate for, a + +00:00:18.400 --> 00:00:21.919 +particular perspective. I want to encourage people to + +00:00:21.920 --> 00:00:26.479 +think of Emacs not as simply an editor or a development + +00:00:26.480 --> 00:00:31.119 +environment, but rather as a shell, or at least something + +00:00:31.120 --> 00:00:33.919 +that allows us to do most of the things that we might + +00:00:33.920 --> 00:00:37.880 +otherwise want to do from a shell. + +NOTE What do I mean by shell? + +00:00:37.881 --> 00:00:40.839 +What do I mean by shell? By + +00:00:40.840 --> 00:00:45.439 +shell, I mean basically an interface that allows us to + +00:00:45.440 --> 00:00:50.679 +interact with the rest of our system by entering commands. + +00:00:50.680 --> 00:00:55.039 +That definition is, perhaps, a little too broad, and so I + +00:00:55.040 --> 00:00:58.439 +will try to narrow it down with a list of features that, + +00:00:58.440 --> 00:01:03.279 +historically, we have come to expect from a shell. The Bash + +00:01:03.280 --> 00:01:07.719 +shell is one very portable and well-known shell, and for + +00:01:07.720 --> 00:01:13.599 +many of us it is maybe the prototypical example. But in the + +00:01:13.600 --> 00:01:16.879 +past there have been many other shells, and there are other + +00:01:16.880 --> 00:01:21.119 +shells available today. If we are willing to be flexible in + +00:01:21.120 --> 00:01:25.559 +our thinking, we can think of Emacs as being a shell, or at + +00:01:25.560 --> 00:01:28.879 +least providing most of the functionality that we expect + +00:01:28.880 --> 00:01:38.559 +from a shell. + +NOTE What I do not mean + +00:01:38.560 --> 00:01:42.759 +Before further expanding on this idea, I must emphasize + +00:01:42.760 --> 00:01:47.159 +what I do not mean. First of all, I am not talking about + +00:01:47.160 --> 00:01:51.439 +running Bash, or some other external shell, from within + +00:01:51.440 --> 00:01:56.439 +Emacs, although this is certainly possible. I am arguing, + +00:01:56.440 --> 00:02:02.439 +rather, for using Emacs as a shell, instead of other shells. + +00:02:02.440 --> 00:02:06.239 +Second, I do not mean running a terminal emulator from + +00:02:06.240 --> 00:02:11.399 +within Emacs. Emacs has a built-in terminal emulator, but + +00:02:11.400 --> 00:02:15.839 +this is not what I mean. A terminal emulator is essentially a + +00:02:15.840 --> 00:02:20.039 +program designed to control the cursor and text appearance + +00:02:20.040 --> 00:02:23.999 +in response to various control codes in order to mimic a + +00:02:24.000 --> 00:02:28.439 +terminal display device. There are certainly legitimate + +00:02:28.440 --> 00:02:32.559 +reasons to do this. Nevertheless, in general, it does not + +00:02:32.560 --> 00:02:36.519 +make much sense to run a terminal emulator within Emacs, + +00:02:36.520 --> 00:02:39.719 +because Emacs has its own commands for controlling the + +00:02:39.720 --> 00:02:45.039 +cursor and text appearance. Also, due to the way Emacs was + +00:02:45.040 --> 00:02:48.919 +designed historically, Emacs itself believes that it is + +00:02:48.920 --> 00:02:53.119 +running on a terminal. So you end up with layers upon layers + +00:02:53.120 --> 00:02:58.199 +of terminal emulation. Anyhow, at the end of the day, Emacs + +00:02:58.200 --> 00:03:01.839 +will not perform as well as a dedicated terminal emulator + +00:03:01.840 --> 00:03:08.079 +program. I also think that, as we try to force ANSI terminal + +00:03:08.080 --> 00:03:12.359 +emulation into our Emacs workflow, this ultimately will be + +00:03:12.360 --> 00:03:15.879 +a hindrance to us in taking advantage of the natural and + +00:03:15.880 --> 00:03:19.319 +pleasant interfaces that are already available to us + +00:03:19.320 --> 00:03:24.999 +within Emacs. In brief, if your goal is simply to figure out + +00:03:25.000 --> 00:03:28.499 +how to be able to do all your normal Bash command line + +00:03:28.500 --> 00:03:32.359 +wizardry from within an Emacs window instead of a GNOME + +00:03:32.360 --> 00:03:36.479 +console window, you are headed down a different set of train + +00:03:36.480 --> 00:03:43.199 +tracks than I am. Also, something which I fear may confuse + +00:03:43.200 --> 00:03:47.919 +the issue for some viewers is the fact that Emacs ships with + +00:03:47.920 --> 00:03:52.839 +its own unique built-in shell, called the Emacs shell, or + +00:03:52.840 --> 00:03:59.079 +Eshell. + +00:03:59.080 --> 00:04:02.959 +Eshell aims to be a legitimate shell, and provides a very + +00:04:02.960 --> 00:04:07.599 +similar experience to other shells like Bash, while being + +00:04:07.600 --> 00:04:11.119 +well integrated into the Emacs interface, and without + +00:04:11.120 --> 00:04:15.639 +giving up the power of the Emacs Lisp engine. Eshell will be + +00:04:15.640 --> 00:04:19.139 +mentioned multiple times in this talk. The entire talk + +00:04:19.140 --> 00:04:24.179 +could, in fact, be about Eshell, except that I want the talk + +00:04:24.180 --> 00:04:28.319 +to cover all aspects of Emacs shell-like functionality + +00:04:28.320 --> 00:04:32.079 +through its other tools, such as interactive commands and + +00:04:32.080 --> 00:04:37.079 +special modes. So, hopefully we can keep distinct in our + +00:04:37.080 --> 00:04:43.279 +mind the ideas of Emacs as a shell versus the Emacs shell, + +00:04:43.880 --> 00:04:50.159 +though the latter is an important part of the former. + +NOTE What is a shell? + +00:04:50.160 --> 00:04:55.399 +Let's get back to the fundamental idea of what is a shell. In + +00:04:55.400 --> 00:04:59.159 +the broadest definition, a shell is an interface which + +00:04:59.160 --> 00:05:02.279 +allows you to interact with your operating system through + +00:05:02.280 --> 00:05:06.840 +commands. However, from a historical perspective, there + +00:05:06.841 --> 00:05:10.699 +are a few basic capabilities which we expect to be part of + +00:05:10.700 --> 00:05:17.880 +every shell. + +00:05:17.881 --> 00:05:21.420 +First of all, the shell provides a means of launching + +00:05:21.421 --> 00:05:26.440 +external programs. Some internal or built-in commands + +00:05:26.441 --> 00:05:31.679 +might also be made available. Second, the shell provides a + +00:05:31.680 --> 00:05:36.820 +means of managing environment variables. In the past, + +00:05:36.821 --> 00:05:40.580 +environment variables often played a critical role as a + +00:05:40.581 --> 00:05:45.360 +means of passing in options, file names, device names, and + +00:05:45.361 --> 00:05:50.119 +suchlike to external programs. This is not quite as common + +00:05:50.120 --> 00:05:54.080 +today, but the environment still plays a critical role in + +00:05:54.081 --> 00:05:57.619 +managing things such as the path to executables and + +00:05:57.620 --> 00:06:03.080 +libraries, as well as various other user, desktop, and + +00:06:03.081 --> 00:06:08.280 +system settings. The shell modifies the environment and + +00:06:08.281 --> 00:06:11.620 +passes it on to external programs. + +00:06:13.540 --> 00:06:17.580 +Historically, job control was expected to be either a + +00:06:17.581 --> 00:06:21.560 +function of the shell, or easily accessible from it. + +00:06:21.561 --> 00:06:24.019 +Usually today, our personal computing is not + +00:06:24.020 --> 00:06:29.280 +batch-oriented. But typically, shells can run multiple + +00:06:29.281 --> 00:06:34.599 +processes simultaneously, as well as provide means to + +00:06:34.600 --> 00:06:38.780 +suspend and terminate processes, which are useful + +00:06:38.781 --> 00:06:44.880 +features. Shells should be able to redirect and pipeline + +00:06:44.881 --> 00:06:49.100 +process input and output. This allows the user to connect + +00:06:49.101 --> 00:06:53.880 +process input and output with files, devices, or other + +00:06:53.881 --> 00:06:58.813 +processes. Finally, shells are expected to have some + +00:06:58.814 --> 00:07:02.380 +limited scripting capability, such as the + +00:07:02.381 --> 00:07:06.613 +POSIX-compliant set of program statements and + +00:07:06.614 --> 00:07:08.880 +conditionals that Bash provides. + +00:07:11.100 --> 00:07:15.113 +As command-line wizards, there are a number of tasks we + +00:07:15.114 --> 00:07:18.280 +expect to be able to do quickly and easily from our shell, + +00:07:18.660 --> 00:07:21.646 +even though these tasks are not the domain of the shell + +00:07:21.647 --> 00:07:27.880 +itself. A common task is file management and navigation. We + +00:07:27.881 --> 00:07:31.113 +quickly navigate and manipulate the file system with + +00:07:31.114 --> 00:07:34.813 +standard utilities that do things like change the current + +00:07:34.814 --> 00:07:39.380 +working directory, rename files, move files, and delete + +00:07:39.381 --> 00:07:44.146 +files. We usually expect to have access to some additional + +00:07:44.147 --> 00:07:48.380 +process management utilities. These allow us to do things + +00:07:48.381 --> 00:07:51.780 +such as find out the status of all processes running on the + +00:07:51.781 --> 00:07:57.980 +system, and send signals to processes. Finally, we expect + +00:07:57.981 --> 00:08:02.113 +to have access to some basic networking utilities. For + +00:08:02.114 --> 00:08:05.413 +example, we should be able to run commands that set up + +00:08:05.414 --> 00:08:09.513 +network interfaces, ping computers, and download files. + +00:08:09.514 --> 00:08:16.080 +With a little reflection, we can see that Emacs can provide + +00:08:16.081 --> 00:08:20.146 +all or nearly all of the functionality we have described so + +00:08:20.147 --> 00:08:24.046 +far. And the functionality can be called conveniently + +00:08:24.047 --> 00:08:26.746 +through one of several methods. + +00:08:33.520 --> 00:08:43.846 +Either a normal interactive call, like M-x something, or a + +00:08:43.847 --> 00:08:46.013 +call to an elisp function, + +00:08:53.620 --> 00:09:01.180 +or through Eshell commands, or through some special buffer + +00:09:01.181 --> 00:09:06.946 +mode, such as the directory editor, which provides its own + +00:09:06.947 --> 00:09:09.413 +interface to some functionality. + +00:09:09.414 --> 00:09:17.413 +It may be going too far to say that Emacs is a full replacement + +00:09:17.414 --> 00:09:21.713 +for shells like Bash. Nevertheless, we can see that Emacs + +00:09:21.714 --> 00:09:25.680 +can do most of the things that we might otherwise do with our + +00:09:25.681 --> 00:09:26.911 +shell. + +NOTE Launching external processes + +00:09:26.912 --> 00:09:32.513 +Let us give some examples. First, can Emacs launch + +00:09:32.514 --> 00:09:36.680 +external commands? Of course. Now, there are something + +00:09:36.681 --> 00:09:40.446 +like a half-dozen different ways to do that within Emacs, and + +00:09:40.447 --> 00:09:46.713 +some are more convenient than others. From any Elisp + +00:09:46.714 --> 00:09:50.780 +program, we can call functions like make-process and + +00:09:50.781 --> 00:09:53.913 +call-process to launch external processes. + +00:10:12.460 --> 00:10:16.846 +These, however, generally are not convenient for quick, + +00:10:16.847 --> 00:10:22.380 +one-off commands. Another option would be to run Eshell, + +00:10:22.381 --> 00:10:26.580 +which would allow us to call the external program from a + +00:10:26.581 --> 00:10:28.946 +familiar command line prompt. + +00:10:34.160 --> 00:10:38.880 +If we do not actually want to drop into Eshell just to run one + +00:10:38.881 --> 00:10:42.213 +command, we also have the interactive command, + +00:10:42.214 --> 00:10:44.613 +eshell-command, + +00:10:52.420 --> 00:10:56.746 +which would allow us to call the external program from a + +00:10:56.747 --> 00:10:59.180 +familiar command line prompt. + +00:11:09.940 --> 00:11:12.080 +If we do not actually want to drop an + +00:11:12.081 --> 00:11:15.699 +Eshell just to run one command, as I just mentioned, we also + +00:11:15.700 --> 00:11:19.799 +have the interactive command eshell-command, which allows + +00:11:19.800 --> 00:11:23.399 +us to enter in a one-off command and run that immediately. + +00:11:25.420 --> 00:11:28.799 +And finally, there is also an interactive command called + +00:11:28.800 --> 00:11:30.499 +simply shell-command. + +00:11:34.600 --> 00:11:39.099 +Shell command is like Eshell command, but instead passes + +00:11:39.100 --> 00:11:42.899 +the command off to our system shell, for example, bash. + +00:11:43.940 --> 00:11:48.599 +This is cheating, of course, but it might be useful or convenient + +00:11:48.600 --> 00:11:57.299 +in some scenarios. + +NOTE Environment variables + +00:11:57.300 --> 00:12:01.899 +Regarding environment variables, Emacs can read and + +00:12:01.900 --> 00:12:05.399 +manipulate the environment variables, which in turn get + +00:12:05.400 --> 00:12:09.659 +passed on to processes which it launches. The + +00:12:09.660 --> 00:12:12.899 +general-purpose interactive commands for this are + +00:12:12.900 --> 00:12:18.499 +getenv and setenv. These commands + +00:12:18.500 --> 00:12:21.799 +deal with the one environment that is available throughout + +00:12:21.800 --> 00:12:25.699 +all parts of your running Emacs session. In other words, + +00:12:25.700 --> 00:12:28.999 +these functions deal with a global environment, which is + +00:12:29.000 --> 00:12:32.099 +the same wherever you are running getenv or + +00:12:32.100 --> 00:12:34.399 +setenv. + +00:13:00.340 --> 00:13:04.259 +An important exception is that every instance of Eshell + +00:13:04.260 --> 00:13:07.599 +maintains a distinct environment that will not be affected + +00:13:07.600 --> 00:13:13.980 +by setenv calls run in other buffers. Also, Eshell + +00:13:13.981 --> 00:13:16.446 +has some additional syntax for dealing with its + +00:13:16.447 --> 00:13:20.780 +environment, including the set and export syntax. + +00:13:38.647 --> 00:13:47.113 +Regarding job control and process management, Emacs does + +00:13:47.114 --> 00:13:50.880 +not provide job control in the way that Bash users are used + +00:13:50.881 --> 00:13:57.080 +to. We can, however, launch asynchronous processes, and do + +00:13:57.081 --> 00:14:01.580 +various things to them. From Eshell, or an eshell-command + +00:14:01.581 --> 00:14:07.180 +call, we can append the ampersand symbol to the command, and + +00:14:07.181 --> 00:14:11.013 +this will cause the process to run asynchronously in a + +00:14:11.014 --> 00:14:13.313 +dedicated buffer. + +00:14:20.881 --> 00:14:25.280 +Now, if the command is launched from Eshell, it will not + +00:14:25.281 --> 00:14:31.180 +actually run in a separate buffer, but the output will go to + +00:14:31.181 --> 00:14:33.413 +the Eshell buffer. + +NOTE Processes + +00:14:54.400 --> 00:14:59.580 +We can run the interactive command list-processes to see + +00:14:59.581 --> 00:15:02.846 +all the processes running for our current Emacs session. + +00:15:11.747 --> 00:15:17.646 +In Eshell, we can run the command "jobs" to get the same list. + +00:15:17.647 --> 00:15:22.813 +This will show the process name, process buffer name, + +00:15:22.814 --> 00:15:28.613 +process ID, and some other information. We can select the + +00:15:28.614 --> 00:15:32.880 +process buffer in the process list to bring up that process + +00:15:32.881 --> 00:15:36.213 +buffer. + +00:15:42.414 --> 00:15:47.046 +We can also use the interactive command signal-process to + +00:15:47.047 --> 00:15:52.980 +send any signal to a process, including "stop" to suspend the + +00:15:52.981 --> 00:15:58.380 +process, "continue" to resume the process, and "interrupt" or + +00:15:58.381 --> 00:16:02.546 +kill to terminate the process. + +NOTE Redirecting and pipelining input and output + +00:17:00.180 --> 00:17:04.813 +Regarding redirecting and pipelining input and output, + +00:17:04.814 --> 00:17:11.613 +Eshell does support redirection similar to Bash, so you can + +00:17:11.614 --> 00:17:17.046 +overwrite and append to files and some other objects. Input + +00:17:17.047 --> 00:17:22.380 +redirection is not yet implemented, but it is on the Eshell + +00:17:22.381 --> 00:17:29.213 +to-do list. Eshell also has pipes. The default pipe, which + +00:17:29.214 --> 00:17:33.220 +uses the familiar vertical bar symbol, pipes the data + +00:17:33.221 --> 00:17:36.980 +between the commands using an intermediate Emacs buffer. + +00:17:36.981 --> 00:17:41.200 +This, while usually quite practical, is less efficient + +00:17:41.201 --> 00:17:46.319 +than the system pipe. Therefore, Eshell also makes + +00:17:46.320 --> 00:17:50.146 +available a star-modified version, which uses the system + +00:17:50.147 --> 00:17:52.546 +pipe through a call to your system shell. + +00:17:56.881 --> 00:17:59.413 +So we can do things like + +00:18:02.340 --> 00:18:05.860 +direct output to a file. + +00:18:15.100 --> 00:18:20.240 +We're unfortunately not able to do input redirection, but + +00:18:20.241 --> 00:18:22.540 +we can use pipes. + +00:18:41.760 --> 00:18:45.639 +Elisp can manipulate and tie together processes in various + +00:18:45.640 --> 00:18:50.999 +ways, such as process filters and pipe processes, but I + +00:18:51.000 --> 00:18:56.559 +won't attempt to cover that. I feel like you should mention + +00:18:56.560 --> 00:19:02.119 +again that we have two kinds of pipes here available. So this + +00:19:02.120 --> 00:19:09.239 +pipe, the standard one, will pipe the data through Emacs + +00:19:09.240 --> 00:19:16.759 +buffers. That's very practical in most cases, but it is less + +00:19:16.760 --> 00:19:22.919 +efficient than piping through the system pipe. So Eshell + +00:19:22.920 --> 00:19:28.119 +makes available another symbol for that, star, vertical + +00:19:28.120 --> 00:19:38.339 +bar, that allows you to explicitly use the system pipe. + +00:19:38.340 --> 00:19:43.599 +Regarding scripting: Of course, using Emacs makes + +00:19:43.600 --> 00:19:47.959 +available all the power of the Elisp API and third-party + +00:19:47.960 --> 00:19:54.719 +packages, so we have that out of the gate. Eshell also has + +00:19:54.720 --> 00:19:59.639 +control flow statements, like an "if" construct and a "for" + +00:19:59.640 --> 00:20:06.519 +construct. See the Eshell info manual, section 3.7, for + +00:20:06.520 --> 00:20:07.719 +more details. + +NOTE Scripts + +00:20:09.440 --> 00:20:13.839 +And if you wish to write a script entirely in Eshell syntax, + +00:20:13.840 --> 00:20:18.559 +and store it in a separate file, this is possible with recent + +00:20:18.560 --> 00:20:20.159 +versions of Emacs. + +00:20:31.840 --> 00:20:34.679 +Here's an example of a brief script that I wrote. + +00:20:37.560 --> 00:20:42.679 +Unfortunately, an eshell mode for proper syntax + +00:20:42.680 --> 00:20:46.279 +highlighting is not yet available, but hopefully that will + +00:20:46.280 --> 00:20:51.279 +be forthcoming. Note that Eshell syntax allows elisp + +00:20:51.280 --> 00:20:55.079 +forms to be interspersed with regular command form for + +00:20:55.080 --> 00:20:58.759 +additional scripting power. We will discuss this a little + +00:20:58.760 --> 00:21:01.999 +more later. + +NOTE File system management + +00:21:11.780 --> 00:21:16.759 +Regarding file system management. In Emacs, many of the + +00:21:16.760 --> 00:21:20.239 +common file system operations are available as + +00:21:20.240 --> 00:21:26.759 +interactive commands. For example, M-x cd, to change your + +00:21:26.760 --> 00:21:32.839 +buffer's current working directory, and other M-x commands + +00:21:32.840 --> 00:21:37.439 +such as make-directory + +00:21:40.780 --> 00:21:42.679 +chmod, + +00:21:43.260 --> 00:21:51.159 +and delete-file. Of course, you can also drop into Eshell, + +00:21:53.840 --> 00:22:00.639 +or use M-x eshell-command to run the usual external commands + +00:22:00.640 --> 00:22:07.039 +for file system manipulation. Also, a file manager is built + +00:22:07.040 --> 00:22:14.279 +into Emacs, which can be run by calling M-x dired. + +00:22:19.640 --> 00:22:24.559 +The directory editor is powerful, but it is a bit strange to + +00:22:24.560 --> 00:22:28.679 +folks expecting something like Midnight Commander or the + +00:22:28.680 --> 00:22:35.639 +GNOME file manager. It gives us a number of helpful features + +00:22:35.640 --> 00:22:43.639 +like the ability to mark files, and to run elisp functions on + +00:22:44.700 --> 00:22:48.439 +them, and some other interesting ways to manipulate and + +00:22:48.440 --> 00:22:54.079 +rename the files. However, third-party Emacs extensions + +00:22:54.080 --> 00:22:58.479 +such as Midnight Commander Mode and Sunrise Commander are + +00:22:58.480 --> 00:23:03.879 +available to provide a Midnight Commander experience, for those who + +00:23:03.880 --> 00:23:10.319 +prefer that sort of file management. + +00:23:10.320 --> 00:23:14.879 +Emacs also has the nifty TRAMP functionality built in, + +00:23:14.880 --> 00:23:19.159 +which allows you, most of the time, to easily edit files on + +00:23:19.160 --> 00:23:22.719 +other computers, as well as manipulate the file system. + +00:23:23.180 --> 00:23:27.839 +This transparently works through SSH and some other + +00:23:27.840 --> 00:23:30.079 +protocols that you can specify. + +NOTE Networking + +00:23:43.560 --> 00:23:48.159 +Regarding networking features, I don't have a lot of + +00:23:48.160 --> 00:23:51.639 +interesting things to say about this at the present, so I'll + +00:23:51.640 --> 00:23:54.919 +skip through this quickly. But if you do a little research, + +00:23:54.920 --> 00:23:58.799 +you will see that Emacs has a lot of functionality relating + +00:23:58.800 --> 00:24:02.359 +to making network connections, interacting with the web, + +00:24:02.780 --> 00:24:07.859 +and such like, both built-in and in available packages, as + +00:24:07.860 --> 00:24:14.399 +well as modes for doing things like Web browsing and Gemini + +00:24:14.400 --> 00:24:20.599 +browsing. And of course, you can run the usual standard + +00:24:20.600 --> 00:24:23.639 +networking commands for your system through Eshell. + +NOTE A brief tour of Eshell + +00:24:30.120 --> 00:24:33.759 +So having put forward the main arguments for this talk, I + +00:24:33.760 --> 00:24:38.199 +would like to take some time now to give a brief tour of a few of + +00:24:38.200 --> 00:24:43.799 +the features of Eshell, the Emacs shell. It bears + +00:24:43.800 --> 00:24:46.999 +emphasizing that Eshell is not a drop-in replacement for + +00:24:47.000 --> 00:24:51.879 +Bash, or even a Bash clone, though I believe the developers + +00:24:51.880 --> 00:24:56.839 +are trying to make much of the syntax very similar. Also, + +00:24:56.840 --> 00:25:00.479 +Eshell is not a terminal emulator, and it will not display + +00:25:00.480 --> 00:25:04.679 +correctly applications which use advanced ANSI control + +00:25:04.680 --> 00:25:10.119 +codes. However, Eshell can be configured to be aware of such + +00:25:10.120 --> 00:25:13.300 +applications, and to run them automatically within the + +00:25:13.301 --> 00:25:19.940 +Emacs terminal emulator when launched. See section 5.1 of + +00:25:19.941 --> 00:25:24.100 +the Eshell manual titled Visual Commands. + +00:25:32.540 --> 00:25:36.759 +Though Eshell is not Bash, it has multiple features, + +00:25:36.760 --> 00:25:40.679 +pertaining mainly to its by-design Emacs integration, + +00:25:40.680 --> 00:25:44.639 +which may make it more appealing to use than Bash or another + +00:25:44.640 --> 00:25:45.359 +shell. + +00:25:48.160 --> 00:25:52.039 +For one, Eshell allows entering commands on the command + +00:25:52.040 --> 00:25:55.960 +line that are space and new line separated, without + +00:25:55.961 --> 00:26:01.280 +parentheses. Of course, all the other shells do this. But + +00:26:01.281 --> 00:26:06.280 +within Eshell, it is possible to enter internal Emacs + +00:26:06.281 --> 00:26:11.060 +functions, as well as external commands. + +00:26:13.240 --> 00:26:45.739 +This allows us to do things like this. + +00:26:45.740 --> 00:26:49.759 +As far as I understand, it is possible to enter any Emacs + +00:26:49.760 --> 00:26:53.959 +function on the Eshell command line. However, some special + +00:26:53.960 --> 00:26:58.399 +syntax may be required if you are trying to pass in something + +00:26:58.400 --> 00:27:00.799 +that is not a string or a number. + +00:27:04.380 --> 00:27:07.919 +As you might have noticed in the last example, Eshell makes + +00:27:07.920 --> 00:27:12.919 +it possible to use an Emacs buffer as a sink for output. It + +00:27:12.920 --> 00:27:18.039 +also allows using a buffer as a source of input, though this + +00:27:18.040 --> 00:27:21.839 +is slightly more complicated, since the buffer must be + +00:27:21.840 --> 00:27:27.199 +converted to a string first. I have distilled this down into + +00:27:27.200 --> 00:27:30.279 +my own function, named with the "at" symbol. + +00:27:36.640 --> 00:27:40.319 +And I will provide the brief snippet of code for this later. + +00:27:54.640 --> 00:28:02.499 +So to give an example, here's our messages buffer. + +00:28:02.500 --> 00:28:05.399 +And from Eshell, we can do something like this. + +00:28:29.780 --> 00:28:34.439 +Let's say here we wanted to grab our messages buffer to see + +00:28:34.440 --> 00:28:38.079 +everything that we had been loading during the startup + +00:28:38.080 --> 00:28:38.959 +process. + +00:28:48.060 --> 00:28:51.879 +So you can see how that could be very handy in a number of + +00:28:51.880 --> 00:28:52.959 +scenarios. + +00:28:55.060 --> 00:29:00.239 +I wanted to briefly mention that we have a helpful function + +00:29:00.240 --> 00:29:03.439 +here called eshell-insert-buffer-name, + +00:29:11.120 --> 00:29:15.359 +which allows us to insert a buffer name into the current + +00:29:15.360 --> 00:29:18.439 +buffer at point using completion, + +00:29:24.680 --> 00:29:32.879 +which can save you a lot of typing. + +00:29:32.880 --> 00:29:34.799 +Another nice feature of Eshell + +00:29:37.220 --> 00:29:41.199 +is that it allows integrating ELisp into the command line + +00:29:41.200 --> 00:29:48.879 +call. Let's give another example. Say we wanted to echo the + +00:29:48.880 --> 00:29:53.919 +date to an event file or an event log. + +00:29:56.720 --> 00:30:01.639 +I should probably take a moment to explain this asterisk + +00:30:01.640 --> 00:30:06.999 +that I'm occasionally using. So since Emacs, or excuse me, + +00:30:07.000 --> 00:30:11.719 +since Eshell can use internal or external Emacs, excuse me, + +00:30:11.720 --> 00:30:16.999 +internal Emacs commands or external commands, it may + +00:30:17.000 --> 00:30:21.679 +sometimes be necessary to clarify which one you want to use, + +00:30:22.380 --> 00:30:27.079 +since the names may overlap. Since my Eshell is configured + +00:30:27.080 --> 00:30:32.319 +by default to prefer the internal Emacs functions, then + +00:30:32.320 --> 00:30:37.799 +sometimes I have to use the asterisk to specify that I want + +00:30:37.800 --> 00:30:39.079 +the external version. + +00:30:42.680 --> 00:31:02.639 +Here I can insert a bit of Elisp, + +00:31:03.180 --> 00:31:06.119 +and then redirect the output to the event log. + +00:31:18.720 --> 00:31:22.639 +Last, I want to mention that there are some optional Eshell + +00:31:22.640 --> 00:31:27.159 +modules in Emacs, not turned on by default, which provide + +00:31:27.160 --> 00:31:29.039 +additional nifty features. + +00:31:40.540 --> 00:31:45.639 +On my system, I have most of the optional modules turned on. + +00:31:58.320 --> 00:32:03.199 +An interesting module is eshell-smart, which does various + +00:32:03.200 --> 00:32:07.319 +things with cursor positioning and scrolling, so as to make + +00:32:07.320 --> 00:32:10.399 +editing commands and reviewing output easier. + +00:32:18.340 --> 00:32:23.619 +Let's say I was to change directory to my boot directory + +00:32:30.880 --> 00:32:35.039 +and use a command which involves lots of output. + +00:32:39.900 --> 00:32:44.359 +You'll notice right away that the cursor positioning is set + +00:32:44.360 --> 00:32:48.719 +such that I'm immediately able to view the top of the output. + +00:32:48.720 --> 00:32:52.879 +Also, I'm able to use the space bar to page through the + +00:32:52.880 --> 00:32:56.079 +output. + +00:32:56.080 --> 00:33:01.919 +So this is an opinionated feature, which assumes that + +00:33:01.920 --> 00:33:05.399 +you're likely going to want to review the output + +00:33:05.400 --> 00:33:10.559 +immediately, or that you often will. Of course, you can + +00:33:10.560 --> 00:33:17.599 +always jump to the end. + +00:33:19.980 --> 00:33:23.919 +Also, after a command is entered, the cursor is immediately + +00:33:23.920 --> 00:33:28.279 +repositioned to make it easy to edit the command. + +00:33:53.020 --> 00:33:56.519 +And also, if I don't want to edit the command, and I do not want + +00:33:56.520 --> 00:33:59.679 +to review the output, I can simply start typing another + +00:33:59.680 --> 00:34:00.359 +command. + +00:34:11.260 --> 00:34:15.519 +So that covers the brief tour of Eshell features. + +00:34:17.760 --> 00:34:21.127 +And that basically ends my talk. + +NOTE Login shell + +00:34:21.128 --> 00:34:22.380 +However, a handful of + +00:34:22.381 --> 00:34:28.719 +viewers might be wondering, is it possible to set Emacs to be + +00:34:28.720 --> 00:34:37.639 +my login shell to completely replace bash in your login + +00:34:37.640 --> 00:34:43.719 +experience? The answer is yes, but in practice there are + +00:34:43.720 --> 00:34:47.399 +various difficulties involved which might make it not + +00:34:47.400 --> 00:34:48.359 +worth the trouble. + +00:35:00.440 --> 00:35:03.479 +Before doing this, you'll have to answer a few initial + +00:35:03.480 --> 00:35:09.519 +questions. Do you want to make a new Emacs instance every + +00:35:09.520 --> 00:35:13.759 +time you log in, or do you want it to connect to an Emacs + +00:35:13.760 --> 00:35:20.599 +server? Which is popular among Emacs users, to reuse the + +00:35:20.600 --> 00:35:26.599 +session, or to connect to the existing session. Also, do you + +00:35:26.600 --> 00:35:30.639 +want a different result, whether in graphical or a terminal + +00:35:30.640 --> 00:35:34.679 +environment? And are you okay with your initialization + +00:35:34.680 --> 00:35:39.559 +file being run every time you log in, including every new tab + +00:35:39.560 --> 00:35:44.520 +you open in a terminal emulator? If we assume that you are + +00:35:44.521 --> 00:35:50.339 +using a system with /etc/passwd user management, you get + +00:35:50.340 --> 00:35:53.999 +one field to specify the name of the shell program that you + +00:35:54.000 --> 00:35:58.479 +want to use, and no arguments are allowed. So maybe you can + +00:35:58.480 --> 00:36:02.679 +see how this might be challenging, depending on your + +00:36:02.680 --> 00:36:06.879 +answers to the previous questions. You can work around + +00:36:06.880 --> 00:36:10.479 +these issues in various ways, like modifying the + +00:36:10.480 --> 00:36:15.439 +authentication system, or by specifying a script for your + +00:36:15.440 --> 00:36:21.799 +login shell. But if your normal workflow is to simply log in + +00:36:21.800 --> 00:36:25.679 +and start Emacs and run that Emacs session until your next + +00:36:25.680 --> 00:36:36.979 +reboot, then it probably isn't worth the bother. + +NOTE Resources + +00:36:36.980 --> 00:36:41.999 +So thank you for listening to my talk, Emacs as a Shell, by + +00:36:42.000 --> 00:36:46.319 +Christopher Howard for Emacs Conference 2024. + +00:36:46.860 --> 00:36:51.519 +At the bottom of this page, you can see a link to the + +00:36:51.520 --> 00:36:56.919 +repository containing the brief amount of code that was + +00:36:56.920 --> 00:37:03.679 +featured here in this video, as well as a link to my personal + +00:37:03.680 --> 00:37:10.279 +Gemini gemlog, as well as to a Web portal version of that. + +00:37:10.280 --> 00:37:13.000 +Thank you. diff --git a/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt new file mode 100644 index 00000000..2ea0a13c --- /dev/null +++ b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt @@ -0,0 +1,846 @@ +WEBVTT + +00:00:00.000 --> 00:00:11.119 +And I believe we are live. Hi, Daniel, how are you doing? I'm + +00:00:11.120 --> 00:00:17.199 +doing great. It's cold outside, but it's nice in here, yeah. + +00:00:17.200 --> 00:00:21.439 +I can assure you it's very cold in my own place as well. We do + +00:00:21.440 --> 00:00:24.679 +EmacsConf always in December and that's always when it's + +00:00:24.680 --> 00:00:27.479 +particularly cold where I live and I assume where you live as + +00:00:27.480 --> 00:00:31.039 +well. So, don't worry, we'll try to keep you warm with + +00:00:31.040 --> 00:00:35.039 +interesting questions. But first, thank you for taking the + +00:00:35.040 --> 00:00:38.359 +time out of your busy high school life to make a presentation + +NOTE Q: Do you have any thoughts about the process of recording something for a conference? + +00:00:38.360 --> 00:00:41.439 +about Emacs. Do you have any thoughts about the process of + +00:00:41.440 --> 00:00:44.399 +recording something for a conference? Because I assume + +00:00:44.400 --> 00:00:47.279 +it's one of the first ones you're ever doing. + +00:00:47.280 --> 00:00:55.879 +I think it was not as difficult as I thought it would be. I just + +00:00:55.880 --> 00:01:04.479 +recorded in my basement and prepared some notes + +00:01:04.480 --> 00:01:08.639 +beforehand. I think it was definitely helpful to have Emacs + +00:01:08.640 --> 00:01:11.959 +as a tool for that, because I made my presentation with + +00:01:11.960 --> 00:01:18.559 +Beamer. Right. I mean, it's amazing to see so many of the + +00:01:18.560 --> 00:01:22.519 +tools because, you know, you've shown Emacs, but you've + +00:01:22.520 --> 00:01:27.399 +shown Beamer. You've shown tools that are about twice as old + +00:01:27.400 --> 00:01:30.239 +as you are yourself, which is amazing when you think about + +00:01:30.240 --> 00:01:33.199 +it. But I think many people in the audience can actually + +00:01:33.200 --> 00:01:36.479 +relate to your discovery of those tools because we were + +00:01:36.480 --> 00:01:40.679 +pretty much, I mean a lot of us were your age when we started + +00:01:40.680 --> 00:01:43.999 +playing with those tools so it's like there's a little bit of + +00:01:44.000 --> 00:01:45.759 +nostalgia that we feel looking at your presentation + +00:01:45.760 --> 00:01:48.719 +because we are, we can see the excitement behind everything + +00:01:48.720 --> 00:01:51.919 +you've touched and that's great for us because it brings us + +00:01:51.920 --> 00:01:55.919 +back maybe 10 or 20 years in the past and for others perhaps 30 + +00:01:55.920 --> 00:02:01.079 +or 40 years so that's kind of amazing. + +00:02:01.080 --> 00:02:05.039 +How about we start taking some questions? So, just for + +00:02:05.040 --> 00:02:09.199 +timekeeping, we have until 20 of the current hours, which is + +00:02:09.200 --> 00:02:12.079 +8 minutes and 30 seconds to cover as many questions as + +00:02:12.080 --> 00:02:16.599 +possible. Now, if we might take the first one. So, Corwin, + +00:02:16.600 --> 00:02:20.359 +can you scroll down to the questions? Yes. I'll be reading + +00:02:20.360 --> 00:02:22.319 +you the questions just to make it a little easier for you, + +00:02:22.320 --> 00:02:23.791 +Daniel, to answer them. + +NOTE Q: I use org-roam for notes and find it very useful - have you considered it? + +00:02:23.792 --> 00:02:25.999 +I use Org-roam for notes and find it + +00:02:26.000 --> 00:02:30.639 +very useful. Have you considered it? Uh, yeah, that's + +00:02:30.640 --> 00:02:35.519 +actually where I started out for taking notes. Um, that, + +00:02:35.520 --> 00:02:38.719 +that I moved to Denote because I didn't use all of its + +00:02:38.720 --> 00:02:44.319 +features, um, for, Org Roam, I meant. + +00:02:44.320 --> 00:02:46.999 +Uh, I also didn't, didn't really like the dependency on an + +00:02:47.000 --> 00:02:51.919 +external database. Uh, it just like took a while for, um, + +00:02:51.920 --> 00:02:56.879 +stuff to index if I moved it between like, uh, using sync + +00:02:56.880 --> 00:03:03.679 +thing. laptop and my desktop. Yeah. Yeah, it's definitely + +00:03:03.680 --> 00:03:08.119 +something, I mean, I co-maintain Org Roam, so I'm fully aware + +00:03:08.120 --> 00:03:12.159 +of this problem with it. And yeah, SyncThing is not great to + +00:03:12.160 --> 00:03:16.639 +sync a database, a SQLite database that we use. And, I mean, + +00:03:16.640 --> 00:03:19.399 +whichever solution you use, whatever works for you is good. + +00:03:19.400 --> 00:03:21.919 +Orgrim was kind of thought in terms of scalability for + +00:03:21.920 --> 00:03:26.199 +people who had, you know, thousands of notes with thousands + +00:03:26.200 --> 00:03:28.919 +of links inside of them. so perhaps it's not adapted to your + +00:03:28.920 --> 00:03:31.039 +note-taking style right now, but perhaps it's something to + +00:03:31.040 --> 00:03:34.599 +keep in mind, you know, it's many tools and you use them when + +00:03:34.600 --> 00:03:39.599 +you need to. Colin, if we can switch the questions, I'm + +00:03:39.600 --> 00:03:40.879 +switching to the second one. + +NOTE Q: Do you use the Getting Things Done methodology as part of your Org workflow? + +00:03:40.880 --> 00:03:42.159 +Do you use the Getting Things + +00:03:42.160 --> 00:03:46.639 +Done methodology as part of your Org workflow? So there's an + +00:03:46.640 --> 00:03:50.039 +interesting thing about that. I started with Org first and + +00:03:50.040 --> 00:03:54.959 +then I heard about Getting Things Done, so I didn't exactly + +00:03:54.960 --> 00:04:01.679 +design my workflow with that in mind, but I sort of + +00:04:01.680 --> 00:04:06.439 +reinvented it, I would say, not really, but I do a lot of + +00:04:06.440 --> 00:04:09.439 +the similar things, but I don't have the different TODO + +00:04:09.440 --> 00:04:11.319 +states like... + +00:04:11.320 --> 00:04:17.279 +I don't know an example because I didn't really look into it + +00:04:17.280 --> 00:04:22.719 +that much, but it would be like NEXT isn't the next thing + +00:04:22.720 --> 00:04:28.879 +you're going to do. But I don't think I... + +00:04:28.880 --> 00:04:35.239 +where I just write what I need to do and then schedule it and + +00:04:35.240 --> 00:04:40.999 +then look at my agenda for the next thing. Yeah, I mean, part + +00:04:41.000 --> 00:04:45.959 +of the beauty of using Emacs, Org Mode or using a methodology + +00:04:45.960 --> 00:04:49.719 +like Getting Things Done is that I think you need to find room + +00:04:49.720 --> 00:04:53.519 +in the method or the tool for you to organically do what you + +00:04:53.520 --> 00:04:57.279 +want. And it's okay to not do everything in a Getting Things + +00:04:57.280 --> 00:05:00.599 +Done methodology. I know a lot of people take issue + +00:05:00.600 --> 00:05:04.719 +with the tickler file, where you're supposed to put stuff to + +00:05:04.720 --> 00:05:07.319 +review in the future. For instance, if you don't want + +00:05:07.320 --> 00:05:10.439 +to work on this particular topic right now in your life, you + +00:05:10.440 --> 00:05:14.679 +decide, oh, I'd like to revisit this topic maybe in six + +00:05:14.680 --> 00:05:17.399 +months. And then you have this tickler file, which has + +00:05:17.400 --> 00:05:21.799 +entries and folders for each month of the year. And when six + +00:05:21.800 --> 00:05:24.039 +months comes and you find yourself at the beginning of the + +00:05:24.040 --> 00:05:27.319 +next month, you open the file and you see, oh there's the task + +00:05:27.320 --> 00:05:30.319 +I left off for later. A lot of people don't like to do it this + +00:05:30.320 --> 00:05:34.279 +way, some people really like it, but part of the beauty of + +00:05:34.280 --> 00:05:38.119 +having tools which are very modular like Emacs and Org Mode + +00:05:38.120 --> 00:05:41.479 +allows you to have, well, you just adjust the method for + +00:05:41.480 --> 00:05:44.439 +something that works. And there's something to be garnered + +00:05:44.440 --> 00:05:48.759 +as well for applying these lessons to how you organize your + +00:05:48.760 --> 00:05:51.559 +life, not merely in front of a computer, but also how you + +00:05:51.560 --> 00:05:54.519 +manage your tasks elsewhere at school, iSchool or + +00:05:54.520 --> 00:05:58.519 +elsewhere. + +NOTE Q: org-fc and org-drill are emacs org mode centric flash card solutions, have you looked into them? + +00:05:58.520 --> 00:06:02.799 +All right, moving to the next question. Org-fc and org-drill + +00:06:02.800 --> 00:06:06.319 +are Emacs Org Mode-centric flashcard solutions. Have you + +00:06:06.320 --> 00:06:11.599 +looked into them? I think I looked into Org-Drill, but I + +00:06:11.600 --> 00:06:17.359 +wanted to use Anki because of... I wanted to use it on my + +00:06:17.360 --> 00:06:21.439 +phone, but then I realized I had to pay for the app, and then I + +00:06:21.440 --> 00:06:24.119 +didn't want to use it on my phone anymore. + +00:06:24.120 --> 00:06:31.799 +but it's just something that I used before without work mode + +00:06:31.800 --> 00:06:35.239 +for a little bit. And then I liked it, + +00:06:35.240 --> 00:06:42.919 +but yeah, it works pretty well with Org mode. So I didn't + +00:06:42.920 --> 00:06:47.799 +find a reason to switch to one of those because like I might be + +00:06:47.800 --> 00:06:53.559 +not at a computer one day and have to learn something. Yeah, + +00:06:53.560 --> 00:06:56.399 +that's something that you call premature optimization. + +00:06:56.400 --> 00:06:59.479 +And if you continue as a software engineer at university, + +00:06:59.480 --> 00:07:02.679 +you'll get to hear plenty of this. But yes, Anki is also a tool + +00:07:02.680 --> 00:07:06.399 +that I've used a whole lot in my learning journeys, be it + +00:07:06.400 --> 00:07:09.719 +about languages, be it about literature, be it about + +00:07:09.720 --> 00:07:15.519 +whatever really, and it's a very good tool and I recommend + +00:07:15.520 --> 00:07:17.799 +people to look into it, especially since they've released a + +00:07:17.800 --> 00:07:20.839 +new algorithm to manage learning a little differently than + +00:07:20.840 --> 00:07:23.719 +the old one. If you're familiar with SuperMemo, I really + +00:07:23.720 --> 00:07:25.992 +invite you to look into the advancement + +00:07:25.993 --> 00:07:27.505 +in Anki in recent years. + +NOTE Q: What do other students think about your approach - and what are they doing instead (if anything)? And your teachers - what do they think? + +00:07:27.506 --> 00:07:31.399 +Moving to another question, what do other students + +00:07:31.400 --> 00:07:33.919 +think about your approach and what are they doing instead, + +00:07:33.920 --> 00:07:39.359 +if anything? And your teachers, what do they think? So for + +00:07:39.360 --> 00:07:43.199 +other students they usually are just confused about what's + +00:07:43.200 --> 00:07:51.879 +going on when I show my computer because they know that I use + +00:07:51.880 --> 00:07:56.759 +Linux but they don't know what it is so they're just assuming + +00:07:56.760 --> 00:08:03.839 +everything on my computer is I'm either hacking or like + +00:08:03.840 --> 00:08:05.999 +doing some Linux thing and + +00:08:06.000 --> 00:08:09.919 +I don't really bother to explain it to them so that's kind + +00:08:09.920 --> 00:08:17.079 +But for I love it. See my see my prior videos. That's that's + +00:08:17.080 --> 00:08:19.559 +wonderful. Pardon me. Pardon me for breaking in, Daniel. + +00:08:19.560 --> 00:08:22.239 +But I just since I have, I want to say wonderful + +00:08:22.240 --> 00:08:28.559 +presentation. I love your spirit, your tone and great + +00:08:28.560 --> 00:08:29.319 +thought there. + +00:08:29.320 --> 00:08:31.399 +For my teachers, I think... + +00:08:31.400 --> 00:08:38.799 +because if I write an essay or something, I usually paste it + +00:08:38.800 --> 00:08:46.879 +in Google Docs. But recently, I got more confident, which is + +00:08:46.880 --> 00:08:53.879 +export to LaTeX, and I did that for my physics labs. My + +00:08:53.880 --> 00:08:56.439 +teacher was pretty satisfied with the results for the math + +00:08:56.440 --> 00:09:03.119 +formatting. So I think they don't really have a problem with + +00:09:03.120 --> 00:09:06.959 +it, where it's actually more convenient, maybe. + +00:09:06.960 --> 00:09:13.039 +That's really great to hear and if you continue at + +00:09:13.040 --> 00:09:16.519 +university, which I'm almost sure that you will, your + +00:09:16.520 --> 00:09:19.279 +professors, you'll be pretty much using the same tools as + +00:09:19.280 --> 00:09:23.359 +they are, so you'll find yourself in a like-minded crowd of + +00:09:23.360 --> 00:09:28.519 +people once you get to university. We are a little short on + +00:09:28.520 --> 00:09:30.719 +time because we need to move to the next talk in about one + +00:09:30.720 --> 00:09:35.999 +minute. There are still some questions and Daniel, I would + +00:09:36.000 --> 00:09:40.399 +invite you to stay and maybe answer them in a room so that we + +00:09:40.400 --> 00:09:43.399 +can gather as many of your answers as possible. But before we + +00:09:43.400 --> 00:09:45.239 +leave, I just want to give you the opportunity, if you have + +00:09:45.240 --> 00:09:46.919 +any last words, to share them with the crowd. + +00:09:46.920 --> 00:09:53.479 +Well, for the students who may be watching this, I hope that + +00:09:53.480 --> 00:09:57.319 +you give Emacs a try. And good luck if you decide to use + +00:09:57.320 --> 00:10:01.519 +something else because it's probably won't be as great. + +00:10:01.520 --> 00:10:07.399 +It's very good to be so young and to already be convinced that + +00:10:07.400 --> 00:10:09.879 +Emacs is the best thing. For some of us, it took us many + +00:10:09.880 --> 00:10:12.839 +decades to reach this conclusion, and I'm so happy + +00:10:12.840 --> 00:10:15.095 +to see young people. I used to be a teacher, + +00:10:15.096 --> 00:10:17.016 +by the way, so I used to teach people your age, + +00:10:17.017 --> 00:10:19.799 +but I'm so happy to see people your age + +00:10:19.800 --> 00:10:23.359 +interested in Emacs because it makes me hopeful that in the + +00:10:23.360 --> 00:10:26.799 +future we'll have people carrying the flame and standing on + +00:10:26.800 --> 00:10:30.039 +the shoulders of current people. So thank you so much, + +00:10:30.040 --> 00:10:32.917 +Daniel. We'll be seeing you soon. We wish you good luck with + +00:10:32.917 --> 00:10:35.999 +your studies. And for EmacsConf, we'll be moving to the next + +00:10:36.000 --> 00:10:39.624 +talk in five seconds. See you soon. And I want to reassure + +00:10:39.625 --> 00:10:44.332 +you, we'll post all the Q&A info when we do post this video. + +00:10:44.333 --> 00:10:47.839 +Yes. So Daniel, as I said, + +00:10:47.840 --> 00:10:49.239 +if you want to stick around a little more with + +00:10:49.240 --> 00:10:51.839 +Corwin to answer the questions, that's all fine. + +00:10:51.840 --> 00:10:53.599 +I'll be moving to the next room to get ready for the next + +00:10:53.600 --> 00:10:59.159 +talks. So thank you, Daniel. And I'll see you later. + +00:10:59.160 --> 00:11:06.199 +All right, the cops are gone. Wait, no, I'm just kidding. No, + +00:11:06.200 --> 00:11:10.042 +but if you'd like to walk through a few more of these + +00:11:10.043 --> 00:11:11.960 +questions, I'd be happy to record that. You're not + +00:11:12.000 --> 00:11:14.559 +obligated to do that. You could also, the pad's there. You + +00:11:14.560 --> 00:11:16.999 +could just type out your answers or whatever you prefer to + +00:11:17.000 --> 00:11:24.559 +do. I guess I can answer them still. Cool. + +00:11:24.560 --> 00:11:25.359 +So we're here. + +NOTE Q: What was your biggest source of frustration/friction/confusion when getting started with Emacs? + +00:11:25.360 --> 00:11:27.759 +What was your biggest source of frustration, friction, + +00:11:27.760 --> 00:11:32.319 +confusion when getting started? + +00:11:32.320 --> 00:11:38.239 +I honestly don't really remember. It + +00:11:38.240 --> 00:11:45.279 +somehow just clicked one day and I figured it out. + +00:11:45.280 --> 00:11:48.123 +All right, it takes us pretty naturally to the next one. + +NOTE Q: How did you come across Emacs? What got you into it? + +00:11:48.124 --> 00:11:54.079 +How did you come across Emacs? What got you into it? I could ask + +00:11:54.080 --> 00:11:58.280 +this question quite + +00:11:58.320 --> 00:12:05.479 +similar to how I stumbled into Linux, where I was... I heard + +00:12:05.480 --> 00:12:09.519 +of it before, but I saw screenshots of it + +00:12:09.520 --> 00:12:11.247 +or something on Reddit, and I was like, oh, + +00:12:11.248 --> 00:12:14.648 +that looks pretty cool, maybe I'll look into that. + +00:12:14.649 --> 00:12:16.599 +And then on YouTube, I would see videos + +00:12:16.600 --> 00:12:21.199 +about Doom Emacs, and then the Doomcasts video, + +00:12:21.200 --> 00:12:37.239 +I think that's what really got me into it. + +00:12:37.240 --> 00:12:42.279 +Okay, I did my best to capture that. So what's the situation + +00:12:42.280 --> 00:12:46.439 +with respect to the mobile use, if that's applicable? And + +00:12:46.440 --> 00:12:47.639 +Orgzly is, + +00:12:47.640 --> 00:12:52.359 +sorry, was it not Doomcast? Is it System Crafters? + +00:12:52.360 --> 00:12:58.199 +Sorry if I botched the note. Oh yeah, System Crafters was + +00:12:58.200 --> 00:13:01.679 +also one of the things I used for getting into Emacs from + +00:13:01.680 --> 00:13:08.079 +scratch. I'm sorry if my dog is barking. + +00:13:08.080 --> 00:13:16.799 +the, I'm not sure how to pronounce his name, but Protesilaos, + +00:13:16.800 --> 00:13:20.399 +I think that's how you say it. I always say Prot just to get me + +00:13:20.400 --> 00:13:23.039 +out of that problem for what it's worth. I'm not sure that I + +00:13:23.040 --> 00:13:26.719 +can say it properly either. Yeah, his videos were really + +00:13:26.720 --> 00:13:30.479 +great for getting started with each, each individual + +00:13:30.480 --> 00:13:31.240 +component of + +00:13:31.292 --> 00:13:34.124 +something like there's entire videos just + +00:13:34.125 --> 00:13:40.249 +about completion and about a tool called Embark. And like, I + +00:13:40.250 --> 00:13:41.318 +would just watch those videos + +00:13:41.319 --> 00:13:42.999 +while I was doing the dishes or something. + +00:13:43.000 --> 00:13:53.679 +and I would learn a lot from that. + +NOTE Q: What the situation with respect to "mobile" use (if ever that's applicable)? (yes, Orgzly...using that?) + +00:13:53.680 --> 00:13:59.120 +Awesome. I love it. What about the mobile... + +00:13:59.121 --> 00:14:04.960 +sorry, did I get that question out there already? Oh, no. + +00:14:04.961 --> 00:14:07.917 +I don't use Emacs or any Org Mode things on my + +00:14:07.918 --> 00:14:19.963 +phone. I have an iPhone, unfortunately. + +00:14:19.964 --> 00:14:24.120 +But for org files, I couldn't really get it to sync over + +00:14:24.121 --> 00:14:26.800 +without using a paid app. + +00:14:26.801 --> 00:14:28.040 +And I didn't really look into it + +00:14:28.041 --> 00:14:30.140 +that much because I have a computer with me + +00:14:30.141 --> 00:14:36.000 +almost all the time. + +00:14:36.001 --> 00:14:39.520 +Usually I carry around a notebook. And if I really need to + +00:14:39.521 --> 00:14:41.940 +know something or remember it for later, + +00:14:41.941 --> 00:14:52.660 +I just write it down. + +00:14:52.661 --> 00:15:01.759 +I've seen people get started with e-ink tablets, and they + +00:15:01.760 --> 00:15:07.959 +sync it with SyncThing because it's Android, but I don't use + +00:15:07.960 --> 00:15:21.919 +that, so I can't really attest to how good it is. + +NOTE Q: Has using emacs led to expanded interest in programming/computer science? + +00:15:21.920 --> 00:15:25.559 +So has using Emacs led you to an expanded interest in + +00:15:25.560 --> 00:15:28.519 +programming and computer science? Sorry if + +00:15:28.520 --> 00:15:31.781 +I could have got that out of the presentation. + +00:15:31.782 --> 00:15:33.999 +I think Emacs is what got me + +00:15:34.000 --> 00:15:37.840 +started with Lisp specifically. + +00:15:37.900 --> 00:15:40.380 +Otherwise, I probably would have not really looked into it + +00:15:40.381 --> 00:15:44.920 +that much, other than like maybe dabbling in Scheme + +00:15:44.921 --> 00:15:50.180 +from the Structures and Interpretations of Computer + +00:15:50.181 --> 00:15:53.680 +Programs book. But I probably wouldn't have seen that if I + +00:15:53.681 --> 00:16:06.120 +hadn't discovered Emacs either so. + +00:16:06.121 --> 00:16:08.792 +I was already into programming + +00:16:08.793 --> 00:16:14.958 +before Emacs, and I had used VS Code for a little bit and then + +00:16:14.959 --> 00:16:22.917 +Vim. But I think I've done most of my programming + +00:16:22.918 --> 00:16:26.667 +inside of Emacs, in terms of lines of code written, + +00:16:26.668 --> 00:16:40.671 +projects made... + +NOTE Q: How does interaction with others work in technical terms? + +00:16:40.672 --> 00:16:44.519 +So maybe we'd jump from there, right, to, you mentioned + +00:16:44.520 --> 00:16:48.359 +exporting notes, essays, and so on, handing them on to other + +00:16:48.360 --> 00:16:53.319 +people. How does interaction with others work in technical + +00:16:53.320 --> 00:16:57.759 +terms? We mostly find workflows centered around like + +00:16:57.760 --> 00:17:00.479 +Microsoft products, and that makes sense to me. I have a day + +00:17:00.480 --> 00:17:03.719 +job where I have to work with a bunch of Microsoft products, + +00:17:03.720 --> 00:17:08.399 +and I know the workflows for that. So how do you manage your + +00:17:08.400 --> 00:17:14.519 +kind of Emacs-y you know, workflows, um, you know, in terms of + +00:17:14.520 --> 00:17:19.119 +sharing with people. Yeah. So for sharing with like my + +00:17:19.120 --> 00:17:22.719 +teachers or something, I would, we use like Google at our + +00:17:22.720 --> 00:17:25.759 +school. So for, I'm very fortunate that I don't have to deal + +00:17:25.760 --> 00:17:29.639 +with Microsoft other than with a very niche situations in + +00:17:29.640 --> 00:17:32.599 +which I can just use LibreOffice and then convert to Doc X or + +00:17:32.600 --> 00:17:35.719 +something. I heard that chef. That's, that's how all my + +00:17:35.720 --> 00:17:39.679 +vendors, uh, my vendors all roll their eyes when they were, + +00:17:39.680 --> 00:17:42.885 +oh, you're a Microsoft shop. Yep. Heard. + +00:17:42.886 --> 00:17:45.947 +Then they're all Google shops too, in education. + +00:17:45.948 --> 00:17:51.958 +Great point. For Google, I just... If my teachers wanted + +00:17:51.959 --> 00:17:53.125 +a Google Doc or something, + +00:17:53.126 --> 00:17:54.299 +I usually just copy paste + +00:17:54.300 --> 00:17:55.679 +whatever I wrote in Emacs + +00:17:55.680 --> 00:17:59.333 +and then still keep it, anyway, as a side thing + +00:17:59.334 --> 00:18:00.667 +because I don't really trust the cloud + +00:18:00.668 --> 00:18:02.875 +that much in terms of using + +00:18:02.876 --> 00:18:10.667 +it for later if I wanted to look at it. But for that, I don't + +00:18:10.668 --> 00:18:14.339 +really have too much problems. Hopefully, I will find a way + +00:18:14.340 --> 00:18:21.439 +to figure it out when I get into university. + +00:18:21.440 --> 00:18:26.679 +Awesome. Okay, well, I know we did it once already, but since + +00:18:26.680 --> 00:18:30.479 +this will be the end of the video, let me just open the floor + +00:18:30.480 --> 00:18:33.439 +one more time for parting thoughts. + +00:18:33.440 --> 00:18:41.719 +I'm not sure that I have any. I mean, you said it pretty well, + +00:18:41.720 --> 00:18:46.639 +right? I hope my peers see this. I hope they realize other + +00:18:46.640 --> 00:18:49.879 +tools are kind of inferior from a gets things done + +00:18:49.880 --> 00:18:54.639 +standpoint. Saw your talk. Heard that message in this Q&A. + +00:18:54.640 --> 00:18:58.159 +I think you did a great job. You don't have to say more, but + +00:18:58.160 --> 00:19:02.835 +just offering you the chance. Thank you. + +00:19:02.836 --> 00:19:03.916 +Well, thank you, Daniel, + +00:19:03.917 --> 00:19:07.439 +and thanks to everybody watching this video + +00:19:07.440 --> 00:19:09.838 +during the conference or after it, + +00:19:09.839 --> 00:19:12.159 +and appreciate and look forward + +00:19:12.160 --> 00:19:18.880 +to your talks in the future, Daniel. Thank you. diff --git a/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt new file mode 100644 index 00000000..9990c2e7 --- /dev/null +++ b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt @@ -0,0 +1,472 @@ +WEBVTT captioned by sachac + +00:00:00.000 --> 00:00:04.639 +Hello, my name is Daniel Pinkston. I'm in my last year of high + +00:00:04.640 --> 00:00:07.519 +school, about to go to university. About two and a half years + +00:00:07.520 --> 00:00:10.759 +ago, I discovered Emacs. My life has now been separated into + +00:00:10.760 --> 00:00:14.199 +two chapters: before and after Emacs. How could this tool be + +00:00:14.200 --> 00:00:18.399 +so impactful? Well, you'll just have to see. I made this talk + +00:00:18.400 --> 00:00:20.679 +for people who ask questions like this, but don't know where + +00:00:20.680 --> 00:00:24.559 +to start. When I started using Emacs for school, it took me a + +00:00:24.560 --> 00:00:27.959 +long time to find what I liked. There wasn't many examples of + +00:00:27.960 --> 00:00:31.119 +a full process for an organization. This talk was made to + +00:00:31.120 --> 00:00:34.359 +guide students like me, those who wanted more from their + +00:00:34.360 --> 00:00:37.599 +software workflow that they can learn and adapt from. My + +00:00:37.600 --> 00:00:39.959 +main idea was essentially explained by Zaiste in his + +00:00:39.960 --> 00:00:43.679 +EmacsConf presentation in 2019. He said something to the + +00:00:43.680 --> 00:00:46.399 +effect of, one of the great parts about Doom Emacs as a + +00:00:46.400 --> 00:00:48.599 +starting point is that it shows beginners how different + +00:00:48.600 --> 00:00:51.399 +packages mesh with each other. He says that people often + +00:00:51.400 --> 00:00:53.639 +have trouble seeing how to develop workflows using the + +00:00:53.640 --> 00:00:57.159 +thousands of packages Emacs has. In this talk, I introduce + +00:00:57.160 --> 00:00:59.519 +some Emacs tools and how they work together to improve a + +00:00:59.520 --> 00:01:04.159 +student's academic workflow. Let us commence. If you are + +00:01:04.160 --> 00:01:07.199 +watching this talk and have never heard of Emacs, it's a + +00:01:07.200 --> 00:01:10.479 +customizable text editor. When you become more + +00:01:10.480 --> 00:01:13.559 +experienced, it becomes your entire operating system. You + +00:01:13.560 --> 00:01:17.119 +just live inside of Emacs. It's also free as in free pencils + +00:01:17.120 --> 00:01:19.919 +and open source, which means that you don't have to pay to + +00:01:19.920 --> 00:01:23.599 +download Emacs and its source code. Emacs doesn't charge + +00:01:23.600 --> 00:01:25.879 +you a monthly subscription, nor does it steal all of your + +00:01:25.880 --> 00:01:31.119 +information. Yeah, I know, it's pretty crazy. In this talk, + +00:01:31.120 --> 00:01:33.559 +I introduce some Emacs tools and how they work together to + +00:01:33.560 --> 00:01:36.879 +improve a student's academic workflow. Earlier I read this + +00:01:36.880 --> 00:01:40.879 +post on this website that said, I can only imagine the great + +00:01:40.880 --> 00:01:43.719 +things you'd be able to learn and retain in your brain thanks + +00:01:43.720 --> 00:01:47.759 +to the great Emacs ecosystem. You've made the best choice, + +00:01:47.760 --> 00:01:51.439 +with far-going implications. I promise you not once, not + +00:01:51.440 --> 00:01:54.039 +even subtly, have I ever regretted having invested in + +00:01:54.040 --> 00:01:57.399 +learning Emacs. It's the best gift anyone can present to + +00:01:57.400 --> 00:02:00.399 +themself. You will forever feel indebted to your younger + +00:02:00.400 --> 00:02:03.839 +self for this gift. I guarantee that. I think that this is a + +00:02:03.840 --> 00:02:07.199 +real testament to the true power of Emacs. There's simply no + +00:02:07.200 --> 00:02:09.839 +other software like it. It's a complete and fitting + +00:02:09.840 --> 00:02:12.759 +solution for those who are willing to master it. Hopefully + +00:02:12.760 --> 00:02:16.199 +by now you're invested in learning Emacs. But before we jump + +00:02:16.200 --> 00:02:18.919 +into the technicalities of everything, we should outline + +00:02:18.920 --> 00:02:22.039 +the main things that you need it to do as a student. The best + +00:02:22.040 --> 00:02:24.279 +students have their system figured out so that it can do + +00:02:24.280 --> 00:02:27.239 +these things quickly and efficiently. They should have no + +00:02:27.240 --> 00:02:29.839 +problem quickly organizing what they need to do along with + +00:02:29.840 --> 00:02:32.999 +capturing information from their classes. But you may be + +00:02:33.000 --> 00:02:36.959 +wondering, how does Emacs do all that? Well, it does it with + +00:02:36.960 --> 00:02:41.679 +Org Mode. It was built to be an outliner for note-taking and + +00:02:41.680 --> 00:02:45.239 +list management, exactly what a student needs. One of the + +00:02:45.240 --> 00:02:47.959 +key features is that it's plain text, which means that you + +00:02:47.960 --> 00:02:50.079 +can migrate it between computers, and it's not a + +00:02:50.080 --> 00:02:52.919 +proprietary format. For those of you who have heard of + +00:02:52.920 --> 00:02:55.799 +Markdown, Org is similar in that it's a markup language. + +00:02:55.800 --> 00:02:59.079 +However, it's a bit older, and it goes way beyond Markdown's + +00:02:59.080 --> 00:03:01.479 +simple text formatting, with its scheduling, task + +00:03:01.480 --> 00:03:04.159 +management, and organization features, all captured + +00:03:04.160 --> 00:03:07.159 +within plain text simplicity. This slide shows off one of my + +00:03:07.160 --> 00:03:10.159 +notes from a heavily customized Emacs window. Yours + +00:03:10.160 --> 00:03:12.439 +probably won't look like this from the start, but you can + +00:03:12.440 --> 00:03:17.199 +personalize its appearance with custom themes. + +00:03:17.200 --> 00:03:19.999 +It's finally time to get into the technicalities. What you + +00:03:20.000 --> 00:03:22.639 +need to do with your notes in Org Mode is create, search, and + +00:03:22.640 --> 00:03:25.559 +possibly publish them. I prefer Denote for creating my + +00:03:25.560 --> 00:03:29.319 +notes, but there are many Emacs packages for that. Denote is + +00:03:29.320 --> 00:03:32.279 +just lightweight and gets the job done. I used to use Org + +00:03:32.280 --> 00:03:35.799 +Roam, but I didn't need or use all of its features. I also use + +00:03:35.800 --> 00:03:38.359 +Anki, a free and open source flashcard program, but of + +00:03:38.360 --> 00:03:41.319 +course, I make all my flashcards in Org Mode. For searching, + +00:03:41.320 --> 00:03:43.559 +I often use find and grep, which are both standard + +00:03:43.560 --> 00:03:46.799 +utilities on Linux. Other operating systems probably have + +00:03:46.800 --> 00:03:50.519 +a tool to replicate this functionality. The final item is + +00:03:50.520 --> 00:03:52.959 +exporting. There are many scenarios in which I want to + +00:03:52.960 --> 00:03:56.239 +publish my notes to share them with teachers or peers. One of + +00:03:56.240 --> 00:03:58.479 +my favorite features of Org Mode is the exportability of the + +00:03:58.480 --> 00:04:01.719 +notes you make. This presentation was actually made in Org + +00:04:01.720 --> 00:04:04.559 +Mode, and so are all of my lab reports and essays for school. I + +00:04:04.560 --> 00:04:10.039 +also write my webpage articles in Org Mode, which a program + +00:04:10.040 --> 00:04:15.359 +called Hugo converts into static HTML. So far, you haven't + +00:04:15.360 --> 00:04:18.039 +actually seen what it's like to use these tools. Here's a + +00:04:18.040 --> 00:04:21.279 +quick demo of how I track what I need to do. First, I always + +00:04:21.280 --> 00:04:24.799 +open up my todo.org file in my denote directory. For school + +00:04:24.800 --> 00:04:26.839 +assignments, I have a heading under Inbox where I have + +00:04:26.840 --> 00:04:29.919 +entries for each class I'm enrolled in. Each class's + +00:04:29.920 --> 00:04:32.839 +heading has a tag on it, which the assignment inherits as a + +00:04:32.840 --> 00:04:36.999 +subheading. Here's an example assignment. I have a test in + +00:04:37.000 --> 00:04:39.599 +physics next next Wednesday and the deadline to finish + +00:04:39.600 --> 00:04:42.359 +studying for it is the day that I'm taking it. When I plan my + +00:04:42.360 --> 00:04:45.399 +studying, I run the keybind for org-schedule to schedule the + +00:04:45.400 --> 00:04:48.839 +day on which I will study it. I can also mark it as the highest + +00:04:48.840 --> 00:04:52.399 +priority, making it the most important thing to do. I can + +00:04:52.400 --> 00:04:56.439 +also open up my agenda to see my tasks. I've cleaned it up as to + +00:04:56.440 --> 00:04:59.679 +not reveal any of my nefarious plans. This agenda is + +00:04:59.680 --> 00:05:03.239 +customized, but there are many tutorials on how to do this. + +00:05:03.240 --> 00:05:05.599 +My agenda has been the most transforming part of my student + +00:05:05.600 --> 00:05:08.239 +experience, and I've gotten a lot better at managing what I + +00:05:08.240 --> 00:05:13.119 +need to do. Next, I'll show you what I like to do to take notes. + +00:05:13.120 --> 00:05:15.999 +The main entry point for a new note is always starting with + +00:05:16.000 --> 00:05:19.679 +M-x denote. You fill out a couple of customizable prompts + +00:05:19.680 --> 00:05:23.119 +that will ask for values of the note. I'll start by making a + +00:05:23.120 --> 00:05:26.359 +new note, which we'll call test note. Then we'll give it a key + +00:05:26.360 --> 00:05:29.359 +for what category it's under. For this, I usually put the + +00:05:29.360 --> 00:05:32.319 +subject of the class that I'm doing this note for, be it + +00:05:32.320 --> 00:05:35.559 +programming, English, history, or science. Try to keep + +00:05:35.560 --> 00:05:39.159 +them short. And then Shazam, we have ourselves a brand new + +00:05:39.160 --> 00:05:42.399 +note which we can start typing away in. The cool thing about + +00:05:42.400 --> 00:05:45.199 +the note is you don't have to manually name your note files. + +00:05:45.200 --> 00:05:49.479 +It uses a standard convention using the time, the title, and + +00:05:49.480 --> 00:05:53.199 +the keywords of the note to make it unique. You can even make a + +00:05:53.200 --> 00:05:56.599 +meta note, a note about notes, to show a list of notes under a + +00:05:56.600 --> 00:06:01.319 +certain keyword. The final step in creation is flashcards. + +00:06:01.320 --> 00:06:04.639 +There is a great package called Anki Editor that makes Emacs + +00:06:04.640 --> 00:06:08.159 +able to push cards into Anki. There isn't much to + +00:06:08.160 --> 00:06:11.159 +overcomplicate here, it's just content on front and back, + +00:06:11.160 --> 00:06:14.599 +sometimes with images and complete the phrase. You can also + +00:06:14.600 --> 00:06:17.319 +set up LaTeX math formatting, but I don't really use it that + +00:06:17.320 --> 00:06:20.599 +much. If you're living in Emacs all the time, you may want + +00:06:20.600 --> 00:06:24.559 +some creature comforts. These are some of my favorite. Org + +00:06:24.560 --> 00:06:26.959 +Download is a package that allows you to paste images from + +00:06:26.960 --> 00:06:28.239 +your clipboard into an org file. + +00:06:28.240 --> 00:06:37.319 +Logos is a text narrowing tool that helps you restrict what + +00:06:37.320 --> 00:06:40.479 +text you can see and focus on what you're writing. It extends + +00:06:40.480 --> 00:06:43.159 +Emacs default narrowing, also adding functionality for + +00:06:43.160 --> 00:06:45.399 +quickly switching to headings for a presentation look. It + +00:06:45.400 --> 00:06:48.239 +can remove your mode line and center your text for better + +00:06:48.240 --> 00:06:53.239 +focus. org-fragtog allows you to move between previews of + +00:06:53.240 --> 00:06:55.639 +your LaTeX formulas and the unrendered syntax. + +00:06:55.640 --> 00:07:00.679 +pdf-view-mode is a fully fledged PDF reader, complete with + +00:07:00.680 --> 00:07:03.439 +annotations and org syntax, highlighting, and clickable + +00:07:03.440 --> 00:07:03.919 +links. + +00:07:03.920 --> 00:07:09.719 +Something you may want to consider is digital versus + +00:07:09.720 --> 00:07:12.199 +handwritten notes. There have been several talks in the + +00:07:12.200 --> 00:07:14.799 +past about how to integrate handwritten notes into Emacs, + +00:07:14.800 --> 00:07:20.239 +such as retyping them or scanning them in with an OCR tool. I + +00:07:20.240 --> 00:07:21.959 +don't think that type notes are the only way that you should + +00:07:21.960 --> 00:07:25.159 +take notes, but if you do try writing, at least get some nice + +00:07:25.160 --> 00:07:29.079 +stationery. I've seen people ask online to YouTubers and + +00:07:29.080 --> 00:07:32.479 +Twitch streamers asking, what is your keyboard? What is + +00:07:32.480 --> 00:07:35.519 +your window manager? I understand that they're curious, + +00:07:35.520 --> 00:07:37.919 +but cosplaying as a productive person by using the same + +00:07:37.920 --> 00:07:41.159 +tools won't accomplish anything. Emacs will not make you a + +00:07:41.160 --> 00:07:44.439 +productive person. It can be a significant time investment + +00:07:44.440 --> 00:07:47.879 +because of how customizable it is. However, I believe it + +00:07:47.880 --> 00:07:50.399 +will make it easier for you to be productive, as it certainly + +00:07:50.400 --> 00:07:53.519 +has for me. This was just an example workflow to show + +00:07:53.520 --> 00:07:56.119 +prospective students how they can use Emacs for their + +00:07:56.120 --> 00:07:56.559 +needs. + +00:07:56.560 --> 00:08:01.999 +Even if you don't end up using Emacs in the end, you can still + +00:08:02.000 --> 00:08:04.719 +apply most of its ideas to other software. It just won't be as + +00:08:04.720 --> 00:08:10.199 +customizable and extensible as Emacs is. Thank you for + +00:08:10.200 --> 00:08:12.519 +listening to my talk. It's been a great pleasure to finally + +00:08:12.520 --> 00:08:15.359 +take part in this conference in some capacity, and I'm glad I + +00:08:15.360 --> 00:08:18.399 +was given a chance. To all the students who may try Emacs in + +00:08:18.400 --> 00:08:21.199 +the future, good luck because there might not be any going + +00:08:21.200 --> 00:08:24.239 +back. If you have any questions, feel free to shoot me an + +00:08:24.240 --> 00:08:26.800 +email. Thank you for your time. diff --git a/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt b/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt new file mode 100644 index 00000000..f43e8590 --- /dev/null +++ b/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt @@ -0,0 +1,118 @@ +WEBVTT + +00:00.007 --> 00:03.045 +Hi again everyone, this is Leo, and I'm very sorry that I + +00:03.046 --> 00:06.284 +couldn't stick around to the very end of EmacsConf 2024. + +00:06.285 --> 00:09.843 +This is a recording, and hopefully this is playing as my + +00:09.844 --> 00:13.962 +co-organizers are closing EmacsConf 2024. There's just + +00:13.963 --> 00:17.761 +one last thing that I wanted to invite people to do, because + +00:17.762 --> 00:20.880 +for me, it was an honor to host the general track of EmacsConf + +00:20.881 --> 00:24.119 +this year again. It's my fifth time. But if you are + +00:24.120 --> 00:28.638 +interested in hosting, like me, or maybe transcribing + +00:28.639 --> 00:32.397 +pre-recordings, you know, captioning them, we do have + +00:32.398 --> 00:35.036 +plenty of roles open for people who want to contribute to + +00:35.037 --> 00:37.715 +EmacsConf. We do have a page on the website which is + +00:37.716 --> 00:40.794 +https://emacsconf.org/volunteer . + +00:40.795 --> 00:43.153 +You will find all the information about the roles that + +00:43.154 --> 00:45.460 +you can take. Just listing them very quickly. + +00:45.461 --> 00:47.152 +We've got captioners, as I mentioned. + +00:47.153 --> 00:49.230 +We've got hosts. We have + +00:49.231 --> 00:52.229 +Internet Relay Chat monitors, so IRC people to + +00:52.230 --> 00:00:53.800 +make sure that everyone is being nice + +00:00:53.801 --> 00:00:55.668 +in the chat and perhaps pasting + +00:55.669 --> 00:58.747 +questions from IRC to the pad. Speaking of the pad, we have + +00:58.748 --> 01:02.386 +pad scribes to make sure that all the questions and answers + +01:02.387 --> 01:05.105 +are documented in the pad. That makes our job much easier for + +01:05.106 --> 01:07.664 +the publishing process. When it comes to the publishing + +01:07.665 --> 01:09.663 +process, we've got everything that has to do with the + +01:09.664 --> 01:13.622 +pre-recordings, so people to process the audio of + +01:13.623 --> 01:18.101 +pre-recordings, re-encoding. We do have a lot of scripts + +01:18.102 --> 01:20.660 +that Sacha and myself have been writing to make our job much + +01:20.661 --> 01:24.459 +easier, but we are always in need of a pair of eyes to improve + +01:24.460 --> 01:28.138 +the process. Lastly, if you happen to have experience in + +01:28.139 --> 01:31.817 +infrastructure and video, we do need sysadmins to maintain + +01:31.818 --> 01:34.216 +the platform that we use for streaming, because again, + +01:34.217 --> 01:37.455 +everything we do is depending on remote machines, both for + +01:37.456 --> 01:42.334 +the streaming, the re-encoding, the transcription. If + +01:42.335 --> 01:45.013 +you have any interest in helping us with this, please send us + +01:45.014 --> 01:48.772 +an email. And all the information is on the website. All that + +01:48.773 --> 01:52.171 +remains for me is to say thank you so much for coming to + +01:52.172 --> 01:54.650 +EmacsConf, thanks to all the speakers for the wonderful + +01:54.651 --> 00:01:57.792 +talks, and I will most likely see you next year. + +00:01:57.793 --> 00:01:59.209 +Have fun, everyone! diff --git a/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt b/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt new file mode 100644 index 00000000..adff10e7 --- /dev/null +++ b/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt @@ -0,0 +1,361 @@ +WEBVTT + +00:00.007 --> 00:03.445 +Welcome to the second day of EmacsConf 2024. + +00:03.446 --> 00:05.164 +Today we have one track of talks, + +00:05.165 --> 00:06.483 +so you don't have to worry about + +00:06.484 --> 00:07.922 +missing out on anything. + +00:07.923 --> 00:11.201 +The best parts of EmacsConf are the conversations. + +00:11.202 --> 00:14.000 +The wiki has a page on how to watch and participate, + +00:14.001 --> 00:15.799 +and I'll give you a quick overview as well. + +00:15.800 --> 00:18.678 +You can watch the stream at live.emacsconf.org + +00:18.679 --> 00:20.917 +using free and open source software. + +00:20.918 --> 00:23.316 +Using a streaming media player like mpv + +00:23.317 --> 00:26.195 +seems to be the best way to watch in terms of performance + +00:26.196 --> 00:28.034 +but there are also web-based players + +00:28.035 --> 00:29.273 +just in case that's all you've got. + +00:29.274 --> 00:30.672 +As you're watching the talks, + +00:30.673 --> 00:32.951 +you can refer to the schedule in another window. + +00:32.952 --> 00:35.750 +Hover over the boxes to see the times and titles, + +00:35.751 --> 00:37.389 +and click on the boxes in the schedule + +00:37.390 --> 00:39.948 +to jump to the talk's page for more details. + +00:39.949 --> 00:42.147 +You can also get the schedule as an iCalendar file + +00:42.148 --> 00:44.226 +or as an Org file in different time zones. + +00:44.227 --> 00:45.705 +Many talks will be followed by + +00:45.706 --> 00:47.624 +live Q&A web conferences with the speaker, + +00:47.625 --> 00:50.543 +which will be done in BigBlueButton or BBB. + +00:50.544 --> 00:52.902 +These are indicated with a solid border on the schedule + +00:52.903 --> 00:55.501 +and by Q&A: BBB on the schedule page. + +00:55.502 --> 00:57.580 +You can join the web conference room + +00:57.581 --> 00:59.259 +by clicking on the BBB link + +00:59.260 --> 01:01.658 +on the schedule page or the talk's webpage. + +01:01.659 --> 01:04.937 +Then you can ask your questions yourself when the Q&A starts. + +01:04.938 --> 01:07.336 +To improve performance, please keep your webcam off + +01:07.337 --> 01:09.735 +and stay muted until it's your turn to talk. + +01:09.736 --> 01:11.214 +If you don't like Javascript, + +01:11.215 --> 01:13.373 +you can still ask questions via IRC + +01:13.374 --> 01:15.012 +and the hosts can read them out for you. + +01:15.013 --> 01:16.731 +We're probably going to automatically switch + +01:16.732 --> 01:18.930 +between talks and Q&A sessions, + +01:18.931 --> 01:21.529 +so the transitions on the stream might be a little sudden. + +01:21.530 --> 01:23.408 +People in the BigBlueButton room + +01:23.409 --> 01:25.047 +can continue the conversation + +01:25.048 --> 01:27.646 +even after the talk moves off-stream, + +01:27.647 --> 01:29.565 +and you can also reach out to the speakers + +01:29.566 --> 01:32.564 +using the contact information on the talk page. + +01:32.565 --> 01:35.243 +Other talks will have Q&A via Etherpad or IRC, + +01:35.244 --> 01:37.282 +depending on what the speakers prefer. + +01:37.283 --> 01:39.761 +This is indicated in the schedule with a dashed border + +01:39.762 --> 01:41.200 +and on the schedule page as well. + +01:41.201 --> 01:43.679 +Please ask your questions in the recommended places + +01:43.680 --> 01:45.718 +so that the speakers can easily see them. + +01:45.719 --> 01:47.476 +Again, if you ask your questions in IRC, + +01:47.477 --> 01:49.636 +we'll try to copy them to the right places. + +01:49.637 --> 01:50.995 +We're going to start Sunday morning + +01:50.996 --> 01:53.154 +with more IRC/Etherpad Q&A + +01:53.155 --> 01:54.073 +to try to get around + +01:54.074 --> 01:55.392 +some of the bandwidth issues + +01:55.393 --> 01:56.431 +that we noticed last year. + +01:56.432 --> 01:59.110 +The schedule pages and track pages have quick shortcuts + +01:59.111 --> 02:02.189 +so that you can find out more about talks, open the Etherpads, + +02:02.190 --> 02:03.916 +and join the Q&A sessions. + +02:03.917 --> 02:05.707 +The watch page has more tips + +02:05.708 --> 02:07.666 +on how to make the most of Q&A. + +02:07.667 --> 02:10.265 +If you can, please add notes and ask questions + +02:10.266 --> 02:12.424 +in the Etherpad for the talk. That makes it easier + +02:12.425 --> 02:13.863 +for everyone to share their notes, + +02:13.864 --> 02:16.542 +and speakers and hosts can read the questions from there. + +02:16.543 --> 02:19.141 +We'll copy the notes to the talk pages afterwards. + +02:19.142 --> 02:20.540 +We have one pad for each talk, + +02:20.541 --> 02:22.579 +so you can follow the links to get to the next one + +02:22.580 --> 02:25.178 +or go back to the schedule and get the link from there. + +02:25.179 --> 02:26.817 +If you have general feedback about + +02:26.818 --> 02:29.056 +the conference itself, please put it in + +02:29.057 --> 02:34.135 +pad.emacsconf.org/2024 , which is linked on each pad. + +02:34.136 --> 02:37.134 +You can also use this as a general community message board + +02:37.135 --> 02:38.893 +for things like Help Wanted. + +02:38.894 --> 02:40.172 +Or you can put it in IRC + +02:40.173 --> 02:41.531 +and we'll find it there too. + +02:41.532 --> 02:44.210 +Internet Relay Chat or IRC can be another great way + +02:44.211 --> 02:46.329 +to be part of lots of conversations. + +02:46.330 --> 02:49.768 +You can use chat.emacsconf.org to join the IRC channels + +02:49.769 --> 02:51.212 +through your web browser. + +02:51.213 --> 02:53.046 +The tabs on the left can help you + +02:53.047 --> 02:54.725 +switch between the different channels. + +02:54.726 --> 02:56.284 +Most discussions will be in + +02:56.285 --> 02:58.563 +#emacsconf-gen for the General track. + +02:58.564 --> 03:03.002 +If you need to reach us, you can join #emacsconf-org + +03:03.003 --> 03:07.241 +or e-mail emacsconf-org-private@gnu.org. + +03:07.242 --> 03:10.240 +You can use #emacsconf for hallway conversations. + +03:10.241 --> 03:12.519 +Of course, you can join any of these channels + +03:12.520 --> 03:14.718 +with your favourite IRC client. + +03:14.719 --> 03:17.197 +You can connect to irc.libera.chat + +03:17.198 --> 03:19.836 +port 6697 with TLS. + +03:19.837 --> 03:23.075 +Once again, we're going to be streaming with open captions + +03:23.076 --> 03:25.834 +for most of the talks this year, thanks to our speakers and + +03:25.835 --> 03:28.873 +captioning volunteers. The captioned talks are indicated + +03:28.874 --> 03:31.592 +on the schedule, and with any luck, we'll be posting + +03:31.593 --> 03:34.951 +transcripts on talk pages shortly after the talks start. + +03:34.952 --> 03:36.710 +If you need additional accommodations, + +03:36.711 --> 03:38.909 +please let us know in #emacsconf-org + +03:38.910 --> 03:40.428 +and we'll see if we can make things happen. + +03:40.429 --> 03:44.627 +If something goes down, we'll update status.emacsconf.org. + +03:44.628 --> 03:46.506 +If it doesn't look like we've noticed yet, + +03:46.507 --> 03:49.745 +please let us know in the #emacsconf-org IRC channel, + +03:49.746 --> 03:51.424 +where we will be quietly panicking. + +03:51.425 --> 03:54.503 +In all of these conversations, please keep in mind + +03:54.504 --> 03:57.382 +our guidelines for conduct. You can find them on the wiki, + +03:57.383 --> 03:59.661 +They basically boil down to: please be nice. + +03:59.662 --> 04:02.900 +If all goes well, the prerecorded talks and transcripts + +04:02.901 --> 04:04.179 +should be available from the talk pages + +04:04.180 --> 04:05.698 +shortly after they start playing, + +04:05.699 --> 04:08.017 +and we'll post the recordings of live talks + +04:08.018 --> 04:10.176 +and Q&A sessions within the next month or so. + +04:10.177 --> 04:13.175 +If you'd like to get an update, you can subscribe to + +04:13.176 --> 04:15.134 +the emacsconf-discuss mailing list. + +04:15.135 --> 04:16.653 +All right, let's get going. + +04:16.654 --> 04:19.572 +Leo Vivier is hosting the general track again today. + +04:19.573 --> 04:23.131 +The other volunteers and I will run around mostly backstage, + +04:23.132 --> 04:25.210 +and you'll probably meet us in the closing remarks. + +04:25.211 --> 04:28.689 +That's also where we get to thank + +04:28.690 --> 04:30.648 +all the people and organizations + +04:30.649 --> 04:32.927 +who make EmacsConf even possible. + +04:32.928 --> 04:36.647 +Thanks for coming to EmacsConf 2024. diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt new file mode 100644 index 00000000..bb183779 --- /dev/null +++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt @@ -0,0 +1,405 @@ +WEBVTT + +00:00:00.000 --> 00:00:09.279 +So just to be clear, right now we are currently streaming. So + +00:00:09.280 --> 00:00:12.679 +if you want to answer with your voice, you can as well. Oh, I'm + +00:00:12.680 --> 00:00:17.999 +sorry. Okay. Yeah. So I've got a question. I think there was a + +00:00:18.000 --> 00:00:20.279 +little bit of a misunderstanding with whether we were doing + +00:00:20.280 --> 00:00:25.079 +a Q&A on BBB or if we were doing it on Etherpad. So it's really + +00:00:25.080 --> 00:00:28.479 +up to you. Right now we've set up everything. So if you want to + +00:00:28.480 --> 00:00:32.119 +start answering questions with your voice, we might as + +00:00:32.120 --> 00:00:33.864 +well. So OK, so I can just do it live. + +NOTE Q: When you choose colors based on the same lightness, does it not hurt readability since the eye sees lightness most? + +00:00:33.865 --> 00:00:38.239 +So one question is, so I + +00:00:38.240 --> 00:00:41.839 +assume this is a question on the lab space, where all the + +00:00:41.840 --> 00:00:46.959 +colors are the same lightness. Does it hurt readability? So + +00:00:46.960 --> 00:00:53.679 +far, I find it to be OK. For the lab theme, I picked the colors + +00:00:53.680 --> 00:01:00.999 +manually. So like I could just fix a angle essentially so + +00:01:01.000 --> 00:01:11.759 +that no colors are similar, so I have good readability. But + +00:01:11.760 --> 00:01:18.959 +for a random theme in Monte Carlo, it's hard because like + +00:01:18.960 --> 00:01:24.639 +it's just random. But yeah, that's a really good point. And + +00:01:24.640 --> 00:01:28.959 +also that's one of the motivations I did the nothing, you + +00:01:28.960 --> 00:01:33.999 +know, the great scale theme to explore just using + +00:01:34.000 --> 00:01:39.759 +lightness. Yeah. + +00:01:39.760 --> 00:01:48.199 +So looking at other questions. + +00:01:48.200 --> 00:01:52.279 +Okay, great. Do you want to take the next question. So, okay. + +NOTE Q: For monte-carlo, are all the "random" colors picked using a colorwheel/hue rotation? + +00:01:52.280 --> 00:01:56.959 +Okay, let's go to the third first. Let's finish. Yes, for + +00:01:56.960 --> 00:01:59.999 +Monte Carlo are all the random colors that using a color + +00:02:00.000 --> 00:02:06.479 +wheel here. Yes. Well, so basically, what this theme does is + +00:02:06.480 --> 00:02:14.159 +it. It picks a saturation and lightness for me first. These + +00:02:14.160 --> 00:02:19.759 +are also random, but they are picked with some kind of range. + +00:02:19.760 --> 00:02:26.559 +And that's a parameter that I can play with, you know, the + +00:02:26.560 --> 00:02:28.959 +range of lightness and separation. + +00:02:28.960 --> 00:02:33.479 +Once those are fixed, the colors are picked by angles in the + +00:02:33.480 --> 00:02:38.399 +color wheel, or heel rotation, as you would put it. So yes, + +00:02:38.400 --> 00:02:43.719 +that's roughly the process. + +NOTE Q: One area I see emacs able to do themes that is "underused?" is changing the font + +00:02:43.720 --> 00:02:47.239 +OK, great. I think the second question is still in the + +00:02:47.240 --> 00:02:51.679 +process. Oh, well, maybe you could start fielding it. I + +00:02:51.680 --> 00:02:55.319 +think you've got already something to work on. I see one area + +00:02:55.320 --> 00:03:01.199 +I see Emacs able to do. under use is changing the font, font + +00:03:01.200 --> 00:03:09.759 +size, font type, model space based on various faces. Yeah, + +00:03:09.760 --> 00:03:13.439 +so to paraphrase the question, one thing that Emacs is + +00:03:13.440 --> 00:03:17.399 +definitely not doing a whole lot of right now is changing the + +00:03:17.400 --> 00:03:21.079 +font that is being used, be it the font size, the font family. + +00:03:21.080 --> 00:03:25.039 +Sometimes you see themes, especially old mode themes, + +00:03:25.040 --> 00:03:29.199 +fontify differently the headers of the documents versus + +00:03:29.200 --> 00:03:31.879 +the content, and usually you do have a little bit of a + +00:03:31.880 --> 00:03:34.719 +contrast that is being introduced. But is it something that + +00:03:34.720 --> 00:03:38.959 +you find value in, this type of contrast based on font? And to + +00:03:38.960 --> 00:03:45.159 +me, it's my personal preference to just use one font. I don't + +00:03:45.160 --> 00:03:51.479 +even change the font size a lot in org mode. It's just + +00:03:51.480 --> 00:03:55.319 +personal preference. + +00:03:55.320 --> 00:03:58.999 +I've seen scenes where once I applied, I opened the org doc + +00:03:59.000 --> 00:04:04.639 +and suddenly all the titles are like Serif or some fancy + +00:04:04.640 --> 00:04:12.759 +fonts. That works. And to me, again, it's a personal + +00:04:12.760 --> 00:04:16.919 +preference that I don't really like that, but I know a lot of + +00:04:16.920 --> 00:04:21.799 +people like that. So it's up to you, I guess. Yeah, I mean, + +00:04:21.800 --> 00:04:25.839 +this, as we've seen in your talk and as well as the previous + +00:04:25.840 --> 00:04:29.279 +one we had this morning, you know, themes are very personal + +00:04:29.280 --> 00:04:33.079 +and at the end, whatever you need to, you know, some people + +00:04:33.080 --> 00:04:35.799 +are going to need more contrast than others, some people are + +00:04:35.800 --> 00:04:37.999 +going to need a little more variety in the fonts that they + +00:04:38.000 --> 00:04:41.359 +use. Ultimately, it's up to you really what you want to use. + +00:04:41.360 --> 00:04:45.199 +The end point, the angle that one should be aiming for is to + +00:04:45.200 --> 00:04:49.039 +feel comfortable in what they're editing. And whether this + +00:04:49.040 --> 00:04:52.799 +comfort translates into a very barebone color theme like + +00:04:52.800 --> 00:04:56.319 +the one we saw this morning with very slight colors but still + +00:04:56.320 --> 00:04:59.079 +which has a lot of personality or perhaps something closer + +00:04:59.080 --> 00:05:04.279 +to yours which tends to use equal luminance or lightness for + +00:05:04.280 --> 00:05:07.879 +the different entries. Well, everyone needs to tune in and + +00:05:07.880 --> 00:05:13.959 +find whatever works best for them, I think. Yep. And also, I + +00:05:13.960 --> 00:05:18.479 +want to note, I actually have a personal rule. It's also in + +00:05:18.480 --> 00:05:24.479 +all my themes. It's that comments have to be italic. I just + +00:05:24.480 --> 00:05:31.999 +like the look of italic comments. So, I actually... So, if + +00:05:32.000 --> 00:05:37.799 +you... In one of the section in the video, I mentioned I have + +00:05:37.800 --> 00:05:41.959 +hooks. Maybe I didn't mention, but I have hooks when using + +00:05:41.960 --> 00:05:47.359 +the picking the random theme setup. One of the purpose of + +00:05:47.360 --> 00:05:52.359 +that hook is I can add italic to all the themes on the comment + +00:05:52.360 --> 00:05:58.999 +face. Which I don't think it works actually right now, but + +00:05:59.000 --> 00:06:02.679 +that's the intention. Yeah, but I think it answers the + +00:06:02.680 --> 00:06:05.879 +question we started on originally. Because changing the + +00:06:05.880 --> 00:06:11.559 +font, I mean, using the italic variant of the font, it's + +00:06:11.560 --> 00:06:14.119 +literally a different font. And so, being able to have this + +00:06:14.120 --> 00:06:17.479 +type of contrast is actually important for you. So, it's + +00:06:17.480 --> 00:06:20.839 +nice that you managed to find this particular bit of + +00:06:20.840 --> 00:06:25.519 +knowledge through experimentation. And also I want to add + +00:06:25.520 --> 00:06:30.719 +that if you pick a monospace font like I do, usually there's + +00:06:30.720 --> 00:06:37.439 +not a lot of... Creativity? No, that's not the word. It's a + +00:06:37.440 --> 00:06:45.639 +lot of personality in the regular font part. But people do + +00:06:45.640 --> 00:06:51.799 +put a lot of different things in the italic. So yeah, if you + +00:06:51.800 --> 00:06:55.999 +can find a way to utilize the italic face, you could see some + +00:06:56.000 --> 00:07:01.239 +interesting results. Yeah, definitely. Again, I think + +00:07:01.240 --> 00:07:03.719 +it's important to consider all the things you can play with + +00:07:03.720 --> 00:07:06.519 +in terms of contrast. Because at the end of the day, you know, + +00:07:06.520 --> 00:07:08.839 +some people are going to be more receptive to a change of font + +00:07:08.840 --> 00:07:11.639 +than change of color. You know, just considering the amount + +00:07:11.640 --> 00:07:14.439 +of people who are colorblind and who are using software like + +00:07:14.440 --> 00:07:19.279 +this. You know, sometimes your vision optimizes for + +00:07:19.280 --> 00:07:22.039 +particular kind of changes and some people are going to be + +00:07:22.040 --> 00:07:26.279 +more sensitive to a slanted eye than they would be to an eye + +00:07:26.280 --> 00:07:31.479 +that is red or an eye that is blue. So, But it's not for + +00:07:31.480 --> 00:07:31.999 +everyone. + +00:07:32.000 --> 00:07:37.519 +So I'm looking at the time and we have about eight minutes + +00:07:37.520 --> 00:07:38.839 +until we go into the next talk. + +00:07:38.840 --> 00:07:44.519 +To be frank, I don't think I've got any more questions on my + +00:07:44.520 --> 00:07:46.879 +end. I'm not sure if we've got any people on BBB who has joined + +00:07:46.880 --> 00:07:49.119 +us and would like to ask a question. Let me check on IRC + +00:07:49.120 --> 00:07:53.799 +quickly if we've got any questions coming our way. I don't + +00:07:53.800 --> 00:07:57.199 +see any. Do you see any on your end? + +00:07:57.200 --> 00:08:06.479 +Not really. Well, then I suggest we just leave it at that and + +00:08:06.480 --> 00:08:08.679 +enjoy a little break before the next chat. So, thank you so + +00:08:08.680 --> 00:08:11.559 +much Metrowind for coming to EmacsConf and talking about + +00:08:11.560 --> 00:08:14.399 +colors because, as you saw, many people are interested + +00:08:14.400 --> 00:08:17.199 +about them, so much that another person decided to have a + +00:08:17.200 --> 00:08:20.639 +chat about theme. We didn't plan for this, but it's nice to + +00:08:20.640 --> 00:08:23.959 +see. And, well, perhaps you could collaborate in the future + +00:08:23.960 --> 00:08:26.919 +and both find the mutual confidence that you need to push + +00:08:26.920 --> 00:08:29.799 +your stuff to Melpa. Because I did hear that you weren't + +00:08:29.800 --> 00:08:33.119 +feeling too confident about your random color theme + +00:08:33.120 --> 00:08:37.439 +package. But, you know, you've done the first step, which is + +00:08:37.440 --> 00:08:40.559 +talking about it and sharing it with all of us. And perhaps + +00:08:40.560 --> 00:08:42.759 +the next step is to actually clean up the code to your + +00:08:42.760 --> 00:08:47.959 +satisfaction and publish it eventually. Oh, I can see + +00:08:47.960 --> 00:08:53.460 +another question. Should we go to that? Sure. + +NOTE Q: Have you ever kept any of the random themes that were thrown up? + +00:08:53.461 --> 00:08:54.079 +Have you ever + +00:08:54.080 --> 00:08:59.719 +kept any of the random themes that were thrown up? So I assume + +00:08:59.720 --> 00:09:05.119 +this is for the Monte Carlo setup. The answer is no. The + +00:09:05.120 --> 00:09:09.999 +reason is, like I mentioned, I'm using the randomly picking + +00:09:10.000 --> 00:09:15.079 +a theme setup right now. And Monte Carlo is one of them. Now, + +00:09:15.080 --> 00:09:18.639 +when Emacs picks Monte Carlo by chance, I wouldn't know + +00:09:18.640 --> 00:09:23.239 +about it. So I wouldn't know this is my random theme. That's + +00:09:23.240 --> 00:09:28.839 +the reason I never kept any, like, good color schemes + +00:09:28.840 --> 00:09:34.959 +generated. So, no. Right, okay. Well, considering we don't + +00:09:34.960 --> 00:09:37.359 +have any further questions, what I suggest now is that we'll + +00:09:37.360 --> 00:09:40.239 +leave it at that. So, again, Metrowind, thank you so much. + +00:09:40.240 --> 00:09:43.079 +Thank you. And hopefully we'll hear more of your themes in + +00:09:43.080 --> 00:09:51.120 +the future. Cool. Thanks. All right. Bye bye. Bye bye. diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt new file mode 100644 index 00000000..51441945 --- /dev/null +++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt @@ -0,0 +1,29 @@ +WEBVTT + + +00:00:02.140 --> 00:00:47.560 +Introduction + +00:00:48.820 --> 00:01:14.470 +Deviant + +00:01:15.640 --> 00:02:50.320 +FlucUI + +00:02:51.910 --> 00:05:23.440 +Lab + +00:05:25.090 --> 00:06:13.930 +NotInk: grayscale + +00:06:13.930 --> 00:06:48.580 +Random theme + +00:06:50.020 --> 00:07:18.370 +Monte Carlo + +00:07:19.780 --> 00:08:10.870 +How to pick a random color palette + +00:08:12.070 --> 00:11:23.540 +XYZ diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt new file mode 100644 index 00000000..3f132c9a --- /dev/null +++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt @@ -0,0 +1,619 @@ +WEBVTT captioned by MetroWind + +NOTE Introduction + +00:02.140 --> 00:05.440 +Hi my name is MetroWind. + +00:05.440 --> 00:12.910 +In this talk I will take you through my journey into Emacs themes. + +00:12.970 --> 00:15.730 +I am a long-time Emacs user. I started using + +00:15.760 --> 00:17.770 +Emacs since version 21. + +00:19.090 --> 00:22.960 +The goal of this talk is to inspire more people into making themes. + +00:24.070 --> 00:26.350 +Maybe you are already making themes. + +00:26.350 --> 00:29.410 +In that case I hope you could find some tips and tricks + +00:30.550 --> 00:33.670 +you know in this one + +00:33.670 --> 00:36.070 +I will basically go through all the themes + +00:36.130 --> 00:36.910 +that I created. + +00:37.960 --> 00:40.000 +But I think the most important thing + +00:40.000 --> 00:42.910 +here is to understand why some of + +00:42.910 --> 00:44.620 +the some of the colors are picked, + +00:44.860 --> 00:47.560 +and the motivations behind them. + +NOTE Deviant + +00:48.820 --> 00:50.800 +So the first theme I created is + +00:50.800 --> 00:54.190 +called Deviant. It looks like this. + +00:55.810 --> 00:57.730 +The inspiration for this one is a + +00:57.730 --> 01:00.820 +website called DeviantArt. Basically I just + +01:00.850 --> 01:03.580 +use their color palette, you know, from their design. + +01:04.810 --> 01:10.750 +It was a like a community for indie artists. + +01:10.750 --> 01:12.820 +I was really into that, you know, + +01:12.820 --> 01:14.470 +back in the day so that’s that. + +NOTE FlucUI + +01:15.640 --> 01:19.090 +Otherwise, nothing special. The next theme + +01:19.120 --> 01:21.220 +I created was called FlucUI + +01:24.820 --> 01:25.630 +It’s in MELPA. + +01:26.530 --> 01:27.640 +And let me just show you. + +01:35.260 --> 01:37.600 +So yeah that's how it looks like. + +01:42.280 --> 01:45.250 +So... but where where did the colors + +01:45.250 --> 01:49.060 +come from, right? To understand that, + +01:50.290 --> 01:55.270 +I'll need to take you back in time, you know, to where iOS 7 + +01:55.330 --> 01:58.000 +was released by Apple. That was a + +01:58.000 --> 02:01.900 +big deal, because that popularized the idea + +02:01.930 --> 02:05.290 +of flat UI color designs; sorry, flat UI + +02:05.290 --> 02:10.360 +designs. And after that, everybody followed suit, + +02:10.360 --> 02:14.440 +and changed their design, you know + +02:14.440 --> 02:22.420 +of all of their websites and applications to use some sort of flat UI design concepts. + +02:23.470 --> 02:27.550 +And about the same time, there came a website called flatuicolors.com. + +02:28.720 --> 02:30.820 +It hosted one color palette, + +02:32.110 --> 02:34.030 +and that was really good! + +02:35.110 --> 02:39.490 +So I picked that as the basis of my theme. + +02:40.900 --> 02:43.959 +And initially I named it FlatUI, + +02:43.959 --> 02:46.717 +But that name was taken in MELPA + +02:46.717 --> 02:50.320 +So i just rename it to something random, FlucUI. + +NOTE Lab + +02:51.910 --> 02:55.060 +The next one is called lab. + +02:57.310 --> 03:00.340 +To understand why I needed to create the theme, + +03:03.850 --> 03:08.620 +it's because I thought some of the colors in FlucUI + +03:10.780 --> 03:15.250 +was standing out too much, like the green here. + +03:18.010 --> 03:18.640 +This one. + +03:20.170 --> 03:22.090 +I thought this was too bright. + +03:22.780 --> 03:26.050 +Just a little bit. + +03:27.100 --> 03:30.100 +So I thought I needed way to pick + +03:30.100 --> 03:32.890 +some colors that are about the same + +03:32.890 --> 03:35.350 +lightness essentially. So how would I do that? + +03:35.350 --> 03:42.370 +The answer is to go into a color space called LAB. + +03:42.880 --> 03:45.130 +Now normally you'd do color work in RGB, + +03:46.420 --> 03:49.300 +which is red, green, and blue. + +03:49.660 --> 03:52.420 +It doesn't tell you a lot about lightness. + +03:53.830 --> 03:56.440 +If you do a pure blue, + +03:56.440 --> 03:58.600 +it actually looks a lot darker than a + +03:58.600 --> 04:01.510 +pure red or pure green. So that + +04:01.631 --> 04:04.990 +that doesn't work. But in LAB, + +04:04.990 --> 04:07.120 +thing are different, because one of the channel + +04:07.360 --> 04:10.810 +is L which is lightness. The other + +04:10.810 --> 04:13.600 +two channels are a and b, which are just + +04:13.750 --> 04:17.140 +for colors. This is great because + +04:17.140 --> 04:19.630 +I could just fix L meaning + +04:19.630 --> 04:21.790 +I fixed the lightness, and then I can + +04:21.790 --> 04:25.300 +vary a and b however I want. + +04:25.300 --> 04:27.850 +The color will stay roughly in the same + +04:27.850 --> 04:30.310 +lightness, which is exactly what I wanted. + +04:31.780 --> 04:34.210 +So for that I created a + +04:34.210 --> 04:38.230 +Mac app, where I could just + +04:38.230 --> 04:40.330 +fix lightness like I said, and then + +04:40.330 --> 04:42.550 +I could click on this colorful thing, + +04:42.670 --> 04:45.010 +to pick a color. The app will + +04:45.010 --> 04:47.950 +pick another five according to some pattern. + +04:48.430 --> 04:50.140 +And then I could just like hard-code + +04:50.140 --> 04:51.640 +these colors in Emacs. + +04:52.930 --> 04:54.160 +Let me show you. + +04:56.230 --> 04:58.000 +apply theme... lab... + +04:59.590 --> 05:02.110 +Yeah not very different from FlucUI colors, + +05:02.140 --> 05:04.300 +which was intentional. + +05:05.350 --> 05:08.200 +The idea here again is + +05:08.380 --> 05:10.660 +all the colors will be in about + +05:10.660 --> 05:13.570 +the same lightness, which I guess it was. + +05:14.230 --> 05:18.250 +So yeah... So this one was + +05:18.280 --> 05:20.830 +a success. I use it for a + +05:20.830 --> 05:23.440 +really long time. And then I got bored... + +NOTE NotInk: grayscale + +05:25.090 --> 05:28.150 +So I needed something interesting. + +05:28.150 --> 05:31.900 +The idea at the time was then to create a theme + +05:33.460 --> 05:36.310 +that doesn't have any colors essentially. + +05:36.310 --> 05:41.740 +A grayscale theme. So I called + +05:41.740 --> 05:44.830 +it NotInk. It is also in Melpa + +05:46.060 --> 05:46.960 +It looks like this. + +05:49.210 --> 05:50.650 +Yeah like I said, everything is grey. + +05:51.310 --> 05:53.530 +There's no color. But to my + +05:53.530 --> 05:56.500 +surprise, this is actually very useable. + +05:56.500 --> 05:59.500 +I didn't have any problem in readability; + +05:59.500 --> 06:02.170 +I didn't have any problem distinguishing, you know, + +06:02.170 --> 06:05.857 +different elements in the code. So a + +06:05.857 --> 06:09.460 +big surprise. And also a big success actually. + +06:10.720 --> 06:13.930 +And then I got bored. + +NOTE Random theme + +06:13.930 --> 06:16.360 +I just decided to install a whole bunch + +06:16.360 --> 06:17.710 +of themes from MELPA, + +06:18.310 --> 06:20.650 +and every time I start Emacs I + +06:20.650 --> 06:21.760 +just pick a random theme. + +06:23.200 --> 06:25.660 +There are some caveats to that, + +06:25.660 --> 06:27.280 +which I don't want to get into. + +06:28.660 --> 06:31.210 +But let me just show you. + +06:31.210 --> 06:33.130 +apply-random-theme, so it picked one for + +06:33.130 --> 06:37.030 +me. And then it picked another... another... + +06:37.060 --> 06:37.600 +So yeah. + +06:39.490 --> 06:42.340 +It's an interesting setup. I'm still using + +06:42.340 --> 06:45.010 +this setup today. Actually a good one + +06:46.150 --> 06:48.580 +Walls of text... + +NOTE Monte Carlo + +06:50.020 --> 06:52.240 +Now the final theme I want to look into, + +06:53.380 --> 06:55.750 +which is the latest, is called Monte Carlo. + +06:56.650 --> 06:59.110 +...which you know, idea here is to + +06:59.110 --> 07:01.947 +bring the idea of picking a random + +07:01.990 --> 07:05.620 +theme to the next level. + +07:05.620 --> 07:08.440 +So this is just one theme that generates + +07:08.470 --> 07:11.530 +a random color palette for me everytime. + +07:12.880 --> 07:15.400 +Not in MELPA, because I'm not ... + +07:15.419 --> 07:18.370 +I'm not completely satisfied with it. + +NOTE How to pick a random color palette + +07:19.780 --> 07:22.510 +But anyway... How do I... How do I pick + +07:22.540 --> 07:23.830 +a random color palette right? + +07:25.030 --> 07:29.680 +The answer is again to look at a different color space. + +07:29.680 --> 07:32.890 +This time it's called HLC, which is hue, + +07:32.950 --> 07:36.370 +lightness, and chroma. So hue is just + +07:36.670 --> 07:40.270 +colors, red, green, blue, or yellow, whatever. + +07:40.810 --> 07:44.200 +Lightness is lightness. Chroma is saturation, + +07:45.160 --> 07:47.800 +essentially. This is great because I could + +07:48.160 --> 07:52.150 +fix both lightness and saturation, and only + +07:52.150 --> 07:55.180 +vary in hue to pick my colors. + +07:57.580 --> 08:00.190 +Now the problem is + +08:01.660 --> 08:03.220 +once I have the color palette in + +08:03.250 --> 08:06.105 +HLC, how would I convert it to + +08:06.105 --> 08:09.250 +sRGB, because Emacs only knows + +08:09.250 --> 08:10.870 +about colors in sRGB. + +NOTE XYZ + +08:12.070 --> 08:14.230 +The answer here is to go through + +08:14.230 --> 08:16.450 +another color space called XYZ. + +08:17.950 --> 08:21.340 +This is an extremely important color space, + +08:21.670 --> 08:25.870 +because basically all other color spaces are + +08:25.870 --> 08:27.790 +defined on top of XYZ. + +08:28.930 --> 08:31.180 +So you would have like transformations + +08:31.180 --> 08:34.450 +from XYZ to all other + +08:34.480 --> 08:37.570 +color spaces. Now if you invert this + +08:37.750 --> 08:41.440 +these transformations, you could go from, + +08:41.440 --> 08:43.870 +for example, HLC back into XYZ + +08:43.900 --> 08:46.960 +and then go to another color + +08:46.960 --> 08:48.910 +space of your choosing, right. + +08:49.750 --> 08:51.400 +So this is how to convert colors + +08:51.430 --> 08:54.970 +between color spaces. In this case, + +08:55.270 --> 08:57.850 +I have to convert colors from HLC + +08:57.850 --> 08:59.920 +to LAB, and from LAB to XYZ, + +08:59.920 --> 09:02.530 +and from XYZ to sRGB. + +09:02.530 --> 09:05.710 +So this time the conversions are + +09:05.710 --> 09:08.200 +all done in Emacs Lisp, and I + +09:08.200 --> 09:13.270 +have the code in here in this URL. + +09:13.270 --> 09:14.830 +You could take a look, or you + +09:14.830 --> 09:17.350 +could actually just use maybe some package + +09:18.310 --> 09:19.390 +to convert colors. + +09:20.470 --> 09:23.740 +Anyway let me show you how + +09:23.740 --> 09:26.560 +this works. So in this case I + +09:26.590 --> 09:29.200 +could apply theme, Monte Carlo. + +09:30.670 --> 09:33.760 +So this is now a random theme. + +09:33.790 --> 09:36.730 +Actually, well, a theme with random colors, + +09:37.150 --> 09:39.580 +because I could apply the same theme, + +09:40.960 --> 09:41.920 +and it will look different. + +09:45.250 --> 09:45.790 +Every time. + +09:48.640 --> 09:52.060 +I could also look at the colors it picked. + +09:53.750 --> 09:55.100 +as a list of colors. + +09:57.740 --> 10:00.260 +I could also look at this like + +10:00.260 --> 10:04.370 +fancy chart of colors. This is + +10:04.370 --> 10:06.920 +too small. So let me show you this. + +10:06.920 --> 10:10.400 +So basically the same thing. + +10:10.400 --> 10:15.650 +This is actually a cross-section in HLC space, + +10:16.310 --> 10:18.650 +and the colors it picked are these like + +10:18.650 --> 10:19.520 +white circles. + +10:20.660 --> 10:23.060 +So that's that. + +10:24.740 --> 10:26.150 +But like I said, I'm not + +10:26.150 --> 10:30.170 +fully satisfied, because most of time the + +10:30.170 --> 10:32.540 +colors are pretty boring from it. + +10:33.770 --> 10:36.320 +I could think of some + +10:36.320 --> 10:38.570 +ways to improve this. For example I + +10:38.570 --> 10:43.485 +could choose different patterns for the color + +10:43.490 --> 10:47.540 +samples. but I don't know of any + +10:47.900 --> 10:49.880 +good patterns. So I need to try + +10:49.880 --> 10:52.130 +things out. And then another way is + +10:52.130 --> 10:59.960 +probably to use different color spaces like the HSL, or HSV. + +10:59.960 --> 11:01.100 +Again I need to try this out. + +11:02.240 --> 11:04.880 +So yeah there are room for improvements. + +11:05.120 --> 11:07.220 +If you... If you have and idea, + +11:07.520 --> 11:09.860 +you know, let me know, and we + +11:09.860 --> 11:10.580 +can try it out. + +11:11.960 --> 11:13.610 +So that's the end of my talk. + +11:13.880 --> 11:17.390 +Hopefully you have some new ideas. + +11:17.450 --> 11:20.240 +Thanks for listening in, and yeah. + +11:20.240 --> 11:22.400 +Go create more themes because we can't have enough. + +11:22.400 --> 11:23.540 +Thanks! diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt new file mode 100644 index 00000000..e8cb84c4 --- /dev/null +++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt @@ -0,0 +1,1032 @@ +WEBVTT chapters by sachac + +00:00:00.000 --> 00:00:07.559 +Hopefully the internet goes well. It's a nice Monday + +00:00:07.560 --> 00:00:31.999 +morning here in Tokyo. + +00:00:32.000 --> 00:00:37.879 +Are we connected all right? + +00:00:37.880 --> 00:00:40.879 +Okay, I seem to be struggling still with my audio. One second... + +00:00:40.880 --> 00:00:44.519 +calling. Yeah, you were muted for a moment there. Okay, + +00:00:44.520 --> 00:00:49.959 +there we are. Okay. All right. Sorry about that. I got a mute + +00:00:49.960 --> 00:00:55.119 +out my, my back office chatter. That's kind of distracting + +00:00:55.120 --> 00:00:58.079 +me a little bit. All right. Sorry. I may have lost the plot a + +00:00:58.080 --> 00:01:04.919 +little bit. I think I did. However, find the 1st question. + +00:01:04.920 --> 00:01:09.919 +I got pretty distracted by conversation backstage. Yeah, + +NOTE Q: When I tried comparing transducers.el to cl-lib and dash (benchmark-compiled), I got the following results + +00:01:09.920 --> 00:01:15.879 +no problem. So the first question here, someone's asking, + +00:01:15.880 --> 00:01:22.279 +when they first tried comparing transducers.el, the cl-lib + +00:01:22.280 --> 00:01:27.959 +and Dash bookmark compiled, and they give some detailed + +00:01:27.960 --> 00:01:32.479 +results we're sharing on the stream. Um, they expected + +00:01:32.480 --> 00:01:36.679 +transducers to be slower than CL loop, but faster than CL lib + +00:01:36.680 --> 00:01:41.119 +or dash. However, this isn't the case, any idea why. And so + +00:01:41.120 --> 00:01:43.639 +I'll, I'll come back into their data to show there's they're + +00:01:43.640 --> 00:01:48.279 +showing, um, you know, there's not a lot of detail on the, on + +00:01:48.280 --> 00:01:52.199 +the, on the use case here. We could certainly click through + +00:01:52.200 --> 00:02:02.559 +it, do it. + +00:02:02.560 --> 00:02:06.999 +Oh, I should've waited to zoom until I find my spot here. + +00:02:07.000 --> 00:02:13.639 +There we are. + +00:02:13.640 --> 00:02:18.599 +All right, so there's our example. + +00:02:18.600 --> 00:02:23.759 +Looks like we are doing a simple map and a sum. + +00:02:23.760 --> 00:02:29.239 +Mm-hmm. Yeah, that's right. Yeah, question about + +00:02:29.240 --> 00:02:36.279 +performance. So a case like this, a simple, I just want to rip + +00:02:36.280 --> 00:02:40.279 +through a collection of numbers and sum them all. That's a + +00:02:40.280 --> 00:02:44.679 +case where basically loop is always going to win because + +00:02:44.680 --> 00:02:51.319 +loop is optimized. This is true in both Emacs Lisp and in + +00:02:51.320 --> 00:02:56.039 +Common Lisp. For a case like this where you're not really + +00:02:56.040 --> 00:03:02.399 +doing two nested of chained calls, like you don't have many + +00:03:02.400 --> 00:03:05.839 +sort of what I was compositional steps. If you're just + +00:03:05.840 --> 00:03:09.999 +ripping through a collection of numbers, loop is always + +00:03:10.000 --> 00:03:15.559 +going to win. Transducers kind of shines when you have to do + +00:03:15.560 --> 00:03:19.639 +things that loop can't in terms of expressing yourself. So + +00:03:19.640 --> 00:03:22.559 +there are lots of different transducers that you can chain + +00:03:22.560 --> 00:03:27.079 +together. And in that case, you're kind of prioritizing + +00:03:27.080 --> 00:03:33.039 +developer time and developer happiness because you're + +00:03:33.040 --> 00:03:36.399 +able to yourself more clearly, whereas sometimes those + +00:03:36.400 --> 00:03:40.679 +kind of algorithms can get very hairy if you're just using + +00:03:40.680 --> 00:03:45.399 +loop. Now that sounds like I'm moving the goalposts, and + +00:03:45.400 --> 00:03:48.639 +there's really no excuse for these things not being as + +00:03:48.640 --> 00:03:54.559 +performant as possible. In this specific case, my guess is + +00:03:54.560 --> 00:03:57.759 +that the transducers is slower because it has to do a whole + +00:03:57.760 --> 00:04:03.239 +bunch of like inner function calls in order to actually do + +00:04:03.240 --> 00:04:09.239 +the adding and the collecting. So there's a lot of stuff that + +00:04:09.240 --> 00:04:12.119 +just the raw loop doesn't have to do, which transducers + +00:04:12.120 --> 00:04:20.439 +does. And so in this case, that's why it would be slower. + +00:04:20.440 --> 00:04:29.079 +All right, makes sense. + +00:04:29.080 --> 00:04:36.239 +Um... I cannot comment against Dash. And also a reminder + +00:04:36.240 --> 00:04:40.159 +that transducers both in CL and in Emacs Lisp here doesn't + +00:04:40.160 --> 00:04:44.919 +attempt to do any, you know, fun, you know, inner rewriting + +00:04:44.920 --> 00:04:48.239 +or, you know, what's called an Haskell fusion. Like if you + +00:04:48.240 --> 00:04:51.359 +have two different map steps, like in a row, it's not gonna + +00:04:51.360 --> 00:04:55.159 +see that and somehow fuse them internally. It's a fairly, in + +00:04:55.160 --> 00:04:59.679 +that sense, the implementation is just as is. + +00:04:59.680 --> 00:05:04.159 +to make it you know as raw fast as possible. The idea being + +00:05:04.160 --> 00:05:12.839 +that ergonomics is more important up front. Yeah, that's + +00:05:12.840 --> 00:05:17.519 +kind of a whole fascinating sub-panel, right? My theme this + +00:05:17.520 --> 00:05:19.799 +conference has been, oh, all these different things we + +00:05:19.800 --> 00:05:24.039 +should try to get sub-panels going for and use that. Maybe + +00:05:24.040 --> 00:05:29.039 +fill in the dev track or even have a third track or whatever. + +00:05:29.040 --> 00:05:31.519 +I'm not that concerned about the logistics of squeezing + +00:05:31.520 --> 00:05:38.519 +into the schedule so much. But anyway, interesting, I mean, + +00:05:38.520 --> 00:05:40.839 +to say. + +NOTE Q: Do you know of any theoretical texts on transducers? + +00:05:40.840 --> 00:05:47.799 +Did we already speak to theoretical texts? No, right? No, + +00:05:47.800 --> 00:05:53.399 +let's continue. Okay, so another question from the group. + +00:05:53.400 --> 00:05:58.879 +Do you know of any theoretical texts on transducers? My + +00:05:58.880 --> 00:06:01.959 +readme, particularly of the Common Lisp implementation, + +00:06:01.960 --> 00:06:06.159 +is the theoretical text on transducers. Rich Hickey has + +00:06:06.160 --> 00:06:10.439 +some YouTube videos which also come close. I mean, he + +00:06:10.440 --> 00:06:14.799 +invented the things. But in terms of having a full + +00:06:14.800 --> 00:06:21.559 +explanation of everything, it's my readme and it's also + +00:06:21.560 --> 00:06:23.319 +the... + +00:06:23.320 --> 00:06:28.559 +The info manual of Guile Scheme, their documentation on + +00:06:28.560 --> 00:06:34.199 +Surfy 171 is what I used to learn transducers and to + +00:06:34.200 --> 00:06:38.399 +re-implement them in other LISPs. So if you just want like a + +00:06:38.400 --> 00:06:41.639 +document explaining them, MyReadMe is actually the + +00:06:41.640 --> 00:06:46.959 +clearest that I've found. Awesome. Okay, next question. + +00:06:46.960 --> 00:06:50.119 +And I'm sorry, you gave a name, you referred to somebody's + +00:06:50.120 --> 00:06:55.439 +videos. Rich Hickey, the inventor of Clojure. Rich Hickey, + +00:06:55.440 --> 00:07:00.399 +thank you. Hope I got the spelling right, and maybe somebody + +00:07:00.400 --> 00:07:04.719 +can catch that and fix it. If not, I'll reach on. Thank you. + +NOTE Q: Did you think about [compiler features, macros] viz your cl, fennel, elisp, porting of your transducers? + +00:07:04.720 --> 00:07:08.239 +Reach on to the next question. Waters (Lazy Series in + +00:07:08.240 --> 00:07:12.799 +Lisp, late 70s) said this should have been done as an + +00:07:12.800 --> 00:07:16.799 +additional compiler feature in compilers, but if not, must + +00:07:16.800 --> 00:07:21.439 +be a macro package. Do you think about that vis your CL, + +00:07:21.440 --> 00:07:27.519 +Fennel, Elisp, porting of transducers? I think that + +00:07:27.520 --> 00:07:28.519 +there's definitely + +00:07:28.520 --> 00:07:36.519 +some Galaxy Brain Lisp author out there is probably smart + +00:07:36.520 --> 00:07:40.599 +enough to turn a bunch of this stuff into macros. I believe + +00:07:40.600 --> 00:07:47.119 +that's how the common Lisp library series works. It sees + +00:07:47.120 --> 00:07:52.079 +that you were calling map or whatever, and it actually knows + +00:07:52.080 --> 00:07:56.639 +that that's a special macro key. in order to be fast. I did not + +00:07:56.640 --> 00:08:01.839 +do that. The implementation as I have it is very simple and + +00:08:01.840 --> 00:08:05.759 +simplicity shouldn't be underestimated. + +00:08:05.760 --> 00:08:13.559 +I love it. What a nice succinct answer. Even I can manage to + +00:08:13.560 --> 00:08:16.578 +type that out as I scroll us to the next question. + +NOTE Q: Does t-buffer-read provide a lazy stream that's linewise, or charwise, or do something else entirely? + +00:08:16.579 --> 00:08:24.079 +So, does t-buffer-read provide a lazy stream + +00:08:24.080 --> 00:08:28.359 +that's line-wise or character-wise or do something else + +00:08:28.360 --> 00:08:29.018 +entirely? + +00:08:29.019 --> 00:08:31.587 +Okay, there are two functions. I showed + +00:08:31.588 --> 00:08:35.073 +t-buffer-read. There's also one called t-file-read, + +00:08:35.074 --> 00:08:38.682 +which does that. You actually have the buffer open, + +00:08:38.683 --> 00:08:40.239 +it's much more clever. + +00:08:40.240 --> 00:08:45.999 +t-buffer-read, I believe, is simpler. As long as you have an + +00:08:46.000 --> 00:08:52.079 +Emacs list, what is called the current buffer active. I'm + +00:08:52.080 --> 00:08:56.679 +fairly sure you're able to just call next-line on it. I don't + +00:08:56.680 --> 00:08:59.479 +believe that I'm doing anything fancy there, looking for + +00:08:59.480 --> 00:09:03.999 +line ends. I believe I'm just grabbing the next line and then + +00:09:04.000 --> 00:09:09.423 +processing that line-wise. Very good. + +NOTE Q: Can the Elisp library be combined with the stream.el API or seq in general? + +00:09:09.424 --> 00:09:17.303 +Can the Elisp library be combined with the stream.el API + +00:09:17.304 --> 00:09:22.830 +or seq in general? I would say that these libraries + +00:09:22.831 --> 00:09:27.596 +are completely orthogonal. You saw that everything + +00:09:27.597 --> 00:09:29.279 +was prefixed by t-. + +00:09:29.280 --> 00:09:36.879 +Basically, transducer is its own zone. However, one thing + +00:09:36.880 --> 00:09:40.239 +that I do in the common lisp, which is theoretically + +00:09:40.240 --> 00:09:44.359 +possible for the Emacs Lisp as well, is kind of like little + +00:09:44.360 --> 00:09:48.919 +shim libraries. So I provide, at least for Common Lisp, for a + +00:09:48.920 --> 00:09:51.799 +number of, you know, popular sort of third-party + +00:09:51.800 --> 00:09:55.239 +collection types, I provide an ability to use them as + +00:09:55.240 --> 00:09:59.559 +sources. Maybe that's what you mean. Like + +00:09:59.560 --> 00:10:04.439 +the built-in containers for Emacs Lisp are already + +00:10:04.440 --> 00:10:06.519 +supported. So, you know, a vector hash table and so on. + +00:10:06.520 --> 00:10:13.719 +make sense so i think what i heard there is yeah go ahead + +00:10:13.720 --> 00:10:17.879 +please sorry in terms of mixing like you know like for + +00:10:17.880 --> 00:10:22.599 +instance you know like seq-map used in transducers + +00:10:22.600 --> 00:10:28.119 +we'll put it that way + +00:10:28.120 --> 00:10:31.879 +i was just gonna say i think it um it it sounds like you're + +00:10:31.880 --> 00:10:37.199 +saying Yeah, probably they are actually. We don't know yet + +00:10:37.200 --> 00:10:41.239 +about any places where they don't play nicely together. So + +00:10:41.240 --> 00:10:45.399 +quite possibly so. We can use sequence and transducers + +00:10:45.400 --> 00:10:49.959 +together, for example. As a source potentially, yeah. It's + +00:10:49.960 --> 00:10:54.159 +very easy because that just uses defgeneric. As long as you + +00:10:54.160 --> 00:10:57.719 +have a new, like if you have a new collection type, as long as + +00:10:57.720 --> 00:11:01.519 +you implement a def method for it somewhere, it'll just + +00:11:01.520 --> 00:11:12.159 +magically work with this library. That's the magic of... + +00:11:12.160 --> 00:11:18.439 +Yeah, as an Emacs user enjoying, you know, sort of the + +00:11:18.440 --> 00:11:21.959 +renaissance of new features it's had, or sorry, Emacs ERC + +00:11:21.960 --> 00:11:27.799 +user for chat. I've seen a lot of awesome stuff get done in the + +00:11:27.800 --> 00:11:32.119 +last couple of years with generic set. JP never was working + +00:11:32.120 --> 00:11:36.679 +on that. And like, that's just making me my eyes pop and go, + +00:11:36.680 --> 00:11:39.279 +wow, that does make a whole lot of things simpler, doesn't + +00:11:39.280 --> 00:11:44.279 +it? I think we're a lot of us running into generics and how + +00:11:44.280 --> 00:11:47.542 +that solves problems in Emacs. + +NOTE Q: How does one debug a t-comp expression? Can you single step and see intermediate results of the different statements you declare? + +00:11:47.543 --> 00:11:50.279 +How does one debug a t-comp + +00:11:50.280 --> 00:11:55.119 +expression? Can you talk in terms of single step, + +00:11:55.120 --> 00:11:58.479 +step-by-step, intermediate results of the different + +00:11:58.480 --> 00:12:08.759 +statements you declare? Yes. So in Common Lisp, this is + +00:12:08.760 --> 00:12:12.919 +and sly stickers and things like that. In Emacs Lisp, it's a + +00:12:12.920 --> 00:12:19.559 +little bit, shall we say, more difficult. For step + +00:12:19.560 --> 00:12:20.479 +debugging, + +00:12:20.480 --> 00:12:25.679 +so what comp does is comp internally, it should be a macro, + +00:12:25.680 --> 00:12:28.839 +but currently it's not, although there's work to improve + +00:12:28.840 --> 00:12:33.559 +that. It's doing an internal reduce and it's turning into + +00:12:33.560 --> 00:12:37.479 +one giant kind of composed lambda inside. So I don't know if + +00:12:37.480 --> 00:12:42.999 +step debugging would work there. However, we do have one + +00:12:43.000 --> 00:12:47.439 +function called log, which lets you inspect intermediate + +00:12:47.440 --> 00:12:50.759 +results. So you could technically use that to inject + +00:12:50.760 --> 00:12:54.279 +yourself somewhere into the transduction chain and, you + +00:12:54.280 --> 00:12:57.239 +know, halt or, you know, inspect the current value, et + +00:12:57.240 --> 00:13:01.119 +cetera. So you get a bunch of questions lined up. I think + +00:13:01.120 --> 00:13:04.199 +we're coming up, uh, within our last five minutes, uh, + +00:13:04.200 --> 00:13:07.919 +before some declared, uh, reset time that we have + +00:13:07.920 --> 00:13:11.919 +internally to just roll our closing credits, so to speak. + +00:13:11.920 --> 00:13:14.839 +Um, not that I would want to cut the question and answer + +00:13:14.840 --> 00:13:18.399 +short, but I might have to step away personally. But, um, as + +00:13:18.400 --> 00:13:21.519 +we discussed before, you can just kind of run the QA, however + +00:13:21.520 --> 00:13:24.879 +you want here. Um, or, or take questions offline if you'd + +00:13:24.880 --> 00:13:27.999 +like to answer them off the pad. And I just want to say one more + +00:13:28.000 --> 00:13:30.959 +time. Kitt said it managed later. Thanks again for your talk + +00:13:30.960 --> 00:13:35.759 +for dedicating the time to this live QA. And I think we can see + +00:13:35.760 --> 00:13:40.279 +by the many questions that are here. So I'll try to kind of + +00:13:40.280 --> 00:13:42.959 +flip us through as many of them as I can with our last couple of + +00:13:42.960 --> 00:13:48.399 +minutes, if that sounds good. Alternately, this might be a + +00:13:48.400 --> 00:13:52.079 +good time if you have kind of wrap it up, final thoughts, as + +00:13:52.080 --> 00:13:58.399 +Leo Sopanda saying. By all means, have at. Sure, thanks a + +00:13:58.400 --> 00:14:01.639 +lot. I'd say that if you are still curious, check out the + +00:14:01.640 --> 00:14:05.159 +read-me's because those have a lot of information, + +00:14:05.160 --> 00:14:09.519 +including a full description of the API and everything + +00:14:09.520 --> 00:14:10.719 +that's available. + +00:14:10.720 --> 00:14:16.599 +Otherwise, just give them a shot. Using these things is the + +00:14:16.600 --> 00:14:21.639 +best way to learn them, of course. I use them everywhere, + +00:14:21.640 --> 00:14:24.719 +basically, all across my Emacs list and all across my common + +00:14:24.720 --> 00:14:29.839 +list now. They get a lot of mileage. All right. You're + +00:14:29.840 --> 00:14:33.639 +speaking our language now. As Emacs users, all our ears poke + +00:14:33.640 --> 00:14:36.039 +up when you say, I'm getting a lot of mileage. I'm using it + +00:14:36.040 --> 00:14:39.879 +across everything. Every Emacs user has a story that + +00:14:39.880 --> 00:14:42.494 +harmonizes with that, I think. + +NOTE Q: Is there a path for transducers to enable elisp processing of otherwise overly large datasets as if just normal Emacs \"buffers\" (i.e. just pulling one thing at a time so essentially stream-like under the hood but buffer-like in interface), with none of the usual perf issues with a traditional buffer structure? + +00:14:42.495 --> 00:14:44.519 +So our next question, is + +00:14:44.520 --> 00:14:48.599 +there a path for transducers to enable Elisp processing or + +00:14:48.600 --> 00:14:53.999 +otherwise overly large data sets as if just normal Emacs + +00:14:54.000 --> 00:14:56.959 +buffers, i.e. just pulling one thing at a time. So + +00:14:56.960 --> 00:15:00.719 +essentially stream like under the hood, but buffer like an + +00:15:00.720 --> 00:15:03.519 +interface. I think that makes sense to me. with none of the + +00:15:03.520 --> 00:15:07.799 +usual performance issues, like as if, you know, the history + +00:15:07.800 --> 00:15:11.399 +with long files is what that brings to mind, I guess. Yes, so + +00:15:11.400 --> 00:15:15.799 +as you saw before, the withBufferRead sort of stream + +00:15:15.800 --> 00:15:19.879 +function does have to have the actual buffer in memory, and + +00:15:19.880 --> 00:15:22.679 +then you can go really fast. But there's another one with + +00:15:22.680 --> 00:15:26.839 +file read. Now, again, I haven't tried to optimize that yet. + +00:15:26.840 --> 00:15:30.119 +But in theory, it is able to read right from the underlying + +00:15:30.120 --> 00:15:32.839 +file without having to open it as a buffer first. + +00:15:32.840 --> 00:15:39.199 +Awesome. Ari, the performance issues mentioned, and that + +00:15:39.200 --> 00:15:43.479 +popped up recently in the list and forums, to what extent + +00:15:43.480 --> 00:15:46.959 +does tail call optimization and other mechanisms like + +00:15:46.960 --> 00:15:50.159 +inlining, garbage collection friendliness, and so on, + +00:15:50.160 --> 00:15:55.159 +could these alleviate issues, enable their use at little to + +00:15:55.160 --> 00:15:58.439 +no extra costs? I feel like we're leading the witness here, + +00:15:58.440 --> 00:16:01.279 +but I'm sure you see where we're going. Yeah, no problem. So + +00:16:01.280 --> 00:16:03.799 +in terms of tail optimization, that's already happening + +00:16:03.800 --> 00:16:09.199 +because the internal loop mechanism is using CL labels. And + +00:16:09.200 --> 00:16:12.199 +in Emacs Lisp, CL labels is just a macro that is like + +00:16:12.200 --> 00:16:16.079 +extremely tail recursive. So that's very, very fast. It's + +00:16:16.080 --> 00:16:19.039 +not tail recursive, but it's using like goto. So it's + +00:16:19.040 --> 00:16:22.519 +extremely, extremely fast, like the raw looping of it. So, + +00:16:22.520 --> 00:16:24.359 +okay, well then where does the slowness come from? It's + +00:16:24.360 --> 00:16:26.439 +probably coming from those lambdas and it's probably + +00:16:26.440 --> 00:16:32.399 +coming from, uh, like extra consing, extra allocation + +00:16:32.400 --> 00:16:35.999 +somewhere, which is, um, sort of what you were, what you're + +00:16:36.000 --> 00:16:38.519 +referring to with the GC friendliness. So perhaps there's + +00:16:38.520 --> 00:16:45.199 +some, um, um, yeah, some, like some fusion that I can do to + +00:16:45.200 --> 00:16:51.199 +speed it up. Yeah, that just sounds fascinating endlessly. + +NOTE Q: Is there an option to read a csv/json and produce an alist or plist instead of a hash table for an entry? + +00:16:51.200 --> 00:16:55.559 +Are there options to like read from a CSV, JSON, produce an + +00:16:55.560 --> 00:17:01.679 +alist or plist instead of hash table? Absolutely. + +00:17:01.680 --> 00:17:06.239 +Yes, I need to double check that, but we can read both CSV and + +00:17:06.240 --> 00:17:10.359 +JSON, and you should be able to just turn on the plist option. + +00:17:10.360 --> 00:17:14.159 +I will double check, but there's fairly free conversion + +00:17:14.160 --> 00:17:18.039 +between those three types because hash table is not always + +00:17:18.040 --> 00:17:22.039 +what you want. And actually, I suspect that slowness that we + +00:17:22.040 --> 00:17:24.559 +saw in the demo before was because it was allocating hash + +00:17:24.560 --> 00:17:29.239 +tables for every, like, all of the 50,000 lines. And had it + +00:17:29.240 --> 00:17:32.599 +been a plist, it would have been faster. Interesting, so + +00:17:32.600 --> 00:17:35.399 +maybe there's opportunities even if you end up with hash + +00:17:35.400 --> 00:17:38.799 +lists, but then they're shared strategically and you pay + +00:17:38.800 --> 00:17:42.039 +the cost of a little extra layer in there that buckets them + +00:17:42.040 --> 00:17:46.439 +together the way that we might group files by the first four + +00:17:46.440 --> 00:17:50.519 +characters in the file name once we've got a million files. + +NOTE Q: Is the common lisp version ready for 'production' use? Is it complete enough and the API stable enough? + +00:17:50.520 --> 00:17:54.479 +Anyway, is the Common Lisp version ready for production + +00:17:54.480 --> 00:17:59.959 +use? Do you want to comment on API stability? I use it all the + +00:17:59.960 --> 00:18:04.159 +time. I'm writing a game in Common Lisp right now, and I'm + +00:18:04.160 --> 00:18:08.559 +using transducers everywhere in there, and it doesn't even + +00:18:08.560 --> 00:18:11.119 +make a dent in the frame rate, and I'm using them + +00:18:11.120 --> 00:18:15.359 +extensively. Okay, well, I'll just read from chat. Thanks + +00:18:15.360 --> 00:18:17.476 +so much for the answers. + +NOTE Q: Do we need a pre-written \"t-\" version for every already existing reducing function like + or is there a function to construct them from already defined reducer 2-arg functions? + +00:18:17.477 --> 00:18:20.439 +Do we need a pre-written or t-minus + +00:18:20.440 --> 00:18:24.959 +version for every already existing reducing function, + +00:18:24.960 --> 00:18:30.239 +plus, as an example? Or is there a function that constructs, + +00:18:30.240 --> 00:18:33.559 +in my, I'm going to add the word, auto-visualifies them + +00:18:33.560 --> 00:18:37.319 +already, auto-defines or something, or just generically + +00:18:37.320 --> 00:18:42.239 +wraps function calls some way? already defined. This is + +00:18:42.240 --> 00:18:49.399 +basically fold. Some built-in functions like plus already + +00:18:49.400 --> 00:18:52.599 +function like reducers. It's a coincidence that they do + +00:18:52.600 --> 00:18:56.799 +that. But there's an example in the README. Max is one that + +00:18:56.800 --> 00:19:00.559 +does not act like that. For instance, maybe I could screen + +00:19:00.560 --> 00:19:06.479 +share later, but if you just type in plus one, If you call plus + +00:19:06.480 --> 00:19:10.519 +one in Emacs or Common Lisp, you get back one. It actually + +00:19:10.520 --> 00:19:15.119 +only needs one argument. If you only type plus, it actually + +00:19:15.120 --> 00:19:20.839 +gives you zero. Plus and multiple satisfy the API of + +00:19:20.840 --> 00:19:24.759 +reducers. But if you have one that doesn't, like the max + +00:19:24.760 --> 00:19:28.759 +function, and similarly, just type in plus as a function + +00:19:28.760 --> 00:19:32.359 +call, just plus with nothing else, and you'll see. No, as a + +00:19:32.360 --> 00:19:37.199 +function. zero will come out. This basically means it + +00:19:37.200 --> 00:19:43.159 +satisfies the reducer API. But a function like max does not. + +00:19:43.160 --> 00:19:48.399 +If you just type in max and then one, it won't work. Pardon me, + +00:19:48.400 --> 00:19:54.239 +it did. But if you type in max with nothing else, it wouldn't + +00:19:54.240 --> 00:19:55.239 +work. + +00:19:55.240 --> 00:19:58.599 +Hence, we have to wrap it in something like fold. I would say + +00:19:58.600 --> 00:20:01.919 +go look at the fold function. Right, which that I won't do. + +00:20:01.920 --> 00:20:04.839 +I'm not that well enough prepped. Darn it. Leo would have + +00:20:04.840 --> 00:20:08.399 +been here, but oh, well, you got me. Yeah, no problem. But + +00:20:08.400 --> 00:20:16.879 +fold is sort of the ultimate reducer function. Great. So is + +00:20:16.880 --> 00:20:26.319 +there, where was I? Here we go. We're way past this, right? So + +NOTE Q: Is the compelling argument for transducers is that it's a better abstraction? + +00:20:26.320 --> 00:20:34.279 +is the compiling argument for transducers that it's a + +00:20:34.280 --> 00:20:38.879 +better abstraction? It seems like there are concerns, + +00:20:38.880 --> 00:20:42.399 +objections, while problematically valid focused on + +00:20:42.400 --> 00:20:45.679 +implementation. Can this abstraction allow for advances + +00:20:45.680 --> 00:20:50.559 +in implementation? Yes, what I've basically done is mostly + +00:20:50.560 --> 00:20:55.999 +followed the pattern of usage that exists in Clojure and in + +00:20:56.000 --> 00:21:01.159 +Scheme's SERP 171. In theory, the service level API is the + +00:21:01.160 --> 00:21:04.999 +same no matter where you're using this, and that's the idea. + +00:21:05.000 --> 00:21:08.039 +If you learn them in one list, you should be able to use them + +00:21:08.040 --> 00:21:12.879 +everywhere. Then what it's actually doing under the hood is + +00:21:12.880 --> 00:21:18.359 +free for us to change around. My implementations are mostly + +00:21:18.360 --> 00:21:23.679 +based on the scheme with a few alterations here and there. + +00:21:23.680 --> 00:21:27.079 +And in the Common Lisp case, like adding some Common Lisp + +00:21:27.080 --> 00:21:27.959 +isms + +00:21:27.960 --> 00:21:34.759 +to improve usage like UX a little bit. But overall, we are + +00:21:34.760 --> 00:21:38.959 +free to do whatever we want internally to speed up + +00:21:38.960 --> 00:21:42.439 +performance. I just haven't done that work. Awesome. + +00:21:42.440 --> 00:21:47.239 +Awesome. So here's where I have to, where we're getting the + +00:21:47.240 --> 00:21:50.079 +hook. We've just been pulled off the stream. The viewers + +00:21:50.080 --> 00:21:54.079 +just saw the crawl by as it sent us over to the other pad where I + +00:21:54.080 --> 00:21:57.919 +get to jump on and get involved with that now. But I can't + +00:21:57.920 --> 00:22:00.359 +thank you enough, Colin. Would you like me to stop the + +00:22:00.360 --> 00:22:03.799 +recording here? Any other comments you'd like to make? Uh, + +00:22:03.800 --> 00:22:06.439 +yeah, sure. Like, I mean, I'll stick around for any more live + +00:22:06.440 --> 00:22:10.639 +questions. I'm looking at both IRC and, and, um, uh, big blue + +00:22:10.640 --> 00:22:13.239 +button here. So if people have more questions, I'll hang + +00:22:13.240 --> 00:22:15.959 +around for a bit. I'm going to leave the channel open. I see + +00:22:15.960 --> 00:22:17.839 +you do have a few people in here, so I'm just going to go ahead + +00:22:17.840 --> 00:22:20.839 +and leave the recording. We can always trim it. Um, trim it + +00:22:20.840 --> 00:22:24.279 +up. If you, uh, let us know, Hey, the last 10 minutes weren't + +00:22:24.280 --> 00:22:26.999 +anything, you know, or whatever. No, no pressure, no + +00:22:27.000 --> 00:22:29.839 +worries, no mistakes. Thank you. Really appreciate you. + +00:22:29.840 --> 00:22:31.959 +Yep. Thanks a lot. + +NOTE Q: Question about how the transducers video was made? Did you use Reveal.js? Do you have a pointer to the html hosted presentation? How did you generate the content for Reveal? + +00:22:31.960 --> 00:22:48.399 +OK, does anyone else have some questions? I see Mohsen in the + +00:22:48.400 --> 00:22:52.839 +BigBlueButton chat is asking how I made the video. So the + +00:22:52.840 --> 00:22:59.079 +presentation itself was done with RevealJS from Org Mode. + +00:22:59.080 --> 00:23:03.639 +So as you saw, I had a raw Org Mode buffer, which was + +00:23:03.640 --> 00:23:09.319 +which was the presentation itself, which I then just + +00:23:09.320 --> 00:23:11.759 +exported with a few certain settings, a few + +00:23:11.760 --> 00:23:15.919 +customizations. And then for screen recording, I used OBS, + +00:23:15.920 --> 00:23:19.719 +which worked flawlessly on Arch Linux. I used Sway, + +00:23:19.720 --> 00:23:23.159 +Wayland, and all of that. So all of that just worked, which + +00:23:23.160 --> 00:23:27.999 +was very impressive. Where do the HTML host the + +00:23:28.000 --> 00:23:51.959 +presentation? I don't have that presentation hosted + +00:23:51.960 --> 00:23:52.599 +anywhere. + +00:23:52.600 --> 00:23:59.119 +I'll look at the. + +00:23:59.120 --> 00:24:00.079 +I don't see that. + +00:24:00.080 --> 00:24:08.159 +Here it is. So we've got the file here as well. + +00:24:08.160 --> 00:24:10.999 +Looks like that's it for questions, basically. + +00:24:11.000 --> 00:24:14.919 +Yep, and it looks like everyone's moved on for now. Let's + +00:24:14.920 --> 00:24:20.159 +see. I mean, it would be so this is answering lounge 81 on IRC. + +NOTE Q: From your investigations and tests so far, do you think there would be the necessity of transducers to eventually go down into the C level code for things like using them to solve "infinitely-big" buffer-like interfaces and such? + +00:24:20.160 --> 00:24:24.599 +Yeah, like, if we really wanted to go that hardcore, maybe + +00:24:24.600 --> 00:24:29.439 +there's some like C level stuff that we could + +00:24:29.440 --> 00:24:36.119 +you know, significant demand for such a thing. You know, so + +00:24:36.120 --> 00:24:39.239 +far there hasn't been such demand, but maybe there will be in + +00:24:39.240 --> 00:24:42.519 +the future. Yeah, perhaps there's some custom stuff we + +00:24:42.520 --> 00:24:43.039 +could do. + +00:24:43.040 --> 00:24:48.599 +And otherwise, magic one. + +00:24:48.600 --> 00:25:00.599 +Well, it looks like some people are quite happy with this. + +00:25:00.600 --> 00:25:14.959 +All right. That's about what I've seen. So why don't we end it + +00:25:14.960 --> 00:25:19.839 +here? I think I can control the recording from my end. If I + +00:25:19.840 --> 00:25:23.800 +pause it, will that work? All right. Thank you, everyone. diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt new file mode 100644 index 00000000..cf0a6206 --- /dev/null +++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt @@ -0,0 +1,38 @@ +WEBVTT + + +00:00:00.000 --> 00:00:41.519 +Intro + +00:00:41.520 --> 00:03:27.589 +What are transducers? + +00:03:27.590 --> 00:05:47.279 +Common issues + +00:05:47.280 --> 00:07:35.279 +Transducers + +00:07:35.280 --> 00:09:52.624 +Using transducers + +00:09:52.625 --> 00:11:49.332 +A more involved example with comp + +00:11:49.333 --> 00:14:29.468 +In Emacs + +00:14:29.469 --> 00:14:58.039 +Hash tables + +00:14:58.040 --> 00:15:55.799 +Clarity + +00:15:55.800 --> 00:19:57.679 +How do transducers work? + +00:20:00.520 --> 00:26:03.239 +Transducers in the wild - CSV + +00:26:03.240 --> 00:26:51.240 +Issues and next steps diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt new file mode 100644 index 00000000..b0083b86 --- /dev/null +++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt @@ -0,0 +1,1141 @@ +WEBVTT captioned by sachac + +NOTE Intro + +00:00:00.000 --> 00:00:10.799 +Hi everyone, this is EmacsConf 2024. I'm Colin, and today + +00:00:10.800 --> 00:00:17.319 +I'll be talking about transducers. + +00:00:17.320 --> 00:00:21.879 +After introducing them, I'll share a bit of history about + +00:00:21.880 --> 00:00:25.359 +transducers and the problems that they solve, some basics + +00:00:25.360 --> 00:00:28.879 +about how we can use them, how they work, like how they're + +00:00:28.880 --> 00:00:32.399 +implemented, some demonstrations of how we can actually + +00:00:32.400 --> 00:00:36.959 +use them in the wild, and then some other discussions about + +00:00:36.960 --> 00:00:41.519 +issues that they have. + +NOTE What are transducers? + +00:00:41.520 --> 00:00:46.399 +Okay, let's get right in. What are transducers? + +00:00:46.400 --> 00:00:49.679 +Transducers are a way to do streaming iteration with a + +00:00:49.680 --> 00:00:55.679 +modern API. + +00:00:55.680 --> 00:01:00.359 +Who are transducers for, and thereby, who is + +00:01:00.360 --> 00:01:05.599 +this talk for? Well, it's for people who want to do streamed + +00:01:05.600 --> 00:01:10.519 +data processing in Emacs. It's for people who perhaps + +00:01:10.520 --> 00:01:14.199 +aren't satisfied with the existing APIs, for example, the + +00:01:14.200 --> 00:01:19.359 +seq API, or some other common libraries that provide + +00:01:19.360 --> 00:01:23.719 +similar functionality. Maybe you're not a fan of the loop + +00:01:23.720 --> 00:01:29.079 +macro. Some people find it difficult to understand. Or + +00:01:29.080 --> 00:01:32.719 +maybe you've done a bunch of Clojure before, and you'd like + +00:01:32.720 --> 00:01:36.879 +more aspects of Clojure in your Emacs Lisp. Or maybe you're + +00:01:36.880 --> 00:01:40.239 +just interested in transducers in general, because the + +00:01:40.240 --> 00:01:48.839 +pattern has now been ported to multiple different Lisps. + +00:01:48.840 --> 00:01:55.039 +So I'm Colin. I'm fosskers on everything online, and I do + +00:01:55.040 --> 00:01:58.519 +mainly back-end programming work and a lot of open source + +00:01:58.520 --> 00:02:05.159 +software. I wrote Haskell for a long time, both as a hobbyist + +00:02:05.160 --> 00:02:09.079 +and professionally. Since the COVID years, I've been + +00:02:09.080 --> 00:02:13.439 +writing Rust, both open source and professionally. But now + +00:02:13.440 --> 00:02:19.719 +I find that in my spare time, I'm mostly writing Common Lisp. + +00:02:19.720 --> 00:02:22.719 +Some things I learned from my years of Haskell was that a lot + +00:02:22.720 --> 00:02:27.519 +of programming is just altering the shape of data. You know, + +00:02:27.520 --> 00:02:31.359 +sometimes we work through our algorithm line by line. We're + +00:02:31.360 --> 00:02:36.239 +trying to just tell the computer exactly what to do. But if we + +00:02:36.240 --> 00:02:39.639 +step back, a lot of the time we're just getting in data of some + +00:02:39.640 --> 00:02:44.119 +shape, changing it, and then passing it along. A lot of + +00:02:44.120 --> 00:02:49.279 +these patterns are common, identified + +00:02:49.280 --> 00:02:53.639 +decades ago. For instance, we have some collection, and we + +00:02:53.640 --> 00:02:56.999 +want to transform every element of that collection and then + +00:02:57.000 --> 00:03:01.199 +pass it on. Or maybe we're trying to filter out bad elements + +00:03:01.200 --> 00:03:04.799 +in that collection. Or maybe we're looking for a specific + +00:03:04.800 --> 00:03:07.759 +element in that collection. Yes, you could write all that + +00:03:07.760 --> 00:03:11.839 +with for loops, but these kind of common patterns were + +00:03:11.840 --> 00:03:18.559 +identified and given names decades ago. So why not use them? + +00:03:18.560 --> 00:03:21.879 +They say that there are two major problems in computer + +00:03:21.880 --> 00:03:25.759 +science, one being cache validation and the other being + +00:03:25.760 --> 00:03:27.589 +naming things. + +NOTE Common issues + +00:03:27.590 --> 00:03:29.799 +I've identified five other problems that + +00:03:29.800 --> 00:03:33.199 +come up when we're trying to deal with collections of data, + +00:03:33.200 --> 00:03:40.599 +or big streams of data. One is that if we were trying to + +00:03:40.600 --> 00:03:45.279 +load a file all into memory all at once and process the whole + +00:03:45.280 --> 00:03:48.279 +thing, sometimes we can have memory problems. You've + +00:03:48.280 --> 00:03:54.999 +probably seen out-of-memory errors or such things. + +00:03:55.000 --> 00:03:58.199 +A second issue that comes up is that if we were looking at a + +00:03:58.200 --> 00:04:01.799 +giant for loop, in particular a nested for loop or such + +00:04:01.800 --> 00:04:06.079 +things, it can be hard to tell just by looking at the code what + +00:04:06.080 --> 00:04:11.039 +it's trying to do, what it intends. If we don't go character + +00:04:11.040 --> 00:04:16.439 +by character or line by line, it can be hard to understand it. + +00:04:16.440 --> 00:04:20.039 +Furthermore, and this is particularly an issue with Emacs + +00:04:20.040 --> 00:04:26.399 +Lisp, is that if one call, for instance, to seq-map, then + +00:04:26.400 --> 00:04:29.319 +piped into seq-filter, for instance, will have an + +00:04:29.320 --> 00:04:33.599 +intermediate allocation, the map will take the source + +00:04:33.600 --> 00:04:37.639 +container, allocate a new one, and then the filter will + +00:04:37.640 --> 00:04:40.319 +operate over the second one. This is wasteful. + +00:04:40.320 --> 00:04:48.879 +Furthermore, it can often be difficult to abort a stream. + +00:04:48.880 --> 00:04:53.199 +For instance, if we were filtering through our collection, + +00:04:53.200 --> 00:04:57.319 +but we knew we only wanted to go halfway, for instance, for + +00:04:57.320 --> 00:05:01.759 +some reason, we have no way to stop it halfway through. We + +00:05:01.760 --> 00:05:05.479 +just have to process the whole thing, even if we know we don't + +00:05:05.480 --> 00:05:11.919 +need to. Another issue is that for languages that have + +00:05:11.920 --> 00:05:18.039 +traits, or in Haskell they're called type classes, if you + +00:05:18.040 --> 00:05:22.399 +are defining what it means to map over something, you often + +00:05:22.400 --> 00:05:27.039 +have to redefine that for every kind of container or thing + +00:05:27.040 --> 00:05:31.239 +that you're iterating over. Wouldn't it be nice if we could + +00:05:31.240 --> 00:05:34.719 +define things like map just once and then reuse them + +00:05:34.720 --> 00:05:39.839 +everywhere? Now, transducers solve all five of these, + +00:05:39.840 --> 00:05:44.039 +without the addition of new language features, and with + +00:05:44.040 --> 00:05:47.279 +little more than plain old function composition. + +NOTE Transducers + +00:05:47.280 --> 00:05:53.119 +If this is your first time hearing of transducers, yeah, + +00:05:53.120 --> 00:05:57.439 +no problem. They were originally invented in Clojure by + +00:05:57.440 --> 00:06:01.039 +Rich Hickey, and this is a quote from him. He thinks + +00:06:01.040 --> 00:06:05.439 +transducers are a fundamental primitive that decouple + +00:06:05.440 --> 00:06:10.079 +critical logic from list or sequence processing, and if he + +00:06:10.080 --> 00:06:13.999 +had to do Clojure all over, he'd put them at the bottom, at the + +00:06:14.000 --> 00:06:19.279 +very bottom of all the fundamental primitives. Now, that's + +00:06:19.280 --> 00:06:24.599 +Rich speaking quite highly of them. And I think he has a point + +00:06:24.600 --> 00:06:25.159 +here. + +00:06:25.160 --> 00:06:32.399 +They were invented originally in Clojure. In more + +00:06:32.400 --> 00:06:34.772 +recent years, they were brought over to Scheme + +00:06:34.773 --> 00:06:38.774 +via SRFI 171. That's where I found them + +00:06:38.775 --> 00:06:41.521 +when I was learning the Guile language. + +00:06:41.522 --> 00:06:43.919 +In the process of submitting a patch, I realized + +00:06:43.920 --> 00:06:48.199 +that there were other things to be improved. So I ported the + +00:06:48.200 --> 00:06:51.399 +pattern to Common Lisp, then Fennel, and then more + +00:06:51.400 --> 00:06:56.639 +recently, Emacs Lisp. The Common Lisp and Emacs Lisp APIs + +00:06:56.640 --> 00:07:01.199 +are identical. And the Fennel one is not identical, but + +00:07:01.200 --> 00:07:05.799 +fairly similar. Overall, everywhere you find + +00:07:05.800 --> 00:07:10.279 +transducers, they should basically be fairly uniform. + +00:07:10.280 --> 00:07:15.759 +When I originally made the Common Lisp variant first, I + +00:07:15.760 --> 00:07:18.799 +sampled the APIs from a number of different languages and + +00:07:18.800 --> 00:07:23.439 +came up with what I believed to be a representative sample of + +00:07:23.440 --> 00:07:27.959 +what most people would want out of such a library. I gave + +00:07:27.960 --> 00:07:32.439 +functions their common modern names. For instance, map + +00:07:32.440 --> 00:07:35.279 +is map and filter is filter and so on. + +NOTE Using transducers + +00:07:35.280 --> 00:07:42.599 +What does the usage of transducers look like? Well, + +00:07:42.600 --> 00:07:48.959 +these examples will all be the Emacs Lisp variant, but the + +00:07:48.960 --> 00:07:52.359 +Common Lisp will look basically exactly the same, minus + +00:07:52.360 --> 00:07:54.079 +this little t- prefix. + +00:07:54.080 --> 00:08:00.919 +Running transducers requires three things. It requires a + +00:08:00.920 --> 00:08:06.439 +source. This could be an obvious thing like a list or a + +00:08:06.440 --> 00:08:11.479 +vector, but it could be other things like a file, or in Emacs + +00:08:11.480 --> 00:08:16.348 +list in particular, a buffer. + +00:08:16.349 --> 00:08:20.112 +A reducer is a function. It's something like + +00:08:20.113 --> 00:08:22.639 +the + operator or the * operator, + +00:08:22.640 --> 00:08:26.785 +or certain constructors of various containers. + +00:08:26.786 --> 00:08:32.125 +It takes values and collates them into some final version. + +00:08:32.126 --> 00:08:33.946 +Now, finally, we have what we're calling here + +00:08:33.947 --> 00:08:37.567 +a transducer chain. This could be one transducer function + +00:08:37.568 --> 00:08:43.479 +or it could be multiple composed together. These are the + +00:08:43.480 --> 00:08:47.079 +functions that actually take data and transform them + +00:08:47.080 --> 00:08:55.279 +somehow. For instance, this. We have a list of three + +00:08:55.280 --> 00:09:04.199 +elements. We want to reduce it into a vector. How we are + +00:09:04.200 --> 00:09:07.519 +going to transform the elements along the way: we are doing + +00:09:07.520 --> 00:09:13.359 +plus one to each of them. If this syntax is new to you, just + +00:09:13.360 --> 00:09:18.039 +know that this #' just means that this thing that + +00:09:18.040 --> 00:09:22.079 +comes after it is the name of the function. In Common Lisp and + +00:09:22.080 --> 00:09:26.079 +Emacs Lisp, this is necessary, but for Clojure and Scheme, + +00:09:26.080 --> 00:09:32.719 +it is not. So we can see here that just this example is not much + +00:09:32.720 --> 00:09:36.119 +different than any other normal map call you might see made, + +00:09:36.120 --> 00:09:40.239 +but if nothing else, it's a handy way to convert a list to a + +00:09:40.240 --> 00:09:44.999 +vector or anything else. There are many, many reducers + +00:09:45.000 --> 00:09:48.239 +available and many different forms that we can + +00:09:48.240 --> 00:09:52.624 +collate the final value into. + +NOTE A more involved example with comp + +00:09:52.625 --> 00:09:55.086 +Let's see a more involved example. + +00:09:55.087 --> 00:09:58.049 +Okay, now we've got some more meat here. + +00:09:58.050 --> 00:10:01.772 +Here we can see usage of the comp function + +00:10:01.773 --> 00:10:05.255 +and a custom source, ints. + +00:10:05.256 --> 00:10:11.079 +Ints is an infinite generator of integer values. That's not + +00:10:11.080 --> 00:10:14.783 +like a list or a file. It will generate infinitely. + +00:10:14.784 --> 00:10:19.439 +Comp is letting us compose multiple transducer functions + +00:10:19.440 --> 00:10:23.759 +together. Notice that this is the opposite order of what + +00:10:23.760 --> 00:10:28.079 +we'd usually be used to from a function like comp. The order + +00:10:28.080 --> 00:10:32.679 +here is top to bottom, basically, so that the map goes first, + +00:10:32.680 --> 00:10:37.839 +then the filter, and then the take. So effectively is what + +00:10:37.840 --> 00:10:40.919 +we're doing is taking all the integers that exist, + +00:10:40.920 --> 00:10:45.399 +positive, adding one to them, filtering out only the even + +00:10:45.400 --> 00:10:50.039 +ones, but then just taking 10. Cons here is a function that + +00:10:50.040 --> 00:10:57.039 +just produces the ending result as a list. So what happens + +00:10:57.040 --> 00:11:00.479 +here specifically is how we are avoiding intermediate + +00:11:00.480 --> 00:11:04.238 +allocations. First, the number 0 will come through. + +00:11:04.239 --> 00:11:07.879 +It will be pulled out of this source internally by transduce. + +00:11:07.880 --> 00:11:10.919 +It will make its way into the map. The map will add it. Then it + +00:11:10.920 --> 00:11:15.799 +will immediately go into this filter step. So it's not like + +00:11:15.800 --> 00:11:19.119 +all the maps occur, and then all the filters occur. We do + +00:11:19.120 --> 00:11:24.039 +everything for each element. So the 0 comes in, now it's 1. + +00:11:24.040 --> 00:11:27.559 +The filter would occur. Well, it's going to fail that + +00:11:27.560 --> 00:11:31.119 +because it's not even, so it will just bail there. Now we'll + +00:11:31.120 --> 00:11:35.239 +go to the next one. Now 1 will come, it will become 2, then + +00:11:35.240 --> 00:11:39.119 +it will be saved by this evenp call, and then the take will + +00:11:39.120 --> 00:11:42.599 +capture it, because we only want 10 values here. You can + +00:11:42.600 --> 00:11:45.239 +see 2, 4, 6, 8, and so on is the result that we + +00:11:45.240 --> 00:11:49.332 +expect. So let's play around a little bit. + +NOTE In Emacs + +00:11:49.333 --> 00:11:53.336 +Let's jump into Emacs and see what we can do. + +00:11:53.337 --> 00:11:58.500 +Alright, you should see my Emacs screen here. + +00:11:58.501 --> 00:12:04.359 +These are the actual notes for the actual + +00:12:04.360 --> 00:12:08.959 +presentation done in Org Mode. I'll boost that up in size for + +00:12:08.960 --> 00:12:12.639 +a little bit. That should be more than big enough for you. + +00:12:12.640 --> 00:12:17.719 +Just by changing the reducer, we can change the result. + +00:12:17.720 --> 00:12:21.079 +Okay, now it's a vector. Well, what else can we do to it? Well, + +00:12:21.080 --> 00:12:25.959 +let's just add up the results. Maybe we just want to count the + +00:12:25.960 --> 00:12:30.919 +results. Oh, indeed, there were 10. What if we want to find + +00:12:30.920 --> 00:12:36.959 +the average of the results? What if we want to find the median + +00:12:36.960 --> 00:12:40.959 +of the results? And so on. Here's some more interesting + +00:12:40.960 --> 00:12:45.839 +things that we could do. We could add different steps. So + +00:12:45.840 --> 00:12:51.239 +here we have all the integers. Let's add, hmm, okay, we'll + +00:12:51.240 --> 00:12:57.399 +keep that. We're going to add t-enumerate. What enumerate does + +00:12:57.400 --> 00:13:00.879 +is for each item that comes through, it is + +00:13:00.880 --> 00:13:06.039 +going to add a sort of index to it and make it a pair. In this + +00:13:06.040 --> 00:13:08.719 +case, it's going to be equal to what came in here. Well, we can + +00:13:08.720 --> 00:13:12.399 +change it. If we start this at 1, now it will be different. + +00:13:12.400 --> 00:13:15.519 +1 will be paired with 0, and then 2 would be paired + +00:13:15.520 --> 00:13:19.559 +with 1, and so on. We'll accept that the even call will change + +00:13:19.560 --> 00:13:24.039 +that a little bit. Why we're doing this is because we want + +00:13:24.040 --> 00:13:27.279 +to form a hash table. Let's move that down to 3, maybe + +00:13:27.280 --> 00:13:31.439 +we'll get a better result. What do we see? Okay, here now the + +00:13:31.440 --> 00:13:37.359 +result is a hash table. What are its values? Well, 0 seems + +00:13:37.360 --> 00:13:40.479 +to have... The key of 0 seems to be paired with 2, the key of + +00:13:40.480 --> 00:13:42.909 +1 seems to be paired with 4, + +00:13:42.910 --> 00:13:47.411 +and 2 seems to be paired with 6. + +00:13:47.412 --> 00:13:51.293 +Maybe let's jazz that up even a little bit more. + +00:13:51.294 --> 00:13:52.973 +We're going to start from a string + +00:13:52.974 --> 00:13:57.943 +and we'll call it hello. + +00:13:57.944 --> 00:13:59.564 +That's not going to work anymore + +00:13:59.565 --> 00:14:02.585 +and neither is that, but what we could do is + +00:14:02.586 --> 00:14:05.498 +we could say t-map #'string. + +00:14:05.499 --> 00:14:08.627 +I believe we'll do that. + +00:14:08.628 --> 00:14:08.959 +Let's see if that works. It did. So that's + +00:14:08.960 --> 00:14:13.589 +going to convert a character into a string. + +00:14:13.590 --> 00:14:14.679 +Let's just go two + +00:14:14.680 --> 00:14:18.399 +just to make it a little easier. Now you can see that we've + +00:14:18.400 --> 00:14:21.919 +constructed a hash table here. The key of 0 is mapped to the + +00:14:21.920 --> 00:14:27.079 +string of h and 1 is mapped to e. Now, I really like having + +00:14:27.080 --> 00:14:29.468 +this reducer in particular. + +NOTE Hash tables + +00:14:29.469 --> 00:14:30.639 +Know that hash tables are + +00:14:30.640 --> 00:14:34.199 +also legal sources. I find that both in Emacs Lisp and in + +00:14:34.200 --> 00:14:37.119 +Common Lisp, dealing with hash tables--like creating them + +00:14:37.120 --> 00:14:41.599 +and altering them--can be a bit of a pain. Having them + +00:14:41.600 --> 00:14:45.679 +immediately available like this with transducers is very + +00:14:45.680 --> 00:14:49.079 +handy, I find. We can work with something that wasn't a hash + +00:14:49.080 --> 00:14:53.279 +table. We can construct it in a way that makes it amenable to + +00:14:53.280 --> 00:14:56.199 +that, and then reduce it down into a hash table, and here you + +00:14:56.200 --> 00:14:58.039 +go. Very handy. + +NOTE Clarity + +00:14:58.040 --> 00:15:06.399 +One last point is that you can see very clearly what + +00:15:06.400 --> 00:15:10.479 +this is attempting to do, as opposed to, say, a for loop. It's + +00:15:10.480 --> 00:15:12.719 +very clear what that step is doing, and then you can see what + +00:15:12.720 --> 00:15:15.119 +that is doing, and you know that the result is going to be two. + +00:15:15.120 --> 00:15:18.559 +Each line is kind of its own declarative step, and it should + +00:15:18.560 --> 00:15:22.159 +be clear, just by staring at this, basically what you're + +00:15:22.160 --> 00:15:25.399 +going to get out. This is one main difference from other + +00:15:25.400 --> 00:15:29.599 +languages that have things--say, for instance, Rust's + +00:15:29.600 --> 00:15:35.439 +iterator API--is the difference between the transducers + +00:15:35.440 --> 00:15:41.639 +and the reducers. If we go up here, for example, the + +00:15:41.640 --> 00:15:44.679 +difference between the transducers and the reducers and + +00:15:44.680 --> 00:15:48.119 +the sources is not explicitly laid out, whereas with + +00:15:48.120 --> 00:15:53.119 +transducers, it is. You have to be aware of how these things + +00:15:53.120 --> 00:15:55.799 +are different. I think that that helps clarity. + +NOTE How do transducers work? + +00:15:55.800 --> 00:16:01.999 +Moving on. How do transducers work? Well, + +00:16:02.000 --> 00:16:09.857 +we want to go see the README. + +00:16:09.858 --> 00:16:11.399 +So, what we're going to do is + +00:16:11.400 --> 00:16:19.102 +we're going to go to here. + +00:16:19.103 --> 00:16:21.959 +You should still be able to see this. + +00:16:21.960 --> 00:16:28.583 +This is the CL example, actually. + +00:16:28.584 --> 00:16:32.279 +Let's go to transducers.el. + +00:16:32.280 --> 00:16:37.744 +Their APIs and READMEs are the same, + +00:16:37.745 --> 00:16:39.919 +but just for the sake of it, we will go see + +00:16:39.920 --> 00:16:45.726 +how this looks on the Emacs side, + +00:16:45.727 --> 00:16:48.046 +just so that nothing is a surprise. + +00:16:48.047 --> 00:16:50.239 +But recall that the APIs are essentially the same + +00:16:50.240 --> 00:16:53.679 +between the two. If you go to this section, writing your + +00:16:53.680 --> 00:16:56.839 +own primitives, you can read about how transducers are + +00:16:56.840 --> 00:17:00.999 +actually formed, whether or not you want to write them + +00:17:01.000 --> 00:17:06.799 +yourself or not. We can see here t-map. We accept the + +00:17:06.800 --> 00:17:10.239 +function that you want to operate with. Then you've got + +00:17:10.240 --> 00:17:13.319 +this extra little lambda here that's coming in, and it's + +00:17:13.320 --> 00:17:17.079 +receiving a thing that is named reducer. Now, while here + +00:17:17.080 --> 00:17:20.439 +we're calling it reducer, it's actually the chain of all the + +00:17:20.440 --> 00:17:25.159 +composed functions together. It's all those main + +00:17:25.160 --> 00:17:28.479 +transducer steps. Finally, it's the reducer all + +00:17:28.480 --> 00:17:31.879 +composed together with normal function composition. + +00:17:31.880 --> 00:17:35.877 +That will matter very soon. Now here's the actual meat. + +00:17:35.878 --> 00:17:40.519 +We can see the accumulative result that's coming in with the + +00:17:40.520 --> 00:17:45.739 +current element. Now we need to operate on this. + +00:17:45.740 --> 00:17:47.840 +Were it normally mapped, we would see us + +00:17:47.841 --> 00:17:49.919 +applying the F to the input. + +00:17:49.920 --> 00:17:53.519 +But here, you can see us applying the F to the input and then + +00:17:53.520 --> 00:17:58.679 +continuing on. So us calling the rest of the composed chain + +00:17:58.680 --> 00:18:03.159 +here is the effect of, in the previous slide, moving to the + +00:18:03.160 --> 00:18:07.156 +next step. We could ignore this line for now. + +00:18:07.157 --> 00:18:13.819 +If you're curious, please read the README in detail. + +00:18:13.820 --> 00:18:15.579 +Now, what about reducers? + +00:18:15.580 --> 00:18:18.879 +What do those look like? Well, let's just scroll + +00:18:18.880 --> 00:18:22.439 +down here. Recall that a reducer is a function that's + +00:18:22.440 --> 00:18:26.959 +consuming a stream, right? Zoom that up for you a little bit. + +00:18:26.960 --> 00:18:33.919 +Now, in the case of count, recall that this is how it's + +00:18:33.920 --> 00:18:37.679 +working, how we saw a moment ago. So clearly this list of five + +00:18:37.680 --> 00:18:42.199 +elements only has five things in it. Well, a reducer by + +00:18:42.200 --> 00:18:47.599 +structure is a function of two, one, or zero arguments. So we + +00:18:47.600 --> 00:18:50.639 +can see here in the case of two, this is the normal iterative + +00:18:50.640 --> 00:18:54.519 +case. We don't care about the input for count, we just care + +00:18:54.520 --> 00:18:58.559 +about the current accumulated count that we're doing, and + +00:18:58.560 --> 00:19:02.879 +we add one to it, and that's it. This then goes back to + +00:19:02.880 --> 00:19:06.359 +the loop and the whole process starts again with the next + +00:19:06.360 --> 00:19:10.879 +element. In this kind of done case, this is used internal to + +00:19:10.880 --> 00:19:16.879 +that sort of the supervising function transduce. It's just + +00:19:16.880 --> 00:19:19.639 +confirming the final result. Sometimes some + +00:19:19.640 --> 00:19:21.839 +post-processing is necessary here, but in the case of + +00:19:21.840 --> 00:19:26.039 +count, as it is so simple, that is not necessary. And now + +00:19:26.040 --> 00:19:29.359 +here's the base case. This is also used within that + +00:19:29.360 --> 00:19:34.319 +supervising transduce function at the very top. Well, if + +00:19:34.320 --> 00:19:36.679 +you're counting, you have to start from somewhere, right? + +00:19:36.680 --> 00:19:37.349 +In this case, well, what you're starting with is zero. + +00:19:37.350 --> 00:19:40.251 +In the case of cons, you'd be starting with an empty list. + +00:19:40.252 --> 00:19:44.434 +In the case of vector, you'd be starting + +00:19:44.435 --> 00:19:53.999 +with an empty vector and so on. + +00:19:54.000 --> 00:19:56.799 +Once again, if you are more curious, please take a look at + +00:19:56.800 --> 00:19:57.679 +the README. + +NOTE Transducers in the wild - CSV + +00:20:00.520 --> 00:20:06.039 +Okay, transducers in the wild. Well, let's go take a look at + +00:20:06.040 --> 00:20:07.639 +processing some CSV data. + +00:20:07.640 --> 00:20:21.319 +We're going to open up a new Emacs Lisp bracket here. So I have + +00:20:21.320 --> 00:20:28.839 +a file. And in this file, let's just go look at C-x b right + +00:20:28.840 --> 00:20:34.839 +there, you will see that we've got some bank transaction + +00:20:34.840 --> 00:20:37.879 +information. It's got these transactions from a whole + +00:20:37.880 --> 00:20:40.199 +bunch of different people into different accounts, + +00:20:40.200 --> 00:20:43.879 +whether it's money coming in, money going out, and then a + +00:20:43.880 --> 00:20:47.839 +basic description. How's your Latin? But for this little + +00:20:47.840 --> 00:20:53.679 +test, what we want to do is we want to find Bob's final bank + +00:20:53.680 --> 00:20:59.679 +balance. Let's get on to it. First of all, let's + +00:20:59.680 --> 00:21:04.444 +just confirm, let's do some basic stuff. + +00:21:04.445 --> 00:21:10.844 +with-current-buffer, find-file-noselect. + +00:21:10.845 --> 00:21:15.542 +What's the name of that file? + +00:21:15.543 --> 00:21:17.439 +This is pre-organized, so you + +00:21:17.440 --> 00:21:20.879 +will just see it right here. + +00:21:20.880 --> 00:21:26.999 +t-transduce and t-comp. We don't know what we're going to comp + +00:21:27.000 --> 00:21:33.039 +yet. Actually, I'll just pass to show you. And then we will + +00:21:33.040 --> 00:21:36.999 +see, let's just do a little t-count just to confirm. What's + +00:21:37.000 --> 00:21:45.112 +our source? Well, our source is a buffer, t-buffer-read. + +00:21:45.113 --> 00:21:50.153 +And note that because we're using with-current-buffer, + +00:21:50.154 --> 00:21:55.079 +if we go like this, if we go current-buffer, this will just work. So + +00:21:55.080 --> 00:21:59.919 +now let's... Well, that was odd. I should have done it like + +00:21:59.920 --> 00:22:02.159 +that. There we go. So now we should make that a little smaller + +00:22:02.160 --> 00:22:04.799 +so you can see what it is. Now if we hit RET, we should get the + +00:22:04.800 --> 00:22:09.559 +right result. Okay, so there are 50,001 lines in this file, + +00:22:09.560 --> 00:22:13.516 +but the one extra one is the name of the headers, right? + +00:22:13.517 --> 00:22:18.079 +We want to process this file in more detail. So how can we do + +00:22:18.080 --> 00:22:22.079 +that? Well, let's start by just automatically + +00:22:22.080 --> 00:22:28.799 +interpreting the results as CSV. If we do that, okay, well + +00:22:28.800 --> 00:22:31.559 +now we only have 50,000 entries as we expected, right? + +00:22:31.560 --> 00:22:36.759 +Because it's going to pull out the header line. If we now say + +00:22:36.760 --> 00:22:42.679 +we want to just filter out, you know, We only want Bob, right? + +00:22:42.680 --> 00:22:53.679 +So if... gethash, it was in the row of name. Each line here is + +00:22:53.680 --> 00:22:57.079 +made into, at least by default, is made into a hash map. So if + +00:22:57.080 --> 00:23:02.759 +we go like this, we should see that. Okay, so 12,000 of these + +00:23:02.760 --> 00:23:05.639 +lines or thereabout belong to Bob. + +00:23:05.640 --> 00:23:13.839 +Let's just move that over a little bit. Actually, I suppose we don't even + +00:23:13.840 --> 00:23:17.799 +need that anymore. I'll just keep that full size for you. + +00:23:17.800 --> 00:23:24.399 +Okay, so all right, there's about 12,000 results for Bob of + +00:23:24.400 --> 00:23:32.479 +the 50,000. What's next? Well, we want to confirm, + +00:23:32.480 --> 00:23:40.039 +we want to pull out everything, + +00:23:40.040 --> 00:23:43.079 +all of the in and the out entries. + +00:23:43.080 --> 00:23:56.279 +Thank you. So, string to number, because we know that + +00:23:56.280 --> 00:24:01.239 +everything came in as strings. Unfortunately, the from-csv + +00:24:01.240 --> 00:24:03.799 +doesn't try to be smart at all, it's just pulling everything + +00:24:03.800 --> 00:24:09.479 +in as string values. If you want actual things to be + +00:24:09.480 --> 00:24:13.399 +numbers or whatever, that is up to you to do the parsing + +00:24:13.400 --> 00:24:20.679 +yourself. Okay, so we have those two values now. We know + +00:24:20.680 --> 00:24:23.879 +that we saw from the data just a moment ago that you're only + +00:24:23.880 --> 00:24:26.999 +going to have a value in one column or the other. It's either + +00:24:27.000 --> 00:24:29.119 +going to be 0 in the empty one, or you're going to have some + +00:24:29.120 --> 00:24:32.159 +number in the other. So we know that we can just naively add + +00:24:32.160 --> 00:24:35.479 +them. If it was in, it would always be positive. So we'll just + +00:24:35.480 --> 00:24:41.519 +add that. But in the negative case, we want to just make it + +00:24:41.520 --> 00:24:45.279 +negative really briefly before we add them all together. + +00:24:45.280 --> 00:24:50.519 +let's now just prove to ourselves that we are sane here. What + +00:24:50.520 --> 00:24:52.479 +we're going to do is we're going to quickly go say take + +00:24:52.480 --> 00:24:57.039 +5 just to convince ourselves, and we'll go cons, and let's + +00:24:57.040 --> 00:24:59.839 +see if we get kind of results that make sense. Okay, these + +00:24:59.840 --> 00:25:02.799 +sort of make sense. It looks like you know Bob's got some big + +00:25:02.800 --> 00:25:07.679 +expenses here. If we take say 15, does it look any better? + +00:25:07.680 --> 00:25:10.319 +Okay, looks like he had a payday. All right, good job Bob. + +00:25:10.320 --> 00:25:15.439 +Let's get back in there. Now we only really care about + +00:25:15.440 --> 00:25:20.119 +adding the final result, right? So there we go. Add that all + +00:25:20.120 --> 00:25:24.559 +together and we'll see what we get in a moment. Okay, wow, + +00:25:24.560 --> 00:25:27.519 +Bob's rich. Okay, so it looks like in his 12,000 + +00:25:27.520 --> 00:25:32.279 +transaction, Bob has an overall net worth of $8.5 million. + +00:25:32.280 --> 00:25:34.439 +Looking pretty good. + +00:25:34.440 --> 00:25:38.999 +So here's an example of how you can, particularly in Emacs + +00:25:39.000 --> 00:25:42.959 +Lisp, how you can very easily just get a file, consider it the + +00:25:42.960 --> 00:25:45.879 +current buffer, and then just do whatever you want to it. + +00:25:45.880 --> 00:25:50.359 +Note that there is sort of first-class support for both CSV + +00:25:50.360 --> 00:25:54.359 +and JSON, and then you have, and both of those bring in their + +00:25:54.360 --> 00:25:57.719 +values as hash maps, and then you're just free to do whatever + +00:25:57.720 --> 00:26:00.439 +you want and process them, potentially both writing them + +00:26:00.440 --> 00:26:03.239 +back out as CSV or JSON once again. + +NOTE Issues and next steps + +00:26:03.240 --> 00:26:10.719 +Some issues with transducers that can come up is + +00:26:10.720 --> 00:26:14.919 +that one, a zip operator is missing, but I'm working on it. + +00:26:14.920 --> 00:26:19.399 +Two is that performance, particularly in Emacs Lisp, isn't + +00:26:19.400 --> 00:26:24.119 +that great. It could be due to the sort of nested lambda calls + +00:26:24.120 --> 00:26:27.759 +that have to occur internally, but the common Lisp + +00:26:27.760 --> 00:26:32.239 +implementation is quite good. and there's yet no support + +00:26:32.240 --> 00:26:35.399 +for parallelism. You can imagine that a lot of those steps + +00:26:35.400 --> 00:26:38.559 +you could potentially perform in parallel depending on the + +00:26:38.560 --> 00:26:44.399 +platform, but research has not yet gotten that far. Okay, + +00:26:44.400 --> 00:26:47.639 +that's all. Thank you very much. If you have any questions, + +00:26:47.640 --> 00:26:51.240 +please contact me. diff --git a/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt new file mode 100644 index 00000000..cb5646ed --- /dev/null +++ b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt @@ -0,0 +1,26 @@ +WEBVTT + + +00:00:02.679 --> 00:00:25.676 +Introduction + +00:00:28.823 --> 00:00:47.234 +What is Astrobotany? + +00:00:48.914 --> 00:01:22.096 +What is Gemini? + +00:01:25.337 --> 00:03:34.999 +How do you play Astrobotany? + +00:03:37.000 --> 00:06:35.750 +Timers + +00:06:37.792 --> 00:09:03.843 +The code + +00:09:05.724 --> 00:13:02.246 +Managing the plant + +00:13:09.560 --> 00:13:47.471 +Conclusion diff --git a/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt new file mode 100644 index 00000000..2293a61e --- /dev/null +++ b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt @@ -0,0 +1,662 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:02.679 --> 00:00:06.782 +Welcome to Watering My Digital Plant with Emacs Timers, + +00:00:07.503 --> 00:00:11.384 +a talk by Christopher Howard for Emacs Conference 2024. + +00:00:11.385 --> 00:00:16.989 +The goal of this talk is to give + +00:00:17.010 --> 00:00:19.431 +a brief introduction to Emacs timers + +00:00:20.892 --> 00:00:23.334 +using the illustration of how I created + +00:00:23.394 --> 00:00:25.676 +a bot for the Astrobotany service. + +NOTE What is Astrobotany? + +00:00:28.823 --> 00:00:30.004 +What is Astrobotany? + +00:00:30.924 --> 00:00:32.384 +Let me jump to the home page. + +00:00:38.649 --> 00:00:42.411 +Astrobotany is a botany game or a simulation + +00:00:42.611 --> 00:00:45.072 +that is played using the Gemini protocol + +00:00:45.893 --> 00:00:47.234 +and gemtext documents. + +NOTE What is Gemini? + +00:00:48.914 --> 00:00:49.615 +What is Gemini? + +00:00:50.700 --> 00:00:53.563 +The Gemini protocol is a small web protocol, + +00:00:54.263 --> 00:00:57.246 +similar to the HyperText Transfer Protocol, + +00:00:58.047 --> 00:01:00.109 +but with differing goals of simplicity, + +00:01:00.789 --> 00:01:03.712 +non-extensibility, and protecting privacy. + +00:01:05.453 --> 00:01:09.057 +Gemtext is a simple hyperlinking document format, + +00:01:09.557 --> 00:01:14.242 +the analog of the HyperText Markup Language, or HTML. + +00:01:16.095 --> 00:01:17.075 +Much more could be said + +00:01:17.135 --> 00:01:18.516 +about the design and goals + +00:01:18.576 --> 00:01:19.756 +of the Gemini project, + +00:01:20.236 --> 00:01:22.096 +but that is not the focus of this talk. + +NOTE How do you play Astrobotany? + +00:01:25.337 --> 00:01:27.057 +And how do you play Astrobotany? + +00:01:28.418 --> 00:01:30.518 +First, you need to get a Gemini client + +00:01:31.138 --> 00:01:32.838 +or what you might call a browser. + +00:01:34.079 --> 00:01:35.599 +Many clients are available, + +00:01:36.259 --> 00:01:39.860 +but I am using Elpher, a Gemini client for Emacs. + +00:01:41.340 --> 00:01:43.161 +Once you have your client running, + +00:01:43.801 --> 00:01:46.361 +navigate to the home page for Astrobotany, + +00:01:46.782 --> 00:01:48.842 +which is shown in this window. + +00:01:50.783 --> 00:01:53.023 +You'll see the URL for the home page + +00:01:53.103 --> 00:01:54.704 +displayed at the top of the window. + +00:01:57.865 --> 00:01:59.625 +On your first visit to Astrobotany, + +00:02:00.406 --> 00:02:02.586 +you will need to create a client certificate, + +00:02:03.426 --> 00:02:05.507 +which will be used instead of a password. + +00:02:06.067 --> 00:02:07.548 +Your Gemini client will help you + +00:02:07.588 --> 00:02:08.768 +to create the certificate. + +00:02:12.102 --> 00:02:16.306 +Then you will go to the Visit Your Plant page + +00:02:22.472 --> 00:02:24.553 +in order to view your plant, + +00:02:28.297 --> 00:02:32.781 +to water it, and to collect things from it, + +00:02:33.141 --> 00:02:37.928 +including money. So here you see + +00:02:37.968 --> 00:02:39.429 +the plant that I'm currently growing + +00:02:40.229 --> 00:02:41.910 +in glorious ASCII graphics. + +00:02:43.070 --> 00:02:46.691 +There's also a color version available from this page. + +00:02:56.895 --> 00:02:57.935 +Back at the home page, + +00:02:59.536 --> 00:03:00.836 +you can do other things + +00:03:02.537 --> 00:03:05.358 +like go to the item shop, + +00:03:07.165 --> 00:03:10.247 +to buy items like badges, fertilizer, + +00:03:11.607 --> 00:03:13.348 +or post on the message board. + +00:03:15.849 --> 00:03:18.991 +In Astrobotany, gardener bots are fully legal. + +00:03:20.852 --> 00:03:23.153 +And to do an action on your plant, + +00:03:23.693 --> 00:03:24.814 +like watering the plant, + +00:03:25.454 --> 00:03:26.915 +all your bot needs to do is + +00:03:27.035 --> 00:03:30.917 +to access the appropriate Gemini URL or page + +00:03:31.537 --> 00:03:33.998 +while presenting the appropriate certificate + +00:03:34.419 --> 00:03:34.999 +for your plant. + +NOTE Timers + +00:03:37.000 --> 00:03:39.862 +And this brings us to Emacs timers. + +00:03:42.904 --> 00:03:45.906 +So the main function of interest to us + +00:03:46.626 --> 00:03:49.288 +is the run-at-time function. + +00:04:00.714 --> 00:04:03.235 +Here is the help documentation, + +00:04:03.395 --> 00:04:07.036 +which is available in any recent Emacs installation. + +00:04:10.157 --> 00:04:13.277 +As you see, the purpose of the function + +00:04:13.498 --> 00:04:16.718 +is to perform an action at a specific time + +00:04:20.920 --> 00:04:25.801 +to repeat it after a specific number of seconds. + +00:04:29.770 --> 00:04:32.573 +And so basically, all you have to do is + +00:04:32.673 --> 00:04:35.795 +pass in a function to run-at-time, + +00:04:36.436 --> 00:04:39.058 +telling Emacs how soon you want to run the function, + +00:04:39.999 --> 00:04:41.541 +and then how often you want to run the + +00:04:41.581 --> 00:04:42.461 +function after that. + +00:04:44.403 --> 00:04:46.605 +The function has a variety of options for + +00:04:46.645 --> 00:04:48.887 +specifying the time parameter, + +00:04:49.347 --> 00:04:52.030 +that is, how soon you want the function to run. + +00:04:55.307 --> 00:04:57.428 +For our application, in which we'll be + +00:04:57.508 --> 00:04:58.409 +running our functions + +00:04:58.649 --> 00:05:01.030 +once or twice a day at specific times, + +00:05:03.152 --> 00:05:04.513 +it is most useful to + +00:05:04.553 --> 00:05:06.954 +specify the number of seconds until the event. + +00:05:08.515 --> 00:05:09.876 +This does, however, require + +00:05:10.436 --> 00:05:11.977 +calculating the number of seconds + +00:05:12.097 --> 00:05:15.399 +until a specific time of day. I will + +00:05:15.419 --> 00:05:16.800 +provide code for this shortly. + +00:05:18.860 --> 00:05:20.803 +The run-at-time function does allow you to + +00:05:20.864 --> 00:05:23.308 +specify the time parameter as a string, + +00:05:24.029 --> 00:05:25.672 +representing the hours and minutes. + +00:05:26.413 --> 00:05:32.149 +For example, 05:40. + +00:05:32.150 --> 00:05:34.051 +However, there is an oddity in the + +00:05:34.091 --> 00:05:35.392 +design of run-at-time, + +00:05:36.372 --> 00:05:41.395 +such that if the specified time of day has + +00:05:41.455 --> 00:05:42.216 +already passed, + +00:05:43.196 --> 00:05:44.877 +then the timer will run immediately, + +00:05:45.578 --> 00:05:46.638 +rather than in the future, + +00:05:46.958 --> 00:05:47.839 +as you might expect. + +00:05:49.280 --> 00:05:51.441 +This can be problematic, for example, + +00:05:51.661 --> 00:05:54.663 +if run-at-time is being called from your init file, + +00:05:55.583 --> 00:05:57.624 +since the timer will run immediately + +00:05:58.245 --> 00:06:00.426 +every time you restart Emacs for any reason. + +00:06:02.526 --> 00:06:04.691 +I noticed recently that run-at-time + +00:06:04.791 --> 00:06:07.217 +also allows you to pass in a value + +00:06:07.317 --> 00:06:17.657 +from encode-time, which maybe does what we want, + +00:06:18.378 --> 00:06:20.760 +but I never bothered with testing that. + +00:06:21.340 --> 00:06:23.041 +Actually, I have a vague memory of + +00:06:23.181 --> 00:06:25.743 +once looking into it and it didn't seem to do what I + +00:06:25.783 --> 00:06:29.286 +wanted, but honestly I can't clearly remember, + +00:06:29.946 --> 00:06:31.667 +so you may want to look into that yourself. + +00:06:32.728 --> 00:06:34.209 +What I ended up using was just + +00:06:34.309 --> 00:06:35.750 +passing in a number of seconds. + +NOTE The code + +00:06:37.792 --> 00:06:39.413 +So now we'll move over to the code. + +00:06:46.764 --> 00:06:49.426 +So I'll skip down here first + +00:06:49.966 --> 00:06:52.447 +to the code that I wrote for calculating the number of + +00:06:52.527 --> 00:06:52.887 +seconds. + +00:06:54.408 --> 00:06:57.790 +It's a function that calculates the number of seconds + +00:06:58.050 --> 00:07:01.012 +until a particular time of day in the future. + +00:07:04.214 --> 00:07:09.277 +You can see that you pass in the hour as a number from + +00:07:09.278 --> 00:07:19.137 +0 to 23 and the minutes as a number from 0 to 59. And + +00:07:20.078 --> 00:07:22.539 +here's the code, which will also be available later. + +00:07:25.700 --> 00:07:29.202 +I wrote another function, secs-until-weekly, + +00:07:29.522 --> 00:07:32.464 +which we do not need for this talk, + +00:07:32.604 --> 00:07:34.685 +but which is useful if you're running + +00:07:34.745 --> 00:07:36.746 +events which need to happen once per week. + +00:07:39.264 --> 00:07:44.025 +This function also requires a target hour + +00:07:44.085 --> 00:07:48.926 +and a target minute, but also requires passing in a + +00:07:48.966 --> 00:08:00.548 +target day. And while we're on the subject of timers + +00:08:00.568 --> 00:08:02.588 +specifically, I should mention that + +00:08:02.648 --> 00:08:05.929 +Emacs has a very useful function called list-timers. + +00:08:07.577 --> 00:08:09.959 +So if I call the interactive function list-timers, + +00:08:11.560 --> 00:08:14.542 +it will give me a list of all the timers + +00:08:14.842 --> 00:08:15.542 +currently running. + +00:08:16.723 --> 00:08:19.625 +This page shows not only which timers exist, + +00:08:20.186 --> 00:08:22.807 +but also how long it will be until they run again, + +00:08:23.848 --> 00:08:26.750 +along with the periodic repeat value that you + +00:08:26.770 --> 00:08:27.390 +specified. + +00:08:29.992 --> 00:08:33.034 +Furthermore, any timer can be canceled by moving point + +00:08:33.514 --> 00:08:38.515 +over the timer and running timer-list-cancel, + +00:08:38.696 --> 00:08:42.556 +which on my system is bound to the letter c by default. + +00:08:43.537 --> 00:08:45.417 +This is very helpful while you are developing + +00:08:45.497 --> 00:08:46.537 +some timer function. + +00:08:48.438 --> 00:08:52.158 +So I could cancel the timer that I already have running + +00:08:53.779 --> 00:08:55.059 +for shaking the plant, + +00:08:57.420 --> 00:08:59.360 +as well as the one for watering the plant. + +00:09:02.842 --> 00:09:03.843 +and back to the code. + +NOTE Managing the plant + +00:09:05.724 --> 00:09:08.566 +So now we'll talk about the actual code for + +00:09:08.646 --> 00:09:09.567 +managing the plant. + +00:09:14.210 --> 00:09:16.031 +So you see I have a variable set up here + +00:09:16.471 --> 00:09:19.353 +that specifies where the certificate file, + +00:09:20.994 --> 00:09:23.836 +the public certificate file, as well as + +00:09:23.936 --> 00:09:26.458 +the secret key file is located. + +00:09:27.918 --> 00:09:29.459 +This is where it is in my system. + +00:09:30.119 --> 00:09:33.181 +Of course, depending on your specific Gemini client, + +00:09:33.481 --> 00:09:36.722 +it may be in a different space and will likely have a + +00:09:36.762 --> 00:09:37.303 +different name. + +00:09:41.045 --> 00:09:43.486 +And here is the code for watering the plant, + +00:09:44.526 --> 00:09:45.967 +which I can call interactively. + +00:09:49.412 --> 00:09:52.334 +And the core of it here is that it uses the + +00:09:52.834 --> 00:09:57.937 +gmni utility, a command line utility to + +00:10:00.998 --> 00:10:06.982 +call a particular URL while also loading up + +00:10:07.702 --> 00:10:10.564 +or presenting the required certificate. + +00:10:12.505 --> 00:10:16.447 +So in this case, you can see it is the URL that is + +00:10:16.567 --> 00:10:18.088 +required for watering the plant. + +00:10:19.827 --> 00:10:24.952 +This idea is very simple and the gmni client + +00:10:26.353 --> 00:10:30.097 +or gmni command line program + +00:10:30.758 --> 00:10:31.999 +makes this very simple to do. + +00:10:34.554 --> 00:10:36.535 +Here's another function for shaking the plant. + +00:10:37.696 --> 00:10:40.758 +Again it is almost identical except that we + +00:10:40.958 --> 00:10:43.300 +use a different URL, + +00:10:44.180 --> 00:10:46.982 +one for shaking the plant instead of watering it. + +00:10:47.562 --> 00:10:49.183 +And again we want to shake the plant + +00:10:50.044 --> 00:10:51.745 +in order to get money to fall off of it. + +00:10:55.847 --> 00:10:59.290 +You need to water your plant at least once per day or + +00:11:00.791 --> 00:11:01.251 +it'll die. + +00:11:02.930 --> 00:11:09.953 +I usually water mine twice and just in case something + +00:11:10.013 --> 00:11:13.314 +happens where Emacs was turned off because of + +00:11:13.414 --> 00:11:15.035 +power outage or something like that + +00:11:15.595 --> 00:11:17.196 +that I'm more likely to get it watered, + +00:11:19.036 --> 00:11:21.957 +and I shake it once per day because there isn't + +00:11:23.398 --> 00:11:25.339 +any purpose to shaking it more than that. + +00:11:25.619 --> 00:11:27.240 +If you try to shake it more than that, + +00:11:27.420 --> 00:11:29.560 +then money no more money will fall off, + +00:11:30.321 --> 00:11:30.821 +or not much. + +00:11:37.242 --> 00:11:39.526 +So you see down here, I have the code that + +00:11:39.627 --> 00:11:41.209 +actually calls run-at-time. + +00:11:42.560 --> 00:11:45.141 +I left here commented my original forms of this + +00:11:45.661 --> 00:11:50.024 +which used the just specify directly the time of day. + +00:11:50.644 --> 00:11:52.225 +As I mentioned the problem with that + +00:11:53.505 --> 00:11:54.466 +was that it would... + +00:11:54.786 --> 00:11:57.187 +these functions would also get called + +00:11:59.208 --> 00:12:02.649 +whenever I restarted Emacs for any + +00:12:02.709 --> 00:12:04.250 +reason and that was kind of annoying. + +00:12:05.011 --> 00:12:07.352 +So instead we have here the functions down here + +00:12:07.452 --> 00:12:09.533 +which uses secs-until-daily + +00:12:10.913 --> 00:12:11.754 +to water the plant + +00:12:12.294 --> 00:12:14.756 +and then secs-until-daily to shake the plant. + +00:12:16.057 --> 00:12:20.821 +You see, I've specified the plant to get watered + +00:12:21.181 --> 00:12:26.025 +at 4 in the morning and then the function is run again + +00:12:26.125 --> 00:12:31.269 +after that, every 43,200 seconds, which translates to + +00:12:31.389 --> 00:12:32.270 +every 12 hours, + +00:12:33.711 --> 00:12:36.353 +and then I shake the plants, shake the plant + +00:12:38.760 --> 00:12:43.341 +every morning at 4.15 a.m. and once every [24] hours. + +00:12:45.742 --> 00:12:46.802 +With a little bit more + +00:12:46.902 --> 00:12:49.483 +sophistication, a little bit more work on the code, + +00:12:50.143 --> 00:12:53.964 +I could actually have multiple plants be watering and + +00:12:54.264 --> 00:12:57.985 +shaking multiple plants with multiple certificates, + +00:12:58.105 --> 00:12:59.885 +but I never got around to that. + +00:13:00.946 --> 00:13:02.246 +Didn't seem worth the bother to me. + +NOTE Conclusion + +00:13:09.560 --> 00:13:12.964 +So thank you for watching my video, + +00:13:13.825 --> 00:13:16.227 +Watering My Digital Plant with Emacs Timers. + +00:13:16.628 --> 00:13:18.189 +You'll see at the bottom of this page + +00:13:19.491 --> 00:13:21.613 +links to the code for this talk + +00:13:22.354 --> 00:13:24.096 +as well as other things that I mentioned + +00:13:24.677 --> 00:13:27.819 +like the source code for the + +00:13:27.979 --> 00:13:30.100 +Elpher Gemini client, + +00:13:30.801 --> 00:13:33.282 +the URL for the Astrobotany capsule, + +00:13:34.203 --> 00:13:36.865 +as well as a link to more information about + +00:13:36.925 --> 00:13:41.407 +Project Gemini and my own personal Gemini capsule + +00:13:42.808 --> 00:13:45.129 +that's being run off my own server at home. + +00:13:46.790 --> 00:13:47.471 +Thank you very much. diff --git a/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt new file mode 100644 index 00000000..d14cc21e --- /dev/null +++ b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt @@ -0,0 +1,35 @@ +WEBVTT + + +00:00:00.000 --> 00:00:57.648 +Introduction + +00:00:57.649 --> 00:02:02.451 +Why? + +00:02:02.452 --> 00:02:50.071 +EWS configuration + +00:02:50.072 --> 00:03:21.953 +How did I develop EWS? + +00:03:21.954 --> 00:04:29.319 +Overall workflow + +00:04:29.320 --> 00:05:54.760 +Inspiration + +00:05:54.761 --> 00:07:39.112 +Ideation + +00:07:39.113 --> 00:08:54.580 +denote-explore + +00:08:54.581 --> 00:10:05.919 +Writing with Org + +00:10:05.920 --> 00:12:18.719 +The project file + +00:12:18.720 --> 00:13:30.720 +Conclusions diff --git a/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt new file mode 100644 index 00000000..15312686 --- /dev/null +++ b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt @@ -0,0 +1,677 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:02.799 +Hi, I'm Peter Prevos, and I'll be talking about Emacs + +00:00:02.800 --> 00:00:06.039 +Writing Studio. I'm a water engineer, a social scientist, + +00:00:06.040 --> 00:00:08.759 +and I dabble in theatrical magic. For each of those + +00:00:08.760 --> 00:00:11.399 +endeavors, I do a lot of writing. I take notes, I write + +00:00:11.400 --> 00:00:14.559 +reports, articles, books, and websites. I use Emacs for all + +00:00:14.560 --> 00:00:18.719 +my research, my writing, and my publishing. Emacs Writing + +00:00:18.720 --> 00:00:20.999 +Studio is an opinionated starter kit for authors who write + +00:00:21.000 --> 00:00:23.999 +for humans, not for programmers who write for computers. + +00:00:24.000 --> 00:00:26.879 +It consists of a configuration, some bespoke + +00:00:26.880 --> 00:00:31.119 +functions, but are not yet a package, a website, and a book. + +00:00:31.120 --> 00:00:36.279 +The book is completely written with EWS itself. The target + +00:00:36.280 --> 00:00:39.039 +audience are authors who are frustrated with using + +00:00:39.040 --> 00:00:41.239 +commercial software and hopping from application to + +00:00:41.240 --> 00:00:45.879 +application to achieve an objective. These are people + +00:00:45.880 --> 00:00:49.986 +without any Emacs experience or coding skills. + +00:00:49.987 --> 00:00:53.307 +The objective is to teach these people how to use Emacs, + +00:00:53.308 --> 00:00:57.648 +not how to configure Emacs to manage a complete writing project. + +NOTE Why? + +00:00:57.649 --> 00:01:00.479 +So why did I write a book about Emacs when the documentation is + +00:01:00.480 --> 00:01:04.719 +already so extensive? Most Emacs documentation focuses on + +00:01:04.720 --> 00:01:08.839 +configuration, burying potential new users with choices. + +00:01:08.840 --> 00:01:13.039 +It forces people to work on Emacs instead of with Emacs, + +00:01:13.040 --> 00:01:18.039 +and it quickly can become a productivity sink. Emacs is the + +00:01:18.040 --> 00:01:21.399 +ultimate free software platform, but with this freedom + +00:01:21.400 --> 00:01:25.879 +also comes a price. Barry Schwartz wrote about the + +00:01:25.880 --> 00:01:29.239 +paradox of choice, which is about the dramatic explosion in + +00:01:29.240 --> 00:01:32.119 +choices in the modern world. Just think about the amount of + +00:01:32.120 --> 00:01:34.599 +effort it can take to decide what cereal to buy in a + +00:01:34.600 --> 00:01:37.559 +supermarket that you haven't been before. So many + +00:01:37.560 --> 00:01:40.559 +different choices. Paradoxically, that's become a + +00:01:40.560 --> 00:01:44.239 +problem instead of a solution. Emacs can perhaps suffer + +00:01:44.240 --> 00:01:49.559 +from the same issue. Another objective, using a COVID-19 + +00:01:49.560 --> 00:01:54.039 +trope: EWS is about flattening the curve--that is, the + +00:01:54.040 --> 00:01:56.727 +learning curve--by making these choices + +00:01:56.728 --> 00:02:02.451 +for the new Emacs user and avoiding the paradox. + +NOTE EWS configuration + +00:02:02.452 --> 00:02:05.593 +What about this EWS configuration? + +00:02:05.594 --> 00:02:07.839 +I decided to stay as close as humanly + +00:02:07.840 --> 00:02:11.039 +bearable to vanilla Emacs. I say that tongue-in-cheek, + +00:02:11.040 --> 00:02:16.026 +but also with some realism, centered around Org mode + +00:02:16.027 --> 00:02:18.279 +and Denote for note tagging, and citar for accessing + +00:02:18.280 --> 00:02:21.319 +bibliographies, and other convenience packages such as + +00:02:21.320 --> 00:02:24.959 +vertico for minibuffer completion. There's a + +00:02:24.960 --> 00:02:27.999 +dictionary, a thesaurus, and some other packages that are of + +00:02:28.000 --> 00:02:32.559 +interest to authors. EWS uses the standard keyboard + +00:02:32.560 --> 00:02:37.359 +shortcuts. Writing is much more about thinking than about + +00:02:37.360 --> 00:02:40.439 +maximizing the amount of words per minute. Just think + +00:02:40.440 --> 00:02:43.639 +about that the most used function for authors is + +00:02:43.640 --> 00:02:46.919 +self-insert. There's no need to use fancy keyboard + +00:02:46.920 --> 00:02:50.071 +shortcut systems when you write prose. + +NOTE How did I develop EWS? + +00:02:50.072 --> 00:02:54.534 +How did I go about developing Emacs? I declared Emacs bankruptcy, + +00:02:54.535 --> 00:02:57.096 +like we all have every now and then. + +00:02:57.097 --> 00:02:58.479 +I decided to write this book with + +00:02:58.480 --> 00:03:02.119 +vanilla Emacs and only configure the system as was + +00:03:02.120 --> 00:03:04.919 +required. The first thing I did, I hooked visual-line-mode + +00:03:04.920 --> 00:03:08.999 +to text-mode and off I went. The configuration grew as the + +00:03:09.000 --> 00:03:13.119 +need arose. I was actually surprised with how far you can + +00:03:13.120 --> 00:03:17.759 +get with just using Vanilla Emacs. I also developed two + +00:03:17.760 --> 00:03:21.953 +packages to enhance how I can use Denote. + +NOTE Overall workflow + +00:03:21.954 --> 00:03:25.375 +Well, let's get to a demo. + +00:03:25.376 --> 00:03:30.157 +EWS is based on a typical research and writing workflow. + +00:03:30.158 --> 00:03:32.759 +First step is you need to get some inspiration. + +00:03:32.760 --> 00:03:35.479 +Usually we do that by reading, by watching, by + +00:03:35.480 --> 00:03:39.319 +listening. Then the next step is ideation. You develop your + +00:03:39.320 --> 00:03:42.679 +ideas, summarize ideas from other people, write down your + +00:03:42.680 --> 00:03:46.439 +own ideas. For that, you need a note-taking system. EWS + +00:03:46.440 --> 00:03:50.279 +also talks about managing bibliographies. The third step + +00:03:50.280 --> 00:03:53.439 +is production. This is the actual writing process where, in + +00:03:53.440 --> 00:03:57.479 +this case, the EWS book. Once that is finished, we + +00:03:57.480 --> 00:04:00.639 +convert this Org mode file into something that can be + +00:04:00.640 --> 00:04:04.119 +published. That might be an e-book in an EPUB format, or a + +00:04:04.120 --> 00:04:08.759 +PDF for the interior of a a paperback book or perhaps as an + +00:04:08.760 --> 00:04:12.159 +e-book as well. There's also configuration in Emacs to + +00:04:12.160 --> 00:04:16.759 +produce MS Word documents if you need to collaborate with + +00:04:16.760 --> 00:04:22.359 +other people. Let's jump in to Emacs and walk through this + +00:04:22.360 --> 00:04:25.399 +workflow, give you a very quick demonstration of what's in + +00:04:25.400 --> 00:04:29.319 +the box. + +NOTE Inspiration + +00:04:29.320 --> 00:04:32.879 +So the first step in the EWS workflow is inspiration. We all + +00:04:32.880 --> 00:04:35.319 +stand on the shoulders of each other. Some giants; most of + +00:04:35.320 --> 00:04:38.079 +them are normal people. We get inspiration by reading, + +00:04:38.080 --> 00:04:40.799 +listening, and watching, and Emacs can help you access + +00:04:40.800 --> 00:04:44.279 +text, sound, and video. It depends on external software. + +00:04:44.280 --> 00:04:47.639 +Emacs acts as a beautiful interface, and EWS helps you + +00:04:47.640 --> 00:04:50.919 +with the configuration. But we also need a tool to manage our + +00:04:50.920 --> 00:04:53.631 +electronic library, and BibTeX + +00:04:53.632 --> 00:04:56.054 +and citar package by Bruce D'Arcus + +00:04:56.055 --> 00:04:58.119 +provides a perfect interface to manage this + +00:04:58.120 --> 00:05:02.959 +literature. If I open my bibliography here, you see that + +00:05:02.960 --> 00:05:06.959 +I've got 1864 references in my BibTeX files. There's a + +00:05:06.960 --> 00:05:11.999 +whole bunch of stuff about, I guess, the weird things that I + +00:05:12.000 --> 00:05:14.479 +read. Let's look for Emacs, right, because that's a joint + +00:05:14.480 --> 00:05:18.679 +interest that we have. Let's open here this paper by + +00:05:18.680 --> 00:05:23.799 +Marcus Birkenkrahe, who did some research using Emacs to teach + +00:05:23.800 --> 00:05:26.679 +data science. Data science is my day job, so that had my + +00:05:26.680 --> 00:05:29.759 +interest. We have here a Denote file, which I'll talk + +00:05:29.760 --> 00:05:33.399 +about in a second. There's a library file, which is a PDF, but + +00:05:33.400 --> 00:05:35.599 +it could be a whole collection of different files in + +00:05:35.600 --> 00:05:39.119 +different formats, even video or sound. We can create a new + +00:05:39.120 --> 00:05:42.279 +Denote file, or there's a link to the document object + +00:05:42.280 --> 00:05:46.959 +identifier. Let's go to the PDF. Here we can now do our + +00:05:46.960 --> 00:05:50.479 +reading. We can get our inspiration by what Marcus has + +00:05:50.480 --> 00:05:52.679 +written here about teaching data science with literary + +00:05:52.680 --> 00:05:54.760 +programming tools. + +NOTE Ideation + +00:05:54.761 --> 00:05:57.599 +Next step is ideation. Taking notes is + +00:05:57.600 --> 00:06:00.999 +the core of all creativity. When I read that paper, I might + +00:06:01.000 --> 00:06:05.079 +want to copy some ideas, I might get some of my own ideas, and I + +00:06:05.080 --> 00:06:07.679 +need to write that down. I basically write everything in a + +00:06:07.680 --> 00:06:10.919 +paper notebook, but then I transfer the things that are + +00:06:10.920 --> 00:06:14.079 +worth keeping to the Denote note-taking system. Now, there + +00:06:14.080 --> 00:06:17.519 +are many systems that exist out there that promise you + +00:06:17.520 --> 00:06:20.639 +note-taking heaven when you just follow a certain process. + +00:06:20.640 --> 00:06:24.919 +My advice: don't worry about Zettelkasten, PARA, or + +00:06:24.920 --> 00:06:28.479 +whatever is out there. Just write your notes and worry about + +00:06:28.480 --> 00:06:31.479 +structure and all that later. Even Niklas Luhmann, the + +00:06:31.480 --> 00:06:34.639 +inventor of Zettelkasten, called his system a septic tank + +00:06:34.640 --> 00:06:38.319 +of ideas. I call my collection of notes a primordial soup + +00:06:38.320 --> 00:06:43.439 +from which my books emerge. Now, Denote by Prot Stavrou is a + +00:06:43.440 --> 00:06:45.919 +flexible note-taking system that can implement any of the + +00:06:45.920 --> 00:06:49.119 +popular methods. I transferred thousands of files to + +00:06:49.120 --> 00:06:54.319 +this format, so all my information is at my fingertips. We + +00:06:54.320 --> 00:06:59.759 +can jump to the Denote directory. In my case, that's + +00:06:59.760 --> 00:07:04.279 +~/documents/notes. We see here the marvel that is Denote, + +00:07:04.280 --> 00:07:09.759 +which is its ingenious file naming convention that has a + +00:07:09.760 --> 00:07:15.279 +timestamp, a title, and some (what do we call them) tags or + +00:07:15.280 --> 00:07:18.559 +categories, whatever you please. This is a very quick way + +00:07:18.560 --> 00:07:28.763 +to find things. Then there is an ews-dired-narrow function. + +00:07:28.764 --> 00:07:30.799 +For example, I can find anything, + +00:07:30.800 --> 00:07:34.679 +_ews means anything that has the EWS tag, and + +00:07:34.680 --> 00:07:39.112 +there we go, it's narrowed down in my EWS notes. + +NOTE denote-explore + +00:07:39.113 --> 00:07:45.040 +Now, this is all very well, but I also decided to + +00:07:45.041 --> 00:07:47.102 +write a package called denote-explore, + +00:07:47.103 --> 00:07:54.071 +which helps us sort of explore these collections of notes. + +00:07:54.072 --> 00:07:55.519 +One of the fancy things we can do is + +00:07:55.520 --> 00:07:56.519 +do some visualization. + +00:07:56.520 --> 00:08:02.159 +Let's go to the network function and create a community of + +00:08:02.160 --> 00:08:05.359 +notes. A community is a collection of notes that match a + +00:08:05.360 --> 00:08:10.039 +regular expression, _ews. All the notes here + +00:08:10.040 --> 00:08:15.599 +that are on this list, the ones with the EWS tag. In a second, + +00:08:15.600 --> 00:08:22.159 +my browser pops up. I shall move that to my other window in a + +00:08:22.160 --> 00:08:28.599 +second. There we go. denote-explore creates a SVG file and + +00:08:28.600 --> 00:08:33.213 +it creates an arrow between all the nodes that are linked. + +00:08:33.214 --> 00:08:36.199 +It puts a title up there when the node has more than two links + +00:08:36.200 --> 00:08:39.599 +going in or out. We can also click on the note to read it in + +00:08:39.600 --> 00:08:43.679 +the browser, if you choose. If you set up Firefox properly, + +00:08:43.680 --> 00:08:49.639 +I'm sure it can also go into Emacs. This is the note tagging + +00:08:49.640 --> 00:08:54.580 +that's available within EWS. + +NOTE Writing with Org + +00:08:54.581 --> 00:08:57.021 +Now, we've taken all these notes. Now we need to + +00:08:57.022 --> 00:09:00.518 +start writing stuff. Org mode, for me, + +00:09:00.519 --> 00:09:03.559 +is the ideal tool. Org mode is what you see is what you + +00:09:03.560 --> 00:09:06.919 +mean. The text and the syntax instruct the computer on how to + +00:09:06.920 --> 00:09:10.479 +produce the final result. This means that one file can + +00:09:10.480 --> 00:09:12.879 +become many different formats, an e-book, a printed book, + +00:09:12.880 --> 00:09:16.759 +or a website. It doesn't matter. Now, a lot of people talk + +00:09:16.760 --> 00:09:18.959 +about what you see, what you get, and that we should have a + +00:09:18.960 --> 00:09:21.079 +what you see, what you get mode in Emacs. I think that's + +00:09:21.080 --> 00:09:24.799 +irrelevant, because showing the final result while you're + +00:09:24.800 --> 00:09:28.639 +writing is actually a distraction. Traditional writing, + +00:09:28.640 --> 00:09:31.359 +producing the content, and designing the layout and + +00:09:31.360 --> 00:09:34.119 +typesetting are separate processes done by different + +00:09:34.120 --> 00:09:38.079 +professionals. In Emacs Writing Studio, the writing is + +00:09:38.080 --> 00:09:40.359 +still done by a human. There are no provisions for large + +00:09:40.360 --> 00:09:45.039 +language models in EWS. But layout and typesetting is done + +00:09:45.040 --> 00:09:49.599 +by external software, be it CSS, LaTeX, or XML, all mediated + +00:09:49.600 --> 00:09:50.359 +by Org mode. + +00:09:50.360 --> 00:09:57.399 +EWS also has some other tools for case conversion, + +00:09:57.400 --> 00:09:59.799 +thesaurus, a dictionary that I haven't got time to show, + +00:09:59.800 --> 00:10:02.909 +but what I will show you is how the book functions, + +00:10:02.910 --> 00:10:05.919 +and then how we create these publications. + +NOTE The project file + +00:10:05.920 --> 00:10:11.639 +Okay. Let's go to my project file. + +00:10:11.640 --> 00:10:17.058 +So these are the EWS chapters, + +00:10:17.059 --> 00:10:20.200 +and each chapter is an Org mode file. + +00:10:20.201 --> 00:10:25.079 +Let's go into the main document, which is set up with + +00:10:25.080 --> 00:10:30.359 +olivetti-mode just to make it easier to read. What we see + +00:10:30.360 --> 00:10:34.839 +here is all the fluff from Org mode. These are all the + +00:10:34.840 --> 00:10:37.719 +various bits of metadata that I used to create the final + +00:10:37.720 --> 00:10:43.439 +result. Then for each chapter, I have an inclusion. + +00:10:43.440 --> 00:10:46.721 +This references another file. I've got some properties. + +00:10:46.722 --> 00:10:49.839 +In this case, the forward is unnumbered. There's some notes. + +00:10:49.840 --> 00:10:53.599 +In this case, Prot actually wrote this for me. Then we + +00:10:53.600 --> 00:10:59.039 +can jump into that text. Then what we see at the bottom + +00:10:59.040 --> 00:11:02.919 +here is some inclusions for HTML. This is the EPUB version, + +00:11:02.920 --> 00:11:07.159 +but it's different in LaTeX. Again, the same file can + +00:11:07.160 --> 00:11:09.479 +serve different purposes. + +00:11:09.480 --> 00:11:14.719 +So now let's, as the final part of this demonstration, + +00:11:14.720 --> 00:11:17.759 +actually create the book, because the book's freely + +00:11:17.760 --> 00:11:23.159 +available. You can download the source files from GitHub, + +00:11:23.160 --> 00:11:29.839 +and you can roll your own. Let's open the dispatcher. + +00:11:29.840 --> 00:11:33.468 +We'll export the LaTeX and we want to open the file. + +00:11:33.469 --> 00:11:37.349 +Now this takes a minute because there's a lot happening within + +00:11:37.350 --> 00:11:42.199 +all this code, so I'll shorten this video. I'll be silent now. + +00:11:42.200 --> 00:11:49.959 +There we are. This is the Emacs Writing Studio PDF version, + +00:11:49.960 --> 00:11:53.439 +which will eventually become the interior for the + +00:11:53.440 --> 00:11:55.159 +paperback version. + +00:11:55.160 --> 00:12:02.399 +So the EWS book is available in all major e-book shops. + +00:12:02.400 --> 00:12:05.319 +I'm also working on a paperback, which I hope to finish when + +00:12:05.320 --> 00:12:09.279 +Emacs 30 comes out. But the Org Mode files that I use to + +00:12:09.280 --> 00:12:11.039 +produce the book, they're available in the GitHub + +00:12:11.040 --> 00:12:13.999 +repository, so you can also roll your own, because the EWS + +00:12:14.000 --> 00:12:18.719 +configuration is the one that I use to produce the book. + +NOTE Conclusions + +00:12:18.720 --> 00:12:22.799 +Now, some conclusions from this journey is that the best way to + +00:12:22.800 --> 00:12:26.239 +learn is to teach. That was my personal objective. I + +00:12:26.240 --> 00:12:28.599 +learned a lot from systematically working out how to + +00:12:28.600 --> 00:12:33.559 +implement the EWS workflow. One of the surprising things + +00:12:33.560 --> 00:12:35.759 +that I learned is to have reliance on external software + +00:12:35.760 --> 00:12:39.359 +throughout the writing process. I spent a lot of time in + +00:12:39.360 --> 00:12:42.159 +the book about explaining these connections that Emacs is + +00:12:42.160 --> 00:12:46.399 +not just a text processor, it is also an interface with other + +00:12:46.400 --> 00:12:49.599 +software. Now, future developments, as I mentioned, + +00:12:49.600 --> 00:12:52.119 +there'll be a paperback version of the book when Emacs 30 + +00:12:52.120 --> 00:12:55.959 +comes out, and I might reconfigure things a little bit. I'm + +00:12:55.960 --> 00:12:58.719 +only planning to update the configuration when packages + +00:12:58.720 --> 00:13:04.639 +break or with another major Emacs release, because I want to + +00:13:04.640 --> 00:13:08.079 +work with Emacs, not work on Emacs. A big thank you to + +00:13:08.080 --> 00:13:11.199 +Prot Stavrou, who helped me with Denote packages, and he + +00:13:11.200 --> 00:13:14.999 +also wrote the forward to the book. There's also several + +00:13:15.000 --> 00:13:18.119 +test readers that I met through Mastodon that helped me out + +00:13:18.120 --> 00:13:20.719 +quite a bit. Of course, all the Emacs and package + +00:13:20.720 --> 00:13:25.519 +developers without which none of this would exist. Thank + +00:13:25.520 --> 00:13:27.559 +you all for your attention, and I look forward to your + +00:13:27.560 --> 00:13:30.720 +questions and suggestions. |