diff options
Diffstat (limited to '')
96 files changed, 106084 insertions, 0 deletions
diff --git a/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt new file mode 100644 index 00000000..24d868ec --- /dev/null +++ b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt @@ -0,0 +1,14 @@ +WEBVTT + + +00:00:00.000 --> 00:01:01.199 +Introduction + +00:01:01.200 --> 00:03:33.359 +Demo + +00:03:33.360 --> 00:04:47.039 +emi-escape-12 + +00:04:47.040 --> 00:06:03.281 +The rest of the game diff --git a/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt new file mode 100644 index 00000000..ef19436d --- /dev/null +++ b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt @@ -0,0 +1,315 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.039 +Hi, I'm going to give you a little demo + +00:00:04.040 --> 00:00:06.439 +of a project that I'm working on + +00:00:06.440 --> 00:00:09.839 +which is called the `orgdungeon`. + +00:00:09.840 --> 00:00:16.039 +As you can see here, they are just a bunch of Org files + +00:00:16.040 --> 00:00:20.559 +and also an Emacs Lisp file. + +00:00:20.560 --> 00:00:26.799 +What I found is that if you have these Org files + +00:00:26.800 --> 00:00:30.919 +and then you have an Emacs Lisp file as a source + +00:00:30.920 --> 00:00:36.879 +to control how to progress from one file to another, + +00:00:36.880 --> 00:00:40.519 +it will give you a game-like experience. + +00:00:40.520 --> 00:00:43.479 +It's like the old game Myst. + +00:00:43.480 --> 00:00:46.119 +It was developed with the technology + +00:00:46.120 --> 00:00:48.759 +HyperCard for the Macintosh. + +00:00:48.760 --> 00:00:53.199 +Basically, it uses a similar technology, + +00:00:53.200 --> 00:00:57.559 +so a similar interface to the developer + +00:00:57.560 --> 00:01:01.199 +who was using that technology to develop the game. + +NOTE Demo + +00:01:01.200 --> 00:01:03.799 +Concretely, I'm going to give you + +00:01:03.800 --> 00:01:08.879 +a demo of how the game looks like. + +00:01:08.880 --> 00:01:14.839 +So, this is a very vanilla Emacs setup. + +00:01:14.840 --> 00:01:18.639 +Then I open up the first Org file. + +00:01:18.640 --> 00:01:22.839 +The Org file is just a bunch of text, + +00:01:22.840 --> 00:01:25.519 +but it tells you a story. + +00:01:25.520 --> 00:01:27.359 +So you wake up somewhere, + +00:01:27.360 --> 00:01:32.599 +and then there is a dog-like robot called Emi around you. + +00:01:32.600 --> 00:01:37.759 +And then it tells you what you should do. + +00:01:37.760 --> 00:01:40.799 +Following the instructions... + +00:01:40.800 --> 00:01:42.719 +For example, here it tells you + +00:01:42.720 --> 00:01:46.239 +down there is one thing called "code block," + +00:01:46.240 --> 00:01:51.359 +and then you can evaluate it by pressing `C-c C-c`. + +00:01:51.360 --> 00:01:53.639 +Then we can just go there + +00:01:53.640 --> 00:01:55.239 +and then just evaluate the code block. + +00:01:55.240 --> 00:02:00.239 +So technically it just runs the Emacs Lisp file, + +00:02:00.240 --> 00:02:04.999 +because you can see here, if you load Emacs Lisp... + +00:02:05.000 --> 00:02:07.159 +It just evaluates that Emacs Lisp file. + +00:02:07.160 --> 00:02:09.799 +I can just say `C-c C-c`. + +00:02:09.800 --> 00:02:12.319 +Then for this one, I just say yes, + +00:02:12.320 --> 00:02:16.519 +and then it will jump to another file. + +00:02:16.520 --> 00:02:18.759 +But in the game, I call it the plane. + +00:02:18.760 --> 00:02:21.039 +So it jumps to another plane. + +00:02:21.040 --> 00:02:24.039 +Yeah, so... + +00:02:24.040 --> 00:02:26.399 +In the other one, it's just saying that + +00:02:26.400 --> 00:02:29.879 +there is a function called `emi-escape-10`. + +00:02:29.880 --> 00:02:33.479 +Assuming that you don't have any experience + +00:02:33.480 --> 00:02:34.759 +how to use Emacs, + +00:02:34.760 --> 00:02:38.759 +so you have no idea how to do that, + +00:02:38.760 --> 00:02:41.319 +but down there, it's saying that + +00:02:41.320 --> 00:02:44.319 +there is a key combination called `C-h f`, + +00:02:44.320 --> 00:02:48.399 +and it will bring up the help system. + +00:02:48.400 --> 00:02:52.559 +Then you can read the help file of `emi-escape-10`. + +00:02:52.560 --> 00:02:55.739 +So you can just do that. For example, `C-h f` + +00:02:55.740 --> 00:03:02.999 +and then `describe-function` `emi-escape-10` here. + +00:03:03.000 --> 00:03:06.319 +It will show you the help file. + +00:03:06.320 --> 00:03:10.919 +Then it's just saying that you can press `M-x`, + +00:03:10.920 --> 00:03:13.519 +and Meta usually mapped to Alt, + +00:03:13.520 --> 00:03:15.079 +and then yeah. + +00:03:15.080 --> 00:03:18.719 +Then you can just close this help file using `C-x 1`. + +00:03:18.720 --> 00:03:21.399 +I'm just going to do that. And then yeah... + +00:03:21.400 --> 00:03:31.479 +I'm just try that. `M-x` and then `emi-escape-10`. + +00:03:31.480 --> 00:03:33.359 +All right. + +NOTE emi-escape-12 + +00:03:33.360 --> 00:03:36.039 +So I will jump to another file. + +00:03:36.040 --> 00:03:39.359 +Or in the game, you jump to another plane. + +00:03:39.360 --> 00:03:40.338 +And now you know that + +00:03:40.339 --> 00:03:44.839 +there is a function called `emi-escape-12`. + +00:03:44.840 --> 00:03:47.638 +And yeah, you can just do that `emi`, + +00:03:47.639 --> 00:03:50.399 +because you learned it previously, right. + +00:03:50.400 --> 00:03:52.079 +`emi-escape-12`. + +00:03:52.080 --> 00:03:55.119 +But this time, it asks you for a password, + +00:03:55.120 --> 00:03:57.799 +which you probably don't know, right? + +00:03:57.800 --> 00:03:59.839 +If you just type in anything, + +00:03:59.840 --> 00:04:02.719 +it will just say incorrect password. + +00:04:02.720 --> 00:04:06.359 +But yeah, it's part of the learning experience + +00:04:06.360 --> 00:04:07.279 +because previously you learned + +00:04:07.280 --> 00:04:10.319 +that you should use the help file, + +00:04:10.320 --> 00:04:16.199 +help system to read the help file of a function, + +00:04:16.200 --> 00:04:18.319 +so you can just use the help file + +00:04:18.320 --> 00:04:25.839 +to look for the help of `emi-escape-12`. + +00:04:25.840 --> 00:04:29.519 +Then, yeah, the help file will say that + +00:04:29.520 --> 00:04:31.239 +you should enter a password, + +00:04:31.240 --> 00:04:34.159 +and the password is `emi`. + +00:04:34.160 --> 00:04:36.439 +Right. So you can just do that. + +00:04:36.440 --> 00:04:42.239 +Write `emi-escape-12`, + +00:04:42.240 --> 00:04:47.039 +and then now you know the password is `emi`. Right. + +NOTE The rest of the game + +00:04:47.040 --> 00:04:51.839 +So you can progress along these different files, + +00:04:51.840 --> 00:04:53.519 +and then if you... + +00:04:53.520 --> 00:04:54.639 +Okay, it's like a game, + +00:04:54.640 --> 00:04:57.279 +but at the same time, it also teaches you + +00:04:57.280 --> 00:05:01.679 +something about how Emacs works. + +00:05:01.680 --> 00:05:04.599 +For example, like the previous one, + +00:05:04.600 --> 00:05:07.279 +you know how to use the help file, for example, + +00:05:07.280 --> 00:05:11.519 +but in the later part, you will learn how to + +00:05:11.520 --> 00:05:14.279 +evaluate some Emacs Lisp code + +00:05:14.280 --> 00:05:17.159 +and also how to write some Emacs Lisp code + +00:05:17.160 --> 00:05:19.559 +as well, and then you will learn + +00:05:19.560 --> 00:05:23.399 +the difference between interactive commands + +00:05:23.400 --> 00:05:27.239 +and also just ordinary functions, for example. + +00:05:27.240 --> 00:05:31.399 +Now, I just created a few Org files, + +00:05:31.400 --> 00:05:36.439 +but I'm actively adding more Org files + +00:05:36.440 --> 00:05:39.599 +so that we can have a complete kind of + +00:05:39.600 --> 00:05:42.559 +educational experience. + +00:05:42.560 --> 00:05:45.639 +If you want to follow along [with] this project, + +00:05:45.640 --> 00:05:51.359 +you can just go to my Github repository. + +00:05:51.360 --> 00:05:56.539 +I hope you enjoyed this little demo. + +00:05:56.540 --> 00:06:03.281 +Thank you. diff --git a/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt new file mode 100644 index 00000000..dca4982e --- /dev/null +++ b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt @@ -0,0 +1,23 @@ +WEBVTT + + +00:00:00.000 --> 00:01:16.079 +Introduction + +00:01:16.080 --> 00:02:18.959 +Org Mode + +00:02:18.960 --> 00:06:27.839 +Working together + +00:06:27.840 --> 00:08:04.039 +Data cleaning + +00:08:04.040 --> 00:12:36.039 +Processing + +00:12:36.040 --> 00:14:01.759 +Visualization + +00:14:01.760 --> 00:19:07.280 +Preserve diff --git a/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt new file mode 100644 index 00000000..1dcc0b22 --- /dev/null +++ b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt @@ -0,0 +1,1176 @@ +WEBVTT captioned by amine, checked by sachac + +NOTE Introduction + +00:00.000 --> 00:00:01.874 +[Lukas]: Welcome to our presentation, + +00:00:01.875 --> 00:00:03.599 +Collaborative Data Processing + +00:03.600 --> 00:06.039 +and Documenting using org-babel. + +00:06.040 --> 00:07.759 +My name is Lukas Bossert, and I'm + +00:07.760 --> 00:00:09.740 +from the RWTH Aachen University + +00:00:09.741 --> 00:00:12.519 +in the city of Aachen, Germany. + +00:12.520 --> 00:14.839 +[Jonathan]: And my name is Jonathan Hartmann. + +00:14.840 --> 00:18.719 +I'm also from the IT Center here at RWTH Aachen. + +00:18.720 --> 00:19.239 +[Lukas]: Great. + +00:19.240 --> 00:21.679 +And we will show you today how you + +00:21.680 --> 00:25.399 +can use Org Mode for data processing. + +00:25.400 --> 00:27.999 +So you see a little workflow what we are going to do. + +00:28.000 --> 00:31.199 +First, we will give you a slight introduction to Org Mode. + +00:31.200 --> 00:34.639 +Then we will dive into the part of data preparing. + +00:34.640 --> 00:38.679 +First, you're going to query the data using the language SPARQL. + +00:38.680 --> 00:41.759 +Then we're going to clean it using a different language. + +00:41.760 --> 00:44.279 +And in the main part of our presentation, + +00:44.280 --> 00:48.119 +we're going to do the data processing, first aggregating + +00:48.120 --> 00:52.519 +using Python, later on counting items using Org, + +00:52.520 --> 00:56.360 +and even visualizing it using R. At the end, + +00:56.400 --> 00:58.959 +we're going to show you how to preserve + +00:58.960 --> 01:01.759 +the data and the document and its documentation, + +01:01.760 --> 01:06.599 +first doing in plain exporting, then adding some metadata, + +01:06.600 --> 01:09.759 +and showing you two different ways, first a manual export, + +01:09.760 --> 01:13.359 +and also then a batch-processed export. + +01:13.360 --> 01:14.239 +All right. + +01:14.240 --> 01:16.079 +Let's dive in to that. + +NOTE Org Mode + +01:16.080 --> 01:19.919 +Jonathan, can you give us an introduction about Org Mode? + +01:19.920 --> 01:20.439 +[Jonathan]: Of course. + +01:20.440 --> 01:23.079 +So in case anyone isn't familiar with it, + +01:23.080 --> 01:25.879 +Org Mode, in the words of Carsten Dominik, + +01:25.880 --> 01:28.559 +is back to the future for plain text. + +01:28.560 --> 01:31.439 +So this is just a module available for Emacs, + +01:31.440 --> 01:32.519 +plain-text base. + +01:32.520 --> 01:34.919 +It's been around since 2003, which + +01:34.920 --> 01:36.799 +makes it about 20 years old. + +01:36.800 --> 01:40.159 +And it's extensible and fully customizable. + +01:40.160 --> 01:43.999 +And especially, it's very convenient, very good + +01:44.000 --> 01:46.719 +for scientific text production and organization. + +01:46.720 --> 01:49.439 +So for example, you can do project management, agenda, + +01:49.440 --> 01:52.559 +diary, journaling, personal knowledge management, + +01:52.560 --> 01:53.359 +presentation. + +01:53.360 --> 01:55.520 +Even this is written in Org Mode. + +01:55.560 --> 01:57.439 +It's an Org Mode presentation. + +01:57.440 --> 01:59.199 +You can do single source publishing, + +01:59.200 --> 02:01.679 +which we will do later on, and also + +02:01.680 --> 02:06.479 +literate programming, which is the core of our talk. + +02:06.480 --> 02:06.999 +OK. + +02:07.000 --> 02:10.799 +[Lukas]: So let me stop this presentation here. + +02:10.800 --> 02:14.719 +So what you see here is the plain text underneath it. + +02:14.720 --> 02:18.959 +So this is Org Mode. + +NOTE Working together + +02:18.960 --> 02:21.919 +And Jonathan, since we kind of already + +02:21.920 --> 02:25.320 +did the introduction together, should we + +02:26.120 --> 00:02:28.760 +also do the working part together? + +00:02:28.761 --> 00:02:29.700 +[Jonathan]: Of course. + +00:02:29.701 --> 00:02:33.119 +So you see on the screen there on the right, + +00:02:33.120 --> 00:02:35.060 +that's my screen in Emacs. + +00:02:35.061 --> 00:02:39.520 +And Lukas, why don't you host a session using CRDT, + +00:02:39.521 --> 00:02:41.200 +and I'll connect to your buffer. + +00:02:41.201 --> 00:02:42.560 +[Lukas]: OK. Great. + +00:02:42.561 --> 00:02:43.280 +I do that. + +00:02:43.281 --> 00:02:46.180 +So what I do, I'm using Doom Emacs. + +00:02:46.181 --> 00:02:49.307 +And I can use the `SPC` and then the `l` + +00:02:49.308 --> 00:02:52.140 +for the live share/collab part. + +00:02:52.141 --> 02:57.999 +I can use the `s` for share current buffer. + +02:58.000 --> 00:03:01.559 +So when I do this, I'm getting asked for some settings. + +00:03:01.560 --> 00:03:04.439 +I'm going with the default settings here. + +00:03:04.440 --> 00:03:08.340 +So default port, no password, and my display name. + +00:03:08.341 --> 00:03:11.940 +And now Emacs is connecting. + +00:03:11.941 --> 00:03:15.179 +And once it's connected, which just takes a couple of seconds, + +00:03:15.180 --> 00:03:17.239 +I can get the URL. + +00:03:17.240 --> 03:20.800 +So I'm going back to this menu and using `y` + +03:21.160 --> 03:23.999 +for copying the URL of the current session. + +03:24.000 --> 03:27.799 +And this is the URL I'm going to send over to you, Jonathan, + +03:27.800 --> 03:29.079 +to pick that up. + +03:29.080 --> 03:29.599 +[Jonathan]: Right. + +03:29.600 --> 03:30.079 +OK. + +03:30.080 --> 00:03:36.999 +And now on my screen, I'm going to do a `SPC l c` for connect. + +00:03:37.000 --> 00:03:38.740 +And I'm going to paste the URL + +00:03:38.741 --> 00:03:40.040 +that Lukas just sent me in here. + +00:03:40.980 --> 03:43.719 +Default port, no password. + +03:43.720 --> 00:03:45.440 +And we're connecting now. + +00:03:45.700 --> 03:48.600 +So this takes a second just to get us synced up. + +03:51.600 --> 00:03:54.160 +So we can work on the same document at the same time. + +00:03:54.161 --> 03:56.639 +We can follow each other's cursors around. + +03:56.640 --> 03:58.839 +We can have multiple buffers open and work on them + +03:58.840 --> 04:00.999 +at the same time. + +04:01.000 --> 04:04.719 +And so here you see that we are both in the same document. + +04:04.720 --> 04:06.280 +You can see my cursor popping around. + +04:09.040 --> 04:13.279 +And you can see we're both editing the same item. + +04:13.280 --> 04:14.039 +Great. + +04:14.040 --> 04:18.039 +[Lukas]: So we also see who else is currently in our buffer + +04:18.040 --> 04:20.199 +with the user overview. + +04:20.200 --> 04:23.559 +So let me just delete that window. + +04:23.560 --> 04:26.079 +And that's going to work in our main one. + +04:26.080 --> 04:29.599 +So we said first part is about data retrieval. + +04:29.600 --> 04:32.720 +So we should give it a headline. + +04:37.080 --> 04:39.239 +We said prepare stage. + +04:39.240 --> 04:42.319 +So what are we going to do first, Jonathan? + +04:42.320 --> 00:04:43.940 +[Jonathan]: So what we're going to do, + +00:04:43.941 --> 00:04:45.399 +what this whole document is based upon, + +04:45.400 --> 04:50.119 +is we're going to pull data from Wikidata using a SPARQL query. + +04:50.120 --> 04:53.519 +The data we're going to pull is related to the NFDIs, + +04:53.520 --> 04:55.639 +which here in Germany is the National Forschungsdaten + +04:55.640 --> 05:00.679 +Infrastructure, which is a sort of collection of universities + +05:00.680 --> 05:03.399 +that work together on various research projects. + +05:03.400 --> 05:05.599 +And this is emblematic of the kind of data + +05:05.600 --> 05:09.239 +that we would be interested in working with here. + +05:09.240 --> 05:13.359 +So I'm going to paste a--forgive the pre-written code-- + +05:13.360 --> 05:19.840 +I'm going to paste some text in here. + +05:20.040 --> 00:05:21.407 +[Lukas]: And while you are talking, I just + +00:05:21.408 --> 00:05:23.359 +keep on documenting what we do + +00:05:23.360 --> 00:05:25.880 +so we can split the work. + +05:27.360 --> 05:29.679 +[Jonathan]: In here, after a minor technical upset, + +05:29.680 --> 05:32.559 +is the raw dataset cell. + +05:32.560 --> 00:05:34.740 +And it's going to use SPARQL, + +00:05:34.741 --> 00:05:37.174 +which is how we have the syntax highlighting + +00:05:37.175 --> 00:05:37.940 +in our code here. + +00:05:37.941 --> 05:40.639 +It's going to go to the URL endpoint + +05:40.640 --> 05:43.639 +query.wikidata.org/sparql , + +05:43.640 --> 05:46.799 +and it's going to return the data as a text CSV, + +05:46.800 --> 05:49.279 +and it's going to cache that data + +05:49.280 --> 05:51.439 +so that we don't constantly hammer the API every time + +05:51.440 --> 05:54.239 +we run this notebook. + +05:54.240 --> 00:05:57.360 +So I'm going to run that there. + +00:05:57.361 --> 05:58.799 +You can see down at the bottom of my screen, + +05:58.800 --> 06:00.840 +we're contacting the host query.wikidata.org . + +06:05.720 --> 06:07.319 +[Lukas]: And there's the result. + +06:07.320 --> 06:11.799 +[Jonathan]: Yeah, except I think that for our purposes here, + +06:11.800 --> 06:15.279 +we're just going to limit this to 50 results. + +06:15.280 --> 06:16.279 +[Lukas]: Oh, yeah. + +06:16.280 --> 06:18.679 +[Jonathan]: Just so it's a little easier for us to manage. + +06:18.680 --> 06:20.719 +I'm going to run that again. + +06:20.720 --> 06:21.519 +There we go. + +06:21.520 --> 00:06:22.319 +That looks a little better. + +00:06:22.320 --> 00:06:23.159 +[Lukas]: I think that's fine. + +00:06:23.160 --> 00:06:25.359 +50 items is fine. + +00:06:25.360 --> 06:27.839 +So what do we see here, Jonathan? + +NOTE Data cleaning + +06:27.840 --> 06:28.319 +[Jonathan]: Right. + +06:28.320 --> 06:31.239 +So the first thing we see when we look at this + +06:31.240 --> 00:06:33.307 +is a couple of Q codes at the top, + +00:06:33.308 --> 00:06:36.079 +which are an artifact of Wikidata. + +06:36.080 --> 06:39.519 +So these are pages which don't have + +06:39.520 --> 06:42.519 +the label for whichever institution they happen to be. + +06:42.520 --> 06:45.919 +For our purposes here, we're just going to exclude them. + +06:45.920 --> 06:48.199 +We could just go on Wikidata and edit them ourselves. + +06:48.200 --> 06:50.399 +But for now, it's a little more interesting + +06:50.400 --> 06:52.519 +if we go and remove them. + +06:52.520 --> 06:55.159 +So I'm going to create a new cell. + +06:55.160 --> 06:58.279 +Lukas, if you don't mind starting one for data cleaning. + +06:58.280 --> 06:58.879 +[Lukas]: Oh, yeah. + +06:58.880 --> 06:59.479 +Good point. + +06:59.480 --> 07:02.039 +Yeah, data cleaning. + +07:02.040 --> 07:03.439 +OK. + +07:03.440 --> 00:07:05.499 +How do you want to do that, Jonathan? + +00:07:05.500 --> 07:09.759 +[Jonathan]: I'm going to use a shell command. + +07:09.760 --> 07:11.119 +So let's see. + +07:11.120 --> 07:12.999 +There we go. + +07:13.000 --> 07:15.159 +And so you can see, here is another cell, + +07:15.160 --> 07:20.039 +that the cell is now using a shell, + +07:20.040 --> 00:07:23.799 +and that we have this thing `:var input=raw-dataset`, + +00:07:23.800 --> 00:07:25.840 +which is the name of the cell above + +00:07:25.841 --> 00:07:28.439 +where we got our data from Wikidata. + +07:28.440 --> 07:31.679 +This is going to run just a simple shell command. + +07:31.680 --> 07:33.959 +It's going to take the input and then run `sed` on it + +07:33.960 --> 00:07:37.039 +and exclude any records which have a Q + +00:07:37.040 --> 00:07:41.279 +followed by one or more digits afterwards. + +07:41.280 --> 07:43.960 +That should remove those from our data set. + +07:44.000 --> 07:45.400 +So I'm going to run that. + +07:48.640 --> 07:51.039 +That seems to have done the trick. + +07:51.040 --> 07:51.879 +[Lukas]: Great, yeah. + +07:51.880 --> 07:52.919 +That's really good. + +07:52.920 --> 07:55.399 +We got rid of all the Q items. + +07:55.400 --> 07:55.919 +Very good. + +07:55.920 --> 07:59.959 +So we just have two-column table: institutions + +07:59.960 --> 08:02.759 +and consortia. + +08:02.760 --> 08:04.039 +Very nice. + +NOTE Processing + +08:04.040 --> 08:08.719 +So let's come to our main part, doing some processing. + +08:08.720 --> 08:13.560 +Let me give you a headline here, process the data. + +08:13.640 --> 08:15.519 +What do you want to do first? + +08:15.520 --> 08:17.599 +[Jonathan]: This is not a very complicated data set, + +08:17.600 --> 08:19.439 +but let's just do some simple counts first. + +08:19.440 --> 08:22.199 +I'm going to start with Python, + +08:22.200 --> 08:25.239 +and we're just going to do some aggregation with Python. + +08:25.240 --> 08:30.039 +Again, I've got some pre-written code here. + +08:30.040 --> 08:34.999 +You can see that we've started a cell using Python. + +08:35.000 --> 08:37.879 +The variable `clean_df` now is equal to `clean-dataset`. + +08:37.880 --> 00:08:39.707 +So we're going to take that data + +00:08:39.708 --> 00:08:41.039 +that we retrieved from the SPARQL query, + +08:41.040 --> 08:42.680 +we're going to run it through the cleaning cell, + +08:42.720 --> 08:45.239 +and then we're going to import it into this cell. + +08:45.240 --> 08:47.839 +This is just going to do some simple Python aggregation. + +08:47.840 --> 00:08:49.007 +We're going to import `pandas`, + +00:08:49.008 --> 00:08:51.307 +which is the Python data science library, + +00:08:51.308 --> 00:08:54.839 +create a data frame out of our input, + +08:54.840 --> 08:57.479 +and then aggregate it, grouping on `wLabel`, + +08:57.480 --> 08:59.959 +and getting a count from that and returning it. + +08:59.960 --> 09:01.640 +So if we execute that cell... + +09:05.040 --> 09:08.879 +[Lukas]: Nice, we get institutions and a count. + +09:08.880 --> 09:14.119 +But what about not ordering it by the alphabet, + +09:14.120 --> 09:17.079 +but more like ordering by counts? + +09:17.080 --> 09:18.439 +[Jonathan]: Sure. + +09:18.440 --> 09:22.839 +So let's do this... `sort_values()`, I think, as the Python. + +09:22.840 --> 09:24.919 +How does that look? + +09:24.920 --> 00:09:27.640 +[Lukas]: Better, but I would like to + +00:09:27.641 --> 00:09:29.239 +have the highest number first + +09:29.240 --> 09:32.239 +and then ascending. + +09:32.240 --> 09:34.719 +Well, not ascending, descending. + +09:34.720 --> 09:37.600 +[Jonathan]: Right, so we can do `ascending=False`. + +09:39.880 --> 09:42.559 +[Lukas]: This is perfect, I'd say. + +09:42.560 --> 09:43.079 +[Jonathan]: Great. + +09:43.080 --> 09:44.079 +[Lukas]: Very good. + +09:44.080 --> 00:09:46.799 +OK, that's nice. + +00:09:46.800 --> 09:47.999 +We get a good overview here. + +09:48.000 --> 09:50.079 +But can we also do something else, + +09:50.080 --> 09:56.079 +like counting how many institutions are + +09:56.080 --> 09:57.799 +involved in one consortium? + +09:57.800 --> 10:00.879 +And also using this later on in the text? + +10:00.880 --> 00:10:00.880 +[Jonathan]: Sure, so I'm going to put a new... + +00:10:00.881 --> 00:10:05.040 +If you give me another heading down here + +00:10:05.041 --> 00:10:08.320 +for institutions per consortium... + +10:12.080 --> 10:16.799 +And here we're going to use awk code just to spice things up + +10:16.800 --> 10:18.959 +and add yet another language in here. + +10:18.960 --> 10:22.439 +So you can see this is awk. + +10:22.440 --> 10:26.279 +We're using standard in instead of defining a variable. + +10:26.280 --> 10:28.359 +But the really interesting thing about this cell + +10:28.360 --> 00:10:33.399 +is that we have this `:var consortium="NFDI4Memory"`. + +10:33.400 --> 00:10:35.640 +And what this code is doing is + +00:10:35.641 --> 00:10:38.040 +it's counting any time it sees + +00:10:38.041 --> 00:10:40.279 +that particular consortium name + +10:40.280 --> 10:41.759 +and keeping track of that. + +10:41.760 --> 00:10:43.907 +So if we execute this, + +00:10:43.908 --> 00:10:45.919 +Lukas, why don't you execute this one? + +10:45.920 --> 10:49.399 +[Lukas]: OK, I'm going to enter it. + +10:49.400 --> 10:52.439 +And I get a result, NFDI4Memory, + +10:52.440 --> 10:58.239 +because this is our default value for this variable. + +10:58.240 --> 10:59.439 +And we get the count. + +10:59.440 --> 00:11:01.640 +So it's five institutions are involved + +00:11:01.641 --> 00:11:04.639 +in the NFDI4memory consortium. + +11:04.640 --> 11:07.839 +Great, but the very nice thing, what I think, + +11:07.840 --> 11:12.519 +is here that we can use this code snippet within our text. + +11:12.520 --> 11:14.279 +So, blended in seamlessly. + +11:14.280 --> 11:16.199 +Let me give you an example. + +11:16.200 --> 11:18.919 +I'm writing out the text. + +11:18.920 --> 11:27.599 +Now we know how many institutions are in... + +11:27.600 --> 11:29.239 +Give me an example. + +11:29.240 --> 11:31.480 +I would like to know how many institutions are + +11:31.560 --> 11:35.079 +involved in NFDI4Objects, which is a consortium. + +11:35.080 --> 11:39.239 +So I'm writing `call_` and using + +11:39.240 --> 00:11:42.607 +the name of this snippet here, of this cell, + +00:11:42.608 --> 00:11:46.607 +which is `inst-count(`, + +00:11:46.608 --> 00:11:51.719 +and writing my value, `NFDI4Objects`. + +11:51.720 --> 11:57.999 +As soon as I evaluate this using `C-c C-c`, + +11:58.000 --> 12:00.279 +I get the result back here. + +12:00.280 --> 12:05.159 +I can do this even for more. + +12:05.160 --> 12:14.039 +Or in writing, `call_inst-count`, go with `NFDI4Earth`, + +12:14.040 --> 12:16.799 +which is another consortium. + +12:16.800 --> 12:20.559 +`C-c C-c`, it's three institutions. + +12:20.560 --> 12:23.439 +This can be used throughout your text, + +12:23.440 --> 12:26.639 +and as soon as the data set changes from in the beginning, + +12:26.640 --> 12:30.399 +maybe different results requiring Wikidata, + +12:30.400 --> 12:35.079 +this also will be updated once it's exported. + +12:35.080 --> 12:36.039 +Very nice, Jonathan. + +NOTE Visualization + +12:36.040 --> 00:12:38.974 +But I think we did a lot of analysis + +00:12:38.975 --> 00:12:41.079 +on text and counting things. + +12:41.080 --> 12:43.679 +Can we also do something more visual? + +12:43.680 --> 12:45.199 +Show me something. + +12:45.200 --> 12:45.759 +[Jonathan]: Sure. + +12:45.760 --> 12:48.639 +So what we can do with this, because we just + +12:48.640 --> 12:51.399 +have two columns here that are sort of related, + +12:51.400 --> 12:53.759 +we can build a little network plot out of it. + +12:53.760 --> 12:56.999 +So let's make a network visualization. + +12:57.000 --> 12:59.599 +We're going to use the `igraph` library from R + +12:59.600 --> 13:02.559 +and just plot the edges that we see here. + +13:02.560 --> 13:04.239 +There we go. + +13:04.240 --> 13:11.879 +There's my little heading and space. + +13:11.880 --> 13:13.479 +Here is our code. + +13:13.480 --> 13:16.039 +Again, just to be fancy and keep using + +13:16.040 --> 13:19.719 +different languages in here, we set a variable called + +13:19.720 --> 13:21.560 +`NFDI_edges` equal to `clean-dataset`. + +13:21.600 --> 13:23.399 +So this, again, is sort of cascading + +13:23.400 --> 00:13:25.740 +through the original data + +00:13:25.741 --> 00:13:28.807 +that we pulled from the Wikidata endpoint, + +00:13:28.808 --> 00:13:30.959 +cleaning that data, and now it's being inserted + +13:30.960 --> 13:32.959 +into this cell as well. + +13:32.960 --> 13:34.239 +But you see the difference here. + +13:34.240 --> 13:36.839 +Instead of exporting a table, what we're saying + +13:36.840 --> 13:39.239 +is that there will be a graphics file, + +13:39.240 --> 13:44.639 +and it will be called network-plot.png. + +13:44.640 --> 13:45.119 +All right. + +13:45.120 --> 13:47.959 +And so Lukas, why don't you execute this one? + +13:47.960 --> 13:48.759 +[Lukas]: There you go. + +13:48.760 --> 13:52.919 +I can click `C-c C-c` + +13:52.920 --> 13:59.159 +and I get a nice plot of the network below our cell. + +13:59.160 --> 14:01.759 +So this is very nice indeed. + +NOTE Preserve + +14:01.760 --> 14:05.199 +So I think it's about time to wrap it up and to export + +14:05.200 --> 14:07.959 +and to preserve the data and the documentation + +14:07.960 --> 14:13.079 +that we have in our very last step, calling preserve. + +14:13.080 --> 14:16.239 +So I would like to do it in two steps. + +14:16.240 --> 14:18.600 +First, maybe manually exporting it, + +14:18.800 --> 14:22.239 +but then also doing it in a batch process. + +14:22.240 --> 14:27.119 +Giving you some insights how to do that manual export. + +14:27.120 --> 14:30.559 +For example, you can do a LaTeX export. + +14:30.560 --> 14:34.279 +Let me write down the key combination to do that here. + +14:34.280 --> 14:44.560 +So you press `SPC m e l o`. + +14:44.600 --> 14:49.159 +Let me show you how this is done. + +14:49.160 --> 14:51.439 +So I'm pressing `SPC`. + +14:51.440 --> 14:55.679 +I'm pressing `m`, which is my local leader. + +14:55.680 --> 15:01.279 +I'm pressing `e`, which is now the `org-export-dispatch`. + +15:01.280 --> 15:03.519 +And now I have different options I can choose from. + +15:03.520 --> 15:07.119 +I want to do a LaTeX export because I want to get in PDF. + +15:07.120 --> 00:15:08.674 +So I'm pressing `l`. + +00:15:08.675 --> 00:15:11.479 +Now I've got different options available. + +15:11.480 --> 15:17.399 +So I'm pressing `o` for a PDF file and open that. + +15:17.400 --> 15:21.119 +Let's see now the code. + +15:21.120 --> 15:25.639 +Now this is exporting document. + +15:25.640 --> 00:15:29.674 +And what we have here is PDF, + +00:15:29.675 --> 00:15:31.974 +which contains our workflow in the beginning, + +00:15:31.975 --> 00:15:35.707 +our bullet points we have here, + +00:15:35.708 --> 00:15:37.919 +and also the code snippet + +15:37.920 --> 15:41.120 +that we use for querying the data. + +15:41.280 --> 15:43.599 +And we have the result below that. + +15:43.600 --> 15:46.999 +So this is our table with all the data sets. + +15:47.000 --> 15:51.879 +But as you can see, this is running out of the page. + +15:51.880 --> 15:55.679 +So this is not very nice using the default settings. + +15:55.680 --> 16:00.239 +But everything is in this PDF. + +16:00.240 --> 16:02.759 +I guess we can now show you a way + +16:02.760 --> 16:06.519 +how to improve this result. + +16:06.520 --> 16:07.039 +[Jonathan]: Right. + +16:07.040 --> 16:09.399 +So we have, of course, a version of this + +16:09.400 --> 00:16:10.774 +that we prepared ahead of time, + +00:16:10.775 --> 00:16:14.279 +which is more or less identical to the one we just made, + +16:14.280 --> 16:17.839 +but it has a little more text, a little more explanation, + +16:17.840 --> 16:20.559 +a little more documentation along with the code. + +16:20.560 --> 16:23.879 +You can see we have some metadata up at the top, + +16:23.880 --> 16:26.879 +the title, the authors, a bibliography, + +16:26.880 --> 16:31.679 +and most importantly, the `custom-export.setup` file, + +16:31.680 --> 16:36.879 +which lists specifically the sort of LaTeX commands + +16:36.880 --> 16:43.599 +that we're using and the HTML styles that we're going to use. + +16:43.600 --> 16:45.919 +And then down at the bottom of this file, + +16:45.920 --> 16:49.119 +we have our automatic batch process. + +16:49.120 --> 16:51.719 +Here is one more language we're including in here. + +16:51.720 --> 16:53.439 +So this is Lisp. + +16:53.440 --> 16:57.359 +And you can see here we are exporting to HTML, ASCII, + +16:57.360 --> 16:58.079 +and PDF. + +16:58.080 --> 17:01.359 +The nice thing about this is that this is a document. + +17:01.360 --> 00:17:03.307 +It's a sort of document that we have a couple of + +00:17:03.308 --> 00:17:08.639 +that we can have running automatically and building. + +17:08.640 --> 17:12.919 +It will export a HTML, an ASCII file, and a PDF file + +17:12.920 --> 00:17:14.674 +every time it's run based off of + +00:17:14.675 --> 00:17:17.319 +the most recent data available on Wikidata. + +17:17.320 --> 17:19.719 +So it's self-documenting. + +17:19.720 --> 00:17:22.440 +We have, of course, our data retrieval steps, + +00:17:22.441 --> 00:17:25.159 +our data cleaning steps, our data preparation steps, + +17:25.160 --> 17:28.359 +and our preservation steps all listed at the same time. + +17:28.360 --> 17:30.239 +And then you can see over on the right, + +17:30.240 --> 17:34.320 +there's an example of the HTML file that we get out of this. + +17:34.360 --> 17:37.639 +We also get a very nicely formatted PDF file, + +17:37.640 --> 17:39.239 +which doesn't have that little issue + +17:39.240 --> 17:41.719 +with the overflow of the table. + +17:41.720 --> 17:43.559 +It's very nicely put together. + +17:43.560 --> 17:46.199 +And we even have an ASCII file. + +17:46.200 --> 17:47.879 +And I should also point out very quickly, + +17:47.880 --> 17:51.799 +while you have this one up, Lukas, after the awk code, + +17:51.800 --> 17:56.079 +you can see the text for the number of consortia, + +17:56.080 --> 17:57.839 +or the number of institutions per consortia + +17:57.840 --> 18:00.519 +is actually printed inline. + +18:00.520 --> 18:01.799 +[Lukas]: Yeah, you're very right. + +18:01.800 --> 18:06.119 +So this is what we had as code, + +18:06.120 --> 18:10.719 +and now this is nicely integrated into our text. + +18:10.720 --> 18:15.279 +So we got the consortium and number of institutions. + +18:15.280 --> 18:19.199 +You can't tell a difference between code and text. + +18:19.200 --> 18:20.719 +[Jonathan]: And those are automatically updated. + +18:20.720 --> 18:23.879 +So if another institution joins NFDI4Earth, + +18:23.880 --> 18:26.319 +then the next time this runs, we update the text right here. + +18:26.320 --> 18:28.519 +It's nothing we have to worry about. + +18:28.520 --> 18:30.400 +We just pull it directly out of Wikidata. + +18:31.840 --> 18:34.679 +[Lukas]: And for the sake of completeness, + +18:34.680 --> 18:37.879 +this is the ASCII file. + +18:37.880 --> 18:39.320 +That's in the export format. + +18:42.760 --> 18:46.440 +It contains also everything, code and data. + +18:48.360 --> 18:51.680 +Yeah, so this is what we wanted to show you, + +18:53.240 --> 18:56.639 +how to do some data processing, + +18:56.640 --> 18:58.679 +some collaborative work, + +18:58.680 --> 19:01.119 +documenting using org-babel. + +19:01.120 --> 19:03.960 +Thanks for listening. + +19:05.720 --> 19:07.280 +[Jonathan]: Thank you all, have a good day. diff --git a/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt b/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt new file mode 100644 index 00000000..2d7cd23d --- /dev/null +++ b/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt @@ -0,0 +1,4664 @@ +WEBVTT + + +00:00:02.540 --> 00:00:03.840 +All right. Hi again, everyone. + +00:00:03.840 --> 00:00:04.839 +It's been a while. Well, + +00:00:04.839 --> 00:00:06.980 +actually, it's been like 2 minutes tops. + +00:00:07.819 --> 00:00:09.099 +We were just with John Wheatley, + +00:00:09.099 --> 00:00:11.019 +and now we are with Stefan Krangas. + +00:00:11.120 --> 00:00:15.900 +Hi. Hi. So as we said before, + +00:00:16.160 --> 00:00:20.600 +Stefan is co-maintainer now of Is it the + +00:00:20.600 --> 00:00:22.920 +entire Emacs project? How do you describe + +00:00:22.920 --> 00:00:26.260 +this? Yeah, co-maintainer of GNU Emacs. + +00:00:27.439 --> 00:00:29.380 +Right, perfect. So you know what? + +00:00:29.380 --> 00:00:31.760 +Because I'm sure everyone is dying to hear + +00:00:32.420 --> 00:00:33.840 +everything you've got to say in your + +00:00:33.840 --> 00:00:36.040 +presentation I'm just going to shut up now + +00:00:36.040 --> 00:00:37.640 +and leave the floor to you. + +00:00:37.640 --> 00:00:39.440 +Do you need to share your screen or anything? + +00:00:40.080 --> 00:00:45.239 +No. Okay great well I'll just cut my webcam + +00:00:45.239 --> 00:00:47.059 +off I'll still be in the background so do not + +00:00:47.059 --> 00:00:48.940 +hesitate if you've got any problem I'm still + +00:00:48.940 --> 00:00:52.560 +around And I'll see you just beacon whenever + +00:00:52.560 --> 00:00:53.940 +you're done. And I'll show up with the + +00:00:53.940 --> 00:00:56.120 +questions. All right? Thank you, + +00:00:56.120 --> 00:00:58.739 +Leo. And thank you, everyone, + +00:00:58.739 --> 00:01:02.379 +for being here. I'm Stefan Kangas. + +00:01:02.739 --> 00:01:06.660 +So as Leo explained, I am recently appointed + +00:01:06.680 --> 00:01:09.660 +as a co-maintainer of GNU Emacs, + +00:01:10.960 --> 00:01:13.400 +which a role that I'm fulfilling currently + +00:01:13.780 --> 00:01:17.460 +with Eli Sretsky, who's been co-maintainer + +00:01:18.840 --> 00:01:23.320 +for quite some time. So I got the question to + +00:01:23.320 --> 00:01:26.780 +be a co-maintainer from Richard in August + +00:01:26.780 --> 00:01:29.280 +this year. And of course, + +00:01:29.600 --> 00:01:31.460 +when you get a question like that, + +00:01:31.840 --> 00:01:34.020 +I couldn't not say yes. + +00:01:34.360 --> 00:01:39.440 +So here we are. I can't tell you how excited + +00:01:39.920 --> 00:01:45.060 +I am to have this opportunity to address the + +00:01:45.060 --> 00:01:47.380 +community in this way. + +00:01:47.640 --> 00:01:49.800 +I'm really humbled, of course, + +00:01:50.380 --> 00:01:55.040 +to be part of it, and to be able to serve the + +00:01:55.040 --> 00:01:59.080 +community in this capacity. + +00:02:00.080 --> 00:02:04.080 +I've used Emacs, I think many of you might + +00:02:04.080 --> 00:02:06.820 +also have used Emacs for quite some time, + +00:02:06.820 --> 00:02:11.100 +but I'm going on 2 decades as an Emacs user. + +00:02:11.120 --> 00:02:14.280 +My involvement in Emacs Lisp development is, + +00:02:14.280 --> 00:02:16.160 +I mean, almost as long, + +00:02:16.660 --> 00:02:19.680 +but my core development goes back only 4, + +00:02:19.960 --> 00:02:26.700 +5 years. I have to also thank the EmacsConf + +00:02:27.180 --> 00:02:28.840 +organizers who are doing, + +00:02:29.100 --> 00:02:31.960 +I think, a tremendous job and have done a + +00:02:31.960 --> 00:02:34.820 +tremendous job over the years in really + +00:02:34.820 --> 00:02:37.800 +building and strengthening what I think is + +00:02:38.300 --> 00:02:42.180 +this fantastic community of users and + +00:02:42.180 --> 00:02:46.120 +developers and people interested in Emacs. + +00:02:46.620 --> 00:02:50.100 +I actually had the chance to meet up with Eli + +00:02:50.100 --> 00:02:53.700 +Sretzky, as well as another Emacs hacker, + +00:02:53.960 --> 00:02:57.080 +Andrea Corallo, when I was at the GNU + +00:02:57.980 --> 00:03:00.460 +project's 40 years celebration, + +00:03:00.800 --> 00:03:04.340 +40 years since the GNU project was announced. + +00:03:05.280 --> 00:03:08.540 +And it was very inspiring in general to meet + +00:03:09.660 --> 00:03:12.780 +people. And I think EmacsConf should also, + +00:03:12.980 --> 00:03:18.360 +I think, serve to inspire and sort of help + +00:03:19.020 --> 00:03:22.120 +bring something to the type of work that many + +00:03:22.120 --> 00:03:24.340 +of us are doing to improve Emacs, + +00:03:24.340 --> 00:03:26.200 +whether it's in package development or in + +00:03:26.200 --> 00:03:29.680 +core, to bring out the new and exciting ideas + +00:03:29.800 --> 00:03:34.040 +and get people enthusiastic about Emacs, + +00:03:34.080 --> 00:03:37.580 +about hacking on Emacs. + +00:03:38.560 --> 00:03:45.400 +This is my little attempt to contribute with + +00:03:45.600 --> 00:03:49.440 +let's say 2 things. I will first try to + +00:03:49.600 --> 00:03:54.400 +present how we do Emacs core development and + +00:03:54.400 --> 00:03:58.360 +why we've done some of the choices that we + +00:03:58.360 --> 00:04:02.060 +have, because We have seen at times that + +00:04:02.280 --> 00:04:06.500 +perhaps people aren't always clear on this or + +00:04:06.500 --> 00:04:08.660 +that aspect. So maybe this will be + +00:04:08.960 --> 00:04:12.260 +enlightening. I will also try to present some + +00:04:12.260 --> 00:04:17.860 +kind of vision for what Emacs could be with + +00:04:18.060 --> 00:04:21.680 +your help. Emacs is already very good, + +00:04:21.820 --> 00:04:26.880 +as we all know, but we could be even better. + +00:04:27.040 --> 00:04:29.940 +That's the reality of any type of software + +00:04:30.060 --> 00:04:35.100 +development. So the overall idea of this talk + +00:04:35.220 --> 00:04:38.380 +is to tell you, if you're an Emacs list + +00:04:38.380 --> 00:04:40.460 +package developer today, + +00:04:40.760 --> 00:04:44.200 +why you should become an Emacs core + +00:04:44.440 --> 00:04:47.300 +developer, and the sort of steps that you + +00:04:47.300 --> 00:04:49.340 +might want to take to do that, + +00:04:49.340 --> 00:04:52.100 +or how you can help Emacs core development. + +00:04:52.120 --> 00:04:54.320 +Even if you're just a user and you found a + +00:04:54.320 --> 00:04:57.340 +bug, report it. Perhaps you have a feature + +00:04:57.340 --> 00:04:58.820 +request that you'd like to discuss. + +00:04:58.820 --> 00:05:02.680 +I think we need more interaction in general + +00:05:02.900 --> 00:05:04.900 +between Emacs core developers, + +00:05:05.080 --> 00:05:06.440 +typically on emacsdevil.gnu.org, + +00:05:08.440 --> 00:05:12.420 +the mailing list that we use to coordinate + +00:05:12.840 --> 00:05:14.880 +our development efforts, + +00:05:15.860 --> 00:05:19.520 +between Emacs devil package developers and + +00:05:19.520 --> 00:05:22.460 +users, Because there is so much great stuff + +00:05:22.500 --> 00:05:24.740 +really going on in the community. + +00:05:25.520 --> 00:05:28.620 +But I think sometimes the step to core + +00:05:28.740 --> 00:05:32.500 +development seems big and perhaps even a + +00:05:32.500 --> 00:05:35.440 +little bit scary. So I'm hoping to be able to + +00:05:35.440 --> 00:05:38.720 +help bridge that gap, even if just a little + +00:05:38.720 --> 00:05:43.000 +bit. We need more people contributing to + +00:05:43.000 --> 00:05:46.740 +Emacs itself. And also a small disclaimer + +00:05:46.840 --> 00:05:49.920 +here, in this talk I will only be able to + +00:05:49.920 --> 00:05:53.700 +speak for myself, not for GNU or the Emacs + +00:05:53.760 --> 00:05:56.100 +project, even if it's like a little bit more + +00:05:56.500 --> 00:05:58.780 +official, but I will also try to give the + +00:05:58.780 --> 00:06:01.720 +view of the project where it makes sense to + +00:06:01.720 --> 00:06:04.200 +do so. Keep in mind, I'm only 1 of the + +00:06:04.200 --> 00:06:06.820 +maintainers, the co-maintainer together with + +00:06:06.820 --> 00:06:09.820 +Eli, and I can't just make decisions + +00:06:09.880 --> 00:06:11.400 +arbitrarily. In a sense, + +00:06:11.680 --> 00:06:14.180 +I'm as a co-maintainer and trusted as a + +00:06:14.180 --> 00:06:15.420 +steward and trusted by, + +00:06:15.420 --> 00:06:16.680 +of course, the GNU project, + +00:06:16.680 --> 00:06:22.000 +but also by the community That we really + +00:06:22.580 --> 00:06:24.180 +can't just take decisions, + +00:06:24.440 --> 00:06:27.380 +I think, arbitrarily. Even if it sometimes + +00:06:27.380 --> 00:06:30.560 +perhaps may seem so, or it may feel that way, + +00:06:31.100 --> 00:06:35.080 +we really have to realize that we can't just + +00:06:35.080 --> 00:06:39.200 +push too much of just a personal agenda to + +00:06:39.200 --> 00:06:41.520 +the extent that it doesn't line up with what + +00:06:41.520 --> 00:06:45.260 +is best for eMacs going forward, + +00:06:47.500 --> 00:06:50.320 +and the more overall picture of that. + +00:06:50.320 --> 00:06:52.640 +So there are limitations that come with the + +00:06:52.640 --> 00:06:59.940 +job, if you like. So 1 question I often, + +00:07:00.040 --> 00:07:02.280 +I actually got this week when I started a new + +00:07:02.280 --> 00:07:04.500 +assignment at work, and I got the question + +00:07:06.280 --> 00:07:08.720 +when I said I'm involved in Emacs + +00:07:08.720 --> 00:07:10.400 +development. And then someone asked, + +00:07:10.400 --> 00:07:12.480 +oh, is Emacs still developed? + +00:07:12.720 --> 00:07:16.400 +Isn't it done almost? And I answered to that, + +00:07:16.400 --> 00:07:17.880 +yes, we are still around. + +00:07:17.880 --> 00:07:21.940 +We're going on 40 years now as a software + +00:07:21.940 --> 00:07:25.940 +project. Not many projects actually can claim + +00:07:26.120 --> 00:07:29.020 +that type of longevity. + +00:07:29.540 --> 00:07:33.900 +But Emacs is among those few that can. + +00:07:33.900 --> 00:07:36.340 +And of course, we have had some very exciting + +00:07:36.340 --> 00:07:38.000 +developments in recent versions. + +00:07:38.000 --> 00:07:41.600 +I think John just gave you an update on that. + +00:07:41.980 --> 00:07:46.160 +But we had just some highlights out of many + +00:07:46.160 --> 00:07:47.940 +highlights that you could give, + +00:07:48.580 --> 00:07:50.920 +really, we got the TreeSetter support in + +00:07:50.920 --> 00:07:54.320 +Emacs 29 that we now need to sort of extend + +00:07:54.320 --> 00:07:56.340 +and develop. We have merged EGLOT, + +00:07:56.380 --> 00:07:59.440 +so we have LSP support out of the box, + +00:07:59.440 --> 00:08:00.980 +I think is a huge improvement. + +00:08:01.400 --> 00:08:02.960 +Native compilation, of course, + +00:08:02.960 --> 00:08:06.520 +a big feature. I mean, + +00:08:06.580 --> 00:08:08.900 +that was Andrea's job, + +00:08:08.900 --> 00:08:11.260 +really, for performance. + +00:08:11.460 --> 00:08:14.020 +And it turns out that in many types of + +00:08:14.020 --> 00:08:15.720 +workloads and the types of stuff that people + +00:08:15.720 --> 00:08:17.580 +are doing, it often matters. + +00:08:18.080 --> 00:08:21.180 +And we're hoping to make that the default, + +00:08:21.480 --> 00:08:24.960 +perhaps already in Emacs 30. + +00:08:24.960 --> 00:08:26.840 +So there are things that are happening that + +00:08:26.840 --> 00:08:31.680 +fundamentally make Emacs better at a very + +00:08:32.200 --> 00:08:37.360 +core level. So, of course, + +00:08:37.360 --> 00:08:41.679 +why wouldn't you want to be involved in such + +00:08:41.679 --> 00:08:43.440 +an exciting and, I think, + +00:08:43.440 --> 00:08:51.240 +dynamic project? How is Emacs developed? + +00:08:51.660 --> 00:08:53.000 +Well, this is, I think, + +00:08:53.000 --> 00:08:54.180 +perhaps to some people, + +00:08:54.200 --> 00:08:56.300 +a little bit more of a threshold, + +00:08:56.520 --> 00:08:59.100 +if you like, because I think all of us know + +00:08:59.100 --> 00:09:02.640 +really that there is exciting and cool stuff + +00:09:02.980 --> 00:09:06.560 +that is going on in Emacs and has been going + +00:09:06.560 --> 00:09:08.260 +on over the last couple of years and we'll + +00:09:08.260 --> 00:09:10.040 +see even more of that, + +00:09:10.040 --> 00:09:11.180 +I think, going forward. + +00:09:12.600 --> 00:09:16.580 +1 thing is that communication still takes + +00:09:16.580 --> 00:09:20.340 +place over a mailing list in 2023. + +00:09:21.240 --> 00:09:23.800 +So we have emacsdevil at gnu.org, + +00:09:24.440 --> 00:09:26.140 +and that's where we develop Emacs. + +00:09:26.680 --> 00:09:30.140 +We use, we send patches back and forth, + +00:09:30.140 --> 00:09:31.360 +we comment on patches. + +00:09:32.700 --> 00:09:36.420 +And actually this workflow is very good, + +00:09:36.700 --> 00:09:39.580 +if you're used to it. Because guess what? + +00:09:39.580 --> 00:09:42.200 +As Emacs users, we like doing everything we + +00:09:42.200 --> 00:09:45.220 +can in Emacs, especially the core tasks that + +00:09:45.220 --> 00:09:49.980 +we're doing, such as developing Emacs itself. + +00:09:50.140 --> 00:09:52.860 +Of course, you want to do that fully within + +00:09:52.960 --> 00:09:55.440 +Emacs. So we hack Emacs Lisp in Emacs, + +00:09:55.440 --> 00:09:58.840 +we hack C in Emacs, we respond to emails also + +00:10:00.240 --> 00:10:02.700 +from Emacs, respond to bug reports, + +00:10:02.700 --> 00:10:05.040 +manage bug reports. We do all that stuff + +00:10:05.460 --> 00:10:07.840 +very, very smoothly. And it doesn't really + +00:10:07.840 --> 00:10:10.540 +matter in a sense, what is the medium? + +00:10:10.560 --> 00:10:12.080 +It happens to be email. + +00:10:12.180 --> 00:10:14.160 +Technically it could be anything, + +00:10:14.440 --> 00:10:16.720 +but email really has that type of staying + +00:10:16.720 --> 00:10:19.640 +power where we've been able to use it for a + +00:10:19.640 --> 00:10:21.260 +long time. And this is how, + +00:10:22.360 --> 00:10:24.000 +and we're still able to use it. + +00:10:24.000 --> 00:10:25.800 +And this is how free software was always + +00:10:25.800 --> 00:10:26.640 +developed in the past. + +00:10:26.640 --> 00:10:28.380 +Only in the last, let's say 10, + +00:10:28.380 --> 00:10:32.440 +15 years, We've had more development taking + +00:10:32.440 --> 00:10:35.560 +place perhaps on forges like GitHub, + +00:10:35.580 --> 00:10:39.160 +GitLab, whatever. But we are 1 of the + +00:10:39.160 --> 00:10:40.680 +holdouts. I mean, there are others, + +00:10:40.680 --> 00:10:42.560 +of course, like the Linux kernel has mailing + +00:10:42.560 --> 00:10:44.340 +lists. They're not trying to do that scale + +00:10:44.340 --> 00:10:47.580 +development on GitHub. + +00:10:49.280 --> 00:10:51.360 +And this is not just because we're Luddites + +00:10:51.760 --> 00:10:53.560 +that refuse to change. + +00:10:53.560 --> 00:10:55.380 +We just have to do it in the old way, + +00:10:55.380 --> 00:10:57.120 +because it is the old way, + +00:10:57.120 --> 00:10:58.680 +and that's the way it should be. + +00:10:58.780 --> 00:11:00.420 +No, it's actually because we, + +00:11:01.220 --> 00:11:03.460 +as core developers, the core development team + +00:11:03.460 --> 00:11:05.460 +and the people already involved and doing + +00:11:05.460 --> 00:11:08.560 +tremendous, I mean large amounts of work in + +00:11:08.560 --> 00:11:12.480 +Emacs has very efficient workflows built up + +00:11:12.720 --> 00:11:15.620 +based on this. So of course, + +00:11:15.620 --> 00:11:17.780 +I mean moving to something else is something + +00:11:18.320 --> 00:11:20.180 +that we might like to do, + +00:11:20.580 --> 00:11:24.400 +but we're not yet clear on how to do it + +00:11:24.400 --> 00:11:26.100 +exactly and what to move to. + +00:11:26.320 --> 00:11:28.380 +So these are the types of discussions that + +00:11:28.380 --> 00:11:30.280 +we're looking at. Can we still support a + +00:11:30.280 --> 00:11:34.040 +mailing, an email type workflow while moving + +00:11:34.040 --> 00:11:36.100 +to something else? That would be 1 of the big + +00:11:36.100 --> 00:11:38.400 +ones. I think another thing that trips people + +00:11:38.400 --> 00:11:40.840 +up is that we used a bug tracker that, + +00:11:40.840 --> 00:11:42.620 +I mean, maybe some people, + +00:11:42.620 --> 00:11:45.560 +I've heard people say it's archaic. + +00:11:47.020 --> 00:11:49.900 +It's called Debugs. I think maybe Debugs gets + +00:11:49.900 --> 00:11:52.000 +a bit of a bad rap. I think that bugs is a + +00:11:52.000 --> 00:11:53.100 +good piece of software. + +00:11:53.520 --> 00:11:55.160 +It wasn't developed in 2023. + +00:11:55.580 --> 00:11:57.540 +I mean, that's much as clear. + +00:11:57.660 --> 00:11:58.880 +It's a little bit older, + +00:11:59.060 --> 00:12:01.320 +but it really is a workhorse of the Debian + +00:12:01.320 --> 00:12:03.820 +project, which is obviously a project that's + +00:12:03.960 --> 00:12:09.400 +developed in a very different way than Emacs + +00:12:09.400 --> 00:12:11.880 +is. It's on a completely different scale, + +00:12:11.880 --> 00:12:12.840 +of course, much bigger, + +00:12:12.840 --> 00:12:14.980 +many more developers, and so on. + +00:12:15.040 --> 00:12:17.800 +But I think the developers did a good job for + +00:12:17.800 --> 00:12:20.240 +the time. But it might be showing its age, + +00:12:20.920 --> 00:12:23.160 +perhaps, in places. Perhaps, + +00:12:23.440 --> 00:12:25.120 +again, it's the email workflow. + +00:12:25.260 --> 00:12:27.720 +And people see that as a little bit of a + +00:12:27.720 --> 00:12:30.180 +threshold. It seems alien. + +00:12:30.180 --> 00:12:31.300 +It's a little bit strange, + +00:12:32.220 --> 00:12:34.980 +the types of workflows that you have there. + +00:12:35.220 --> 00:12:38.860 +So we are seeing some limitations with that + +00:12:38.860 --> 00:12:40.940 +box. And again, how do you report bugs? + +00:12:41.020 --> 00:12:42.600 +Well, in a sense, it's easy. + +00:12:42.600 --> 00:12:46.660 +You send an email to bug-gnu-emacs at gnu.org + +00:12:47.620 --> 00:12:51.340 +and you copy in whatever you get from, + +00:12:51.340 --> 00:12:53.300 +you know, report the EMAX bug or if you have, + +00:12:53.300 --> 00:12:55.120 +you know, send mail set up locally, + +00:12:55.580 --> 00:12:58.700 +just hit control C, control C and it's sent + +00:12:58.700 --> 00:13:01.720 +to the bug tracker and that's fine. + +00:13:03.840 --> 00:13:08.680 +But also I have to mention that there is this + +00:13:08.680 --> 00:13:10.600 +very good package on GNU Elpas. + +00:13:10.600 --> 00:13:13.540 +If you're ever trying to read the Emacs bug + +00:13:13.540 --> 00:13:16.500 +tracker or following along in Emacs + +00:13:16.500 --> 00:13:19.000 +development, I really recommend install the + +00:13:19.000 --> 00:13:21.300 +package devbugs from GNU Elpa. + +00:13:22.120 --> 00:13:24.140 +It's so good. And again, + +00:13:24.140 --> 00:13:26.580 +it's built on GNU, it's all integrated in + +00:13:26.580 --> 00:13:30.040 +Emacs, it's so much better than using the web + +00:13:30.660 --> 00:13:33.220 +and so on. And if you really want to get into + +00:13:33.220 --> 00:13:38.040 +it, you can download the bug tracker archives + +00:13:38.140 --> 00:13:39.500 +and the mailing list archives, + +00:13:39.720 --> 00:13:41.260 +and you can put them locally, + +00:13:41.260 --> 00:13:42.380 +you can have them searchable, + +00:13:42.740 --> 00:13:44.440 +and you can have whatever experience you + +00:13:44.440 --> 00:13:47.340 +like. So, I mean, it's really a flexible + +00:13:48.240 --> 00:13:51.240 +workflow, but it's a bit strange, + +00:13:51.260 --> 00:13:52.620 +perhaps, to some people. + +00:13:53.460 --> 00:13:58.120 +So we also think supporting only this + +00:13:58.120 --> 00:14:00.140 +workflow might be a little bit too limiting. + +00:14:00.660 --> 00:14:04.200 +So we do want to move over to something like + +00:14:04.440 --> 00:14:06.760 +GitLab, perhaps Sourcehat or something + +00:14:06.760 --> 00:14:10.460 +similar. We've had a couple of discussions + +00:14:10.760 --> 00:14:14.000 +about that over the last couple of years. + +00:14:14.480 --> 00:14:15.820 +I think even before that, + +00:14:15.820 --> 00:14:18.940 +but that's how far back I've been involved, + +00:14:18.940 --> 00:14:21.800 +and definitely it's come up occasionally. + +00:14:23.100 --> 00:14:27.900 +I think we are less far away than perhaps + +00:14:27.940 --> 00:14:30.560 +ever is how I would express that, + +00:14:30.720 --> 00:14:36.680 +and in the sense that the remaining blockers + +00:14:36.960 --> 00:14:38.640 +for just making the shift, + +00:14:38.640 --> 00:14:40.200 +let's say, are I think, + +00:14:40.200 --> 00:14:42.120 +I mean, first of all, we're talking about + +00:14:42.120 --> 00:14:44.020 +limitations, perhaps in the software, + +00:14:44.020 --> 00:14:46.420 +they're well defined, and they're not as + +00:14:46.420 --> 00:14:49.060 +amountable. I don't think they have to be in + +00:14:49.060 --> 00:14:50.840 +any case. We should be able to make some + +00:14:50.840 --> 00:14:54.660 +progress. The main thing that we're lacking + +00:14:54.720 --> 00:14:58.480 +now is not more discussion or more people + +00:15:00.800 --> 00:15:03.120 +prodding us to just please switch over. + +00:15:03.120 --> 00:15:04.580 +No, we're looking for volunteers. + +00:15:05.980 --> 00:15:08.380 +If you think that you, + +00:15:08.400 --> 00:15:10.960 +you know, have what it takes to sort of come + +00:15:10.960 --> 00:15:14.060 +in and help us do something like that and + +00:15:14.060 --> 00:15:15.040 +work together with us, + +00:15:15.040 --> 00:15:16.840 +you know, to see what can be done, + +00:15:16.840 --> 00:15:20.200 +perhaps some, a few things would need to be + +00:15:20.200 --> 00:15:23.220 +changed in GitLab. I don't think anything + +00:15:23.220 --> 00:15:26.120 +huge, but maybe there are some patches to be + +00:15:26.120 --> 00:15:27.880 +written and sent upstream, + +00:15:27.980 --> 00:15:30.280 +or maybe we need to do some local hacks or + +00:15:30.280 --> 00:15:33.140 +whatever. If you wanna do that, + +00:15:33.140 --> 00:15:34.860 +please contact us, emacsdevil. + +00:15:35.460 --> 00:15:38.940 +We'll be very happy to talk to you. + +00:15:38.940 --> 00:15:40.460 +And then we can start making progress. + +00:15:40.520 --> 00:15:42.740 +So I'm really hoping that that sound like + +00:15:42.740 --> 00:15:46.620 +will come into place. But we need to, + +00:15:46.780 --> 00:15:52.340 +if we do switch over, we need to preserve the + +00:15:52.340 --> 00:15:54.820 +good parts of our email-based workflows. + +00:15:54.820 --> 00:15:57.140 +So there are requirements there so that we + +00:15:57.140 --> 00:16:00.180 +can continue to do our job as maintainers, + +00:16:01.720 --> 00:16:04.900 +if you like. Another thing is that we've + +00:16:04.900 --> 00:16:08.340 +sometimes seen that there's a bit of a + +00:16:08.340 --> 00:16:11.380 +different culture perhaps on mailing lists + +00:16:11.380 --> 00:16:15.060 +and on Emacs devil than what many people are + +00:16:15.060 --> 00:16:17.580 +used to, especially like you've used perhaps, + +00:16:17.800 --> 00:16:20.540 +many people might be in university and + +00:16:20.540 --> 00:16:23.500 +they've started using Emacs, + +00:16:23.720 --> 00:16:25.820 +maybe got into a little bit of package + +00:16:25.840 --> 00:16:29.060 +development and starting to get the ropes of + +00:16:29.060 --> 00:16:32.540 +that and are very used to working on places + +00:16:32.560 --> 00:16:35.460 +like GitLab or something like that, + +00:16:35.460 --> 00:16:38.000 +then the type of culture and way of + +00:16:38.000 --> 00:16:42.040 +communicating that we use in Emacs might be a + +00:16:42.040 --> 00:16:44.440 +little bit different. And of course, + +00:16:44.540 --> 00:16:47.360 +it's different in the sense that mailing + +00:16:47.380 --> 00:16:49.900 +lists have always, I mean, + +00:16:49.900 --> 00:16:51.060 +let's say hacker culture, + +00:16:51.060 --> 00:16:52.120 +whatever you want to call it, + +00:16:52.120 --> 00:16:54.400 +have always communicated in a particular way + +00:16:54.720 --> 00:16:58.340 +using mailing lists. So it's like succinct to + +00:16:58.340 --> 00:17:00.320 +the point, perhaps I'm skipping a few + +00:17:00.320 --> 00:17:03.340 +pleasantries. And the idea is that you should + +00:17:03.340 --> 00:17:08.000 +just use it in as effective way as possible, + +00:17:08.359 --> 00:17:11.099 +so that also the archives are usable. + +00:17:11.319 --> 00:17:13.660 +And the other thing is that generally people + +00:17:13.660 --> 00:17:16.500 +involved in developing free software has to + +00:17:16.500 --> 00:17:19.660 +deal with a lot of incoming traffic, + +00:17:19.780 --> 00:17:25.900 +emails. They don't have the bandwidth if it's + +00:17:25.900 --> 00:17:28.220 +too much noise. You really need to be strict + +00:17:28.220 --> 00:17:31.840 +to keep the signal to noise ratio high. + +00:17:31.840 --> 00:17:35.280 +We have some weird terminology on the Emacs + +00:17:35.280 --> 00:17:38.040 +devil. People tell us, + +00:17:38.200 --> 00:17:40.680 +we say sometimes install patches which + +00:17:40.680 --> 00:17:44.180 +basically means push to master or merge pull + +00:17:44.180 --> 00:17:46.720 +requests because we've used other version + +00:17:46.720 --> 00:17:48.600 +control systems in the past where it might + +00:17:48.600 --> 00:17:50.700 +have made more sense to say install patches. + +00:17:51.000 --> 00:17:52.540 +And then you sort of, I don't know, + +00:17:52.540 --> 00:17:54.380 +I say it. Don't ask me why. + +00:17:54.380 --> 00:17:56.040 +But it feels natural after a while. + +00:17:56.040 --> 00:17:57.720 +You install a patch. It's clear what you + +00:17:57.720 --> 00:18:02.280 +mean. You don't have to worry about which + +00:18:02.280 --> 00:18:05.940 +branch it's on. So it's a little bit + +00:18:06.600 --> 00:18:10.120 +historical there. So there is some of that + +00:18:10.120 --> 00:18:11.960 +culture going on. It might be different. + +00:18:11.960 --> 00:18:14.200 +We don't use emojis that much. + +00:18:14.220 --> 00:18:16.680 +That's another thing. There is no like, + +00:18:16.840 --> 00:18:20.900 +you can click the little like button at the + +00:18:20.900 --> 00:18:25.080 +bottom of a comment or an email as you could + +00:18:25.080 --> 00:18:27.740 +on GitHub. But there are exceptions and it's + +00:18:27.740 --> 00:18:29.600 +not like someone will send you angry emails + +00:18:29.600 --> 00:18:31.480 +if you use an emoji or something like that. + +00:18:31.480 --> 00:18:34.200 +But it can come off as perhaps Because people + +00:18:34.200 --> 00:18:37.180 +are pressed for time also when replying to + +00:18:37.260 --> 00:18:39.400 +all these emails. So it might come off as a + +00:18:39.400 --> 00:18:42.880 +little bit short, but that's just how it is. + +00:18:43.440 --> 00:18:46.880 +And I think We have heard this comment before + +00:18:46.880 --> 00:18:50.680 +that mailing lists are scary or Emacs devil + +00:18:50.720 --> 00:18:54.380 +is scary or core development is scary. + +00:18:54.780 --> 00:18:58.180 +And I've touched a few of these points a + +00:18:58.180 --> 00:18:59.620 +little bit already. I think, + +00:18:59.620 --> 00:19:01.500 +yeah, maybe a little bit. + +00:19:02.320 --> 00:19:05.740 +For example, we don't use emojis very short + +00:19:06.820 --> 00:19:10.940 +in the communication. And we always use + +00:19:10.940 --> 00:19:13.240 +correct grammar and spelling. + +00:19:13.380 --> 00:19:15.920 +We take that seriously because it's important + +00:19:15.920 --> 00:19:19.060 +for being clear in your written communication + +00:19:19.200 --> 00:19:21.540 +when all you have is written communication. + +00:19:22.680 --> 00:19:23.740 +It's really important. + +00:19:26.760 --> 00:19:31.400 +But it's not like If you come in there and + +00:19:31.400 --> 00:19:33.580 +you don't know all these cultural rules and + +00:19:33.580 --> 00:19:36.380 +all these patterns, then you know you will We + +00:19:36.380 --> 00:19:37.900 +won't talk to you No Actually, + +00:19:37.900 --> 00:19:41.100 +we try to be as welcoming as we can and and + +00:19:41.100 --> 00:19:44.600 +be mindful and you know people not Everyone + +00:19:44.600 --> 00:19:46.700 +has English as their native language, + +00:19:47.080 --> 00:19:49.200 +for example. So perhaps someone says + +00:19:49.200 --> 00:19:51.360 +something, and it might come off as rude, + +00:19:51.360 --> 00:19:53.200 +but maybe it's just a direct translation. + +00:19:53.200 --> 00:19:56.520 +So we're trying to give a lot of whatever the + +00:19:56.520 --> 00:19:59.760 +native language is. So we try to give a lot + +00:19:59.760 --> 00:20:01.780 +of leeway and just be a little bit, + +00:20:01.780 --> 00:20:03.580 +you know, flexible and focus on, + +00:20:03.580 --> 00:20:04.920 +you know, the key, key points, + +00:20:04.920 --> 00:20:06.580 +which are the technical things, + +00:20:06.580 --> 00:20:07.760 +the technical decisions, + +00:20:07.840 --> 00:20:09.280 +technical arguments, rather than, + +00:20:09.280 --> 00:20:11.920 +you know, getting bogged down in a lot of, + +00:20:11.920 --> 00:20:15.360 +you know, personal, you know, + +00:20:15.360 --> 00:20:19.220 +discussions and flame wars. + +00:20:19.300 --> 00:20:21.260 +So, I mean, there are these things to be + +00:20:21.260 --> 00:20:23.160 +aware of, you know, it's just a little bit + +00:20:23.160 --> 00:20:24.980 +different. I don't think it's anything huge. + +00:20:25.080 --> 00:20:26.620 +And I wouldn't be, you know, + +00:20:28.440 --> 00:20:30.480 +I think it would be sad if people felt too + +00:20:30.480 --> 00:20:32.320 +intimidated by that. It just is what it is. + +00:20:32.320 --> 00:20:33.540 +And if you spend some time there, + +00:20:33.540 --> 00:20:35.960 +you'll see how people generally communicate. + +00:20:38.400 --> 00:20:41.260 +Sometimes, there are a lot of people on + +00:20:41.260 --> 00:20:43.600 +EmacsDevil. It's a public mailing list. + +00:20:43.660 --> 00:20:46.240 +A lot of people just sign up to follow Emacs + +00:20:46.240 --> 00:20:48.860 +development. Sometimes they chime in. + +00:20:48.940 --> 00:20:50.820 +And I think this is in general a good thing. + +00:20:50.820 --> 00:20:53.300 +I think it should be a public mailing list. + +00:20:53.680 --> 00:21:00.220 +Sometimes this leads to weird situations from + +00:21:00.480 --> 00:21:03.400 +just a point of view as an Emacs maintainer, + +00:21:03.480 --> 00:21:07.080 +right? I mean, I try to say something and it + +00:21:07.080 --> 00:21:08.240 +doesn't always say, oh, + +00:21:08.240 --> 00:21:10.020 +he's the maintainer or whatever. + +00:21:10.080 --> 00:21:11.200 +So when I say something, + +00:21:11.200 --> 00:21:13.380 +it should carry a little bit more weight than + +00:21:13.380 --> 00:21:16.160 +some unknown person from the internet who has + +00:21:16.160 --> 00:21:18.300 +an opinion and decided to send it to + +00:21:18.740 --> 00:21:21.020 +EmacsDevil. So it's good to be a little bit + +00:21:21.020 --> 00:21:23.160 +aware of who is a little bit more involved + +00:21:23.160 --> 00:21:25.280 +with the project. I would check out the + +00:21:25.280 --> 00:21:27.100 +maintainers file. I would check, + +00:21:27.380 --> 00:21:31.000 +see in the Git log, do these people actually + +00:21:31.000 --> 00:21:33.300 +have any anything in core? + +00:21:33.580 --> 00:21:35.260 +And if not, maybe, you know, + +00:21:35.860 --> 00:21:38.660 +there, we won't really, + +00:21:39.100 --> 00:21:41.000 +even if they express an opinion very + +00:21:41.000 --> 00:21:42.720 +strongly, even if they're a little bit rude, + +00:21:42.720 --> 00:21:44.700 +maybe they're not even involved in Emacs + +00:21:44.760 --> 00:21:46.340 +development. I mean, often, + +00:21:46.680 --> 00:21:48.460 +that's the case we have some people, + +00:21:48.460 --> 00:21:49.900 +unfortunately, at times, + +00:21:50.340 --> 00:21:52.720 +we have random people from the internet come + +00:21:52.720 --> 00:21:54.720 +in on the mailing list and they're just a + +00:21:54.720 --> 00:21:56.780 +little bit rude, or they say an opinion + +00:21:57.740 --> 00:21:59.620 +that's not exactly helpful. + +00:22:00.060 --> 00:22:02.320 +And I think you need to be aware. + +00:22:02.320 --> 00:22:04.340 +I mean, these things happen in any forum, + +00:22:04.340 --> 00:22:07.740 +but it happens on EmacsDevO as well. + +00:22:07.800 --> 00:22:10.680 +So just be a little bit aware of who you're + +00:22:10.680 --> 00:22:13.540 +talking to, what people are doing. + +00:22:13.700 --> 00:22:15.880 +It can help to Check the archives, + +00:22:16.240 --> 00:22:18.460 +see who writes what, and so on. + +00:22:20.320 --> 00:22:23.080 +But it's not something that I think is a huge + +00:22:23.080 --> 00:22:24.220 +problem. It is just, again, + +00:22:24.220 --> 00:22:25.780 +something to be aware of. + +00:22:25.900 --> 00:22:28.040 +We have the new kind of communication + +00:22:28.180 --> 00:22:30.820 +guidelines in place, which basically says + +00:22:30.820 --> 00:22:33.740 +that you should be nice to people and stay + +00:22:33.740 --> 00:22:36.060 +focused on the technical problem, + +00:22:36.060 --> 00:22:38.300 +try to see things from another person's point + +00:22:38.300 --> 00:22:39.360 +of view, this kind of stuff. + +00:22:39.360 --> 00:22:42.140 +So we're really trying to be as inclusive as + +00:22:42.140 --> 00:22:46.820 +possible and just stay correct in general. + +00:22:46.820 --> 00:22:48.380 +And sometimes, I mean, + +00:22:48.380 --> 00:22:50.060 +not everyone, it's a public list. + +00:22:50.060 --> 00:22:52.440 +We moderate it, but not to a huge extent, + +00:22:52.440 --> 00:22:57.840 +right? So sometimes people get away with a + +00:22:57.840 --> 00:23:02.260 +little bit of perhaps stretching the + +00:23:02.260 --> 00:23:04.700 +boundaries of what might be included in the + +00:23:04.700 --> 00:23:06.500 +kind communication guidelines, + +00:23:08.040 --> 00:23:10.940 +sort of the fences and limitations of that. + +00:23:11.460 --> 00:23:13.940 +But I would just ignore that. + +00:23:13.940 --> 00:23:15.700 +Sometimes it happens that we, + +00:23:15.860 --> 00:23:17.160 +as happens in any forum, + +00:23:17.160 --> 00:23:19.440 +by the way, you just, we have these very big + +00:23:19.440 --> 00:23:21.760 +threads. We start discussing something else. + +00:23:21.760 --> 00:23:24.300 +Perhaps you send us a patch and it just + +00:23:24.320 --> 00:23:26.360 +devolves into us discussing something + +00:23:26.360 --> 00:23:28.680 +completely different. And of course I partake + +00:23:28.680 --> 00:23:30.440 +in that, not better than anyone else, + +00:23:30.440 --> 00:23:32.940 +but it just happens. I mean, + +00:23:32.960 --> 00:23:34.800 +it's not your fault. It's just what happens + +00:23:34.800 --> 00:23:37.200 +sometimes in forums, and don't mind that. + +00:23:37.200 --> 00:23:39.120 +And it's a little bit easier to do that in + +00:23:39.120 --> 00:23:41.680 +emails, because you just change the subject, + +00:23:41.680 --> 00:23:43.580 +and now it's supposed to be a different + +00:23:43.580 --> 00:23:45.780 +thread, but it comes as replies usually to + +00:23:45.780 --> 00:23:48.480 +you, which wouldn't happen perhaps in a + +00:23:48.480 --> 00:23:49.960 +different workflow. So it's something to be + +00:23:49.960 --> 00:23:53.300 +aware of as well. Another thing is that, + +00:23:53.300 --> 00:23:54.680 +of course, in written communication, + +00:23:55.080 --> 00:23:56.620 +tone doesn't always come across. + +00:23:57.980 --> 00:23:59.240 +If someone sounds negative, + +00:23:59.240 --> 00:24:01.280 +sometimes it's just them being neutral. + +00:24:01.460 --> 00:24:05.400 +Sometimes you get no replies. + +00:24:05.500 --> 00:24:07.120 +You send something, you get no replies. + +00:24:07.120 --> 00:24:09.220 +And this could mean, actually it could mean, + +00:24:09.880 --> 00:24:11.500 +yeah, what you said was uncontroversial. + +00:24:11.720 --> 00:24:12.980 +We think it was a good idea. + +00:24:13.660 --> 00:24:16.360 +No 1 replied to it because either someone + +00:24:16.360 --> 00:24:18.960 +else would reply or just there was no need to + +00:24:18.960 --> 00:24:20.640 +reply because, yeah, why not? + +00:24:21.580 --> 00:24:24.060 +So but if you do send a patch and you don't + +00:24:24.060 --> 00:24:26.280 +get an answer, wait. I mean, + +00:24:26.280 --> 00:24:29.380 +don't wait 1, 2 days. Maybe we're busy or + +00:24:29.380 --> 00:24:30.520 +we're sick or whatever. + +00:24:30.840 --> 00:24:32.800 +Wait 2 weeks. It's fine to just send it + +00:24:32.800 --> 00:24:34.940 +again. If you send the patch to EmacsDevil, + +00:24:35.660 --> 00:24:37.040 +send it to the bug mailing list, + +00:24:37.040 --> 00:24:39.260 +because we lose track of stuff on EmacsDevil. + +00:24:39.800 --> 00:24:41.560 +That's just the reality of it. + +00:24:43.440 --> 00:24:46.080 +So if you propose making a change and no 1 + +00:24:46.080 --> 00:24:48.340 +commented, feel free to ask us again if a + +00:24:48.340 --> 00:24:51.080 +patch would be welcome and we will clarify. + +00:24:53.480 --> 00:24:54.720 +Bug reports, unfortunately, + +00:24:54.780 --> 00:24:56.280 +if you get no answer, I mean, + +00:24:56.280 --> 00:24:59.740 +we do have a limited amount of time to work + +00:24:59.860 --> 00:25:02.360 +on bugs. If you're looking to get started in + +00:25:02.360 --> 00:25:05.520 +Emacs development, this is an excellent way + +00:25:05.740 --> 00:25:07.320 +to start getting involved. + +00:25:07.480 --> 00:25:09.960 +What I'd recommend is start looking into + +00:25:09.960 --> 00:25:11.420 +bugs. I'd install that bug, + +00:25:11.420 --> 00:25:13.860 +I'd see about the mailing workflow and set + +00:25:13.860 --> 00:25:15.800 +that up a little bit, or not. + +00:25:16.160 --> 00:25:17.960 +It's up to you. You can reply to an email + +00:25:17.960 --> 00:25:20.160 +without setting any of that stuff up. + +00:25:20.600 --> 00:25:22.480 +But just help us try out your bugs, + +00:25:22.540 --> 00:25:24.720 +send patches, do that type of stuff. + +00:25:24.720 --> 00:25:26.280 +I mean, that's an excellent way, + +00:25:26.280 --> 00:25:27.740 +and extremely welcome. + +00:25:27.740 --> 00:25:30.360 +We're so happy to see when people pick up bug + +00:25:30.360 --> 00:25:32.500 +reports that have been left by the wayside + +00:25:32.640 --> 00:25:34.580 +and just fix them, send us a patch, + +00:25:36.040 --> 00:25:37.520 +and we can just apply it. + +00:25:37.920 --> 00:25:40.360 +So that's really your starting point if you + +00:25:40.360 --> 00:25:43.600 +want to get involved in Emacs core + +00:25:44.440 --> 00:25:50.580 +development. I also want to say that be aware + +00:25:50.580 --> 00:25:54.020 +that you know Emacs is the editor of the GNU + +00:25:54.280 --> 00:25:56.820 +operating system and this makes the project + +00:25:56.820 --> 00:25:58.700 +political a little bit whether you like it or + +00:25:58.700 --> 00:26:01.380 +not. Luckily the you know the politics are + +00:26:01.560 --> 00:26:03.400 +limited enough that we can find broad + +00:26:03.400 --> 00:26:05.520 +agreement on it. So we want to promote, + +00:26:05.780 --> 00:26:08.420 +we want to create free software. + +00:26:08.860 --> 00:26:10.960 +That's sort of it. That's it. + +00:26:11.400 --> 00:26:13.740 +And there shouldn't be too much more to it, + +00:26:13.740 --> 00:26:15.600 +right? We want to rid the world of + +00:26:15.600 --> 00:26:19.700 +proprietary software as an evil thing. + +00:26:19.700 --> 00:26:21.920 +Ideally, all software should be free. + +00:26:23.000 --> 00:26:25.160 +But these are just the goals of the free + +00:26:25.160 --> 00:26:27.440 +software movement. So we're very strict with + +00:26:27.440 --> 00:26:29.660 +some things. We don't recommend non-free + +00:26:30.060 --> 00:26:31.320 +proprietary software. Of course, + +00:26:31.320 --> 00:26:33.180 +we have no problem mentioning Microsoft + +00:26:33.260 --> 00:26:35.140 +Windows because everyone knows that there's + +00:26:35.140 --> 00:26:39.280 +this obscure operating system developed in + +00:26:39.280 --> 00:26:41.760 +California that some people insist on using. + +00:26:42.040 --> 00:26:45.000 +We use, many of us use GNU plus Linux. + +00:26:45.060 --> 00:26:47.380 +Actually, some core developers happen to use + +00:26:47.440 --> 00:26:50.820 +exactly, you know, not GNU plus Linux, + +00:26:50.820 --> 00:26:52.600 +but that's fine as well, + +00:26:52.600 --> 00:26:54.820 +right? We take a little bit of a pragmatic + +00:26:54.860 --> 00:26:56.840 +view, but we don't wanna do, + +00:26:56.840 --> 00:26:59.020 +what we don't wanna do is promote like this + +00:26:59.020 --> 00:27:04.780 +small, unknown piece of non-free software and + +00:27:04.780 --> 00:27:08.400 +sort of help the non-free software in that + +00:27:08.400 --> 00:27:11.620 +way. That's where we try to draw the line, + +00:27:12.440 --> 00:27:15.760 +you know, in just expressing just a few + +00:27:15.760 --> 00:27:18.060 +words. So that's 1 thing. + +00:27:18.200 --> 00:27:21.620 +We're, I think, very pragmatic on this point, + +00:27:21.620 --> 00:27:24.900 +but we do try to follow the principle. + +00:27:25.240 --> 00:27:27.180 +We also require copyright assignment. + +00:27:27.700 --> 00:27:30.040 +And I think in general, + +00:27:30.620 --> 00:27:34.740 +the argument is that we require a copyright + +00:27:34.780 --> 00:27:38.940 +assignment, because that makes it easier to + +00:27:39.280 --> 00:27:43.440 +defend the legal status of the GNU Emacs + +00:27:43.640 --> 00:27:45.920 +source code. So if there's ever a legal + +00:27:45.920 --> 00:27:48.280 +battle, the idea is that if it's only 1 + +00:27:48.280 --> 00:27:50.260 +copyright holder and you have a GPL + +00:27:50.320 --> 00:27:54.140 +violation, i.e. Someone might change Emacs + +00:27:54.140 --> 00:27:55.820 +and then distribute it as proprietary + +00:27:56.100 --> 00:27:58.040 +software or something nasty like that, + +00:27:58.040 --> 00:28:00.620 +then we have an easier way of defending it in + +00:28:00.620 --> 00:28:02.780 +court if there is only 1 copyright holder. + +00:28:02.780 --> 00:28:04.840 +So we assigned copyright to the Free Software + +00:28:04.840 --> 00:28:09.460 +Foundation. And I think there, + +00:28:09.720 --> 00:28:12.600 +I mean, sometimes people oppose this for + +00:28:12.600 --> 00:28:13.660 +various reasons, you know, + +00:28:13.660 --> 00:28:15.720 +people see it as, you know, + +00:28:15.720 --> 00:28:16.880 +maybe some people might say, + +00:28:16.880 --> 00:28:17.860 +you know, it's ideological, + +00:28:18.040 --> 00:28:19.340 +you know, who goes, you know, + +00:28:19.340 --> 00:28:21.360 +the FSF goes too far with this. + +00:28:21.700 --> 00:28:23.860 +And, and, I mean, that's fine. + +00:28:23.860 --> 00:28:25.580 +You that's, that's an opinion. + +00:28:25.640 --> 00:28:28.320 +And the there, then other people are more + +00:28:28.320 --> 00:28:30.040 +practical, you know, it's just, + +00:28:30.040 --> 00:28:31.360 +It's a hassle, basically, + +00:28:31.360 --> 00:28:33.220 +we don't want to sign these papers. + +00:28:33.640 --> 00:28:35.580 +And I'm not really here to tell anyone that + +00:28:35.580 --> 00:28:37.160 +they're wrong. I've expressed my views on + +00:28:37.160 --> 00:28:40.780 +this in the past. But just for now, + +00:28:40.960 --> 00:28:43.660 +I'm just very practical for the purposes of + +00:28:43.660 --> 00:28:46.500 +this talk. So I signed the papers. + +00:28:46.580 --> 00:28:49.280 +It's Maybe it didn't take me many minutes. + +00:28:49.280 --> 00:28:51.900 +And in most cases, it shouldn't really. + +00:28:52.580 --> 00:28:55.000 +And it's something that I found worth doing, + +00:28:55.000 --> 00:28:58.580 +because that way I could focus on continuing + +00:28:58.580 --> 00:29:01.360 +to improve Emacs instead of discussing the + +00:29:01.360 --> 00:29:03.220 +finer points of copyright law. + +00:29:03.480 --> 00:29:05.280 +You could write patches and stuff, + +00:29:05.280 --> 00:29:06.680 +that kind of thing. So, + +00:29:06.680 --> 00:29:08.480 +I mean, this is something that trips people + +00:29:08.480 --> 00:29:11.100 +up and, you know, it's fine that people have + +00:29:11.320 --> 00:29:14.200 +different opinions on it and so on, + +00:29:14.200 --> 00:29:19.280 +but I think for now that's just something to + +00:29:19.280 --> 00:29:23.000 +be aware of. So that's, + +00:29:23.000 --> 00:29:26.120 +I think, I mean, there's much more that could + +00:29:26.120 --> 00:29:27.880 +be said. Ideally, I would like to have a + +00:29:27.880 --> 00:29:31.060 +practical part to this talk as well. + +00:29:32.020 --> 00:29:34.440 +But I wanted to say something about the + +00:29:34.440 --> 00:29:37.159 +packages in Emacs. Because as we know, + +00:29:37.159 --> 00:29:40.440 +I mean, Emacs is the, I can't remember what + +00:29:40.440 --> 00:29:41.740 +it says, it's like a visual, + +00:29:42.260 --> 00:29:43.780 +there's in the manual it says, + +00:29:43.780 --> 00:29:45.900 +oh, Emacs is an advanced text editor. + +00:29:46.180 --> 00:29:47.980 +It's visual, which, I mean, + +00:29:47.980 --> 00:29:50.280 +it's not ed, the whole Unix ed, + +00:29:50.280 --> 00:29:52.700 +so that's cool. It's also customizable, + +00:29:53.300 --> 00:29:56.180 +right? So that's always been a thing. + +00:29:57.800 --> 00:29:59.980 +And what makes Emacs so amazing. + +00:30:00.040 --> 00:30:01.820 +And some people described it as, + +00:30:01.920 --> 00:30:03.880 +I can't remember who said that there has been + +00:30:03.880 --> 00:30:09.440 +a Cambrian explosion of packages in Emacs. + +00:30:09.440 --> 00:30:10.440 +And I think that's true. + +00:30:10.440 --> 00:30:12.400 +I mean, if you look at something like Melpa, + +00:30:12.400 --> 00:30:13.760 +I think they have over 5,000 + +00:30:13.940 --> 00:30:16.220 +packages now. It's like truly impressive, + +00:30:16.460 --> 00:30:18.760 +just an immense amount of work and immense + +00:30:18.760 --> 00:30:22.320 +amount of packages. And really, + +00:30:22.860 --> 00:30:24.340 +this shows the strength, + +00:30:24.340 --> 00:30:26.600 +I think, of the Emacs community, + +00:30:26.680 --> 00:30:28.780 +of Emacs itself as an idea. + +00:30:29.060 --> 00:30:31.240 +And I think it's also just tremendous work + +00:30:31.240 --> 00:30:33.580 +that's been done by the maintainers. + +00:30:33.960 --> 00:30:36.040 +And they do get a lot of recognition for + +00:30:36.040 --> 00:30:38.900 +that. And rightly so, in my opinion. + +00:30:39.620 --> 00:30:41.920 +It's done so much, I think, + +00:30:41.920 --> 00:30:44.260 +for our community. The other package archive + +00:30:44.260 --> 00:30:46.340 +that we have is GNU-ELPA. + +00:30:46.620 --> 00:30:49.640 +And that's been enabled since when packages + +00:30:49.640 --> 00:30:51.000 +first got introduced back in, + +00:30:51.000 --> 00:30:53.160 +I think, Emacs, was it 23? + +00:30:55.520 --> 00:30:59.200 +And probably, I mean, the main thing why a + +00:30:59.200 --> 00:31:01.860 +package goes onto GNU Elpa is, + +00:31:01.860 --> 00:31:04.040 +you know, it should be installable out of the + +00:31:04.040 --> 00:31:07.580 +box. So, I mean, that's a big benefit in a + +00:31:07.580 --> 00:31:10.960 +sense. It's also a requirement for GNU Alpa + +00:31:10.960 --> 00:31:12.240 +that the copyright, again, + +00:31:12.240 --> 00:31:14.540 +just as GNU Emacs, the copyright is assigned + +00:31:15.480 --> 00:31:17.020 +to the Free Software Foundation. + +00:31:17.080 --> 00:31:19.940 +And some very hugely popular packages, + +00:31:20.020 --> 00:31:21.420 +like YaSnippet, for example, + +00:31:21.420 --> 00:31:25.060 +is on GNU Alpa. And we were discussing this + +00:31:25.160 --> 00:31:30.040 +just 2 months back. And Joe Tavora, + +00:31:30.060 --> 00:31:31.780 +I can't say his name, G-O-A-O, + +00:31:33.280 --> 00:31:36.100 +Tavora. He made the point that he's never + +00:31:36.140 --> 00:31:40.280 +seen a problem in any of his packages with + +00:31:40.280 --> 00:31:42.100 +copyright assignment in particular. + +00:31:42.100 --> 00:31:44.540 +It's never been a problem to get people to be + +00:31:44.540 --> 00:31:46.560 +involved in the development of those packages + +00:31:46.560 --> 00:31:48.220 +just because of the copyright assignment + +00:31:49.160 --> 00:31:50.640 +requirements. So I mean, + +00:31:51.180 --> 00:31:53.840 +that's his perspective on that. + +00:31:54.320 --> 00:32:00.480 +And I think it was worth relating his + +00:32:00.480 --> 00:32:06.500 +experience here. So we also have this new + +00:32:06.500 --> 00:32:08.500 +package archive called non-GNU-alpha, + +00:32:08.920 --> 00:32:12.880 +which is now enabled by default as well. + +00:32:12.920 --> 00:32:14.440 +I think for practical purposes, + +00:32:14.540 --> 00:32:16.880 +you could get into it a little bit more, + +00:32:16.960 --> 00:32:18.840 +you know, why we created non-NUELPA, + +00:32:19.940 --> 00:32:22.320 +and perhaps that's something we can discuss + +00:32:23.360 --> 00:32:26.240 +in the Q&A section. For practical purposes, + +00:32:26.380 --> 00:32:28.280 +the main thing to be aware of is, + +00:32:28.280 --> 00:32:30.980 +yes, we don't promote non-free software on + +00:32:30.980 --> 00:32:36.780 +there, And we also don't have the copyright + +00:32:36.780 --> 00:32:39.060 +assignment requirement. + +00:32:41.400 --> 00:32:43.820 +I think this is probably for new packages. + +00:32:43.940 --> 00:32:48.180 +It's generally better if they go to GNU Elpa, + +00:32:48.180 --> 00:32:51.220 +if there is any type of idea or ambition + +00:32:51.280 --> 00:32:53.460 +that, you know, at some point it would be + +00:32:53.460 --> 00:32:56.740 +good or it might be good to eventually have + +00:32:56.740 --> 00:32:58.900 +some type of functionality like this shipped + +00:32:58.900 --> 00:33:01.200 +with Emacs itself. So I think this is + +00:33:01.200 --> 00:33:04.020 +something that perhaps package authors could + +00:33:04.020 --> 00:33:07.340 +also be aware of, that occasionally we do + +00:33:07.340 --> 00:33:09.780 +bring in functionality from GNU Elpa into + +00:33:09.780 --> 00:33:12.180 +core Emacs because we feel that it should be + +00:33:12.440 --> 00:33:15.560 +better integrated with Emacs itself. + +00:33:16.420 --> 00:33:18.480 +So if I could give any type of + +00:33:18.480 --> 00:33:19.400 +recommendation, of course, + +00:33:19.400 --> 00:33:22.120 +you do. These are your packages, + +00:33:22.120 --> 00:33:25.520 +right? In an ideal world, + +00:33:25.520 --> 00:33:28.680 +we would only use this for legacy packages + +00:33:28.680 --> 00:33:30.240 +where people contributed in the past, + +00:33:30.240 --> 00:33:32.120 +but you didn't worry about the copyright + +00:33:32.120 --> 00:33:34.200 +assignment. But where possible, + +00:33:34.200 --> 00:33:37.480 +I think there is benefit in putting it on GNU + +00:33:37.540 --> 00:33:42.900 +Elpa. And I wanted to end a little bit on a + +00:33:42.900 --> 00:33:45.140 +more, you know, the more opinionated perhaps + +00:33:45.380 --> 00:33:47.260 +part of my talk and not just talk about + +00:33:47.260 --> 00:33:49.160 +processes. I see that I'm running out of + +00:33:49.160 --> 00:33:51.700 +time. So I will say Emacs is hackable. + +00:33:51.760 --> 00:33:54.520 +And I think that's a blessing and a curse. + +00:33:54.520 --> 00:33:56.340 +And if you think about something like, + +00:33:59.060 --> 00:34:01.100 +the types of choices that you can make, + +00:34:01.100 --> 00:34:03.040 +perhaps when you implement something, + +00:34:03.160 --> 00:34:06.680 +There are choices, different choices between + +00:34:06.680 --> 00:34:07.740 +something like common list, + +00:34:07.740 --> 00:34:09.440 +which is like bigger, more batteries + +00:34:09.440 --> 00:34:11.320 +included, and something like scheme, + +00:34:11.320 --> 00:34:12.239 +which is more minimal. + +00:34:12.239 --> 00:34:13.679 +And I think we have some of those, + +00:34:13.679 --> 00:34:16.280 +you know, this kind of tension also in the + +00:34:16.280 --> 00:34:18.159 +Emacs itself. What should be in Emacs core? + +00:34:18.159 --> 00:34:19.699 +Should we have a lean Emacs core? + +00:34:19.699 --> 00:34:21.800 +Should we have more stuff in Emacs core? + +00:34:22.360 --> 00:34:26.320 +And I think these are good discussions to + +00:34:26.320 --> 00:34:29.380 +have. And there are various challenges that + +00:34:29.380 --> 00:34:31.940 +are associated with each of those choices. + +00:34:32.540 --> 00:34:35.320 +I think what will never change is that Emacs + +00:34:35.320 --> 00:34:37.280 +is hackable. Emacs is customizable. + +00:34:37.500 --> 00:34:38.800 +This is the key strength. + +00:34:38.860 --> 00:34:40.960 +This is why we love and use Emacs. + +00:34:40.960 --> 00:34:41.820 +I think fundamentally, + +00:34:42.380 --> 00:34:44.280 +whether you do it a lot or not, + +00:34:44.380 --> 00:34:47.260 +this is what at core is bringing you that + +00:34:47.320 --> 00:34:49.179 +amazing user experience. + +00:34:50.739 --> 00:34:53.199 +However, the flip side of that sometimes is + +00:34:53.199 --> 00:34:56.280 +that it's so easy to hack Emacs so that we + +00:34:56.280 --> 00:34:58.520 +hack around bugs instead of fixing them. + +00:34:58.520 --> 00:35:00.540 +We do some tweak and our customers say, + +00:35:00.540 --> 00:35:01.720 +okay, this is a little bit broken, + +00:35:01.720 --> 00:35:03.560 +Let me just fix it. I'll put an advice on + +00:35:03.560 --> 00:35:05.700 +this function. I'll do this customization. + +00:35:06.500 --> 00:35:09.040 +Or we accept limitations in Emacs core. + +00:35:09.340 --> 00:35:12.100 +And I think it's fine. + +00:35:12.380 --> 00:35:13.760 +I mean, this will never change. + +00:35:13.760 --> 00:35:16.560 +That will always be core to what Emacs is, + +00:35:16.560 --> 00:35:20.140 +right? However, I think that the flip side of + +00:35:20.140 --> 00:35:22.500 +that is that I think sometimes we could be + +00:35:22.500 --> 00:35:26.760 +better at just taking those few extra steps + +00:35:26.820 --> 00:35:29.260 +to also make Emacs better itself and solve + +00:35:29.260 --> 00:35:31.680 +this for all users. And I think if we can + +00:35:31.680 --> 00:35:33.680 +build a little bit more of a culture like + +00:35:33.680 --> 00:35:35.460 +that, I mean, we already have that culture to + +00:35:35.460 --> 00:35:37.200 +a large extent, don't get me wrong, + +00:35:37.200 --> 00:35:39.620 +we do, but if we can get a little bit more of + +00:35:39.620 --> 00:35:41.320 +that culture, let's get that into core, + +00:35:41.320 --> 00:35:43.760 +let's get that problem fixed, + +00:35:43.980 --> 00:35:46.140 +that frustration. I can tell you that, + +00:35:47.040 --> 00:35:48.940 +I just started a new assignment at work, + +00:35:48.940 --> 00:35:51.420 +I already told you, so I'm going to write a + +00:35:51.420 --> 00:35:54.140 +lot of Python, okay? So I need to keep track + +00:35:54.140 --> 00:35:55.740 +of something called virtual environments, + +00:35:56.040 --> 00:35:58.260 +and that's just a way to install these + +00:35:58.440 --> 00:36:01.640 +dependencies just locally per directory or + +00:36:01.640 --> 00:36:03.420 +per repository kind of thing. + +00:36:03.900 --> 00:36:05.740 +And I've used various packages for that. + +00:36:05.740 --> 00:36:07.860 +There are like 4 packages, + +00:36:07.940 --> 00:36:10.560 +5 packages, maybe. And 1 is called VM, + +00:36:10.560 --> 00:36:11.740 +and 1 is called VirtualM, + +00:36:11.820 --> 00:36:13.640 +and 1 is called Python-VM. + +00:36:15.420 --> 00:36:16.980 +And now I'm using, you know, + +00:36:16.980 --> 00:36:18.100 +I'm using a different 1. + +00:36:18.100 --> 00:36:19.620 +And it's just a little bit, + +00:36:20.080 --> 00:36:22.160 +why doesn't this work out of the box in + +00:36:22.160 --> 00:36:25.680 +Emacs? Why? I don't think there's a really + +00:36:25.680 --> 00:36:28.640 +good fundamental good reason why something + +00:36:28.640 --> 00:36:30.460 +like that doesn't work in Emacs. + +00:36:30.480 --> 00:36:31.980 +So I think that's really, + +00:36:32.220 --> 00:36:35.220 +I mean, I'm sure there are other things like + +00:36:35.220 --> 00:36:37.280 +that, other fundamental features. + +00:36:37.740 --> 00:36:39.920 +Why is it that for the last 20 years, + +00:36:39.920 --> 00:36:43.740 +we've shipped Emacs with no PHP support out + +00:36:43.740 --> 00:36:47.660 +of the box? I mean, I'm not a PHP programmer. + +00:36:47.660 --> 00:36:51.020 +I don't really have a lot of love for PHP, + +00:36:51.020 --> 00:36:56.020 +let's say. To me, it's a very funny-looking + +00:36:57.180 --> 00:37:00.060 +language, but okay, still it's been very + +00:37:00.060 --> 00:37:02.060 +popular. Why haven't we supported it? + +00:37:02.120 --> 00:37:03.280 +I mean, it's just strange. + +00:37:03.280 --> 00:37:05.040 +You install Emacs on some machine, + +00:37:05.220 --> 00:37:07.260 +you open a PHP file, you get fundamental + +00:37:07.280 --> 00:37:09.160 +mode. It's not the best user experience, + +00:37:09.160 --> 00:37:12.600 +in my opinion. So I think there are some + +00:37:12.600 --> 00:37:15.480 +things where we really could do a little bit + +00:37:15.480 --> 00:37:20.200 +better. And I'm seeing this all the time. + +00:37:20.200 --> 00:37:22.500 +Just this week, this new assignment was + +00:37:22.500 --> 00:37:24.640 +interesting. There was this Emacs user. + +00:37:24.720 --> 00:37:26.980 +Turns out we have the exact same hack in both + +00:37:26.980 --> 00:37:29.860 +of our init files. So we had created the + +00:37:29.860 --> 00:37:32.140 +exact same mode for DIRED, + +00:37:32.140 --> 00:37:33.920 +actually, to hide dot files. + +00:37:33.920 --> 00:37:36.720 +You know, dot something is supposed to be + +00:37:36.720 --> 00:37:39.440 +hidden on a Unix system. + +00:37:40.240 --> 00:37:43.940 +So we had DERED hide dot files mode to just + +00:37:43.940 --> 00:37:47.100 +hide them. And why isn't that in DERED? + +00:37:47.100 --> 00:37:48.420 +Or should it be in DERED? + +00:37:48.480 --> 00:37:50.860 +Should it be a package on the new Elpa? + +00:37:51.000 --> 00:37:53.000 +Where should it be? Why is it just local + +00:37:53.000 --> 00:37:54.680 +hack? Should it be on a wiki somewhere? + +00:37:54.680 --> 00:37:56.740 +I mean, sometimes that's the correct answer. + +00:37:56.980 --> 00:37:59.060 +Sometimes the correct answer is, + +00:37:59.060 --> 00:38:00.420 +yes, it should be a package. + +00:38:00.780 --> 00:38:02.360 +Sometimes the correct answer is, + +00:38:02.360 --> 00:38:04.140 +yes, it should really be in core. + +00:38:04.280 --> 00:38:06.420 +So what I want to promote is more like, + +00:38:06.480 --> 00:38:08.900 +let's just take a step back and just ask + +00:38:08.900 --> 00:38:11.180 +yourself, what's the best solution if we look + +00:38:11.180 --> 00:38:12.240 +at the overall picture? + +00:38:12.240 --> 00:38:13.920 +Should I hack this into my configuration? + +00:38:14.600 --> 00:38:16.840 +In many cases, yes, that's the right thing to + +00:38:16.840 --> 00:38:19.540 +do. We don't want to proliferate just random + +00:38:19.840 --> 00:38:22.160 +solutions all over Emacs for no reason. + +00:38:22.540 --> 00:38:24.760 +But sometimes we want to fix it once and for + +00:38:24.760 --> 00:38:27.700 +all. We want to do that in core. + +00:38:27.880 --> 00:38:30.200 +So you could send stuff like that to us as + +00:38:30.200 --> 00:38:31.480 +patches or as packages. + +00:38:31.560 --> 00:38:34.340 +And we can discuss a little bit about where + +00:38:34.340 --> 00:38:36.420 +should we solve this? What's the right level + +00:38:37.280 --> 00:38:41.100 +of abstraction? I'm seeing that I'm running + +00:38:41.100 --> 00:38:43.620 +out of time. I had an Emacs wish list. + +00:38:43.620 --> 00:38:46.880 +Maybe we can take more of that in the Q&A. + +00:38:47.170 --> 00:38:49.226 +But I want to say, like, + +00:38:49.226 --> 00:38:50.460 +in VS Code, you just start VS Code. + +00:38:50.460 --> 00:38:51.660 +You open a Python file, + +00:38:51.660 --> 00:38:53.040 +and you get, like, hey, + +00:38:53.040 --> 00:38:54.560 +are you trying to use Python? + +00:38:54.840 --> 00:38:56.280 +Click here, install Python. + +00:38:56.280 --> 00:38:58.700 +You get all the nice things out of the box. + +00:38:59.180 --> 00:39:01.560 +And my argument is, why can't we have more of + +00:39:01.560 --> 00:39:03.880 +that in Emacs? I don't think it's necessarily + +00:39:04.000 --> 00:39:06.360 +hard, but it does take a little bit of work. + +00:39:06.960 --> 00:39:09.060 +The challenges here are more social, + +00:39:09.060 --> 00:39:10.880 +I think, than technical. + +00:39:10.900 --> 00:39:12.780 +And I think it's worth doing, + +00:39:12.780 --> 00:39:14.060 +because it's not just Python. + +00:39:14.060 --> 00:39:16.640 +It's just There are always these small things + +00:39:16.640 --> 00:39:18.900 +where it just really should work, + +00:39:18.900 --> 00:39:20.900 +and that would be a much better experience. + +00:39:20.900 --> 00:39:23.360 +And then you could customize not that thing + +00:39:23.360 --> 00:39:24.600 +that should just work, + +00:39:24.640 --> 00:39:27.140 +but you could customize more fun and + +00:39:27.140 --> 00:39:29.620 +exploratory things instead of people + +00:39:29.620 --> 00:39:31.720 +reinventing the wheel over and over again. + +00:39:31.720 --> 00:39:33.420 +So I'm very excited about what's happening in + +00:39:33.420 --> 00:39:35.280 +Emacs. I think we should be proud of what + +00:39:35.280 --> 00:39:37.360 +we've accomplished. It's so many things to + +00:39:37.360 --> 00:39:38.360 +many different people, + +00:39:38.360 --> 00:39:39.660 +an environment for hacking, + +00:39:40.040 --> 00:39:41.620 +just a productivity system. + +00:39:41.880 --> 00:39:44.020 +Other sees us as a different way of looking + +00:39:44.020 --> 00:39:45.360 +at computing, you know, + +00:39:45.360 --> 00:39:47.440 +the embodiment of the ideal of the Lisp + +00:39:47.440 --> 00:39:49.280 +machine if you want to talk big words and + +00:39:49.280 --> 00:39:50.660 +stuff like that. And of course, + +00:39:50.660 --> 00:39:53.320 +Emacs are all those things and so many more. + +00:39:53.320 --> 00:39:55.440 +And that's what makes Emacs so amazing. + +00:39:56.280 --> 00:40:00.780 +And in some sense, we should be care that + +00:40:00.780 --> 00:40:03.040 +people are satisfied with using lesser text + +00:40:03.040 --> 00:40:05.600 +editors. How could they be happy running + +00:40:05.600 --> 00:40:07.440 +that? I mean, I'm sure it's fine, + +00:40:07.440 --> 00:40:09.800 +but it sure as hell isn't Emacs. + +00:40:09.800 --> 00:40:12.340 +So don't we owe it to the world and to them + +00:40:12.340 --> 00:40:14.440 +and to ourselves to make a great Emacs. + +00:40:14.760 --> 00:40:16.120 +That will be my ending words. + +00:40:16.120 --> 00:40:18.020 +And I hope to see you all in the Q&A. + +00:40:18.120 --> 00:40:22.560 +Thank you all. And thank you so much, + +00:40:22.560 --> 00:40:24.360 +Stefan. That was a wonderful presentation. + +00:40:24.800 --> 00:40:27.280 +And I just want to give you the opportunity. + +00:40:27.340 --> 00:40:29.940 +You said that you perhaps had, + +00:40:30.480 --> 00:40:31.400 +Not the practical stuff, + +00:40:31.400 --> 00:40:33.280 +but you wanted to do a demo or something like + +00:40:33.280 --> 00:40:34.780 +this? What did you mention exactly? + +00:40:36.180 --> 00:40:38.460 +Yeah, we didn't have time really. + +00:40:38.740 --> 00:40:42.040 +Yes, I'm not sure. I didn't prepare anything + +00:40:42.040 --> 00:40:43.580 +so that we can do it live. + +00:40:43.620 --> 00:40:44.800 +But maybe for next time, + +00:40:44.800 --> 00:40:48.620 +I will do a demo. Don't hold me to it. + +00:40:49.920 --> 00:40:51.100 +Or someone else could. + +00:40:51.100 --> 00:40:52.540 +That would be really amazing. + +00:40:53.260 --> 00:40:54.020 +Right. Well, thank you, + +00:40:54.020 --> 00:40:56.820 +Stéphane. You've been already into so much + +00:40:56.820 --> 00:41:00.560 +detail of so many... So much of the intricacy + +00:41:01.780 --> 00:41:05.100 +of the maintenance. And as someone who's been + +00:41:05.460 --> 00:41:07.980 +95% of the time developing for Melpa, + +00:41:08.260 --> 00:41:11.040 +I feel like this talk was very geared to a + +00:41:11.040 --> 00:41:13.980 +lot of us who tend to experiment in this + +00:41:13.980 --> 00:41:16.400 +Cambrian stage of Emacs evolution, + +00:41:16.400 --> 00:41:19.620 +where we get to deploy a lot of creativity + +00:41:20.600 --> 00:41:24.020 +whilst also feeling pretty agile in a way we + +00:41:24.020 --> 00:41:25.580 +come up with solutions to problems. + +00:41:25.640 --> 00:41:29.240 +But you've won me over with your discussion + +00:41:29.240 --> 00:41:31.360 +about potentially moving some of this stuff + +00:41:31.360 --> 00:41:33.220 +to core. And I think this particularly + +00:41:33.280 --> 00:41:36.140 +resonated at the end with this tension that + +00:41:36.140 --> 00:41:38.660 +you feel about problems that you encounter. + +00:41:39.160 --> 00:41:40.760 +Do you fix them in Melpa? + +00:41:40.760 --> 00:41:42.040 +Do you fix them in core? + +00:41:42.040 --> 00:41:43.780 +Is it not something that is supposed to be an + +00:41:43.780 --> 00:41:46.560 +option? I love this tension and it's + +00:41:46.560 --> 00:41:48.040 +something that we've been exploring for the + +00:41:48.040 --> 00:41:49.780 +last 3 edition of Emacs Cons. + +00:41:49.780 --> 00:41:52.480 +It's really what is to be the interaction + +00:41:52.600 --> 00:41:55.660 +between this pool of very clever developers + +00:41:55.680 --> 00:41:58.100 +who are on Melpa but who are perhaps a little + +00:41:58.100 --> 00:42:00.880 +bit afraid of joining Core and the wonderful + +00:42:00.920 --> 00:42:02.860 +job that you do that, yes, + +00:42:02.980 --> 00:42:05.640 +seems archaic from the outside, + +00:42:05.860 --> 00:42:07.840 +but as you've been at length today in your + +00:42:07.840 --> 00:42:09.480 +presentation, is actually just a better way + +00:42:09.480 --> 00:42:11.780 +to work, a very pragmatic way to get a lot of + +00:42:11.780 --> 00:42:13.320 +work done. So, thank you so much for your + +00:42:13.320 --> 00:42:15.240 +presentation. Thank you, + +00:42:15.240 --> 00:42:20.740 +Leo. So, we have about 12 minutes now to go + +00:42:20.740 --> 00:42:22.950 +through as many questions as possible. + +00:42:22.950 --> 00:42:26.000 +You have obviously had a lot of questions + +00:42:26.000 --> 00:42:27.180 +throughout your presentation. + +00:42:27.660 --> 00:42:28.940 +Do you have access to the pad, + +00:42:28.940 --> 00:42:30.400 +or do you want me to share the question and + +00:42:30.400 --> 00:42:32.660 +feed them to you? Yes, + +00:42:32.660 --> 00:42:34.200 +could you start with sharing them? + +00:42:34.200 --> 00:42:36.000 +I'll see if I can get it on my screen. + +00:42:36.280 --> 00:42:39.640 +Sure, I'll do that. Please let me know if my + +00:42:39.720 --> 00:42:42.980 +microphone is clipping because my OBS setup + +00:42:42.980 --> 00:42:44.440 +sometimes is a little bit janky. + +00:42:44.440 --> 00:42:46.080 +But I'm going to try to read the questions + +00:42:46.080 --> 00:42:47.780 +for now. It's tipping, + +00:42:48.080 --> 00:42:51.980 +I can hear you okay. Okay, + +00:42:51.980 --> 00:42:54.400 +so bear with the clicking, + +00:42:54.400 --> 00:42:56.480 +we'll switch as soon as possible to Stefan + +00:42:56.480 --> 00:42:58.080 +reading the question, but I'll read the first + +00:42:58.080 --> 00:43:02.820 +1. Can you tell us some about your, + +00:43:02.860 --> 00:43:04.340 +can you tell us some more I assume, + +00:43:04.340 --> 00:43:06.160 +about your background with Emacs development + +00:43:06.160 --> 00:43:07.500 +and programming in general, + +00:43:07.580 --> 00:43:09.220 +your professional work possibly? + +00:43:11.400 --> 00:43:15.440 +Yeah, sure. Okay, I studied computer science + +00:43:15.440 --> 00:43:19.960 +at university. I started programming on a + +00:43:19.960 --> 00:43:23.960 +Commodore 64. I started with BASIC and then I + +00:43:23.960 --> 00:43:26.880 +did a couple of versions of BASIC as a kid. + +00:43:27.380 --> 00:43:31.540 +But then really things took off when I + +00:43:31.540 --> 00:43:34.240 +started using GNU Linux. + +00:43:34.300 --> 00:43:35.580 +I can't remember which year, + +00:43:35.580 --> 00:43:37.440 +maybe it was early 2000, + +00:43:38.480 --> 00:43:39.740 +something like that, late. + +00:43:39.840 --> 00:43:42.080 +No, it must've been before that actually, + +00:43:42.380 --> 00:43:44.120 +because I remember I was 14. + +00:43:44.340 --> 00:43:46.020 +Yeah, okay, so let's say 1999, + +00:43:46.500 --> 00:43:48.720 +1998, somewhere there around. + +00:43:48.840 --> 00:43:50.200 +Then I started with Perl, + +00:43:50.200 --> 00:43:52.620 +and I did Perl for a good long while. + +00:43:52.700 --> 00:43:55.460 +I learned C++, I learned C, + +00:43:55.680 --> 00:43:56.960 +I did all kinds of stuff, + +00:43:56.960 --> 00:43:58.640 +and then I went to university, + +00:43:59.440 --> 00:44:01.700 +computer science, and I've been working, + +00:44:01.700 --> 00:44:03.980 +you know, in various roles. + +00:44:04.160 --> 00:44:06.300 +Right now, I'm coding Python. + +00:44:06.980 --> 00:44:09.640 +Up until last Friday, I was writing firmware + +00:44:09.940 --> 00:44:12.319 +in C for a small microcontroller, + +00:44:12.440 --> 00:44:15.600 +which is pretty different than writing + +00:44:15.600 --> 00:44:17.060 +Python, that's for sure. + +00:44:17.220 --> 00:44:19.600 +So yeah, so that's a little bit about me. + +00:44:19.600 --> 00:44:21.860 +I got interested in free software, + +00:44:22.300 --> 00:44:24.720 +you know, also at a very young age. + +00:44:24.720 --> 00:44:26.320 +So, I mean, I've been following these, + +00:44:26.320 --> 00:44:29.120 +you know, ideological discussions and + +00:44:29.120 --> 00:44:31.560 +debates, read all this stuff by Richard + +00:44:31.560 --> 00:44:33.940 +Stallman and so on and so forth. + +00:44:33.940 --> 00:44:37.760 +But yeah, that's it. Great, + +00:44:37.760 --> 00:44:41.120 +thank you. I'll move on to the next question. + +00:44:41.120 --> 00:44:42.980 +You'll have to listen to me because if I + +00:44:42.980 --> 00:44:45.020 +start sharing my screen again, + +00:44:45.020 --> 00:44:46.320 +we're going to get some clicks. + +00:44:48.140 --> 00:44:50.680 +So the question. Do you think that 1 day + +00:44:50.680 --> 00:44:53.930 +there will be a native I'll start again, + +00:44:53.930 --> 00:44:54.079 +sorry. Do you think that 1 day there will be + +00:44:54.079 --> 00:44:54.440 +a native... I'll start again, + +00:44:54.440 --> 00:44:56.480 +sorry. Do you think that 1 day there will be + +00:44:56.480 --> 00:44:59.020 +a native graphical web browser in Emacs or is + +00:44:59.020 --> 00:45:00.540 +it kind of against its philosophy and + +00:45:00.540 --> 00:45:03.820 +architecture? So will we stick just with EWW + +00:45:04.200 --> 00:45:06.800 +and EAF or similar workaround tricks? + +00:45:08.640 --> 00:45:11.200 +So if, I don't know if people have seen, + +00:45:11.200 --> 00:45:12.740 +there is a talk by, I think, + +00:45:13.440 --> 00:45:15.080 +Perry Metzger, is that the name? + +00:45:15.080 --> 00:45:16.800 +Sorry if I got the name wrong. + +00:45:17.080 --> 00:45:18.360 +Perry Metzger, I think. + +00:45:18.720 --> 00:45:20.800 +It's like, he marks a text editor for the + +00:45:20.800 --> 00:45:22.640 +next 40 years. He makes an excellent point + +00:45:22.640 --> 00:45:24.720 +there that 1 of the things that we need to do + +00:45:24.720 --> 00:45:27.840 +is really get a proper HTML rendering in + +00:45:27.840 --> 00:45:30.260 +Emacs. It's like a dream at this point. + +00:45:30.260 --> 00:45:32.200 +No 1 is actively working on something like + +00:45:32.200 --> 00:45:34.240 +that. I think that, you know, + +00:45:34.240 --> 00:45:36.380 +there, first of all, you'd need to rewrite + +00:45:36.380 --> 00:45:39.520 +the display engine. So that's a big job. + +00:45:39.920 --> 00:45:41.140 +It is. I'm not saying, + +00:45:41.140 --> 00:45:42.540 +you know, it can't be done, + +00:45:43.040 --> 00:45:44.660 +but you need to start there. + +00:45:44.660 --> 00:45:47.560 +Right? Second of all, you need to think + +00:45:47.560 --> 00:45:50.460 +about, you know, with all the Emacs Lisp code + +00:45:50.460 --> 00:45:52.090 +out there, is really assuming, + +00:45:52.090 --> 00:45:54.960 +you know, 1 paradigm, which is that you have + +00:45:54.960 --> 00:45:57.720 +a square, and basically you have columns and + +00:45:57.720 --> 00:45:59.760 +you have rows, and everything is in there, + +00:45:59.760 --> 00:46:02.360 +even images, is basically in a column, + +00:46:02.540 --> 00:46:04.740 +you know, in a column on a row somewhere. + +00:46:05.380 --> 00:46:07.360 +Whereas, you know, when you just start doing + +00:46:07.360 --> 00:46:09.780 +the more web stuff and web rendering, + +00:46:10.120 --> 00:46:12.020 +you already have like a seaplane. + +00:46:12.040 --> 00:46:14.500 +You have different types of geometries that + +00:46:14.500 --> 00:46:16.880 +are possible. And what does it mean to go to + +00:46:16.880 --> 00:46:19.370 +the logical next line in that kind of sense? + +00:46:19.370 --> 00:46:21.420 +I mean these types of things I'm not saying + +00:46:21.420 --> 00:46:23.440 +it can't be done. I'm saying there are there + +00:46:23.440 --> 00:46:27.440 +are definitely some challenges there It would + +00:46:27.440 --> 00:46:30.280 +be amazing I mean, but we need someone with + +00:46:30.280 --> 00:46:33.020 +you know, the inclination and talent I think + +00:46:33.320 --> 00:46:37.680 +to work on that's a job posting if I've ever + +00:46:37.680 --> 00:46:40.200 +had 1. So good luck to whoever's willing to + +00:46:40.200 --> 00:46:42.100 +apply for this 1. I think it's a tough 1. + +00:46:43.180 --> 00:46:46.440 +It is, yes. Go on. Okay, + +00:46:46.560 --> 00:46:48.040 +do you happen to have the questions in front + +00:46:48.040 --> 00:46:50.320 +of you? Can I just read them to you so that + +00:46:50.320 --> 00:46:52.660 +you can also have a feedback in front of you? + +00:46:54.780 --> 00:46:56.680 +Yes, I have the pad here. + +00:46:57.260 --> 00:46:58.860 +Okay, cool. So I'll read the next question + +00:46:58.860 --> 00:47:00.260 +and this way I don't have to worry too much + +00:47:00.260 --> 00:47:02.320 +about me butchering every word in the + +00:47:02.320 --> 00:47:04.540 +sentence. So, Emacs development and + +00:47:04.540 --> 00:47:06.460 +communication still is very much focused on + +00:47:06.460 --> 00:47:08.640 +email mailing lists. I like this, + +00:47:08.640 --> 00:47:10.380 +but what do you think about introducing other + +00:47:10.380 --> 00:47:12.320 +channels for talking to users, + +00:47:12.440 --> 00:47:15.140 +like the Emacs project community could set up + +00:47:15.140 --> 00:47:17.120 +a master on instance of its own, + +00:47:17.120 --> 00:47:20.280 +for instance? I think from the point of view + +00:47:20.280 --> 00:47:21.760 +of the Emacs core team, + +00:47:21.760 --> 00:47:23.860 +we don't really have a lot of resources or + +00:47:23.860 --> 00:47:25.960 +people inclined to be working on stuff like + +00:47:25.960 --> 00:47:27.880 +that. But I mean, there is so much going on. + +00:47:27.880 --> 00:47:29.360 +Emacs is a very, you know, + +00:47:30.420 --> 00:47:32.580 +It's a big community, frankly, + +00:47:32.580 --> 00:47:34.500 +right? So people working on emacs.com, + +00:47:34.760 --> 00:47:37.400 +there are people in the IRC channel, + +00:47:37.500 --> 00:47:39.200 +the emacs IRC channel, + +00:47:39.400 --> 00:47:40.820 +there's the emacs subreddit. + +00:47:40.960 --> 00:47:43.280 +And I mean, people are doing an incredible + +00:47:43.380 --> 00:47:45.480 +job. And I think if people wanna do more + +00:47:45.480 --> 00:47:46.400 +stuff like that, I mean, + +00:47:46.400 --> 00:47:48.840 +Don't wait for Argo, just go for it. + +00:47:52.000 --> 00:47:54.340 +Great. Moving on to the next question. + +00:47:54.340 --> 00:47:56.520 +Sorry, I'm not commenting anymore because we + +00:47:56.520 --> 00:47:58.180 +have so many questions and I'd love for you + +00:47:58.180 --> 00:48:00.260 +to answer as many people as possible because + +00:48:00.260 --> 00:48:02.540 +we have about 6 minutes technically, + +00:48:02.640 --> 00:48:04.820 +but we can go perhaps a little bit over. + +00:48:05.080 --> 00:48:06.220 +If you have the time, Stefan, + +00:48:06.220 --> 00:48:08.680 +though. Yeah. Okay, great. + +00:48:09.340 --> 00:48:11.140 +What are some features or packages you'd like + +00:48:11.140 --> 00:48:12.540 +to see developed by the community? + +00:48:12.560 --> 00:48:15.560 +We've already talked about the native HTTP + +00:48:15.920 --> 00:48:17.620 +display, but do you have any others? + +00:48:19.540 --> 00:48:22.080 +So, I mean, developed by the community, + +00:48:22.360 --> 00:48:23.240 +it depends what you mean. + +00:48:23.240 --> 00:48:27.720 +So do you mean sending stuff that people + +00:48:27.720 --> 00:48:29.720 +could be working on in general? + +00:48:30.480 --> 00:48:33.320 +I think for now, like let's say the roadmap, + +00:48:33.420 --> 00:48:35.140 +I'll just give some of the things that I + +00:48:35.140 --> 00:48:36.940 +think should happen right now and that I + +00:48:36.940 --> 00:48:39.060 +would love for people to send patches for. + +00:48:39.060 --> 00:48:41.120 +That's what I'm gonna be answering because + +00:48:41.120 --> 00:48:42.860 +that's what I think I can answer. + +00:48:43.280 --> 00:48:45.220 +Tree-sitter is a new thing, + +00:48:45.280 --> 00:48:48.620 +right? Improving and working on new modes + +00:48:48.860 --> 00:48:50.040 +for, you know, TreeSitter, + +00:48:50.200 --> 00:48:52.860 +it's not very hard. I think many people get + +00:48:52.900 --> 00:48:55.560 +into it and make sure to integrate them in + +00:48:55.560 --> 00:48:57.540 +Emacs core. I think that would be, + +00:48:58.140 --> 00:49:00.140 +I mean, on my wishlist. + +00:49:00.140 --> 00:49:01.960 +The other thing that is that we've asked for + +00:49:01.960 --> 00:49:03.740 +someone perhaps with a little bit more + +00:49:03.740 --> 00:49:05.940 +experience, I think, but working on + +00:49:05.940 --> 00:49:09.080 +refactoring capabilities in Emacs and a more + +00:49:09.080 --> 00:49:11.320 +general framework, I think, + +00:49:11.320 --> 00:49:13.680 +for that. There are probably many more ideas + +00:49:13.780 --> 00:49:15.300 +that I could give people, + +00:49:15.300 --> 00:49:17.720 +but those would be the 2 big ones, + +00:49:17.720 --> 00:49:20.140 +I think, that are also very uncontroversial. + +00:49:22.360 --> 00:49:23.960 +It's funny because for me, + +00:49:24.400 --> 00:49:26.760 +I don't think refactoring would count as a + +00:49:26.760 --> 00:49:29.760 +feature, but it's so vital to allowing + +00:49:30.360 --> 00:49:31.780 +further features to be developed. + +00:49:31.780 --> 00:49:34.160 +Otherwise, I remember the way Org Mode used + +00:49:34.160 --> 00:49:36.300 +to be before we had Org Element and stuff + +00:49:36.300 --> 00:49:38.940 +like this. It was really complicated to write + +00:49:38.940 --> 00:49:41.200 +any kind of parsing stuff for it. + +00:49:41.200 --> 00:49:42.340 +And now that we've got it, + +00:49:42.340 --> 00:49:44.080 +it just opened up a world of possibility + +00:49:44.180 --> 00:49:46.160 +where parsing an Org Mode file is just made + +00:49:46.160 --> 00:49:48.280 +so much easier. So I think that's a wonderful + +00:49:48.280 --> 00:49:49.620 +answer because it goes, + +00:49:49.760 --> 00:49:52.080 +it's multi-layered as you would expect from + +00:49:52.080 --> 00:49:53.920 +something that concerns the whole of Emacs. + +00:49:55.800 --> 00:49:57.160 +Moving on to the next question. + +00:49:57.440 --> 00:49:59.960 +What is the hardest decision being made + +00:49:59.960 --> 00:50:02.480 +within Emacs dev for the last 3 years. + +00:50:02.480 --> 00:50:04.960 +I'm not sure, is it the decision in the last + +00:50:04.960 --> 00:50:07.480 +3 years or I'll let you interpret the + +00:50:07.480 --> 00:50:08.760 +question however you want. + +00:50:09.280 --> 00:50:10.960 +Okay, well, I'll say this. + +00:50:11.640 --> 00:50:14.220 +I started in August and I haven't had any + +00:50:14.220 --> 00:50:16.920 +really hard decisions so far. + +00:50:16.920 --> 00:50:20.540 +So good news. Maybe Eli will have more for + +00:50:20.540 --> 00:50:22.820 +the last 3 years. Keep it simple. + +00:50:25.240 --> 00:50:28.660 +Thanks. Cool. Next question. + +00:50:28.860 --> 00:50:31.920 +Any plans to integrate XWM into core? + +00:50:31.940 --> 00:50:34.400 +Emacs is a really good Winters manager. + +00:50:34.780 --> 00:50:38.080 +That's super cool. I think EXWM is cool. + +00:50:38.100 --> 00:50:40.140 +I think they need to upgrade to Wayland + +00:50:40.260 --> 00:50:41.880 +somehow and that's not clear yet, + +00:50:41.880 --> 00:50:44.880 +but you know, we don't have any current plans + +00:50:44.880 --> 00:50:48.900 +to integrate it, no. Right, + +00:50:49.020 --> 00:50:51.600 +Next question. Do you think it is a good idea + +00:50:51.600 --> 00:50:53.540 +to choose Org Mode for writing documentation + +00:50:53.680 --> 00:50:57.740 +instead of tech info? I think that whatever + +00:50:57.740 --> 00:50:59.680 +we do, it should be the people that are + +00:50:59.680 --> 00:51:01.760 +working on the documentation that should make + +00:51:01.760 --> 00:51:03.420 +that choice. Currently we have, + +00:51:03.420 --> 00:51:05.920 +I think, Modus themes and Org Mode itself is + +00:51:05.920 --> 00:51:08.060 +writing their documentation in Org Mode, + +00:51:08.080 --> 00:51:10.940 +that's fine by me. It has some drawbacks, + +00:51:10.960 --> 00:51:13.440 +it has some benefits, but most documentation + +00:51:13.580 --> 00:51:14.840 +is still in tech info. + +00:51:15.240 --> 00:51:17.360 +Maybe we'd need to replace that at some + +00:51:17.360 --> 00:51:19.840 +point, I don't know. But for now, + +00:51:19.840 --> 00:51:22.280 +that's what people know and use. + +00:51:22.280 --> 00:51:24.280 +And if you find that as a barrier to + +00:51:24.280 --> 00:51:25.600 +contribute to Emacs, I mean, + +00:51:25.600 --> 00:51:27.420 +just really write it as plain text. + +00:51:27.540 --> 00:51:29.380 +We'll be happy to help you with the markup. + +00:51:29.380 --> 00:51:30.280 +It's a little bit, you know, + +00:51:30.280 --> 00:51:31.760 +finicky and stuff like that. + +00:51:33.340 --> 00:51:35.060 +Great. Thanks for that. + +00:51:35.620 --> 00:51:38.000 +Next question. What do you plan to work on in + +00:51:38.000 --> 00:51:39.360 +Emacs Core in the future? + +00:51:40.460 --> 00:51:42.660 +I'm a little bit hesitant to reply to that. + +00:51:42.660 --> 00:51:43.740 +Of course I have ideas. + +00:51:43.740 --> 00:51:45.760 +Of course there are projects that I'm working + +00:51:45.760 --> 00:51:47.640 +on. However, if I say it here, + +00:51:47.640 --> 00:51:48.480 +I feel like, you know, + +00:51:48.480 --> 00:51:51.240 +then you'll hold me to it later and come ask, + +00:51:51.300 --> 00:51:52.480 +where is that feature? + +00:51:52.640 --> 00:51:55.180 +So I'll just say there is plenty of stuff + +00:51:55.180 --> 00:51:57.340 +that I'm working on, and if you want to know + +00:51:57.340 --> 00:51:58.780 +some of the stuff that I have been working + +00:51:58.780 --> 00:52:00.040 +on, check the Git log. + +00:52:00.060 --> 00:52:02.400 +I think that's just really as much as I want + +00:52:02.400 --> 00:52:05.040 +to say about that right now. + +00:52:05.660 --> 00:52:07.360 +You've added folks to just look at the path + +00:52:07.360 --> 00:52:09.620 +with the changelog and that's all you need. + +00:52:11.600 --> 00:52:13.340 +All right, moving on to the next question. + +00:52:14.020 --> 00:52:16.120 +What do you use Emacs for in your life other + +00:52:16.120 --> 00:52:17.580 +than working on Emacs itself? + +00:52:18.080 --> 00:52:21.060 +Oh shit. So the big thing is programming, + +00:52:21.140 --> 00:52:24.020 +right? Now I work as a programmer. + +00:52:27.040 --> 00:52:29.280 +But in general, I use org mode heavily. + +00:52:29.340 --> 00:52:30.780 +I use it for all my writing. + +00:52:30.820 --> 00:52:33.460 +I use it to write, prepare this talk. + +00:52:33.480 --> 00:52:35.360 +I use it as a productivity system. + +00:52:35.380 --> 00:52:41.980 +I use it for emails. I use it as an RSS + +00:52:41.980 --> 00:52:44.480 +reader. I do most of my computing. + +00:52:44.760 --> 00:52:47.040 +I also have Firefox. So it's like Emacs and + +00:52:47.040 --> 00:52:48.820 +Firefox for some reason. + +00:52:48.900 --> 00:52:51.900 +I do read documentation in Emacs as well in + +00:52:51.900 --> 00:52:58.440 +you, but yeah. Great. I'm still, + +00:52:59.180 --> 00:53:00.720 +I do very much the same thing with you. + +00:53:00.720 --> 00:53:02.040 +Like You've described exactly what I do. + +00:53:02.040 --> 00:53:02.960 +I work as a programmer, + +00:53:02.960 --> 00:53:04.640 +I use Augment for a lot of stuff, + +00:53:04.640 --> 00:53:06.340 +and I think that describes a whole lot of + +00:53:06.340 --> 00:53:08.100 +people currently watching the stream. + +00:53:09.380 --> 00:53:10.680 +Moving on to the next question. + +00:53:10.840 --> 00:53:12.740 +What could we do in order to make Emacs more + +00:53:12.740 --> 00:53:14.280 +attractive for younger users? + +00:53:14.820 --> 00:53:17.940 +This is an amazing question and I feel wholly + +00:53:18.480 --> 00:53:20.720 +unprepared to answer this. + +00:53:21.180 --> 00:53:24.180 +Probably more introductory material aimed at + +00:53:24.320 --> 00:53:26.580 +that age group. What do you mean by younger + +00:53:26.580 --> 00:53:28.740 +users? You know what would be really cool if + +00:53:28.740 --> 00:53:30.740 +you had an Emacs for kids project? + +00:53:31.020 --> 00:53:32.060 +That would be amazing. + +00:53:32.680 --> 00:53:34.920 +I'm not sure if that's what people are + +00:53:34.920 --> 00:53:36.880 +thinking about, but yeah, + +00:53:37.200 --> 00:53:39.780 +that's about what I can say for now. + +00:53:40.380 --> 00:53:43.320 +Good question. It is a very good question, + +00:53:43.320 --> 00:53:45.880 +like it comes back always to a key topic in + +00:53:45.880 --> 00:53:47.720 +EmacsConf, which is, how do we get more + +00:53:47.720 --> 00:53:49.360 +people to join us? Because it's a wonderful + +00:53:49.360 --> 00:53:51.760 +community. And how do we onboard people who + +00:53:51.760 --> 00:53:54.220 +are not programmers or people who are younger + +00:53:54.400 --> 00:53:56.720 +than the average Joe coming in those + +00:53:57.120 --> 00:54:01.560 +meetings? There's this Excellent article by + +00:54:01.560 --> 00:54:05.960 +Paul Graham, I think, where he was describing + +00:54:06.140 --> 00:54:09.140 +how they used Emacs as the sort of customer + +00:54:09.320 --> 00:54:11.520 +service system. They built the customer + +00:54:11.520 --> 00:54:13.940 +service system for the early days of Amazon + +00:54:14.700 --> 00:54:17.200 +in Emacs Lisp. And then they switched and all + +00:54:17.200 --> 00:54:18.680 +the employees were sad. + +00:54:18.680 --> 00:54:21.680 +So definitely there's more stuff that could + +00:54:21.680 --> 00:54:25.160 +be done in Emacs and be done better in Emacs. + +00:54:25.240 --> 00:54:27.440 +So for sure, if people want to explore more + +00:54:27.440 --> 00:54:28.880 +stuff like that, that's amazing. + +00:54:29.720 --> 00:54:32.040 +Yeah. And for people who weren't around + +00:54:32.040 --> 00:54:33.740 +earlier today, we've had a presentation about + +00:54:33.740 --> 00:54:36.820 +how to get computer science students to use + +00:54:36.860 --> 00:54:41.100 +Emacs and trying to provide as much + +00:54:41.100 --> 00:54:43.500 +information and as much tutorial as needed + +00:54:43.500 --> 00:54:45.480 +for them to understand what is the philosophy + +00:54:45.480 --> 00:54:48.420 +behind Emacs and how it influences the way + +00:54:48.420 --> 00:54:49.540 +you work and so forth. + +00:54:49.540 --> 00:54:51.420 +So you might want to revisit this discussion. + +00:54:51.420 --> 00:54:53.400 +And we also have plenty of talks talking + +00:54:53.400 --> 00:54:57.720 +about this issue. And I can just add that I + +00:54:57.720 --> 00:55:00.320 +think it's very important for us as a + +00:55:00.320 --> 00:55:03.120 +community to just be enthusiastic to get more + +00:55:03.120 --> 00:55:04.640 +people involved. Because I mean, + +00:55:04.640 --> 00:55:06.660 +look, there's this meme where it's like, + +00:55:06.660 --> 00:55:08.620 +I use Arch Linux, by the way, + +00:55:08.620 --> 00:55:10.020 +I use Arch, by the way. + +00:55:10.080 --> 00:55:12.380 +And for some reason, people using Arch keep + +00:55:12.380 --> 00:55:14.080 +telling you that they're using Arch. + +00:55:14.600 --> 00:55:16.160 +That's fine. Use whatever you want. + +00:55:16.160 --> 00:55:18.260 +It's free software, I don't care. + +00:55:20.140 --> 00:55:21.900 +I think if you look at Vim users, + +00:55:21.900 --> 00:55:23.440 +they're very almost militant, + +00:55:23.540 --> 00:55:25.780 +oh, we're Vim, and Vim is the thing. + +00:55:25.920 --> 00:55:27.480 +And Emacs users sometimes, + +00:55:27.700 --> 00:55:29.960 +and it's fine. We take a bit of a more + +00:55:29.960 --> 00:55:31.160 +laid-back approach. We're like, + +00:55:31.160 --> 00:55:32.720 +yeah, I use Emacs, you use Vim, + +00:55:32.720 --> 00:55:35.320 +whatever. And that's fine. + +00:55:35.320 --> 00:55:36.820 +I mean, that's the correct approach, + +00:55:36.820 --> 00:55:38.480 +I think. You should respect what people want + +00:55:38.480 --> 00:55:40.840 +to use. I don't care that people use VS Code + +00:55:40.840 --> 00:55:42.540 +or whatever. I'm not going to use that + +00:55:42.540 --> 00:55:43.940 +because it's too limiting. + +00:55:43.940 --> 00:55:45.780 +It's not really a workable environment. + +00:55:46.400 --> 00:55:48.620 +But I think it's OK to be enthusiastic. + +00:55:48.740 --> 00:55:51.360 +I think it's okay to talk about that type of + +00:55:51.360 --> 00:55:54.100 +enthusiasm and anything that can help + +00:55:54.400 --> 00:55:56.880 +increase the enthusiasm around Emacs can only + +00:55:56.880 --> 00:56:01.100 +help the longevity of Emacs. + +00:56:02.520 --> 00:56:04.280 +I agree and that's also 1 of the key + +00:56:04.280 --> 00:56:05.340 +objectives of EmacsConf. + +00:56:05.460 --> 00:56:07.660 +It's about bringing a lot of amazing people + +00:56:07.660 --> 00:56:09.100 +to come talk, like you, + +00:56:09.140 --> 00:56:11.400 +about stuff that is very dear to you. + +00:56:11.400 --> 00:56:14.180 +And it's very tangible how much you care, + +00:56:14.180 --> 00:56:15.920 +all of you, about what you're presenting. + +00:56:15.920 --> 00:56:18.560 +And it's amazing to put all of you people on + +00:56:18.560 --> 00:56:20.800 +just 48 hours talking about all of this and + +00:56:20.800 --> 00:56:22.920 +then creating so much content for people to + +00:56:22.920 --> 00:56:24.480 +watch. And I think it's really helping the + +00:56:24.480 --> 00:56:28.140 +enthusiasm to live on and to gather a little + +00:56:28.140 --> 00:56:29.660 +more snow as it comes down. + +00:56:29.920 --> 00:56:31.720 +Yeah, I watch you Max Conf every year. + +00:56:31.720 --> 00:56:33.460 +I think it's a lot of fun. + +00:56:34.300 --> 00:56:37.360 +Thank you. I'll take the compliment for + +00:56:37.360 --> 00:56:38.620 +everyone else in the team. + +00:56:39.620 --> 00:56:41.120 +We're going to go a little bit longer with + +00:56:41.120 --> 00:56:42.800 +the Q&A because we still have a lot of + +00:56:42.800 --> 00:56:44.480 +questions and if Stéphane is still willing to + +00:56:44.480 --> 00:56:48.160 +answer, I'm still willing to not go too bad + +00:56:48.160 --> 00:56:49.740 +to hear a lot more of it. + +00:56:49.740 --> 00:56:50.580 +Yeah, for me it's fine. + +00:56:50.580 --> 00:56:55.760 +I have time. Great. So I think I've done this + +00:56:55.760 --> 00:56:57.460 +question. So, all right. + +00:56:58.080 --> 00:57:00.060 +How are we going to make sure that a cool + +00:57:00.060 --> 00:57:01.960 +idea is going to pass it through for the next + +00:57:01.960 --> 00:57:04.100 +generation, let's say 20 years later, + +00:57:04.120 --> 00:57:05.860 +the generation still have the good knowledge + +00:57:05.860 --> 00:57:09.940 +we have today. Yeah, so I mean, + +00:57:09.940 --> 00:57:12.840 +if you think about what does EMAX need to + +00:57:12.840 --> 00:57:15.180 +have staying power, so in general, + +00:57:15.180 --> 00:57:17.020 +they say, you know, if if when you start a + +00:57:17.020 --> 00:57:19.340 +company, if you have a company for 1 year, + +00:57:19.340 --> 00:57:20.220 +then in all likelihood, + +00:57:20.220 --> 00:57:21.820 +you're going to have it for 2 years because, + +00:57:21.820 --> 00:57:23.680 +you know, it's just so if you've had Emacs + +00:57:23.680 --> 00:57:25.840 +for 4 years, I'm saying that we're going to + +00:57:25.840 --> 00:57:27.980 +have Emacs for the next 4 years as well. + +00:57:27.980 --> 00:57:30.540 +Just based on that, I'm not sure the logic + +00:57:30.540 --> 00:57:32.200 +holds up, but you know, + +00:57:32.440 --> 00:57:34.320 +how does Emacs stay relevant? + +00:57:34.340 --> 00:57:35.500 +I think is the question. + +00:57:35.500 --> 00:57:38.400 +Well, I think we need to continue working on + +00:57:38.520 --> 00:57:41.840 +all the types of exploratory work that people + +00:57:41.840 --> 00:57:43.820 +are doing in the community. + +00:57:43.820 --> 00:57:45.720 +I think there is fundamental stuff that needs + +00:57:45.720 --> 00:57:47.720 +to be done. I mean, if people want to work + +00:57:47.720 --> 00:57:49.400 +on, you know, web rendering and Emacs, + +00:57:49.400 --> 00:57:50.240 +maybe that's the next, + +00:57:50.240 --> 00:57:53.240 +you know, revolutionary step that we need + +00:57:53.240 --> 00:57:55.320 +that could, you know, really showcase what + +00:57:55.320 --> 00:57:57.640 +Emacs, you know, as, you know, + +00:57:57.640 --> 00:58:00.620 +an idea, even if not Emacs as a software + +00:58:00.620 --> 00:58:01.960 +could be and, you know, + +00:58:01.960 --> 00:58:05.000 +Because there is huge potential in the idea + +00:58:05.000 --> 00:58:07.100 +as such. So maybe that's something. + +00:58:07.960 --> 00:58:09.600 +But I mean, from the point of view of core + +00:58:09.600 --> 00:58:11.840 +development, I think we need to just continue + +00:58:11.840 --> 00:58:15.040 +working on the fundamental technologies. + +00:58:15.260 --> 00:58:17.980 +1 thing that I would like to eventually see + +00:58:17.980 --> 00:58:19.700 +is a better garbage collector. + +00:58:19.900 --> 00:58:22.280 +We've talked about that for a long time, + +00:58:22.280 --> 00:58:25.140 +but I mean, we need someone to do the job + +00:58:25.380 --> 00:58:27.980 +really. It's not very easy. + +00:58:27.980 --> 00:58:29.780 +It's very hard, actually. + +00:58:31.100 --> 00:58:34.000 +So just continues working on stuff like that, + +00:58:34.000 --> 00:58:35.180 +continue with the exploration, + +00:58:35.800 --> 00:58:40.260 +continue using and being excited about Emacs. + +00:58:40.260 --> 00:58:43.180 +I think that's the best guarantee that we + +00:58:43.180 --> 00:58:45.800 +have. Yeah, and perhaps to echo something + +00:58:45.800 --> 00:58:46.780 +that you said earlier, + +00:58:46.840 --> 00:58:47.960 +the tools that you're using, + +00:58:47.960 --> 00:58:49.920 +like the emails, they've been around forever, + +00:58:49.920 --> 00:58:51.100 +they will be around forever. + +00:58:51.500 --> 00:58:53.480 +This pragmatic stance on the tools that + +00:58:53.480 --> 00:58:56.240 +you're using, they might look stayed from the + +00:58:56.240 --> 00:58:58.880 +outside, but ultimately they are what permits + +00:58:59.220 --> 00:59:02.280 +a sense of longevity to any kind of project + +00:59:03.300 --> 00:59:05.460 +you embark upon. Also, + +00:59:05.460 --> 00:59:07.260 +in a sense, I think that the expectations + +00:59:07.740 --> 00:59:09.320 +might be changing in the sense that, + +00:59:09.320 --> 00:59:12.820 +you know, when I started using GNU Linux, + +00:59:12.980 --> 00:59:15.060 +you know what the first thing I did was, + +00:59:15.060 --> 00:59:16.960 +because I couldn't get Xorg to run. + +00:59:16.960 --> 00:59:19.040 +So the first thing you had to do was you had + +00:59:19.040 --> 00:59:20.820 +to compile your own Linux kernel. + +00:59:20.820 --> 00:59:22.960 +So you sit there and make manuconfig and + +00:59:22.960 --> 00:59:24.880 +you'll like, try to read it and you've never + +00:59:24.880 --> 00:59:26.320 +done anything like this before. + +00:59:26.320 --> 00:59:27.800 +You know, I was just a kid. + +00:59:27.800 --> 00:59:29.540 +I had never been at this kind of, + +00:59:29.540 --> 00:59:31.560 +you know, whatever. So I had to start with + +00:59:31.560 --> 00:59:34.200 +that. And then you have to write the X or + +00:59:34.200 --> 00:59:36.100 +configuration file. And I had the patience + +00:59:36.100 --> 00:59:37.100 +for that. But nowadays, + +00:59:37.200 --> 00:59:38.600 +people have different expectations. + +00:59:38.740 --> 00:59:40.460 +You just install something, + +00:59:40.640 --> 00:59:42.720 +and it works. And we need to keep that in + +00:59:42.720 --> 00:59:45.280 +mind as well. So that's why I keep pushing as + +00:59:45.280 --> 00:59:48.720 +1 of my big things. We need to build a more + +00:59:48.740 --> 00:59:51.180 +cohesive experience out of the box. + +00:59:51.180 --> 00:59:52.540 +Of course, that can be customizable. + +00:59:52.940 --> 00:59:55.240 +You shouldn't shoehorn anything in just for + +00:59:55.240 --> 00:59:58.760 +the sake of it. But you could get some things + +00:59:58.940 --> 01:00:00.920 +a little bit more for free. + +01:00:01.220 --> 01:00:03.080 +And maybe some of us that have our own + +01:00:03.080 --> 01:00:04.780 +configs and we've been doing this for you + +01:00:04.780 --> 01:00:07.720 +know, 2, 05:10, even 20 years, + +01:00:08.480 --> 01:00:09.660 +we could also see, you know, + +01:00:09.660 --> 01:00:11.640 +from the point of view of a new user that + +01:00:11.640 --> 01:00:13.780 +just installs VS Code and then they click, + +01:00:13.780 --> 01:00:15.680 +yes I use Python, yes I use that, + +01:00:15.680 --> 01:00:18.840 +and then it just automatically works. + +01:00:19.200 --> 01:00:20.600 +You know what I mean? I mean, + +01:00:20.600 --> 01:00:24.140 +then could we get closer to that perhaps a + +01:00:24.140 --> 01:00:26.060 +little bit? I think that would also help. + +01:00:26.760 --> 01:00:28.700 +Yeah, I think that's what we call the + +01:00:28.700 --> 01:00:30.580 +configuration wizard. And we were talking + +01:00:30.580 --> 01:00:32.520 +about this, I think, a couple of years ago at + +01:00:32.520 --> 01:00:34.200 +EmacsConf. I can't remember if it was with + +01:00:34.200 --> 01:00:35.740 +Adam in the chat. Adam, + +01:00:35.740 --> 01:00:38.240 +I mean Alpha Papa, or if it was with Bastien, + +01:00:38.240 --> 01:00:40.440 +but I remember the idea cropping off. + +01:00:40.440 --> 01:00:42.520 +Like, it's either you get a tutorial for + +01:00:42.520 --> 01:00:43.520 +Emacs, a proper tutorial, + +01:00:43.520 --> 01:00:45.640 +or you get a wizard, or you get both, + +01:00:45.640 --> 01:00:47.520 +and then all is right for the world. + +01:00:47.520 --> 01:00:49.420 +But definitely cool ideas being evoked. + +01:00:50.280 --> 01:00:52.280 +I'm gonna say I need to decree the time when + +01:00:52.280 --> 01:00:54.440 +we finish because for me it is 11.15 + +01:00:55.080 --> 01:00:59.300 +p.m. And I think my co-organizers are also + +01:00:59.300 --> 01:01:01.680 +willing to end the day and go rest because + +01:01:01.680 --> 01:01:03.540 +we've got another day to go tomorrow. + +01:01:03.760 --> 01:01:06.280 +So how about we take 3 minutes and 30 seconds + +01:01:06.280 --> 01:01:08.300 +to try to answer a little bit more succinctly + +01:01:08.560 --> 01:01:09.780 +the questions we've got left. + +01:01:09.780 --> 01:01:10.940 +How does that sound, Stefan? + +01:01:11.320 --> 01:01:15.200 +Sounds great. Cool, so I'll start reading the + +01:01:15.200 --> 01:01:17.140 +questions then that we've got left. + +01:01:18.340 --> 01:01:20.840 +So this 1 we've got. If you're willing to + +01:01:20.840 --> 01:01:22.360 +discuss it, what do you think about the + +01:01:22.360 --> 01:01:24.720 +recent controversy about use of CLLib in + +01:01:24.720 --> 01:01:29.980 +Emacs call code? Am I willing to discuss + +01:01:29.980 --> 01:01:35.960 +that? I have said my opinion on Emacs, + +01:01:36.420 --> 01:01:40.580 +Devel, I think. And I think I understand, + +01:01:40.680 --> 01:01:44.820 +I think, the viewpoints of both sides in that + +01:01:44.820 --> 01:01:46.720 +discussion. It is true that some things, + +01:01:46.720 --> 01:01:49.280 +I mean, we have to think about that. + +01:01:49.280 --> 01:01:50.340 +There is a real problem, + +01:01:50.340 --> 01:01:53.520 +I think, when we have 3 different APIs for + +01:01:53.520 --> 01:01:55.140 +doing the same thing in Emacs. + +01:01:55.320 --> 01:01:57.080 +And can we make that a little bit better? + +01:01:57.280 --> 01:01:59.280 +I mean, perhaps we could, + +01:01:59.760 --> 01:02:04.040 +right? So that's about as much as I'd like to + +01:02:04.040 --> 01:02:06.940 +say. Fair enough. I would have also accepted + +01:02:06.940 --> 01:02:09.160 +that CL loops are ugly to write and they + +01:02:09.160 --> 01:02:10.320 +don't feel very lispy. + +01:02:10.320 --> 01:02:12.040 +But I'll take your answer as well. + +01:02:13.260 --> 01:02:15.360 +Yeah, some people think that. + +01:02:15.660 --> 01:02:18.400 +I understand that position as well. + +01:02:19.200 --> 01:02:21.220 +Right. Okay, next question. + +01:02:21.260 --> 01:02:23.100 +When we find a bug in our Emacs, + +01:02:23.100 --> 01:02:25.200 +do we need to try to replicate it on our side + +01:02:25.200 --> 01:02:26.780 +version, on our SID version, + +01:02:26.780 --> 01:02:29.340 +sorry, then update all the usual list package + +01:02:29.340 --> 01:02:31.480 +we use, and if we succeed to replicate the + +01:02:31.480 --> 01:02:33.340 +bug in this version, only then go to + +01:02:33.340 --> 01:02:35.420 +development version 30 and do the same. + +01:02:35.660 --> 01:02:37.580 +Then only ask for assistance in reporting the + +01:02:37.580 --> 01:02:40.260 +bug we found. So I believe when they + +01:02:40.260 --> 01:02:43.540 +encounter a bug, are people supposed to go to + +01:02:43.540 --> 01:02:47.500 +master to pull main and just to make sure + +01:02:47.500 --> 01:02:48.740 +that they are on the latest version. + +01:02:48.740 --> 01:02:49.980 +Is this something that you require? + +01:02:50.660 --> 01:02:51.860 +We don't require that, + +01:02:51.860 --> 01:02:54.940 +but we do try to encourage you to reproduce + +01:02:54.960 --> 01:02:57.380 +it on master if we think that it matters. + +01:02:57.720 --> 01:03:00.920 +Yeah, so if you can, that's even better. + +01:03:01.620 --> 01:03:03.940 +But if the bug is there in Emacs 29, + +01:03:03.940 --> 01:03:06.000 +maybe we want to fix it in Emacs 29.2. + +01:03:06.340 --> 01:03:09.820 +So the latest point release is also fine. + +01:03:10.400 --> 01:03:12.940 +Bugs in Emacs 28 at this point, + +01:03:12.940 --> 01:03:14.780 +like the previous major version, + +01:03:15.060 --> 01:03:17.720 +we might ask you to try to reproduce it on + +01:03:17.720 --> 01:03:19.600 +Emacs 29 because we're not planning more + +01:03:19.600 --> 01:03:21.600 +releases of old major versions. + +01:03:21.600 --> 01:03:23.660 +So that's the fundamental reason for that. + +01:03:24.480 --> 01:03:25.820 +Great. Thank you for your answer. + +01:03:25.900 --> 01:03:27.680 +All right. Moving on to the next question. + +01:03:27.840 --> 01:03:29.280 +On branching off sub-threads, + +01:03:29.680 --> 01:03:31.840 +I note that they are less visible compared to + +01:03:31.840 --> 01:03:33.380 +starting a new thread in practice. + +01:03:33.520 --> 01:03:35.680 +I am wondering if it is just my impression or + +01:03:35.680 --> 01:03:37.400 +something devs also observe. + +01:03:37.920 --> 01:03:39.780 +Yeah, it's true. That's correct. + +01:03:41.400 --> 01:03:42.840 +I don't know what to do about it. + +01:03:42.840 --> 01:03:44.160 +If you want more visibility, + +01:03:44.180 --> 01:03:45.920 +I guess just start a new thread. + +01:03:47.080 --> 01:03:48.960 +I don't know. I can only agree, + +01:03:48.960 --> 01:03:50.880 +really. I concur. That's true. + +01:03:51.720 --> 01:03:54.260 +Okay. Next question. What about rewriting + +01:03:54.340 --> 01:03:57.100 +Emacs in Rust? Use Guile instead of Elisp. + +01:03:57.260 --> 01:03:59.580 +Multi-threaded Emacs. Make Emacs prettier and + +01:03:59.580 --> 01:04:01.760 +shiny. And of course, same defaults. + +01:04:02.220 --> 01:04:04.440 +Just kidding. We are spoiled children because + +01:04:04.440 --> 01:04:07.780 +you and Eli, Lars, and etc do an impressive + +01:04:08.420 --> 01:04:10.620 +work. I live in Emacs since 2001. + +01:04:11.040 --> 01:04:14.220 +Thanks. That was a good 1. + +01:04:14.220 --> 01:04:17.880 +Sane defaults. Okay, Well, + +01:04:18.900 --> 01:04:20.580 +thank you. Thanks for that comment. + +01:04:20.580 --> 01:04:23.440 +That made me chuckle. Next question by the + +01:04:23.440 --> 01:04:24.520 +same person, I assume. + +01:04:24.520 --> 01:04:26.580 +The only downside I see with copyright + +01:04:26.580 --> 01:04:28.900 +assignment is that 1 has to disclose their + +01:04:28.900 --> 01:04:31.240 +real identity. Would it be a possibility to + +01:04:31.240 --> 01:04:32.860 +assign a copyright under a nickname? + +01:04:33.160 --> 01:04:34.840 +Yeah, you don't have to say a real name. + +01:04:34.840 --> 01:04:37.260 +Just register some pseudonym. + +01:04:37.360 --> 01:04:39.440 +The FSF does need your real name, + +01:04:39.440 --> 01:04:41.420 +but that's kept private only. + +01:04:41.500 --> 01:04:45.920 +So feel free to reach out to assign at + +01:04:45.920 --> 01:04:48.360 +gnu.org and ask more about that. + +01:04:49.860 --> 01:04:51.680 +Right. All right, next question. + +01:04:51.820 --> 01:04:53.400 +Do you think it is possible to reach an + +01:04:53.400 --> 01:04:55.240 +agreement on sane defaults for better + +01:04:55.240 --> 01:04:57.220 +out-of-the-box experience? + +01:04:57.800 --> 01:05:00.040 +Yeah, so your sane is not my sane + +01:05:00.060 --> 01:05:01.760 +necessarily. So that's the fundamental + +01:05:01.780 --> 01:05:02.960 +problem that we're discussing here. + +01:05:02.960 --> 01:05:03.960 +I think it's a social, + +01:05:03.960 --> 01:05:05.240 +not a technical problem. + +01:05:05.380 --> 01:05:07.580 +We do change defaults sometimes, + +01:05:07.640 --> 01:05:09.880 +but I mean, there is also some staying power. + +01:05:09.880 --> 01:05:12.260 +So it's understandable that, + +01:05:12.260 --> 01:05:13.940 +you know, it's, we can't just change them + +01:05:13.940 --> 01:05:15.920 +willy nilly and then flip flop between, + +01:05:15.920 --> 01:05:18.340 +you know, 1 or the other kind of thing. + +01:05:18.340 --> 01:05:20.060 +So it does take a little bit more time. + +01:05:20.060 --> 01:05:22.860 +But yeah, sure, we can. + +01:05:23.000 --> 01:05:25.860 +We do change defaults at times. + +01:05:26.380 --> 01:05:29.780 +But it's perhaps more slower than what some + +01:05:29.780 --> 01:05:31.420 +people would prefer, for sure. + +01:05:31.640 --> 01:05:36.000 +So that's, yeah. Right, + +01:05:36.000 --> 01:05:37.620 +all right. We have 2 more questions. + +01:05:37.920 --> 01:05:40.020 +So will XWidgets have a future? + +01:05:40.120 --> 01:05:42.180 +Seeing the new bugs popping up in the latest + +01:05:42.740 --> 01:05:45.280 +XWidget dev. Not sure if there was the rest + +01:05:45.280 --> 01:05:46.640 +of the question, But on XWidgets, + +01:05:46.640 --> 01:05:47.940 +can you tell us a little more? + +01:05:48.740 --> 01:05:50.580 +I'm not really following now. + +01:05:50.580 --> 01:05:52.400 +I mean, I'm not seeing a lot of development + +01:05:52.500 --> 01:05:54.180 +on XWidgets currently. + +01:05:54.480 --> 01:05:57.100 +Some people have done work in fixing up a few + +01:05:57.100 --> 01:06:00.320 +bugs, but I think that feature really needs + +01:06:00.380 --> 01:06:02.180 +more love. So I think we need, + +01:06:02.180 --> 01:06:03.600 +you know, help is welcome, + +01:06:03.600 --> 01:06:05.920 +patch is welcome. That's what I can say about + +01:06:05.920 --> 01:06:11.180 +that. All right, and our final question of + +01:06:11.180 --> 01:06:13.140 +the day. Have you voted for Emacs as the + +01:06:13.140 --> 01:06:15.140 +software of the year on the Tuxes by Jupyter + +01:06:15.140 --> 01:06:17.480 +Broadcasting? I did because Emacs 29 is + +01:06:17.480 --> 01:06:19.300 +great. Thank you. Okay, + +01:06:19.300 --> 01:06:20.580 +well, good job voting. + +01:06:20.580 --> 01:06:22.960 +I didn't know, I don't know what Tuxy is on + +01:06:22.960 --> 01:06:25.680 +Jupyter broadcasting, but look it up and go + +01:06:25.680 --> 01:06:28.040 +vote. So I wish I could tell you, + +01:06:28.040 --> 01:06:29.500 +I assume with Tux, it might be something + +01:06:29.500 --> 01:06:32.900 +related to Linux, but that's as much as I can + +01:06:32.900 --> 01:06:34.840 +say. All right, well, Stefan, + +01:06:34.960 --> 01:06:36.600 +thank you so much for taking the time not + +01:06:36.600 --> 01:06:38.000 +only to do a wonderful presentation, + +01:06:38.000 --> 01:06:39.640 +but also for answering all the questions of + +01:06:39.640 --> 01:06:41.240 +the community. Do you have anything else to + +01:06:41.240 --> 01:06:45.360 +add? Just really thanks for all the questions + +01:06:45.360 --> 01:06:46.760 +and thanks for staying. + +01:06:47.780 --> 01:06:49.600 +It's been a long day, a long conference, + +01:06:49.600 --> 01:06:51.180 +so thanks for staying and listening to my + +01:06:51.180 --> 01:06:52.540 +talk as well. Really appreciate it. + +01:06:52.540 --> 01:06:54.280 +Appreciate the good work you guys are doing + +01:06:54.280 --> 01:06:55.460 +behind the scenes, organizing, + +01:06:55.520 --> 01:06:56.740 +setting everything up. + +01:06:57.040 --> 01:07:00.420 +And really humbled to be a part of this + +01:07:00.420 --> 01:07:02.060 +community. So thank you all. + +01:07:02.680 --> 01:07:05.860 +Well I can assure you that no 1 either in the + +01:07:05.860 --> 01:07:08.040 +organization team or the people watching now + +01:07:08.040 --> 01:07:10.900 +felt like it was tiring to stay and listen to + +01:07:10.900 --> 01:07:12.760 +your answers. So thank you so much Stefan. diff --git a/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt new file mode 100644 index 00000000..2c46c976 --- /dev/null +++ b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt @@ -0,0 +1,38 @@ +WEBVTT + + +00:00:00.000 --> 00:01:35.399 +Introduction + +00:01:35.400 --> 00:02:01.159 +Cubing in Emacs + +00:02:01.160 --> 00:02:32.039 +Prior art + +00:02:32.040 --> 00:03:16.519 +The name + +00:03:16.520 --> 00:03:49.239 +What's in wca-prep + +00:03:49.240 --> 00:04:03.080 +Demo + +00:05:15.340 --> 00:07:09.219 +Challenges: Representing the cube + +00:07:09.220 --> 00:08:09.499 +Scrambling + +00:08:09.500 --> 00:08:56.419 +Visualization + +00:08:56.420 --> 00:09:55.579 +UI with Transient + +00:09:55.580 --> 00:11:12.579 +Book-keeping with SQLite + +00:11:12.580 --> 00:13:30.860 +Conclusion diff --git a/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt new file mode 100644 index 00000000..db303c95 --- /dev/null +++ b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt @@ -0,0 +1,803 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:08.359 +Hello, everyone, and welcome to Speedcubing in Emacs. + +00:00:08.360 --> 00:00:10.119 +First of all, a little bit about myself. + +00:00:10.120 --> 00:00:13.679 +My name is Vasilij Schneidermann. Online, I go by wasamasa. + +00:00:13.680 --> 00:00:18.039 +I'm 31 years old. I work in information security, + +00:00:18.040 --> 00:00:20.479 +and I do consulting and hacking + +00:00:20.480 --> 00:00:22.479 +and stuff like figuring out + +00:00:22.480 --> 00:00:25.279 +how to break into other people's computers + +00:00:25.280 --> 00:00:29.359 +and how to secure their systems basically. + +00:00:29.360 --> 00:00:31.439 +You can reach me by email. + +00:00:31.440 --> 00:00:36.639 +I do have a self-hosted code repository thingy going on. + +00:00:36.640 --> 00:00:40.399 +I have a blog, and you can find me + +00:00:40.400 --> 00:00:45.919 +in some other places online, like IRC for example. + +00:00:45.920 --> 00:00:48.679 +So about the talk itself, + +00:00:48.680 --> 00:00:52.839 +I used to be into the Rubik's cube when I was in school. + +00:00:52.840 --> 00:00:54.039 +I forgot about it, though, + +00:00:54.040 --> 00:00:56.279 +because these cubes were not very good. + +00:00:56.280 --> 00:01:02.279 +Recently I did find some cheap looking cube at a shop. + +00:01:02.280 --> 00:01:04.119 +Did not pay terribly much for it. + +00:01:04.120 --> 00:01:07.039 +It was so, so much better than my old cube, + +00:01:07.040 --> 00:01:08.639 +it was unreal. + +00:01:08.640 --> 00:01:11.479 +This motivated me to get back into + +00:01:11.480 --> 00:01:13.559 +this really weird kind of hobby. + +00:01:13.560 --> 00:01:17.999 +For this, you need to be good at producing + +00:01:18.000 --> 00:01:19.399 +a truly random scramble + +00:01:19.400 --> 00:01:22.319 +and timing your attempts to get any better at it. + +00:01:22.320 --> 00:01:23.719 +There is, of course, existing software + +00:01:23.720 --> 00:01:26.239 +to do the scrambling for you and the recording + +00:01:26.240 --> 00:01:28.079 +and the timekeeping and such, + +00:01:28.080 --> 00:01:31.239 +but all the good options seem to be either web or mobile, + +00:01:31.240 --> 00:01:33.239 +for example the cstimer software + +00:01:33.240 --> 00:01:35.399 +or the twisty-timer app on Android. + + +NOTE Cubing in Emacs + +00:01:35.400 --> 00:01:39.319 +To my surprise, I did not find a single decent option + +00:01:39.320 --> 00:01:41.959 +inside Emacs, so this is basically a case study + +00:01:41.960 --> 00:01:44.999 +how to do better. For this, I wanted to make use of + +00:01:45.000 --> 00:01:47.799 +all the cool new Emacs features that appeared, + +00:01:47.800 --> 00:01:50.879 +like the SVG library; Transient, + +00:01:50.880 --> 00:01:53.599 +the library used for the Magit-style interfaces; + +00:01:53.600 --> 00:01:56.439 +and the recently added sqlite-mode. + +00:01:56.440 --> 00:02:01.159 +And most importantly it was about having fun. + +NOTE Prior art + +00:02:01.160 --> 00:02:02.759 +So here's a full list of prior art, + +00:02:02.760 --> 00:02:04.279 +I will not go into detail about this, + +00:02:04.280 --> 00:02:06.239 +but basically we have things solving + +00:02:06.240 --> 00:02:08.039 +very different parts of this, + +00:02:08.040 --> 00:02:10.759 +but not all of it. For example: we have several, + +00:02:10.760 --> 00:02:14.239 +we have a timer. We have several solvers. + +00:02:14.240 --> 00:02:16.039 +We have some scramblers. + +00:02:16.040 --> 00:02:19.359 +We have some whole-cube simulators, including a 3D one. + +00:02:19.360 --> 00:02:20.759 +We have something for making it easier + +00:02:20.760 --> 00:02:23.119 +to enter your algorithms in the notation. + +00:02:23.120 --> 00:02:25.919 +But nothing that does all of those things in one package, + +00:02:25.920 --> 00:02:28.119 +which kind of surprised me. + +00:02:28.120 --> 00:02:32.039 +So I present the `wca-prep` package. + +NOTE The name + +00:02:32.040 --> 00:02:35.559 +So the name, I found it difficult + +00:02:35.560 --> 00:02:39.959 +to come up with a good name and so I looked + +00:02:39.960 --> 00:02:42.559 +and I saw, well there's this World Cube Association + +00:02:42.560 --> 00:02:46.039 +that holds these competitions where you compete. + +00:02:46.040 --> 00:02:47.759 +They do this for the Rubik's cube + +00:02:47.760 --> 00:02:48.919 +but also a few others, + +00:02:48.920 --> 00:02:50.799 +so there's like a standardized list + +00:02:50.800 --> 00:02:52.639 +of events they have for this. + +00:02:52.640 --> 00:02:55.159 +There is a standard notation for this + +00:02:55.160 --> 00:02:56.519 +and rules and everything. + +00:02:56.520 --> 00:02:58.199 +And the goal of my package is basically + +00:02:58.200 --> 00:03:01.279 +to help prepare myself for such a competition + +00:03:01.280 --> 00:03:03.679 +and in fact a week ago I went to my first one + +00:03:03.680 --> 00:03:06.719 +which was wild, but pretty cool. + +00:03:06.720 --> 00:03:10.919 +So for this reason I chose this name wca-prep, + +00:03:10.920 --> 00:03:13.639 +because it helps me prepare for this kind of competition + +00:03:13.640 --> 00:03:16.519 +and this limited the scope significantly, + +NOTE What's in wca-prep + +00:03:16.520 --> 00:03:18.999 +I have a scrambler, visualization of the scramble, + +00:03:19.000 --> 00:03:23.319 +timer, and statistics. + +00:03:23.320 --> 00:03:25.559 +I excluded pretty much everything else I've seen. + +00:03:25.560 --> 00:03:28.788 +For this reason, I only tried to focus on + +00:03:28.789 --> 00:03:32.199 +some very basic puzzles I can solve comfortably, + +00:03:32.200 --> 00:03:34.839 +and did not want to do anything else + +00:03:34.840 --> 00:03:36.439 +that may complicate things significantly. + +00:03:36.440 --> 00:03:40.479 +No other kinds of puzzles, no simulation, no solving, + +00:03:40.480 --> 00:03:43.919 +no exotic events, and no specialized scrambles + +00:03:43.920 --> 00:03:49.239 +that are only good for practicing specific algorithms. + +NOTE Demo + +00:03:49.240 --> 00:03:54.199 +So at this point the organizer should hopefully show + +00:03:54.200 --> 00:03:57.999 +a small video I've prepared, a one minute video showing how + +00:03:58.000 --> 00:05:15.239 +I actually use this to solve a cube and to time my solve. + +NOTE Challenges: Representing the cube + +00:05:15.240 --> 00:05:18.508 +Okay, so building this thing, there were several challenges. + +00:05:18.509 --> 00:05:20.508 +The first one was how do I even represent + +00:05:20.509 --> 00:05:22.468 +the state of a Rubik's cube. + +00:05:22.469 --> 00:05:25.508 +For this there are many possible representations, + +00:05:25.509 --> 00:05:27.708 +no obvious best solution. + +00:05:27.709 --> 00:05:29.628 +I did not, well, what helped me was that + +00:05:29.629 --> 00:05:31.988 +I did not have to programmatically solve this thing, + +00:05:31.989 --> 00:05:35.188 +so I picked the easiest possible representation + +00:05:35.189 --> 00:05:38.268 +which is just an array of every single facelet. + +00:05:38.269 --> 00:05:42.508 +For a 3x3 cube you have 9 facelets on one side, + +00:05:42.509 --> 00:05:47.268 +so times 6 sides you would have 54 elements in this array. + +00:05:47.269 --> 00:05:49.708 +So with this representation, it's very simple, + +00:05:49.709 --> 00:05:52.388 +but it's kind of weird to do scrambles with this. + +00:05:52.389 --> 00:05:54.908 +But otherwise, it worked very, very well. + +00:05:54.909 --> 00:05:57.268 +In the future, I plan to learn some group theory, + +00:05:57.269 --> 00:05:58.748 +pick a better representation + +00:05:58.749 --> 00:06:01.188 +and do this in a much, much more elegant way + +00:06:01.189 --> 00:06:07.868 +without compromising speed too much. + +00:06:07.869 --> 00:06:10.708 +Yes. Once I had the representation, + +00:06:10.709 --> 00:06:13.628 +the scrambling itself should not be too hard. + +00:06:13.629 --> 00:06:17.748 +For this, it's important to consider that basically + +00:06:17.749 --> 00:06:19.148 +if you do a face turn + +00:06:19.149 --> 00:06:22.428 +you end up swapping some facelets with other facelets, + +00:06:22.429 --> 00:06:26.028 +that's the easiest way to think about this. + +00:06:26.029 --> 00:06:29.268 +To determine which one goes into which one's position, + +00:06:29.269 --> 00:06:32.470 +it was pretty confusing to figure this out. + +00:06:32.471 --> 00:06:34.308 +For this I went through a few papers, + +00:06:34.309 --> 00:06:36.028 +and I found one which suggested + +00:06:36.029 --> 00:06:37.948 +to just build a cube out of paper, + +00:06:37.949 --> 00:06:40.028 +number every facelet, and turn it + +00:06:40.029 --> 00:06:44.348 +and keep track of which facelet moved into which position. + +00:06:44.349 --> 00:06:47.508 +And programmatically, the `cl-rotatef` macro + +00:06:47.509 --> 00:06:49.388 +was very, very useful for doing this kind of + +00:06:49.389 --> 00:06:51.628 +in-place swapping you need for this operation. + +00:06:51.629 --> 00:06:54.868 +So in the future, group theory would hopefully + +00:06:54.869 --> 00:06:57.988 +make this a bit less awkward. + +00:06:57.989 --> 00:07:00.108 +Here's a photo of this paper cube I made + +00:07:00.109 --> 00:07:03.868 +along with a real cube. As you can see + +00:07:03.869 --> 00:07:07.348 +mathematically speaking, they are the same thing, + +00:07:07.349 --> 00:07:09.268 +they just look very, very different. + +NOTE Scrambling + +00:07:09.269 --> 00:07:14.308 +So the scramble algorithm itself, + +00:07:14.309 --> 00:07:19.428 +I pondered how this would even be done. In the competitions, + +00:07:19.429 --> 00:07:21.588 +They do this in a very, very elaborate way. + +00:07:21.589 --> 00:07:22.748 +They generate a random cube, + +00:07:22.749 --> 00:07:25.388 +they try to solve it, and if it's solvable + +00:07:25.389 --> 00:07:28.548 +they use these solution moves + +00:07:28.549 --> 00:07:30.828 +to turn into a scramble basically. + +00:07:30.829 --> 00:07:34.948 +And they also make sure to canonicalize the moves, + +00:07:34.949 --> 00:07:38.548 +so if you have subsequent moves that can be simplified, + +00:07:38.549 --> 00:07:40.588 +they do simplify these as much as possible. + +00:07:40.589 --> 00:07:41.228 +For example, + +00:07:41.229 --> 00:07:43.748 +if you have two subsequent rotations in one direction, + +00:07:43.749 --> 00:07:46.668 +it's turned into a different kind of rotation, + +00:07:46.669 --> 00:07:49.388 +so 90 and 90 equals 180. + +00:07:49.389 --> 00:07:53.308 +And the other Elisp scramblers I looked at, + +00:07:53.309 --> 00:07:55.108 +they generate random moves. + +00:07:55.109 --> 00:07:57.508 +Some of them do canonicalize. Not all of them. + +00:07:57.509 --> 00:08:00.908 +This one tries to do the best low-fi thing, + +00:08:00.909 --> 00:08:02.388 +that is, generating random moves, + +00:08:02.389 --> 00:08:04.028 +canonicalizing and repeating + +00:08:04.029 --> 00:08:09.548 +until enough have been generated. + +NOTE Visualization + +00:08:09.549 --> 00:08:13.148 +For the visualization I had to figure out + +00:08:13.149 --> 00:08:14.508 +something else too complicated. + +00:08:14.509 --> 00:08:17.228 +For this, I tried to figure out + +00:08:17.229 --> 00:08:19.868 +where every facelift would end up in the puzzle view + +00:08:19.869 --> 00:08:21.428 +when you would unfold it. + +00:08:21.429 --> 00:08:25.668 +And for this, I did not consider the facelet orientation. + +00:08:25.669 --> 00:08:29.268 +This may be important later for some other puzzles + +00:08:29.269 --> 00:08:31.148 +where you can end up with very twisted faces, + +00:08:31.149 --> 00:08:33.028 +but for simple cubes, it's not a problem. + +00:08:33.029 --> 00:08:36.308 +My initial prototype used colored text, + +00:08:36.309 --> 00:08:38.748 +but later, I used the SVG library. + +00:08:38.749 --> 00:08:41.588 +It turned out to be easy enough to use, actually. + +00:08:41.589 --> 00:08:46.108 +Currently, I have hard-coded face-color mappings, + +00:08:46.109 --> 00:08:49.108 +but I plan to replace this so that theming is possible. + +00:08:49.109 --> 00:08:51.588 +For example, if you happen to have a cube + +00:08:51.589 --> 00:08:54.689 +that does not have the same color mappings as I do, + +00:08:54.690 --> 00:08:56.468 +then you should be able to fix this. + +NOTE UI with Transient + +00:08:56.469 --> 00:09:01.428 +Next challenge was to build + +00:09:01.429 --> 00:09:03.948 +a beautiful intuitive UI with Transient. + +00:09:03.949 --> 00:09:06.868 +The reason why I chose this is + +00:09:06.869 --> 00:09:10.348 +because it would be self-documenting and Magit-style, + +00:09:10.349 --> 00:09:12.348 +and everyone knows how Magit works basically. + +00:09:12.349 --> 00:09:15.308 +Since Transient has become part of Emacs, + +00:09:15.309 --> 00:09:17.228 +there is really no reason to not try it out. + +00:09:17.229 --> 00:09:21.668 +The problem was documentation is difficult to understand. + +00:09:21.669 --> 00:09:23.388 +It's very abstract and high level, + +00:09:23.389 --> 00:09:25.868 +and it's hard to figure out. "Okay, + +00:09:25.869 --> 00:09:26.788 +I want to do something, + +00:09:26.789 --> 00:09:28.908 +how am I supposed to do this?" + +00:09:28.909 --> 00:09:33.348 +I did find transient-showcase, which has lots of examples, + +00:09:33.349 --> 00:09:35.628 +but they don't really feel finished + +00:09:35.629 --> 00:09:39.068 +and not realistic enough. + +00:09:39.069 --> 00:09:40.748 +When I tried to use the package, + +00:09:40.749 --> 00:09:42.908 +I got plenty of unhelpful error messages + +00:09:42.909 --> 00:09:44.108 +when using it incorrectly. + +00:09:44.109 --> 00:09:45.948 +I did manage to figure it out, + +00:09:45.949 --> 00:09:50.588 +but I plan to find more actual examples of it, + +00:09:50.589 --> 00:09:53.428 +to have an executable reference basically + +00:09:53.429 --> 00:09:55.628 +and try to improve my use of it. + +NOTE Book-keeping with SQLite + +00:09:55.629 --> 00:10:01.548 +For the book-keeping, I used SQLite. + +00:10:01.549 --> 00:10:04.548 +This is a very recent addition to Emacs, + +00:10:04.549 --> 00:10:07.308 +it only appeared in the current major version. + +00:10:07.309 --> 00:10:09.388 +It's still very early days. + +00:10:09.389 --> 00:10:13.028 +I found some oddities, one of them turned out to be + +00:10:13.029 --> 00:10:14.828 +a bug in the transaction macro. + +00:10:14.829 --> 00:10:17.588 +Like basically, if you do an SQL transaction + +00:10:17.589 --> 00:10:20.188 +and an error happens, then every helper I found + +00:10:20.189 --> 00:10:20.948 +does a rollback on an error. + +00:10:20.949 --> 00:10:26.748 +But this one did not. It actually committed on an error, + +00:10:26.749 --> 00:10:29.868 +and this was very weird to figure out. + +00:10:29.869 --> 00:10:34.308 +I reported a bug. Eli was nice enough to send me a patch. + +00:10:34.309 --> 00:10:35.428 +We did some patch review, + +00:10:35.429 --> 00:10:37.988 +and he ended up fixing it properly. + +00:10:37.989 --> 00:10:45.668 +So yes, there's still a lot to be done there, and yeah, + +00:10:45.669 --> 00:10:46.908 +the API is very basic. + +00:10:46.909 --> 00:10:48.908 +You don't have convenience helpers + +00:10:48.909 --> 00:10:51.308 +like fetch the first row or fetch the first value + +00:10:51.309 --> 00:10:54.429 +or anything, but they're easy enough to write yourself. + +00:10:54.430 --> 00:10:56.369 +And the biggest challenge with this bookkeeping part + +00:10:56.370 --> 00:10:58.028 +was figuring out a decent schema, + +00:10:58.029 --> 00:11:00.148 +like how to organize data correctly + +00:11:00.149 --> 00:11:02.348 +so that it would not be awkward to manipulate. + +00:11:02.349 --> 00:11:05.748 +And with this, you can finally build a package + +00:11:05.749 --> 00:11:07.388 +that remembers its state properly + +00:11:07.389 --> 00:11:10.468 +and don't have to run into foot guns + +00:11:10.469 --> 00:11:12.628 +with Lisp-style serialization, deserialization. + +NOTE Conclusion + +00:11:12.629 --> 00:11:18.188 +So yes, that concludes it so far. + +00:11:18.189 --> 00:11:22.188 +So what did I learn from this exercise? + +00:11:22.189 --> 00:11:24.508 +Well, there are still plenty of packages + +00:11:24.509 --> 00:11:25.588 +for Emacs to be written. + +00:11:25.589 --> 00:11:28.908 +If you think everything you can think of + +00:11:28.909 --> 00:11:31.348 +or you need has already been written, well, guess what? + +00:11:31.349 --> 00:11:31.788 +No. + +00:11:31.789 --> 00:11:34.044 +These are still plenty of specialized things + +00:11:34.045 --> 00:11:36.788 +that could need your help. + +00:11:36.789 --> 00:11:39.788 +These cubes do not require advanced mathematics, + +00:11:39.789 --> 00:11:41.148 +contrary to what you may think. + +00:11:41.149 --> 00:11:44.708 +Yes, you can apply advanced mathematics to them + +00:11:44.709 --> 00:11:47.468 +if you want to, but you don't have to. + +00:11:47.469 --> 00:11:50.988 +What surprised me about this is basically group theory. + +00:11:50.989 --> 00:11:52.068 +I've heard of it before. + +00:11:52.069 --> 00:11:53.828 +It seemed to be a meme, basically, + +00:11:53.829 --> 00:11:56.468 +because it has been like mostly Haskell people + +00:11:56.469 --> 00:11:58.188 +being very excited about this + +00:11:58.189 --> 00:12:02.508 +and it seemed kind of, like, divorced from reality, basically. + +00:12:02.509 --> 00:12:05.948 +But this puzzle, it actually proves that yes, + +00:12:05.949 --> 00:12:06.948 +it has its use. + +00:12:06.949 --> 00:12:08.428 +It definitely has. + +00:12:08.429 --> 00:12:11.388 +You just have to find the right problem matching it, + +00:12:11.389 --> 00:12:13.468 +and yeah. + +00:12:13.469 --> 00:12:15.388 +So yeah, once I understand it better, + +00:12:15.389 --> 00:12:18.548 +the topic, I expect to write better code. + +00:12:18.549 --> 00:12:24.468 +These new Emacs features, they work well enough. + +00:12:24.469 --> 00:12:25.908 +There are some rough edges. + +00:12:25.909 --> 00:12:27.428 +They definitely need more testing. + +00:12:27.429 --> 00:12:30.668 +So please, please, everyone, + +00:12:30.669 --> 00:12:34.548 +if you write Elisp, please try SQLite or Transient + +00:12:34.549 --> 00:12:36.708 +or anything else that looks cool and shiny. + +00:12:36.709 --> 00:12:38.468 +Report bugs. + +00:12:38.469 --> 00:12:41.588 +Find ways to improve them, anything. And yeah, + +00:12:41.589 --> 00:12:44.868 +I'm sure that if we do this, + +00:12:44.869 --> 00:12:47.668 +then Emacs will continue to get even better. + +00:12:47.669 --> 00:12:51.788 +So yeah, what's next for this package? + +00:12:51.789 --> 00:12:55.988 +Well, I could... There are lots of obvious UI improvements + +00:12:55.989 --> 00:12:57.348 +and testing to be done. + +00:12:57.349 --> 00:12:59.708 +I basically want to reach feature parity + +00:12:59.709 --> 00:13:02.428 +with the twisty-timer app, which this is very much inspired by. + +00:13:02.429 --> 00:13:06.668 +I want nice-looking stats like graphical ones + +00:13:06.669 --> 00:13:08.788 +instead of just a simple list of times. + +00:13:08.789 --> 00:13:11.228 +And I want support for more puzzles, of course, + +00:13:11.229 --> 00:13:12.548 +not just the simple cubes, + +00:13:12.549 --> 00:13:14.588 +but as I progress learning these puzzles, + +00:13:14.589 --> 00:13:18.068 +I want to have Emacs supporting me for this. + +00:13:18.069 --> 00:13:22.428 +But generally, it's a very open-ended package. + +00:13:22.429 --> 00:13:26.628 +And this concludes the talk. + +00:13:26.629 --> 00:13:30.909 +Thank you very much. diff --git a/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt b/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt new file mode 100644 index 00000000..7a93ee4c --- /dev/null +++ b/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt @@ -0,0 +1,1652 @@ +WEBVTT + + +00:00:02.419 --> 00:00:08.480 +2 seconds. All right. I think we are live. + +00:00:08.480 --> 00:00:10.280 +Yes. So, hi again, everyone. + +00:00:10.580 --> 00:00:13.620 +I have the pleasure to welcome John Wiegley + +00:00:13.620 --> 00:00:15.440 +in person to this EmacsConf. + +00:00:15.700 --> 00:00:17.260 +Hi, John. Hello there. + +00:00:17.680 --> 00:00:18.820 +How are you doing, Leo? + +00:00:18.820 --> 00:00:21.100 +I am doing fantastic, and even more now that + +00:00:21.100 --> 00:00:23.540 +I am in a room with you because we've been, + +00:00:24.279 --> 00:00:25.640 +we were reminiscing with Sacha. + +00:00:25.640 --> 00:00:30.860 +So you had been there in person in 2013 And + +00:00:30.860 --> 00:00:32.680 +since we started doing those online, + +00:00:32.680 --> 00:00:35.020 +Juan, since 2019, I think you've always been + +00:00:35.020 --> 00:00:38.460 +online, right? Usually it's a pre-recorded + +00:00:38.520 --> 00:00:40.440 +video. I think this will be the first 1 I do + +00:00:40.440 --> 00:00:42.540 +live in a long time. You're right. + +00:00:42.540 --> 00:00:44.239 +I'm saying we are online right now, + +00:00:44.239 --> 00:00:45.920 +but I just meant pre-recorded video. + +00:00:45.920 --> 00:00:48.400 +So it's good to have you almost in person or + +00:00:48.400 --> 00:00:50.900 +at least live and we are excited to hear + +00:00:50.900 --> 00:00:52.360 +about some of the Emacs news. + +00:00:52.360 --> 00:00:54.780 +So the floor is yours. + +00:00:55.080 --> 00:00:56.900 +All right, well welcome everybody. + +00:00:57.260 --> 00:01:00.239 +This is the yearly state of the Emacs union, + +00:01:00.239 --> 00:01:02.860 +I guess, about how Emacs development is + +00:01:02.860 --> 00:01:05.379 +going. Just to note, I am not currently a + +00:01:05.379 --> 00:01:07.760 +maintainer of Emacs. So what I do to get + +00:01:07.760 --> 00:01:09.920 +these notes is I call up my friend, + +00:01:09.920 --> 00:01:12.040 +Eli Zaretsky, 1 of the current Emacs + +00:01:12.040 --> 00:01:13.820 +maintainers, and he and I sit down for an + +00:01:13.820 --> 00:01:17.160 +hour, and he just gives me his dump of what's + +00:01:17.160 --> 00:01:19.400 +been going on. So I'm sort of just the + +00:01:19.400 --> 00:01:22.200 +messenger here. But thanks to Eli for these + +00:01:22.200 --> 00:01:24.400 +notes and all of the efforts that he + +00:01:24.400 --> 00:01:27.400 +contributes. So what he's been telling me is + +00:01:27.400 --> 00:01:30.060 +that this Emacs 29 release that we had + +00:01:30.060 --> 00:01:31.720 +recently looks to have been very, + +00:01:31.720 --> 00:01:33.580 +very successful, which is some good news, + +00:01:33.580 --> 00:01:35.420 +because there were a lot of new features, + +00:01:35.660 --> 00:01:37.360 +and some of those features were actually + +00:01:37.360 --> 00:01:39.520 +quite radical. So far, + +00:01:39.520 --> 00:01:40.680 +it's been quite a success, + +00:01:40.680 --> 00:01:42.440 +no serious problems with it, + +00:01:42.440 --> 00:01:44.080 +and we have Emacs 29.2 + +00:01:45.140 --> 00:01:46.740 +will be released very soon. + +00:01:47.260 --> 00:01:50.020 +They are thinking now about starting the + +00:01:50.020 --> 00:01:53.080 +Emacs 30 release cycle soon after 29.2 + +00:01:53.520 --> 00:01:55.880 +is released, where the release branch, + +00:01:55.880 --> 00:01:58.120 +which is called Emacs-30 usually, + +00:01:59.060 --> 00:02:01.400 +will be cut and then development will become + +00:02:01.400 --> 00:02:03.960 +frozen with only bug fixes going into that + +00:02:03.960 --> 00:02:07.200 +branch. That may take quite some time until + +00:02:07.200 --> 00:02:09.639 +it actually comes to fruition as a release, + +00:02:09.639 --> 00:02:11.660 +but at least it means that the release is + +00:02:11.660 --> 00:02:13.860 +going to start taking shape in that branch + +00:02:13.860 --> 00:02:17.720 +soon. So, for now, Emacs 30 looks like maybe + +00:02:17.720 --> 00:02:19.540 +it's going to be a little less interesting + +00:02:19.600 --> 00:02:23.160 +than Emacs 29 was, meaning not a huge number + +00:02:23.160 --> 00:02:25.120 +of changing features. But there are still + +00:02:25.120 --> 00:02:26.820 +some new things going in. + +00:02:26.980 --> 00:02:29.960 +So 1 of them is that Emacs 30 is going to + +00:02:29.960 --> 00:02:32.300 +have Android support. So you will be able to + +00:02:32.300 --> 00:02:34.900 +run Emacs 30 on your Android devices. + +00:02:35.140 --> 00:02:37.120 +So if you've ever wanted to have native Emacs + +00:02:37.120 --> 00:02:39.500 +on a tablet, which I know I've always wanted, + +00:02:40.140 --> 00:02:42.940 +that will become possible with Emacs 30. + +00:02:43.140 --> 00:02:45.480 +There's also going to be much better support + +00:02:45.480 --> 00:02:46.780 +for touchscreen devices, + +00:02:47.440 --> 00:02:50.260 +coincidentally, both laptops and tablets. + +00:02:50.740 --> 00:02:53.240 +So that'll enhance that Android support. + +00:02:54.860 --> 00:02:57.180 +There will be some recently gained support + +00:02:57.240 --> 00:03:01.720 +for LLDB in GUD.dl. So if you're on a Mac OS + +00:03:01.720 --> 00:03:05.580 +machine or a machine that uses just LLVM as + +00:03:05.580 --> 00:03:07.060 +part of the compilation process, + +00:03:07.400 --> 00:03:10.180 +then you probably are familiar with LLDB as + +00:03:10.180 --> 00:03:11.380 +the command line debugger. + +00:03:11.720 --> 00:03:14.940 +And that support for using LLDB through a GUD + +00:03:15.040 --> 00:03:17.320 +will become possible in Emacs 30. + +00:03:17.320 --> 00:03:19.000 +I'm looking forward to this actually quite a + +00:03:19.000 --> 00:03:22.620 +bit as well. C Perl mode is being deprecated, + +00:03:23.200 --> 00:03:25.920 +and all future work now is only being put + +00:03:25.920 --> 00:03:30.660 +towards C Perl mode. Another 1 is that there + +00:03:30.660 --> 00:03:33.000 +are going to be some new major modes based on + +00:03:33.000 --> 00:03:35.780 +TreeSitter. They will be for the languages + +00:03:35.860 --> 00:03:38.160 +Lua, Elixir, and HTML. + +00:03:38.800 --> 00:03:39.980 +And if you're not familiar, + +00:03:40.160 --> 00:03:42.620 +I think TreeSitter was introduced in Emacs + +00:03:42.620 --> 00:03:46.660 +29. It's a library that allows you to specify + +00:03:47.460 --> 00:03:49.900 +the grammar of a programming language as a + +00:03:49.900 --> 00:03:53.300 +BNF file, and I think using JavaScript, + +00:03:53.540 --> 00:03:56.600 +and then with that file as input to Emacs, + +00:03:56.600 --> 00:03:59.840 +it is then able to do syntax highlighting, + +00:04:00.940 --> 00:04:03.080 +syntax discovery, all of those things within + +00:04:03.080 --> 00:04:06.140 +Emacs without having to use elisp and regexps + +00:04:06.460 --> 00:04:08.300 +to discover the structure of the language. + +00:04:08.300 --> 00:04:10.440 +It defers the structure gathering to + +00:04:10.440 --> 00:04:13.420 +TreeSitter and then uses that information to + +00:04:13.420 --> 00:04:14.560 +navigate the language. + +00:04:15.200 --> 00:04:17.300 +So, As time goes on, you'll see more and more + +00:04:17.300 --> 00:04:19.540 +languages taking on TreeSetter support. + +00:04:19.540 --> 00:04:21.160 +So the next 3 coming up, + +00:04:21.160 --> 00:04:22.660 +Lua, Elixir, and HTML. + +00:04:24.060 --> 00:04:26.680 +And then the last feature for Emacs 30 is + +00:04:26.680 --> 00:04:29.860 +that the byte compiler will now detect and + +00:04:29.860 --> 00:04:32.920 +warn about many more questionable constructs. + +00:04:33.340 --> 00:04:35.300 +Things like empty macro bodies, + +00:04:35.740 --> 00:04:37.160 +missing lexical constructs, + +00:04:37.580 --> 00:04:40.220 +or say, condition case without any handlers. + +00:04:40.580 --> 00:04:43.340 +Just silly stuff that might litter the code, + +00:04:43.340 --> 00:04:45.180 +but now you'll get a warning about it from + +00:04:45.180 --> 00:04:46.920 +the byte compiler to help you clean up the + +00:04:46.920 --> 00:04:49.160 +code and get rid of those potential sites of + +00:04:49.160 --> 00:04:52.740 +error. So this is the main thing that will be + +00:04:52.740 --> 00:04:55.160 +worked on for Emacs 30 and what's looked like + +00:04:55.160 --> 00:04:56.400 +shaping up for the release. + +00:04:56.680 --> 00:04:58.940 +And also, he wanted me to announce that + +00:04:58.940 --> 00:05:01.340 +Stefan Kongas is now a new co-maintainer. + +00:05:01.980 --> 00:05:03.260 +And Stefan is, I believe, + +00:05:03.260 --> 00:05:05.500 +here with us in the conference and he'll be + +00:05:05.500 --> 00:05:07.940 +able, I hope, to help me answer any questions + +00:05:08.080 --> 00:05:10.120 +about future Emacs development because I'm + +00:05:10.120 --> 00:05:12.240 +not in the heat of it and don't have all + +00:05:12.240 --> 00:05:13.600 +those answers at the moment. + +00:05:14.580 --> 00:05:17.180 +So That is all there is as far as a + +00:05:17.180 --> 00:05:18.840 +development update for now. + +00:05:19.340 --> 00:05:21.980 +And I am available to take any questions. + +00:05:24.860 --> 00:05:26.200 +All right. Thank you so much, + +00:05:26.200 --> 00:05:29.340 +Sean, for being the messenger of all this + +00:05:29.340 --> 00:05:31.820 +good news. I mean, you did start by saying + +00:05:31.820 --> 00:05:33.480 +this would not be as exciting, + +00:05:33.600 --> 00:05:36.280 +perhaps, as prior releases of Emacs, + +00:05:36.280 --> 00:05:38.980 +but you then proceeded to say a lot of stuff + +00:05:38.980 --> 00:05:40.760 +that it felt very exciting to me. + +00:05:40.760 --> 00:05:43.620 +So good, good. Glad to hear that. + +00:05:44.540 --> 00:05:47.180 +Right. So we do have questions coming in + +00:05:47.180 --> 00:05:50.380 +already and again people the link is on IRC + +00:05:50.380 --> 00:05:52.120 +and also on the talks page if you want to + +00:05:52.120 --> 00:05:53.260 +start asking questions. + +00:05:53.480 --> 00:05:54.840 +So John what I'm going to do I'm going to + +00:05:54.840 --> 00:05:56.580 +read you the questions and then you can + +00:05:56.580 --> 00:05:58.300 +answer them. Is that okay with you? + +00:05:58.320 --> 00:06:01.620 +Absolutely. So starting with the first + +00:06:01.620 --> 00:06:04.440 +question which changes in recent Emacs + +00:06:04.440 --> 00:06:06.540 +releases are you enjoying using? + +00:06:08.360 --> 00:06:11.820 +I have really liked the visual line mode. + +00:06:13.140 --> 00:06:15.060 +I'm not sure how recent that is. + +00:06:15.060 --> 00:06:16.820 +Some of these features I only discovered + +00:06:16.840 --> 00:06:19.580 +quite late, the new display line number + +00:06:19.700 --> 00:06:21.380 +functionality, where it's much, + +00:06:21.380 --> 00:06:23.040 +much, much faster, and of course, + +00:06:23.040 --> 00:06:25.320 +native compilation. Native compilation has + +00:06:25.320 --> 00:06:27.360 +been quite brilliant for some of the larger + +00:06:27.360 --> 00:06:29.480 +packages that I use. I do a lot of stuff in + +00:06:29.480 --> 00:06:31.820 +Emacs. I use GNU's, I use E-Shell, + +00:06:31.820 --> 00:06:33.540 +I use Org Mode quite a lot. + +00:06:33.580 --> 00:06:36.100 +So native compilation has brought the user + +00:06:36.100 --> 00:06:39.960 +experience much closer to a modern app than + +00:06:39.960 --> 00:06:42.180 +some of the lagging and slowness that I might + +00:06:42.180 --> 00:06:43.580 +have experienced in the past. + +00:06:44.340 --> 00:06:47.180 +Definitely. Moving on to the next question. + +00:06:47.260 --> 00:06:49.200 +What do you think the future in the area of + +00:06:49.200 --> 00:06:51.040 +artificial intelligence from the developer + +00:06:51.060 --> 00:06:53.580 +point of view? Could you say that 1 more + +00:06:53.580 --> 00:06:54.876 +time? Your voice broke up a little bit. + +00:06:54.876 --> 00:06:55.025 +Oh, sorry. What do you think the future in + +00:06:55.025 --> 00:06:55.141 +the area of artificial intelligence from the + +00:06:55.141 --> 00:06:55.208 +developer point of view? + +00:06:55.208 --> 00:06:55.324 +Could you say that 1 more time? + +00:06:55.324 --> 00:06:55.440 +Your voice broke up a little bit. + +00:06:55.440 --> 00:06:58.100 +Oh, sorry. What do you think the future in + +00:06:58.100 --> 00:07:00.580 +the area of artificial intelligence from the + +00:07:00.580 --> 00:07:01.560 +developer point of view? + +00:07:01.560 --> 00:07:02.860 +It's also a shaky question, + +00:07:02.860 --> 00:07:04.500 +I think, but you get the point. + +00:07:04.960 --> 00:07:09.220 +I do use chat-gpt-shell inside of Emacs quite + +00:07:09.220 --> 00:07:10.920 +a bit, actually, when doing development in + +00:07:10.920 --> 00:07:12.440 +other languages. Just the other day, + +00:07:12.440 --> 00:07:15.200 +I was working on my Ledger accounting + +00:07:15.220 --> 00:07:18.080 +program, and I haven't done a lot of C++ in + +00:07:18.080 --> 00:07:21.180 +recent years. So I had forgotten how to + +00:07:21.180 --> 00:07:23.760 +exactly compare 2 strings only up to the + +00:07:23.760 --> 00:07:25.020 +length of the shortest string. + +00:07:25.020 --> 00:07:26.940 +I know I could have cranked that out just + +00:07:26.940 --> 00:07:28.740 +writing it C style, but I didn't remember + +00:07:28.740 --> 00:07:30.800 +what the current state of the art is for C++ + +00:07:30.940 --> 00:07:33.460 +and the STL. So I just asked chatGPT. + +00:07:33.680 --> 00:07:36.140 +I asked the exact question that I just said + +00:07:36.140 --> 00:07:38.220 +to you and sure enough it popped out the + +00:07:38.220 --> 00:07:40.080 +one-liner that was exactly what I needed. + +00:07:40.080 --> 00:07:42.240 +So I think in terms of developer assistance, + +00:07:42.800 --> 00:07:45.820 +not having to keep all of standard libraries + +00:07:45.860 --> 00:07:47.460 +or common idioms in memory. + +00:07:47.520 --> 00:07:49.460 +I don't know if other people are familiar + +00:07:49.480 --> 00:07:51.080 +with Rosetta Stone projects. + +00:07:51.460 --> 00:07:53.680 +They're projects where you have say a hundred + +00:07:53.680 --> 00:07:55.780 +different languages and there's a particular + +00:07:55.860 --> 00:07:58.640 +question, say, how do I read a file and copy + +00:07:58.640 --> 00:07:59.720 +it to another location? + +00:07:59.820 --> 00:08:01.880 +And then it has an instance of doing that + +00:08:01.880 --> 00:08:03.820 +activity for every 1 of those languages. + +00:08:04.180 --> 00:08:05.140 +That's a great database, + +00:08:05.140 --> 00:08:07.160 +and I've used them quite a bit in the past + +00:08:07.160 --> 00:08:09.260 +for remembering how to do certain things, + +00:08:09.440 --> 00:08:12.540 +say, converting a string to UTF-8. + +00:08:13.280 --> 00:08:15.660 +I think that AI does a great job of + +00:08:15.660 --> 00:08:17.780 +completely replacing the need for databases + +00:08:17.900 --> 00:08:19.920 +like that because you can just ask how do I + +00:08:19.920 --> 00:08:21.980 +copy a convert a string to UTF-8. + +00:08:23.760 --> 00:08:27.440 +Yeah exactly and you know especially with + +00:08:27.440 --> 00:08:30.480 +languages which are tried well tried you know + +00:08:30.480 --> 00:08:32.360 +it's very easy to get an answer that is + +00:08:32.360 --> 00:08:34.940 +correct. But sometimes what I find bothersome + +00:08:34.940 --> 00:08:37.460 +with this type of coding, + +00:08:37.460 --> 00:08:39.840 +I think it's AI-aided coding, + +00:08:39.840 --> 00:08:40.820 +but it's still coding, + +00:08:41.120 --> 00:08:43.140 +is that, especially with C languages, + +00:08:43.140 --> 00:08:44.240 +sometimes you're going to end up with + +00:08:44.240 --> 00:08:45.860 +undefined behaviors and stuff like this just + +00:08:45.860 --> 00:08:47.900 +because other people have been doing it, + +00:08:47.900 --> 00:08:50.860 +not because the algorithm or the model was + +00:08:50.860 --> 00:08:53.680 +trained with data that dates back to 10 years + +00:08:53.680 --> 00:09:00.060 +ago. At the time, C++ was a little different. + +00:09:00.060 --> 00:09:01.400 +Anyway, I'm not here to talk, + +00:09:01.400 --> 00:09:03.960 +you are here to talk. Moving on to the next + +00:09:03.960 --> 00:09:06.560 +question. People already get to hear my voice + +00:09:06.560 --> 00:09:09.640 +plenty, whereas yours are much sparser. + +00:09:10.520 --> 00:09:13.580 +All right. So, what is the future of Emacs on + +00:09:13.580 --> 00:09:16.080 +macOS? I understand that there are too few + +00:09:16.080 --> 00:09:17.420 +developers for the platform. + +00:09:17.440 --> 00:09:21.600 +Is that still true? That's a good question. + +00:09:21.600 --> 00:09:23.620 +I don't know what the current statistics are. + +00:09:23.620 --> 00:09:27.040 +I've been a user of Emacs on Mac OS for + +00:09:27.040 --> 00:09:29.920 +decades now. It feels like the, + +00:09:30.140 --> 00:09:33.480 +There's also that Mac port version of Emacs, + +00:09:33.480 --> 00:09:35.920 +which builds Emacs more directly using the + +00:09:35.920 --> 00:09:37.860 +GUI libraries on the platform. + +00:09:38.300 --> 00:09:40.320 +That continues to be updated with every + +00:09:40.320 --> 00:09:42.040 +single new release that comes out. + +00:09:42.620 --> 00:09:45.220 +So I'd say that the support may not be as + +00:09:45.220 --> 00:09:47.540 +great as it is on Linux and other platforms, + +00:09:47.640 --> 00:09:50.500 +but to this day I haven't suffered from being + +00:09:50.500 --> 00:09:55.220 +a Mac user. Great. The only thing I remember + +00:09:55.240 --> 00:10:00.480 +about Emacs on macOS was that emojis made it + +00:10:00.480 --> 00:10:03.540 +inside the GUI first before they did it + +00:10:03.540 --> 00:10:05.820 +anywhere else. That's the 1 anecdote that I + +00:10:05.820 --> 00:10:09.520 +have on MacOS. Right. And historically that + +00:10:09.520 --> 00:10:12.720 +feature was removed in order to prevent Mac + +00:10:12.720 --> 00:10:14.840 +from having features that Linux did not. + +00:10:15.160 --> 00:10:16.860 +I didn't want to go into that point. + +00:10:16.860 --> 00:10:18.340 +I just wanted to mention the beginning of the + +00:10:18.340 --> 00:10:19.840 +anecdote and people can find it out. + +00:10:19.840 --> 00:10:22.040 +But yes, that's also what it led to. + +00:10:24.020 --> 00:10:25.340 +Moving on to the next question. + +00:10:25.640 --> 00:10:28.120 +Why aren't you contributing to Emacs anymore? + +00:10:28.140 --> 00:10:29.360 +Lack of time, I guess? + +00:10:30.240 --> 00:10:31.840 +Lack of time, primarily. + +00:10:32.300 --> 00:10:33.840 +Work has been very consuming. + +00:10:33.900 --> 00:10:36.020 +There are a lot of other projects and things + +00:10:36.020 --> 00:10:39.000 +that I like doing. I still find Emacs Lisp + +00:10:39.000 --> 00:10:40.460 +very, very fun to write. + +00:10:40.840 --> 00:10:43.260 +Just the other day, I was hacking up some + +00:10:43.260 --> 00:10:45.760 +extension macros for myself for org mode. + +00:10:45.920 --> 00:10:48.900 +But to have the time needed to sit down and + +00:10:48.900 --> 00:10:51.580 +design a whole new mode and work on it. + +00:10:51.580 --> 00:10:53.660 +I've been spending a lot of my time now in + +00:10:53.660 --> 00:10:55.580 +functional languages, especially theorem + +00:10:55.580 --> 00:10:57.840 +provers. I just find that so intellectually + +00:10:58.100 --> 00:10:59.620 +satisfying and interesting. + +00:11:00.400 --> 00:11:01.860 +Plus it pays a lot better. + +00:11:01.860 --> 00:11:03.680 +Never had a paying job as an Emacs list + +00:11:03.680 --> 00:11:06.420 +developer. So when it comes to now just being + +00:11:06.420 --> 00:11:08.380 +a fun language or a hobby language, + +00:11:08.420 --> 00:11:10.680 +it is relegated to the time that I have free + +00:11:10.680 --> 00:11:13.680 +when it's available. Right. + +00:11:13.700 --> 00:11:15.420 +Well, the good thing is that it's kind of + +00:11:15.420 --> 00:11:16.360 +like riding a bicycle, + +00:11:16.360 --> 00:11:17.980 +you know, writing a major mode, + +00:11:17.980 --> 00:11:20.160 +it comes back relatively quickly and still + +00:11:20.160 --> 00:11:22.600 +enjoyable. You know, the other day, + +00:11:22.600 --> 00:11:25.200 +actually, I took notes on a mode that I + +00:11:25.200 --> 00:11:28.100 +wanted to write. There's an app I use on the + +00:11:28.100 --> 00:11:30.060 +Mac called drafts, and I really love it. + +00:11:30.060 --> 00:11:31.460 +I use it all the time. + +00:11:31.720 --> 00:11:34.600 +I wanted to mimic the interface of this app + +00:11:34.600 --> 00:11:37.620 +in Emacs. So I could use Emacs as my drafts + +00:11:37.680 --> 00:11:40.060 +application rather than this separate 1. + +00:11:40.440 --> 00:11:42.720 +So I noted down all the different user + +00:11:42.720 --> 00:11:44.580 +parameters and how it should function and + +00:11:44.580 --> 00:11:47.240 +everything to describe the app to myself as + +00:11:47.240 --> 00:11:50.320 +sort of notes to get me started on that work + +00:11:50.320 --> 00:11:52.460 +when I did have free time to work on it. + +00:11:52.540 --> 00:11:54.760 +Somebody out there on the internet just saw + +00:11:54.760 --> 00:11:57.040 +these notes, because I keep a lot of my stuff + +00:11:57.040 --> 00:11:59.680 +on GitHub. They fed it to chat GPT, + +00:12:00.280 --> 00:12:01.960 +going back to your AI question. + +00:12:02.220 --> 00:12:04.540 +And they actually sent back to me a mode that + +00:12:04.540 --> 00:12:06.640 +implemented everything that I had said, + +00:12:06.820 --> 00:12:07.740 +which was effectively, + +00:12:08.200 --> 00:12:10.960 +chat GPT, seeing that what I had described + +00:12:10.960 --> 00:12:14.500 +was clear enough for it to derive most of the + +00:12:14.500 --> 00:12:16.560 +code that I would have wanted to write. + +00:12:16.560 --> 00:12:19.200 +So maybe, maybe another thing that AI can do + +00:12:19.200 --> 00:12:20.880 +is it can increase the value, + +00:12:21.340 --> 00:12:23.400 +the efficiency of my free time. + +00:12:24.360 --> 00:12:26.820 +Exactly. I think that's a wonderful point. + +00:12:27.120 --> 00:12:29.540 +And phrasing it as efficiency of free time is + +00:12:29.540 --> 00:12:31.360 +great because you still have the expertise, + +00:12:31.360 --> 00:12:33.420 +obviously, that you're mobilizing into the + +00:12:33.420 --> 00:12:35.560 +design that you're formulating to charge DPT, + +00:12:35.860 --> 00:12:37.680 +but then this expertise is turned into + +00:12:37.680 --> 00:12:39.060 +something that actually works. + +00:12:40.080 --> 00:12:41.780 +Perhaps we're all going to become software + +00:12:41.780 --> 00:12:42.980 +architects at some point, + +00:12:42.980 --> 00:12:45.800 +and then the busy work of actually coding the + +00:12:45.800 --> 00:12:48.760 +library and the software will be relegated to + +00:12:48.760 --> 00:12:51.000 +AI. That's an interesting future where we + +00:12:51.000 --> 00:12:55.240 +still, however, need to acquire the skills to + +00:12:55.240 --> 00:12:56.660 +know what is code, I suppose. + +00:12:56.660 --> 00:12:58.880 +But that's an interesting future to think of. + +00:13:00.940 --> 00:13:02.060 +A fairly long question. + +00:13:02.060 --> 00:13:04.280 +So 1 of the tricky things about running Emacs + +00:13:04.280 --> 00:13:06.900 +on Android is do you use anything that + +00:13:06.900 --> 00:13:08.320 +requires extra packages? + +00:13:08.420 --> 00:13:11.600 +Example like PDF tools with new PDF or going + +00:13:11.600 --> 00:13:13.820 +with a database, playing music or video with + +00:13:13.820 --> 00:13:15.840 +MPD or MPV on Bonga, LFeed. + +00:13:16.320 --> 00:13:17.900 +Do you run Emacs Termex, + +00:13:18.040 --> 00:13:20.200 +Emacs APK, Emacs in virtual machine? + +00:13:20.200 --> 00:13:22.420 +This is also the case on Emacs for Windows to + +00:13:22.420 --> 00:13:23.980 +a lesser degree. So summarizing, + +00:13:24.280 --> 00:13:27.240 +how do you make Emacs work on Android if you + +00:13:27.240 --> 00:13:30.040 +do not have the synergy of stuff that you + +00:13:30.040 --> 00:13:32.560 +usually find on Linux systems like MPV and + +00:13:32.560 --> 00:13:34.420 +all the fancy applications like this? + +00:13:35.340 --> 00:13:38.380 +It's a good question. Since I'm not an + +00:13:38.380 --> 00:13:40.460 +Android user and I've never tried running + +00:13:40.460 --> 00:13:42.020 +Emacs on Android platforms, + +00:13:42.100 --> 00:13:44.920 +I'm not sure what's available out there to + +00:13:44.920 --> 00:13:46.440 +plug Emacs into. I mean, + +00:13:46.440 --> 00:13:48.160 +effectively, that question comes down to + +00:13:48.160 --> 00:13:50.420 +external dependencies and system support. + +00:13:50.940 --> 00:13:53.320 +That would be a great question for Stefan or + +00:13:53.320 --> 00:13:55.740 +somebody who has tried using Emacs, + +00:13:56.200 --> 00:13:58.600 +the development version of Emacs on Android. + +00:14:00.660 --> 00:14:03.980 +Great. We'll put a pin in this for Stéphane + +00:14:04.540 --> 00:14:07.580 +afterwards. Great, so moving on to the next + +00:14:07.580 --> 00:14:09.860 +question. Will Org Tech someday become the + +00:14:09.860 --> 00:14:11.320 +default tech mode in Emacs? + +00:14:11.320 --> 00:14:14.880 +And if so, when? Will Org what become? + +00:14:15.240 --> 00:14:17.980 +Org Tech, you know, the LaTeX mode. + +00:14:19.120 --> 00:14:24.840 +I do not know. It's been a while since I've + +00:14:24.840 --> 00:14:26.880 +done LaTeX. It must have been like 4 years, + +00:14:26.880 --> 00:14:30.280 +but it was a pretty, the major mode for + +00:14:30.280 --> 00:14:32.560 +editing documents, like the state of the art + +00:14:32.560 --> 00:14:34.840 +for editing latex documents in Emacs. + +00:14:34.940 --> 00:14:36.320 +And apparently it's not default. + +00:14:36.340 --> 00:14:38.360 +I assume there's latex mode or something that + +00:14:38.360 --> 00:14:41.580 +is doing it. So were you saying octech, + +00:14:41.760 --> 00:14:45.020 +like A-U-C tech? Oh, did I not pronounce the + +00:14:45.020 --> 00:14:48.140 +C? Octech, yes. I thought you said org tech. + +00:14:48.140 --> 00:14:49.620 +I wasn't familiar with that. + +00:14:50.280 --> 00:14:52.540 +Octech is the only 1 I've ever used. + +00:14:52.640 --> 00:14:55.360 +I know there is a built-in LaTeX mode, + +00:14:55.580 --> 00:14:57.240 +but I've never used it. + +00:14:57.240 --> 00:14:59.140 +I always just download whatever the latest + +00:14:59.140 --> 00:15:01.160 +version of Org Tech is and use that. + +00:15:01.280 --> 00:15:03.840 +I don't know why it's not a standard package. + +00:15:03.840 --> 00:15:07.360 +Becoming a standard package has its own costs + +00:15:07.360 --> 00:15:09.860 +for the development cycle because it slows + +00:15:09.860 --> 00:15:11.740 +down release cycle quite a bit. + +00:15:12.120 --> 00:15:14.680 +It's now you have to create PRs that are + +00:15:14.680 --> 00:15:17.240 +reviewed by the Emacs Devel mailing list. + +00:15:17.620 --> 00:15:19.340 +It is a little more inertia. + +00:15:19.340 --> 00:15:21.680 +Of course, it gets you more distribution + +00:15:21.940 --> 00:15:24.020 +because it's a default package now, + +00:15:24.020 --> 00:15:26.100 +and everybody can be using that. + +00:15:26.140 --> 00:15:28.600 +But it's not something every developer + +00:15:28.660 --> 00:15:31.400 +decides to do. It took a few years, + +00:15:31.400 --> 00:15:34.620 +in fact, to get usePackage into Emacs core. + +00:15:34.660 --> 00:15:37.200 +And that only happened after it was so stable + +00:15:37.200 --> 00:15:39.360 +that it really wasn't receiving many changes + +00:15:39.360 --> 00:15:44.760 +anymore. Yeah, yeah it's it's the thing when + +00:15:44.760 --> 00:15:46.720 +you move into core you lose a lot of your + +00:15:46.720 --> 00:15:49.280 +agility in terms of how you're writing the + +00:15:49.280 --> 00:15:50.940 +code or how you expand code. + +00:15:51.300 --> 00:15:54.220 +That's why you have this vibrant community on + +00:15:54.220 --> 00:15:57.680 +Melpa compared to core but you know it + +00:15:57.740 --> 00:15:59.480 +doesn't necessarily ought to be this way it + +00:15:59.480 --> 00:16:02.320 +could be a little different you know And it + +00:16:02.320 --> 00:16:04.580 +feels like there's this repetition between + +00:16:04.760 --> 00:16:06.820 +repartition, sorry, between people developing + +00:16:06.820 --> 00:16:08.600 +for the core of Emacs and people developing + +00:16:08.600 --> 00:16:10.760 +on Melpa, but at the end of the day those 2 + +00:16:10.760 --> 00:16:13.020 +groups are constantly talking to 1 another + +00:16:13.180 --> 00:16:15.240 +and taking cues from 1 another as well. + +00:16:15.240 --> 00:16:17.540 +So that's great. And there's of course... + +00:16:18.820 --> 00:16:21.880 +May I jump in about this particular question + +00:16:21.900 --> 00:16:25.080 +because I think I mean You know, + +00:16:25.080 --> 00:16:27.540 +Org Mode doesn't really have any problems + +00:16:27.540 --> 00:16:29.380 +with releases Correct. + +00:16:29.380 --> 00:16:32.820 +Just because it's distributed with Emacs so + +00:16:32.860 --> 00:16:35.020 +there is a difference between being in the + +00:16:35.020 --> 00:16:37.960 +core proper and being distributed with Emacs. + +00:16:38.520 --> 00:16:40.080 +And for something like use packages, + +00:16:40.080 --> 00:16:42.280 +it's really necessary to be in the core. + +00:16:42.600 --> 00:16:44.840 +But for something like major mode, + +00:16:45.060 --> 00:16:48.740 +it's a bit easier. That's a very very good + +00:16:48.740 --> 00:16:50.400 +point. Yeah, I'd forgotten about that + +00:16:50.400 --> 00:16:53.000 +distinction. Org mode does advance pretty + +00:16:53.000 --> 00:16:55.900 +rapidly and then it makes releases into the + +00:16:55.900 --> 00:16:59.640 +core distribution. Gianni, + +00:16:59.640 --> 00:17:01.480 +I believe you also wanted to say something + +00:17:01.480 --> 00:17:03.840 +before someone started jumped in with a + +00:17:03.840 --> 00:17:08.700 +question do you happen to remember okay + +00:17:08.700 --> 00:17:12.020 +that's fine I lost her to lost to their time + +00:17:12.560 --> 00:17:14.560 +I'll be moving on to the next question then + +00:17:15.700 --> 00:17:17.460 +and by the way feel free to interrupt us you + +00:17:17.460 --> 00:17:19.619 +know The whole point of this discussion is + +00:17:19.619 --> 00:17:21.140 +for you to ask questions to John Wheatley. + +00:17:21.140 --> 00:17:23.520 +So whether it be via the other pad or via + +00:17:23.520 --> 00:17:26.180 +BBB, choose your weapon. + +00:17:27.260 --> 00:17:28.820 +All right, moving on to the next question in + +00:17:28.820 --> 00:17:30.520 +the meantime. And we have about 7 minutes + +00:17:30.520 --> 00:17:32.760 +left of Q&A and then we'll be moving on to + +00:17:32.760 --> 00:17:35.780 +Stéphane. So, do you use other IDEs for + +00:17:35.780 --> 00:17:38.040 +theorem proving work, notably VS Code for + +00:17:38.040 --> 00:17:42.340 +Lean? Which languages and provers can or do + +00:17:42.340 --> 00:17:45.920 +you use Emacs for? I've only used Emacs. + +00:17:46.120 --> 00:17:49.840 +I've used Emacs for working with ACL 2, + +00:17:49.960 --> 00:17:53.480 +Coq, Agda, and Lean, and I really love + +00:17:53.480 --> 00:17:55.680 +Proof-General. Coq is my favorite language to + +00:17:55.680 --> 00:17:57.740 +be working in. Agda has really great support + +00:17:57.740 --> 00:17:59.540 +as well, has a very nice Emacs mode. + +00:17:59.540 --> 00:18:02.920 +I'm only just now starting to get into Lean + +00:18:02.920 --> 00:18:05.140 +4. So I have everything installed, + +00:18:05.280 --> 00:18:07.240 +but I haven't really started coding in + +00:18:07.240 --> 00:18:08.800 +earnest. I'm still reading a lot of the + +00:18:08.800 --> 00:18:10.920 +tutorials and learning a bit about the + +00:18:10.920 --> 00:18:13.440 +language. There was a while there where I + +00:18:13.440 --> 00:18:17.540 +used a IDE for ACL 2 that was outside of + +00:18:17.540 --> 00:18:19.920 +Emacs, only because it was the same IDE all + +00:18:19.920 --> 00:18:22.040 +my co-workers were using and it was easier to + +00:18:22.040 --> 00:18:24.240 +share tips and tricks with them. + +00:18:24.520 --> 00:18:28.240 +But yeah, no, I found Emacs to be a great + +00:18:28.240 --> 00:18:29.860 +home for doing theorem proving. + +00:18:32.120 --> 00:18:36.580 +Right. Next question. Can we see that AI + +00:18:36.580 --> 00:18:40.760 +generated draft? You know what you mentioned + +00:18:40.760 --> 00:18:43.420 +before about the draft that you then fed into + +00:18:43.420 --> 00:18:45.480 +ChargPT? Do you happen to have this draft + +00:18:45.480 --> 00:18:51.440 +anywhere? Let me see if it's still on GitHub. + +00:18:51.760 --> 00:18:54.300 +Just take me 1 second to take a look here. + +00:18:55.260 --> 00:18:59.820 +Take your time. The problem is I don't quite + +00:18:59.820 --> 00:19:01.820 +remember where I made the note. + +00:19:04.700 --> 00:19:07.260 +But no, I don't see it on GitHub, + +00:19:07.340 --> 00:19:09.840 +so I don't have it readily at hand. + +00:19:10.580 --> 00:19:13.240 +Well, that's fine. We'll be able to... + +00:19:13.520 --> 00:19:15.060 +Well, if you happen to find it, + +00:19:15.060 --> 00:19:17.280 +we'll make sure to add it on the pad and then + +00:19:17.280 --> 00:19:20.940 +on the talks page. And I think we would all + +00:19:20.940 --> 00:19:22.440 +be interested to see what this design + +00:19:22.440 --> 00:19:27.160 +document that actually made something work + +00:19:27.160 --> 00:19:28.980 +afterwards in JudgeDPT with Elisp. + +00:19:28.980 --> 00:19:30.720 +I'm very interested to see what it would do + +00:19:30.720 --> 00:19:32.720 +because I tend to be very interested about + +00:19:32.720 --> 00:19:34.780 +this type of stuff I had generated but I + +00:19:34.780 --> 00:19:36.860 +never thought about doing it with Elisp + +00:19:37.040 --> 00:19:39.000 +because somehow it feels like 2 different + +00:19:39.000 --> 00:19:41.020 +worlds, like Elisp is kind of from the past, + +00:19:41.260 --> 00:19:44.040 +don't going me wrong, I love it and I use it + +00:19:44.140 --> 00:19:46.920 +every day But it's 2 different parts of my + +00:19:46.920 --> 00:19:48.820 +brain that I didn't think about linking. + +00:19:48.820 --> 00:19:51.100 +So I'd be very excited to see this as well. + +00:19:53.040 --> 00:19:54.640 +Moving on to the next question. + +00:19:54.640 --> 00:19:56.980 +Oh, go on, please. I did find it. + +00:19:57.260 --> 00:20:01.080 +I'm gonna have to give it to you as a link + +00:20:01.080 --> 00:20:03.380 +here. Sure, you can do it on the blue button + +00:20:03.380 --> 00:20:05.900 +and I'll put it on the pad. + +00:20:10.160 --> 00:20:12.540 +I put it into the public chat for Bibi. + +00:20:12.960 --> 00:20:15.920 +Yes. So if anyone is interested, + +00:20:15.920 --> 00:20:18.280 +I'm putting it right in the answer to the + +00:20:18.280 --> 00:20:20.200 +question right here on my screen. + +00:20:20.200 --> 00:20:22.120 +So feel free to click on it and explore it. + +00:20:22.120 --> 00:20:23.680 +I'm kind of curious, so I'm gonna... + +00:20:23.680 --> 00:20:25.560 +Can I click it on stream and can we look at + +00:20:25.560 --> 00:20:26.620 +it a little bit together? + +00:20:26.740 --> 00:20:29.020 +Sure, sure. I haven't tried running it, + +00:20:29.020 --> 00:20:31.680 +I can't say for its fitness, + +00:20:31.680 --> 00:20:34.220 +but it's definitely enough of the groundwork + +00:20:34.400 --> 00:20:36.660 +done that it's absolutely an assistance. + +00:20:38.100 --> 00:20:40.260 +Right. Okay, so it's loading up right now? + +00:20:41.540 --> 00:20:42.620 +You can see my webcam, + +00:20:42.620 --> 00:20:45.680 +right? I can see your browser attempting to + +00:20:45.680 --> 00:20:47.360 +load. There we go. Okay, + +00:20:47.360 --> 00:20:50.060 +cool. So I'm not sure what GitHub is doing. + +00:20:50.060 --> 00:20:51.460 +Let me give it a little more room. + +00:20:51.460 --> 00:20:54.360 +The reactive setup is not working too well. + +00:20:57.260 --> 00:20:58.840 +Oh, I see. You're viewing the... + +00:20:59.540 --> 00:21:02.220 +I see. Can I see the file then? + +00:21:02.220 --> 00:21:04.020 +I should be able to see the file. + +00:21:06.460 --> 00:21:09.060 +I think he just mentions the code in that + +00:21:09.060 --> 00:21:11.640 +comment. So if there's a way to view only the + +00:21:11.640 --> 00:21:14.897 +comment it would make it clear. + +00:21:14.897 --> 00:21:16.660 +Right. Okay. I'm loading the file separately. + +00:21:17.320 --> 00:21:18.500 +I'm checking the time. + +00:21:18.740 --> 00:21:21.340 +We have about 3 minutes left and I think we + +00:21:21.340 --> 00:21:22.900 +have a question. In the meantime, + +00:21:22.900 --> 00:21:25.760 +whilst I show this, I'm gonna launch another + +00:21:25.760 --> 00:21:28.820 +question, which was about Drafts. + +00:21:29.440 --> 00:21:30.740 +You are carrying, you're talking about + +00:21:30.740 --> 00:21:32.480 +Drafts, but does that mean you're not using + +00:21:32.480 --> 00:21:35.920 +org anymore? Oh, no, I use org all the time. + +00:21:35.920 --> 00:21:38.100 +In fact, the way that I've configured drafts + +00:21:38.160 --> 00:21:40.580 +is that after I type the thing in the note + +00:21:40.580 --> 00:21:43.260 +into drafts, I hit a key and it creates an + +00:21:43.260 --> 00:21:45.420 +org mode capture item for it. + +00:21:45.540 --> 00:21:48.560 +The reason why I use Drafts instead of Emacs + +00:21:48.560 --> 00:21:50.660 +is because it's always available. + +00:21:51.100 --> 00:21:53.960 +If Emacs is currently doing some job for me, + +00:21:53.960 --> 00:21:56.340 +say I'm running some long-running subshell + +00:21:57.060 --> 00:21:59.440 +and the UI is frozen up whatnot, + +00:21:59.700 --> 00:22:02.360 +Drafts is always 100% of the time instantly + +00:22:02.360 --> 00:22:04.900 +available. So that's why I tend to then lean + +00:22:04.900 --> 00:22:07.920 +on it a bit, but all of the destination of + +00:22:07.920 --> 00:22:10.240 +that data is still Org Mode and everything + +00:22:10.240 --> 00:22:12.460 +that I do gets tracked through Org Mode. + +00:22:13.080 --> 00:22:16.160 +That's also why I wanted to implement the UI + +00:22:16.160 --> 00:22:18.800 +scheme of drafts in Emacs so that I could + +00:22:18.800 --> 00:22:20.860 +drop the use of this external application. + +00:22:21.540 --> 00:22:23.160 +And then, I mean, I would still have the + +00:22:23.160 --> 00:22:25.580 +problem of sometimes Emacs being unavailable, + +00:22:26.060 --> 00:22:30.040 +but I would pay that price in order to have + +00:22:30.040 --> 00:22:32.700 +that good UI of drafts inside Emacs. + +00:22:34.640 --> 00:22:37.700 +Great. I think we have, + +00:22:38.420 --> 00:22:39.720 +we might be too tight on time. + +00:22:39.720 --> 00:22:41.640 +We only have about 2 minutes and I need to + +00:22:41.640 --> 00:22:44.180 +jump room to go into Stephane's room as well. + +00:22:44.440 --> 00:22:47.380 +So John, where I get to thank you so much for + +00:22:47.380 --> 00:22:53.160 +taking the time to answer our questions, + +00:22:53.260 --> 00:22:55.040 +but also doing a little bit of reporting on + +00:22:55.040 --> 00:22:58.380 +the state of Emacs. And now we'll get to + +00:22:58.380 --> 00:22:59.280 +continue this with Stéphane. + +00:22:59.280 --> 00:23:01.300 +So do you have any last words for everyone, + +00:23:01.300 --> 00:23:03.660 +John? No, no. I look forward to hearing + +00:23:03.660 --> 00:23:06.420 +Stéphane speak. Okay, great. + +00:23:06.420 --> 00:23:07.360 +And we'll look forward, + +00:23:07.360 --> 00:23:09.300 +potentially, to having you again next year, + +00:23:10.520 --> 00:23:12.680 +potentially still doing news like this, + +00:23:12.980 --> 00:23:15.920 +and, fingers crossed, maybe having you live + +00:23:15.920 --> 00:23:18.660 +again. Maybe, maybe let's see what happens. + +00:23:19.700 --> 00:23:20.860 +All right, John. Thank you so much. + +00:23:20.860 --> 00:23:22.280 +Bye bye. Bye bye. diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt new file mode 100644 index 00000000..28d655f0 --- /dev/null +++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt @@ -0,0 +1,593 @@ +WEBVTT + + +00:00:03.639 --> 00:00:04.019 +[Speaker 0]: Well, we have about, I think, + +00:00:06.339 --> 00:00:06.839 +10 or 15 minutes of on-stream Q&A time. + +00:00:10.320 --> 00:00:10.559 +But if there's more questions than that, + +00:00:11.420 --> 00:00:11.920 +people are welcome to stay. + +00:00:14.200 --> 00:00:14.639 +If Mike has the time to answer some more, + +00:00:15.060 --> 00:00:15.560 +then Awesome. + +00:00:20.920 --> 00:00:21.060 +[Speaker 1]: Yeah, I will be around for the rest of the + +00:00:22.440 --> 00:00:22.940 +conference. So I am spudpnds, + +00:00:26.580 --> 00:00:27.080 +which is spud upside down on IRC, + +00:00:29.640 --> 00:00:30.140 +if you want to hit me up on IRC. + +00:00:30.860 --> 00:00:31.360 +Nice. + +00:00:42.800 --> 00:00:43.300 +[Speaker 0]: I see we already have a question on the pad, + +00:00:45.920 --> 00:00:46.080 +and it is, did you develop a variant of your + +00:00:46.920 --> 00:00:47.420 +document for CentOS? + +00:00:52.840 --> 00:00:53.239 +[Speaker 1]: I did not. I have not messed with any other + +00:00:56.120 --> 00:00:56.620 +Red Hat distributions other than Fedora. + +00:00:59.960 --> 00:01:00.460 +I would like to expand the document out to + +00:01:05.740 --> 00:01:05.860 +Windows and to Mac OS as I think a lot of + +00:01:07.720 --> 00:01:07.960 +people really want to build Emacs on those + +00:01:09.840 --> 00:01:10.340 +platforms because it's much harder to get + +00:01:13.080 --> 00:01:13.580 +Emacs binaries running on those platforms. + +00:01:15.860 --> 00:01:16.080 +Although they're around on the internet it's + +00:01:17.320 --> 00:01:17.440 +not as bad as it used to be, + +00:01:19.280 --> 00:01:19.760 +but building Emacs is very, + +00:01:21.000 --> 00:01:21.160 +a very fun thing to do. + +00:01:22.760 --> 00:01:23.260 +And I encourage everybody to do that. + +00:01:46.160 --> 00:01:46.440 +[Speaker 0]: Right. We're also getting comments from folks + +00:01:46.800 --> 00:01:47.300 +here on BigBlueButton. + +00:01:49.640 --> 00:01:49.900 +EXC or Matt saying, great talk, + +00:01:51.140 --> 00:01:51.640 +good demonstration of what's possible. + +00:01:53.940 --> 00:01:54.240 +And Aaron thanking Mike, + +00:01:54.760 --> 00:01:55.260 +saying awesome presentation. + +00:01:56.880 --> 00:01:57.040 +And they missed the first few minutes and + +00:01:59.540 --> 00:01:59.720 +have to rewatch to get the portion that they + +00:01:59.720 --> 00:02:00.220 +missed. + +00:02:03.400 --> 00:02:03.700 +[Speaker 1]: I had a hard time cramming the entire talk + +00:02:08.220 --> 00:02:08.720 +into 40 minutes. So I spoke quickly. + +00:02:10.639 --> 00:02:10.919 +I have a feeling I may have left some folks + +00:02:12.540 --> 00:02:13.040 +behind who weren't paying close attention. + +00:02:16.020 --> 00:02:16.520 +So rewatching might help. + +00:02:18.920 --> 00:02:19.420 +[Speaker 0]: Oh, nice. + +00:02:24.920 --> 00:02:25.340 +[Speaker 1]: I noticed Matt said that he helps maintain + +00:02:27.440 --> 00:02:27.700 +the shell functionality or Babel and last + +00:02:30.240 --> 00:02:30.580 +March they added async evaluation into + +00:02:32.920 --> 00:02:33.340 +session code blocks. Very cool, + +00:02:34.680 --> 00:02:34.840 +especially when you're doing something that + +00:02:36.420 --> 00:02:36.820 +takes a long time. It would be nice if Emacs + +00:02:38.920 --> 00:02:39.060 +wasn't locked up. I will definitely have to + +00:02:50.220 --> 00:02:50.460 +check that out. I use this technique at work + +00:02:53.220 --> 00:02:53.360 +a lot, like when I write documents to how to + +00:02:55.900 --> 00:02:56.400 +explain things to coworkers and such. + +00:03:00.060 --> 00:03:00.300 +And 1 of the things I had to explain was how + +00:03:05.220 --> 00:03:05.720 +to build AWS MySQL databases and replicas, + +00:03:07.760 --> 00:03:08.260 +and how to build them with very specific + +00:03:09.960 --> 00:03:10.240 +parameters to work with the system called + +00:03:13.060 --> 00:03:13.320 +Vitesse. And when I was running that + +00:03:15.660 --> 00:03:16.160 +document, building these kinds of MySQL + +00:03:20.280 --> 00:03:20.640 +databases in AWS with lockup Emacs for 20, + +00:03:22.300 --> 00:03:22.800 +25 minutes at a time. So, + +00:03:26.060 --> 00:03:26.540 +yeah, I'm really excited about async + +00:03:26.540 --> 00:03:27.040 +evaluation. + +00:04:03.780 --> 00:04:04.020 +Totally. Oh yeah, Python mode I think has had + +00:04:05.600 --> 00:04:06.100 +async for shell blocks for a while. + +00:04:09.220 --> 00:04:09.720 +I think there's a third-party package at Elba + +00:04:11.260 --> 00:04:11.760 +that adds async support for that. + +00:04:16.360 --> 00:04:16.620 +But yeah, I explicitly wanted to make sure + +00:04:18.620 --> 00:04:18.959 +that it would work with super vanilla stuff. + +00:04:20.060 --> 00:04:20.560 +Oh, it's built in. I see. + +00:04:24.140 --> 00:04:24.280 +Yeah, I didn't realize it was built in for + +00:04:25.920 --> 00:04:26.420 +Python blocks. I'll have to check that out. + +00:04:27.800 --> 00:04:28.300 +There's so much Emacs. + +00:04:32.080 --> 00:04:32.240 +It's hard to wrap your head even around a + +00:04:34.900 --> 00:04:35.400 +tiny portion of it. It's such a deep topic. + +00:04:47.660 --> 00:04:48.160 +Looks like somebody in IRC said, + +00:04:50.220 --> 00:04:50.440 +I can't wait to add some of this stuff to my + +00:04:52.680 --> 00:04:53.180 +documents. And that really makes me happy. + +00:04:55.400 --> 00:04:55.640 +I hope people go out and write literate Org + +00:04:57.180 --> 00:04:57.680 +Mode documents that do amazing things. + +00:05:25.640 --> 00:05:26.040 +When's the next talk? We have like, + +00:05:30.900 --> 00:05:31.080 +[Speaker 0]: let's see. I think we have about 4 or 5 + +00:05:32.960 --> 00:05:33.460 +minutes live on stream for Q&A. + +00:05:35.860 --> 00:05:36.360 +[Speaker 1]: Yeah, okay. Oh, here's the question. + +00:05:39.160 --> 00:05:39.320 +Blaine asks, are you running Emacs from the + +00:05:41.420 --> 00:05:41.760 +host machine? And yeah, + +00:05:43.940 --> 00:05:44.180 +so I'm running Emacs on the exact same + +00:05:46.560 --> 00:05:47.060 +machine that I'm building Emacs on. + +00:05:50.580 --> 00:05:50.900 +And I had first thought about doing that over + +00:05:53.440 --> 00:05:53.720 +Tramp. And I thought that would be a very + +00:05:55.360 --> 00:05:55.560 +cool demo to show how you could do that + +00:05:57.980 --> 00:05:58.180 +remotely on Tramp so you didn't need Emacs on + +00:06:03.160 --> 00:06:03.280 +the host machine. But I decided it would be a + +00:06:05.640 --> 00:06:05.780 +lot easier, and as I ran into a deadline to + +00:06:06.360 --> 00:06:06.860 +get the talk completed, + +00:06:08.900 --> 00:06:09.140 +I abandoned that notion for the + +00:06:09.880 --> 00:06:10.380 +straightforward approach. + +00:06:13.260 --> 00:06:13.760 +But ideally, I would spin up virtual machines + +00:06:16.980 --> 00:06:17.140 +and then using the Org Mode document and + +00:06:18.960 --> 00:06:19.440 +having Org Mode reach out to those machines + +00:06:20.440 --> 00:06:20.940 +via SSH and Tramp. + +00:06:33.400 --> 00:06:33.540 +Oh yeah, there's also a little bit of + +00:06:38.200 --> 00:06:38.440 +discussion on IRC about org macros and how + +00:06:39.720 --> 00:06:40.160 +they made their way into the document. + +00:06:42.540 --> 00:06:42.900 +And I remember when I first discovered org + +00:06:44.480 --> 00:06:44.980 +macros by reading the org mode documentation, + +00:06:47.360 --> 00:06:47.500 +I was really excited because I thought I + +00:06:49.860 --> 00:06:50.040 +could limit a lot of the boilerplate I end up + +00:06:51.900 --> 00:06:52.360 +typing. But as we discussed, + +00:06:54.760 --> 00:06:55.260 +ORD macros, I think, only work in 1 context + +00:06:56.380 --> 00:06:56.780 +in your ORD mode document, + +00:06:58.280 --> 00:06:58.780 +and I think that's in the pros section. + +00:07:03.740 --> 00:07:04.080 +So You can't resolve a macro inside a header + +00:07:06.600 --> 00:07:07.100 +arg, for example, or inside an options block. + +00:07:09.560 --> 00:07:09.960 +It would be awesome if macros worked + +00:07:12.280 --> 00:07:12.780 +everywhere, but I'm happy to have them just + +00:07:13.500 --> 00:07:14.000 +as they are now. + +00:07:22.960 --> 00:07:23.460 +[Speaker 0]: Indeed, they're very convenient. + +00:07:32.020 --> 00:07:32.260 +[Speaker 1]: And Blaine also says, thank you for showing + +00:07:33.420 --> 00:07:33.920 +what's possible with literate documentation. + +00:07:35.380 --> 00:07:35.660 +This is mind-blowing. Yeah, + +00:07:39.400 --> 00:07:39.640 +I think so too. I first saw this technique in + +00:07:41.020 --> 00:07:41.520 +Howard's video, Literate DevOps, + +00:07:44.720 --> 00:07:44.900 +and I remember I was just picking up parts of + +00:07:46.720 --> 00:07:47.040 +my mind after it exploded after having + +00:07:49.740 --> 00:07:49.860 +watched that video. So I wanted to do some of + +00:07:51.820 --> 00:07:52.040 +it myself, and that's where I came up with a + +00:07:54.020 --> 00:07:54.520 +couple different approaches to that. + +00:07:57.600 --> 00:07:57.800 +It's not just for, you know, + +00:07:59.060 --> 00:07:59.560 +making literate Emacs configurations. + +00:08:04.680 --> 00:08:04.920 +[Speaker 0]: For Sure. We have another remark slash + +00:08:07.260 --> 00:08:07.580 +question on the pad. Someone saying great + +00:08:09.800 --> 00:08:10.300 +presentation. The preparation is outstanding. + +00:08:12.520 --> 00:08:13.020 +And for someone like me that never touched + +00:08:14.040 --> 00:08:14.540 +the org-mux side of Emacs, + +00:08:17.040 --> 00:08:17.200 +What do you feel is the more complex part to + +00:08:19.120 --> 00:08:19.540 +tackle? You made it seem simple, + +00:08:20.500 --> 00:08:21.000 +but the complexity there. + +00:08:25.840 --> 00:08:26.340 +[Speaker 1]: Yeah. Just getting all of the configuration + +00:08:30.800 --> 00:08:31.300 +set up the way you want it is the hardest + +00:08:34.780 --> 00:08:35.280 +part. So some of the defaults are, + +00:08:37.120 --> 00:08:37.280 +you know, they don't look good when you + +00:08:39.320 --> 00:08:39.820 +render them out in LaTeX and finally PDF. + +00:08:42.039 --> 00:08:42.380 +And there's a lot of work to be done to tweak + +00:08:45.380 --> 00:08:45.780 +the LaTeX environment so it looks as pretty + +00:08:48.620 --> 00:08:48.940 +as you might want it. And then just Org Mode + +00:08:50.800 --> 00:08:51.300 +has a lot of knobs that you can tune, + +00:08:53.720 --> 00:08:54.020 +and they have a pretty large impact on how + +00:08:55.520 --> 00:08:56.020 +your document is exported. + +00:09:00.360 --> 00:09:00.680 +So I think the hardest part is just knowing + +00:09:03.820 --> 00:09:03.960 +what's possible and knowing where all the + +00:09:05.200 --> 00:09:05.700 +knobs are to tune and twist. + +00:09:10.240 --> 00:09:10.440 +[Speaker 0]: Got another question on the pad. + +00:09:12.040 --> 00:09:12.180 +And I think we have about a minute or so on + +00:09:13.740 --> 00:09:13.920 +the stream. So I'll read this question as + +00:09:15.160 --> 00:09:15.660 +well. But folks, you're welcome to continue + +00:09:17.560 --> 00:09:18.040 +on the pad or just come join here on BBB + +00:09:20.200 --> 00:09:20.320 +after myself and the stream move on to the + +00:09:23.100 --> 00:09:23.480 +next talk. Yeah, and the next question is, + +00:09:24.320 --> 00:09:24.720 +how do you normally debug, + +00:09:26.640 --> 00:09:27.100 +for example, view the logs or see failed + +00:09:29.440 --> 00:09:29.720 +statuses when the commands in the source + +00:09:32.020 --> 00:09:32.280 +blocks fail, especially if they output lots + +00:09:34.640 --> 00:09:34.780 +and lots of logs, and you need to see the + +00:09:35.640 --> 00:09:36.140 +full history of the build. + +00:09:39.520 --> 00:09:40.020 +[Speaker 1]: Yeah, so I see it in the messages buffer + +00:09:42.080 --> 00:09:42.580 +whenever I export a document. + +00:09:44.540 --> 00:09:44.700 +If there's a failure, that's typically where + +00:09:47.460 --> 00:09:47.640 +it's written to. And I will actually kill the + +00:09:49.960 --> 00:09:50.440 +messages buffer before I export so I know + +00:09:52.840 --> 00:09:53.200 +that only the messages in the buffer are for + +00:09:55.800 --> 00:09:55.960 +my given export and I mentioned that + +00:09:58.580 --> 00:09:58.780 +debugging trick where you name all of your + +00:10:00.720 --> 00:10:00.960 +org-mode source blocks So if there is a + +00:10:02.320 --> 00:10:02.820 +problem in 1 of the blocks, + +00:10:06.560 --> 00:10:07.060 +it'll actually tell you what the block, + +00:10:09.140 --> 00:10:09.640 +the name of the block the error occurred in. + +00:10:13.160 --> 00:10:13.360 +If you don't do that, it just gives you a + +00:10:14.800 --> 00:10:15.300 +position number in the buffer. + +00:10:18.620 --> 00:10:18.820 +And whenever I tried to convert those + +00:10:21.400 --> 00:10:21.540 +position numbers to actual places where the + +00:10:23.600 --> 00:10:23.760 +error occurred, it was never exactly where I + +00:10:24.640 --> 00:10:25.020 +suspected it would be. + +00:10:26.680 --> 00:10:27.180 +So I found that very difficult in debugging. + +00:10:29.800 --> 00:10:30.040 +So the only real debugging tip I have is name + +00:10:32.840 --> 00:10:33.120 +your source blocks, even if you don't refer + +00:10:33.480 --> 00:10:33.980 +to them later. + +00:10:39.860 --> 00:10:40.020 +[Speaker 0]: I think that's all the time we have on + +00:10:41.320 --> 00:10:41.520 +stream. And I also have to drop as well. + +00:10:42.540 --> 00:10:42.880 +But thanks again so much, + +00:10:46.160 --> 00:10:46.660 +Mike. And folks are welcome to come here and + +00:10:47.980 --> 00:10:48.480 +continue discussion here. + +00:10:52.600 --> 00:10:53.100 +Thanks again. + +00:21:45.060 --> 00:21:45.560 +[Speaker 1]: You + +00:22:00.060 --> 00:22:00.560 +Thank + +00:22:15.060 --> 00:22:15.560 +[Speaker 0]: you + +00:22:28.400 --> 00:22:28.900 +[Speaker 1]: for + +00:22:45.060 --> 00:22:45.560 +watching. You + +00:23:00.260 --> 00:23:00.760 +you diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt new file mode 100644 index 00000000..33f318c5 --- /dev/null +++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt @@ -0,0 +1,71 @@ +WEBVTT + + +00:00:00.000 --> 00:00:57.760 +Introduction + +00:00:57.760 --> 00:02:14.080 +Org Babel and literate programming + +00:02:14.080 --> 00:04:53.479 +This presentation + +00:04:53.480 --> 00:06:55.779 +Getting started + +00:06:55.780 --> 00:07:23.499 +README + +00:07:23.500 --> 00:08:10.459 +Writing a code block + +00:08:10.460 --> 00:08:40.319 +:results none + +00:08:40.320 --> 00:10:36.959 +Confirmation + +00:10:36.960 --> 00:13:52.600 +Running blocks automatically + +00:13:53.000 --> 00:16:05.699 +Export options + +00:16:05.700 --> 00:17:25.739 +Substituting constants + +00:17:25.740 --> 00:20:02.960 +Getting the properties + +00:20:03.060 --> 00:21:05.239 +Macros + +00:21:05.240 --> 00:22:09.019 +Properties in practice + +00:22:09.020 --> 00:23:42.009 +Using a prefix + +00:23:42.010 --> 00:27:14.149 +Switching distributions + +00:27:14.150 --> 00:30:16.199 +A tour + +00:30:16.200 --> 00:31:09.249 +TeX and LaTeX + +00:31:09.250 --> 00:32:00.059 +Other prerequisites + +00:32:00.060 --> 00:36:20.609 +Caching + +00:36:20.610 --> 00:39:29.439 +Looking at the PDF + +00:39:29.440 --> 00:42:31.989 +Errors + +00:42:31.990 --> 00:42:45.200 +Final thoughts diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt new file mode 100644 index 00000000..71fa30f7 --- /dev/null +++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt @@ -0,0 +1,2759 @@ +WEBVTT captioned by jc, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.320 +Hello, everyone. + +00:00:04.320 --> 00:00:07.280 +This talk is on literate documentation + +00:00:07.280 --> 00:00:10.320 +with Emacs and org-mode. + +00:00:10.320 --> 00:00:12.080 +I'm going to take just a moment here + +00:00:12.080 --> 00:00:14.279 +to unpack what I just said. + +00:00:14.280 --> 00:00:17.800 +Emacs, as most of us probably already know, + +00:00:17.800 --> 00:00:21.360 +is a powerful text editor and list programming environment + +00:00:21.360 --> 00:00:23.480 +from the 1970s. + +00:00:23.480 --> 00:00:25.800 +Chances are, if you're attending this talk, + +00:00:25.800 --> 00:00:28.819 +you already know a bit about Emacs. + +00:00:28.820 --> 00:00:32.640 +org-mode is an Emacs major mode and authoring tool + +00:00:32.640 --> 00:00:36.360 +that helps you write documents in a plain text markup + +00:00:36.360 --> 00:00:37.739 +language called Org. + +00:00:37.740 --> 00:00:40.200 +These Org documents can be exported + +00:00:40.200 --> 00:00:42.520 +to a number of different document formats, + +00:00:42.520 --> 00:00:48.520 +like HTML, PDF, ODT, Markdown, and more. + +00:00:48.520 --> 00:00:51.160 +org-mode has a lot of features. + +00:00:51.160 --> 00:00:54.240 +It can be an outliner, a to-do list manager, + +00:00:54.240 --> 00:00:57.760 +an agenda, organizer, and much more. + +NOTE Org Babel and literate programming + +00:00:57.760 --> 00:00:59.600 +Today, we're going to be demonstrating + +00:00:59.600 --> 00:01:03.360 +what I consider to be org-mode's killer feature called + +00:01:03.360 --> 00:01:04.840 +Org Babel. + +00:01:04.840 --> 00:01:07.879 +Babel allows you to take human language prose, + +00:01:07.880 --> 00:01:11.400 +computer language source code blocks, and their outputs + +00:01:11.400 --> 00:01:13.840 +and weave them together seamlessly + +00:01:13.840 --> 00:01:16.160 +to form a cohesive document. + +00:01:16.160 --> 00:01:19.080 +It is seriously cool. + +00:01:19.080 --> 00:01:21.880 +Literate documentation is a play on the term + +00:01:21.880 --> 00:01:25.280 +literate programming, popularized by Donald Knuth + +00:01:25.280 --> 00:01:27.379 +in the early 1980s. + +00:01:27.380 --> 00:01:29.280 +Knuth's literate programming idea + +00:01:29.280 --> 00:01:31.920 +was that computer programs could be + +00:01:31.920 --> 00:01:34.880 +expressed in a natural language and be + +00:01:34.880 --> 00:01:38.800 +human-readable documents rather than written exclusively + +00:01:38.800 --> 00:01:40.799 +for machines to read. + +00:01:40.800 --> 00:01:43.000 +In a traditional program, you might + +00:01:43.000 --> 00:01:45.680 +have a bunch of machine-readable source code + +00:01:45.680 --> 00:01:48.560 +and a handful of human-readable comments, + +00:01:48.560 --> 00:01:51.600 +which attempt to describe what the program is doing. + +00:01:51.600 --> 00:01:54.360 +Literate programming flips this on its head. + +00:01:54.360 --> 00:01:56.680 +A literate program is a document that + +00:01:56.680 --> 00:02:01.160 +describes how the program works with machine-readable source + +00:02:01.160 --> 00:02:02.880 +code blocks inside of it. + +00:02:02.880 --> 00:02:04.800 +These source code blocks are later + +00:02:04.800 --> 00:02:08.440 +tangled out of the document and submitted to the machine + +00:02:08.440 --> 00:02:14.080 +either to be compiled or interpreted and ultimately run. + +NOTE This presentation + +00:02:14.080 --> 00:02:15.600 +Throughout this presentation, you'll + +00:02:15.600 --> 00:02:19.400 +see my browser window here on the left side of the screen. + +00:02:19.400 --> 00:02:22.240 +And on the right side, I've got a terminal session + +00:02:22.240 --> 00:02:23.960 +running tmux. + +00:02:23.960 --> 00:02:28.039 +This allows us to have a virtual terminal window connected + +00:02:28.040 --> 00:02:35.040 +to two separate Linux machines, one running Ubuntu Server 2204 + +00:02:35.040 --> 00:02:39.720 +and another running Fedora Server 38. + +00:02:39.720 --> 00:02:43.240 +I've specifically chosen these two distributions for my demo + +00:02:43.440 --> 00:02:46.720 +because they are representative of the two dominant flavors + +00:02:46.720 --> 00:02:49.880 +of GNU Linux, Debian and RedHat. + +00:02:49.880 --> 00:02:53.120 +In both cases, these are bare-bones server additions + +00:02:53.120 --> 00:02:55.440 +with the stock packages installed. + +00:02:55.440 --> 00:03:00.200 +I've manually installed a few packages like Git, emacs-noex + +00:03:00.200 --> 00:03:04.000 +to get the terminal version of emacs, and tmux. + +00:03:04.000 --> 00:03:06.000 +But otherwise, these Linux installs + +00:03:06.000 --> 00:03:08.719 +are what you'd get right out of the box. + +00:03:08.720 --> 00:03:12.480 +For this demo, I've created a literate org-mode document + +00:03:12.480 --> 00:03:16.360 +that describes how to build GNU Emacs from its source code + +00:03:16.360 --> 00:03:19.939 +on both Debian and RedHat-based systems. + +00:03:19.940 --> 00:03:22.920 +While both operating systems are very similar, + +00:03:22.920 --> 00:03:25.440 +they differ substantially on which packages + +00:03:25.440 --> 00:03:29.080 +are installed out of the box, how optional packages are + +00:03:29.080 --> 00:03:32.600 +named, searched, and installed, and of course, + +00:03:32.600 --> 00:03:34.240 +the distributions have different names, + +00:03:34.240 --> 00:03:36.800 +like Ubuntu or Fedora. + +00:03:36.800 --> 00:03:39.200 +I chose building Emacs from source + +00:03:39.200 --> 00:03:41.640 +as a topic for this demonstration + +00:03:41.640 --> 00:03:43.800 +because while the process is largely + +00:03:43.800 --> 00:03:46.880 +the same on both RedHat and Debian, + +00:03:46.880 --> 00:03:49.360 +there are a lot of minor little differences + +00:03:49.360 --> 00:03:52.680 +that need to be accounted for, which really prohibits you + +00:03:52.680 --> 00:03:57.120 +from hard coding names of packages and package management + +00:03:57.120 --> 00:04:01.200 +tools and distributions into your document. + +00:04:01.200 --> 00:04:05.320 +I suppose you could create two versions of the same document, + +00:04:05.320 --> 00:04:09.960 +one specifically for RedHat and one specifically for Debian, + +00:04:09.960 --> 00:04:13.280 +but that would be really tedious to maintain. + +00:04:13.280 --> 00:04:16.280 +Like if, for example, you updated some prose + +00:04:16.280 --> 00:04:18.720 +in one document, you'd have to remember + +00:04:18.720 --> 00:04:20.280 +to do it in the other one too. + +00:04:20.280 --> 00:04:22.920 +And if you weren't careful, the two documents + +00:04:22.920 --> 00:04:25.259 +could drift out of sync. + +00:04:25.260 --> 00:04:27.720 +In this demo, I'll show you techniques + +00:04:27.720 --> 00:04:30.960 +for creating dynamic, literate documents that + +00:04:30.960 --> 00:04:34.619 +can change based on parameters and constants embedded + +00:04:34.620 --> 00:04:38.439 +into the non-exported regions of the document. + +00:04:38.440 --> 00:04:41.800 +I'll show how with a single org-mode source document, + +00:04:41.800 --> 00:04:44.800 +you can press a couple of keys to configure + +00:04:44.800 --> 00:04:48.720 +it to export a RedHat-specific version of my building + +00:04:48.720 --> 00:04:53.479 +Emacs from source essay or a Debian-specific version. + +NOTE Getting started + +00:04:53.480 --> 00:04:55.320 +All right, let's get started. + +00:04:55.320 --> 00:04:58.720 +We'll begin by firing up a new terminal Emacs session + +00:04:58.720 --> 00:05:00.639 +on my Ubuntu machine. + +00:05:00.640 --> 00:05:04.600 +Now, I installed Emacs on this machine using apt-get. + +00:05:04.600 --> 00:05:07.960 +And doing that, you get version 27.1, + +00:05:07.960 --> 00:05:10.640 +which is, hey, only two major versions + +00:05:10.640 --> 00:05:13.010 +behind the current version of Emacs. + +00:05:13.011 --> 00:05:15.000 +This is another reason why I thought + +00:05:15.000 --> 00:05:18.080 +writing a guide on how to build Emacs from source code + +00:05:18.080 --> 00:05:19.719 +might be a good idea. + +00:05:19.720 --> 00:05:22.720 +You can get a much newer version of Emacs on Ubuntu + +00:05:22.720 --> 00:05:25.800 +if you install it via Snap, but, uh, Snaps. + +00:05:25.800 --> 00:05:28.239 +Don't get me started. + +00:05:28.240 --> 00:05:30.921 +Now, I wanted to use a completely vanilla + +00:05:30.922 --> 00:05:34.619 +terminal mode install of Emacs for this demonstration + +00:05:34.620 --> 00:05:38.040 +because my personal Emacs config has a ton of packages + +00:05:38.040 --> 00:05:41.199 +installed and is heavily modified. + +00:05:41.200 --> 00:05:43.640 +I want folks to be able to follow along + +00:05:43.640 --> 00:05:47.579 +with a bog-standard, out-of-the-box Emacs config. + +00:05:47.580 --> 00:05:49.520 +The Emacs config on this Ubuntu machine + +00:05:49.520 --> 00:05:51.200 +has just two settings. + +00:05:51.200 --> 00:05:55.240 +I require org-tempo because my fingers are hardwired + +00:05:55.240 --> 00:05:58.719 +to use some of the handy shortcuts that it provides. + +00:05:58.720 --> 00:06:00.520 +And I also turn off the menu bar + +00:06:00.520 --> 00:06:03.139 +because I just can't stand to look at it. + +00:06:03.140 --> 00:06:07.040 +Let's begin by opening a file called buildemacs.org, + +00:06:07.040 --> 00:06:08.480 +which will be the source code + +00:06:08.480 --> 00:06:11.079 +for our literate org-mode document. + +00:06:11.080 --> 00:06:12.840 +Now, in preparation for this talk, + +00:06:12.840 --> 00:06:14.960 +I've already written this document, + +00:06:14.960 --> 00:06:17.979 +and we'll take a look at the finished product + +00:06:17.980 --> 00:06:19.160 +here in a bit, but let's first take a look + +00:06:19.160 --> 00:06:22.408 +at how we might approach this task. + +00:06:22.409 --> 00:06:24.400 +We'll start at the top of the document + +00:06:24.400 --> 00:06:27.119 +by filling out some export keywords. + +00:06:27.120 --> 00:06:30.520 +These keywords are something that every backend exporter, + +00:06:30.520 --> 00:06:35.000 +be it LaTeX or plain text or ODT or whatever, understands, + +00:06:35.000 --> 00:06:38.120 +and they're essentially document metadata. + +00:06:38.120 --> 00:06:42.120 +As you can see, I'm typing `#+` + +00:06:42.120 --> 00:06:43.760 +followed by a couple characters + +00:06:43.760 --> 00:06:45.880 +and then `M-TAB` to auto-complete. + +00:06:45.880 --> 00:06:50.360 +If you hit #+ by itself and then M-TAB, + +00:06:50.360 --> 00:06:53.119 +you can see all the possible completions. + +00:06:53.120 --> 00:06:55.779 +And as you can see, there's a lot. + +NOTE README + +00:06:55.780 --> 00:06:58.520 +The next thing we're gonna do is make a README section + +00:06:58.520 --> 00:06:59.760 +at the top of this document. + +00:06:59.760 --> 00:07:02.240 +This section is intended for folks + +00:07:02.240 --> 00:07:04.280 +who are looking at the org-mode document, + +00:07:04.280 --> 00:07:06.679 +trying to figure out what it's for. + +00:07:06.680 --> 00:07:09.600 +We don't want to actually export the section heading, + +00:07:09.600 --> 00:07:13.859 +so we're gonna tag it with the :noexport: tag. + +00:07:13.860 --> 00:07:15.640 +And then here, we just write something quick + +00:07:15.640 --> 00:07:17.760 +to let folks know that this document + +00:07:17.760 --> 00:07:19.800 +can potentially execute code + +00:07:19.800 --> 00:07:23.499 +and just a little something about what the document is for. + +NOTE Writing a code block + +00:07:23.500 --> 00:07:26.059 +Okay, so now that we've written some text, + +00:07:26.060 --> 00:07:29.599 +let's try our hand at writing a code block. + +00:07:29.600 --> 00:07:31.288 +I'm getting pretty sick of looking at + +00:07:31.289 --> 00:07:32.939 +the default Emacs theme. + +00:07:32.940 --> 00:07:35.440 +All that blue and purple in the document + +00:07:35.440 --> 00:07:37.879 +makes it look bruised. + +00:07:37.880 --> 00:07:40.320 +Let's make an Emacs Lisp code block + +00:07:40.320 --> 00:07:41.400 +that switches the theme + +00:07:41.400 --> 00:07:44.560 +to one of my favorite built-in themes, Leuven. + +00:07:44.560 --> 00:07:48.400 +Leuven was created by my man, Fabrice Niessen, + +00:07:48.400 --> 00:07:52.120 +who I personally have learned a ton of org-mode stuff about + +00:07:52.120 --> 00:07:54.039 +just by studying his work. + +00:07:54.040 --> 00:07:56.360 +Now, if we cruise back up to the code block, + +00:07:56.360 --> 00:07:58.840 +we should be able to hit `C-c C-c`, + +00:07:58.840 --> 00:08:00.379 +and have it execute. + +00:08:00.380 --> 00:08:03.880 +And there you have it, a high-contrast color theme + +00:08:03.880 --> 00:08:06.979 +that was designed to look great in org-mode. + +00:08:06.980 --> 00:08:08.080 +So that's great and all, + +00:08:08.080 --> 00:08:10.459 +but there are a couple of things I don't like. + +NOTE :results none + +00:08:10.460 --> 00:08:13.599 +First of all, we don't need to see a #+RESULTS block here, + +00:08:13.600 --> 00:08:15.280 +and that's because we're not really interested + +00:08:15.280 --> 00:08:18.720 +in what the Emacs Lisp function `load-theme` returns. + +00:08:18.720 --> 00:08:22.200 +I mean, it's great it returned t and all to indicate success, + +00:08:22.200 --> 00:08:23.720 +we just don't need to see it. + +00:08:23.720 --> 00:08:26.560 +We can slap a `:results none` header arg + +00:08:26.560 --> 00:08:30.039 +on the code block to keep things nice and clean. + +00:08:30.040 --> 00:08:32.560 +There are a lot of different header args, + +00:08:32.560 --> 00:08:35.360 +and I often confuse and misremember them. + +00:08:35.360 --> 00:08:38.920 +So I'll always refer back to the org-mode manual + +00:08:38.920 --> 00:08:40.319 +when working with them. + +NOTE Confirmation + +00:08:40.320 --> 00:08:42.160 +The second thing I don't like is that + +00:08:42.160 --> 00:08:45.999 +when we hit C-c C-c to execute the block, + +00:08:46.000 --> 00:08:49.600 +Emacs prompted us if we really wanted to run the block. + +00:08:49.600 --> 00:08:52.040 +Emacs Lisp is Emacs' mother tongue, + +00:08:52.040 --> 00:08:53.920 +and I don't wanna be hassled when speaking + +00:08:53.920 --> 00:08:55.379 +my native language. + +00:08:55.380 --> 00:08:57.520 +There's a variable that controls this + +00:08:57.520 --> 00:09:00.680 +called `org-confirm-babel-evaluate`. + +00:09:00.680 --> 00:09:03.960 +And this can be either set to t or nil + +00:09:03.960 --> 00:09:06.840 +to either always confirm or never confirm. + +00:09:06.840 --> 00:09:10.920 +If however, you provided a lambda, an anonymous function, + +00:09:10.920 --> 00:09:14.560 +Org will call your function with the name of the language + +00:09:14.560 --> 00:09:16.840 +and the source block that it's about to run. + +00:09:16.840 --> 00:09:19.080 +And your function can make the decision + +00:09:19.080 --> 00:09:24.200 +about if Emacs should ask you for confirmation or not. + +00:09:24.200 --> 00:09:27.840 +What I'm doing here is setting `org-confirm-babel-evaluate` + +00:09:27.840 --> 00:09:30.539 +as a "file local variable". + +00:09:30.540 --> 00:09:33.320 +This means whenever the file is opened by Emacs, + +00:09:33.320 --> 00:09:38.059 +it'll set this variable to be a lambda that returns nil, + +00:09:38.060 --> 00:09:42.859 +meaning don't confirm, on Elisp code blocks. + +00:09:42.860 --> 00:09:45.920 +As you can see, the variable is currently set + +00:09:45.920 --> 00:09:50.879 +to its default value of t, meaning always confirm. + +00:09:50.880 --> 00:09:53.640 +Now if we save the buffer, exit Emacs, + +00:09:53.640 --> 00:09:55.040 +and pop back in again, + +00:09:55.040 --> 00:10:00.120 +`org-confirm-babel-evaluate` should be set how we like it. + +00:10:00.120 --> 00:10:02.640 +We were however prompted for confirmation + +00:10:02.640 --> 00:10:04.400 +on setting the file-local variable, + +00:10:04.400 --> 00:10:06.280 +which controls if we're prompted + +00:10:06.280 --> 00:10:09.699 +for Elisp source code block evaluation. + +00:10:09.700 --> 00:10:12.679 +I feel like there's a Yo Dawg joke here somewhere. + +00:10:12.680 --> 00:10:15.240 +When we were prompted, we hit the exclamation mark, + +00:10:15.240 --> 00:10:18.400 +which automatically marks this variable as being safe. + +00:10:18.400 --> 00:10:21.520 +So you won't be bothered the next time you open this file. + +00:10:21.520 --> 00:10:26.760 +This variable is called `safe-local-variable-values` + +00:10:26.760 --> 00:10:29.560 +and if we pop over to our .emacs file, + +00:10:29.560 --> 00:10:32.520 +you can see that Emacs' customize tooling + +00:10:32.520 --> 00:10:36.959 +helpfully updated this variable in our config file for us. + +NOTE Running blocks automatically + +00:10:36.960 --> 00:10:38.120 +Now that's great and all, + +00:10:38.120 --> 00:10:42.120 +but I really don't like having to hit `C-c C-c` + +00:10:42.120 --> 00:10:45.160 +on that source block every time I open this document + +00:10:45.160 --> 00:10:47.739 +just to bring up the Leuven theme. + +00:10:47.740 --> 00:10:50.520 +Let's have this source block run automatically + +00:10:50.520 --> 00:10:53.179 +every time the document is opened. + +00:10:53.180 --> 00:10:54.999 +Now I know what you're thinking. + +00:10:55.000 --> 00:10:57.640 +Shouldn't you just put all of this configuration stuff + +00:10:57.640 --> 00:11:01.159 +in your .emacs file and keep it out of the document? + +00:11:01.160 --> 00:11:04.760 +Well, that's what I've done with my personal Emacs config, + +00:11:04.760 --> 00:11:08.160 +but we want this document to be able to be used by folks + +00:11:08.160 --> 00:11:11.040 +with a completely vanilla Emacs setup, + +00:11:11.040 --> 00:11:13.440 +or even a completely tricked out Emacs setup, + +00:11:13.440 --> 00:11:16.059 +so we can't assume anything. + +00:11:16.060 --> 00:11:19.800 +The idea is if the Emacs user who opens the document + +00:11:19.800 --> 00:11:22.400 +agrees to setting all of the variables + +00:11:22.400 --> 00:11:24.359 +and running all of the code within, + +00:11:24.360 --> 00:11:26.560 +they'll be able to export the document + +00:11:26.560 --> 00:11:28.840 +as well as run all of the code blocks inside of it + +00:11:28.840 --> 00:11:30.799 +just as we intended. + +00:11:30.800 --> 00:11:33.880 +And the differences in base Emacs configuration + +00:11:33.880 --> 00:11:35.979 +will be completely minimized. + +00:11:35.980 --> 00:11:39.080 +Now it's worth pointing out that the file-local variables + +00:11:39.080 --> 00:11:43.023 +we're setting here are local, in this case, buffer-local. + +00:11:43.024 --> 00:11:45.280 +The configuration we use in this document + +00:11:45.280 --> 00:11:48.280 +won't override someone's carefully constructed + +00:11:48.280 --> 00:11:49.499 +org-mode setup. + +00:11:49.500 --> 00:11:50.800 +The first thing we're gonna wanna do + +00:11:51.000 --> 00:11:53.080 +in order to make this block execute + +00:11:53.080 --> 00:11:55.988 +when the document is loaded is to give it a name. + +00:11:55.989 --> 00:11:58.800 +It's always a good idea to give every source block + +00:11:58.800 --> 00:12:01.337 +you create in your document a unique name, + +00:12:01.338 --> 00:12:03.400 +even if you don't refer to it elsewhere. + +00:12:03.700 --> 00:12:06.960 +I do this because when I'm debugging my documents, + +00:12:07.160 --> 00:12:10.019 +Emacs will prompt me about running a block. + +00:12:10.020 --> 00:12:12.960 +If the block has a name, Emacs mentions it, + +00:12:12.960 --> 00:12:15.960 +and I know there's a problem with the result caching + +00:12:15.960 --> 00:12:17.840 +or something with the "foo" block. + +00:12:17.840 --> 00:12:20.280 +But if the block doesn't have a name, + +00:12:20.280 --> 00:12:22.160 +it can be really hard to figure out + +00:12:22.160 --> 00:12:24.579 +which block Emacs is complaining about. + +00:12:24.580 --> 00:12:27.459 +So I always name my blocks. + +00:12:27.460 --> 00:12:30.360 +Now we're gonna add another file local variable, + +00:12:30.360 --> 00:12:32.115 +but this one is special. + +00:12:32.116 --> 00:12:34.360 +If your "variable" + +00:12:34.360 --> 00:12:36.320 +just happens to be named "eval", + +00:12:36.320 --> 00:12:38.760 +it means that Emacs should evaluate + +00:12:38.760 --> 00:12:40.800 +the Lisp expression that follows. + +00:12:40.800 --> 00:12:43.240 +Here we'll use the progn function + +00:12:43.240 --> 00:12:46.040 +to sequentially run two elisp functions + +00:12:46.040 --> 00:12:48.760 +and return the value of the last one executed. + +00:12:48.760 --> 00:12:53.320 +The first function is `org-babel-goto-named-source-block`, + +00:12:53.320 --> 00:12:55.440 +which jumps us to the startup block. + +00:12:55.440 --> 00:12:59.280 +The second one is `org-babel-execute-src-block`, + +00:12:59.280 --> 00:13:02.092 +which executes the current source block. + +00:13:02.093 --> 00:13:03.630 +That should get the job done. + +00:13:03.631 --> 00:13:05.840 +Now all we have to do is save the document, + +00:13:05.840 --> 00:13:08.199 +exit Emacs, jump back in, + +00:13:08.200 --> 00:13:10.280 +and once we've confirmed that we're willing + +00:13:10.280 --> 00:13:14.239 +to run the new "eval" line in our file local variables, + +00:13:14.240 --> 00:13:15.859 +we're good to go. + +00:13:15.860 --> 00:13:18.480 +Now if we want to add new configuration stuff + +00:13:18.480 --> 00:13:21.839 +to the document, we can just add it to the startup block + +00:13:21.840 --> 00:13:24.880 +and not have to muck about with confirmations + +00:13:24.880 --> 00:13:28.679 +or adding new file-local variables or whatever. + +00:13:28.680 --> 00:13:31.960 +And just like before, we'll let Emacs' customize system + +00:13:31.960 --> 00:13:34.939 +save this decision to our .emacs file. + +00:13:34.940 --> 00:13:37.760 +Now that all that business with confirmations, + +00:13:37.760 --> 00:13:40.080 +file-local variables, and the startup block + +00:13:40.080 --> 00:13:41.120 +are out of the way, + +00:13:41.120 --> 00:13:44.120 +we can get on with writing our introduction. + +00:13:44.120 --> 00:13:47.880 +We'll create a new top level headline called introduction + +00:13:47.880 --> 00:13:51.440 +and explain to the reader of the exported document + +00:13:51.440 --> 00:13:52.600 +what this is all about. + +NOTE Export options + +00:13:53.000 --> 00:13:55.640 +Now as you can see, we've actually hard-coded + +00:13:55.640 --> 00:13:58.280 +the name of the Linux distro in our prose. + +00:13:58.280 --> 00:14:00.880 +I promised you a single document that could be + +00:14:00.880 --> 00:14:03.720 +for either RedHat or Debian distros, + +00:14:03.720 --> 00:14:05.319 +so we can't have this. + +00:14:05.320 --> 00:14:08.840 +Astute members in the audience have probably been uneasy + +00:14:08.840 --> 00:14:11.280 +ever since I hard coded the name "Debian" + +00:14:11.280 --> 00:14:13.859 +in the README section above. + +00:14:13.860 --> 00:14:17.520 +One way of solving this problem is by using exclude tags. + +00:14:17.520 --> 00:14:21.960 +Let's add the `#+EXCLUDE_TAGS` export keyword to our document. + +00:14:21.960 --> 00:14:24.200 +This keyword tells the exporter, + +00:14:24.200 --> 00:14:27.959 +"Hey, if you see a headline tagged with any of these tags, + +00:14:27.960 --> 00:14:29.600 +don't export it." + +00:14:29.600 --> 00:14:33.559 +By default, the tag `:noexport:` is excluded. + +00:14:33.560 --> 00:14:36.480 +And if you'll notice, we tagged our README section + +00:14:36.480 --> 00:14:38.360 +with that tag, so it doesn't show up + +00:14:38.360 --> 00:14:40.339 +in the exported document. + +00:14:40.340 --> 00:14:42.280 +We'll keep this tag in the list, + +00:14:42.280 --> 00:14:47.080 +but we'll also add the tag `:redhat:` as a tag to exclude. + +00:14:47.080 --> 00:14:50.400 +Now it's just a matter of creating two introduction + +00:14:50.400 --> 00:14:53.960 +sections, one for Debian, one for RedHat. + +00:14:53.960 --> 00:14:56.520 +And if you want the RedHat version of the document, + +00:14:56.520 --> 00:14:59.200 +you can just modify the `#+EXCLUDE_TAGS` line + +00:14:59.200 --> 00:15:00.440 +at the top of the document. + +00:15:00.440 --> 00:15:02.339 +Awesome, right? + +00:15:02.340 --> 00:15:03.539 +Right? + +00:15:03.540 --> 00:15:05.544 +OK, this is not that great. + +00:15:05.545 --> 00:15:07.387 +Well, it does work. + +00:15:07.388 --> 00:15:10.081 +And you can see if we export the document, + +00:15:10.082 --> 00:15:12.840 +we'll get something that only references Debian, + +00:15:12.840 --> 00:15:15.188 +and the `:noexport:` and `:redhat:` + +00:15:15.189 --> 00:15:17.450 +tagged headlines are omitted. + +00:15:17.451 --> 00:15:19.319 +This strategy would work great + +00:15:19.320 --> 00:15:22.120 +when the RedHat- and Debian-specific sections + +00:15:22.120 --> 00:15:24.400 +are substantially different, but that's not + +00:15:24.400 --> 00:15:26.198 +the case with the introduction. + +00:15:26.199 --> 00:15:28.640 +We definitely don't want to have to maintain + +00:15:28.640 --> 00:15:30.824 +two distinct introductions. + +00:15:30.825 --> 00:15:34.080 +I also noticed that the export tags are included + +00:15:34.080 --> 00:15:36.519 +in the exported document. + +00:15:36.520 --> 00:15:38.720 +That's a terrible default. We'll fix that, + +00:15:38.720 --> 00:15:42.040 +and we'll also ensure that my email address appears + +00:15:42.040 --> 00:15:43.371 +at the top of the document. + +00:15:43.372 --> 00:15:45.440 +Let's also take this opportunity to get rid + +00:15:45.440 --> 00:15:47.354 +of the table of contents. + +00:15:47.355 --> 00:15:48.867 +We don't need it. + +00:15:48.868 --> 00:15:51.120 +These are all export option settings + +00:15:51.120 --> 00:15:53.800 +and can be modified using the options keyword + +00:15:53.800 --> 00:15:55.508 +at the top of the doc. + +00:15:55.509 --> 00:15:57.480 +The manual is really your friend here, + +00:15:57.480 --> 00:16:00.979 +as there are a ton of export options. + +00:16:00.980 --> 00:16:03.120 +Now when we export the document again, + +00:16:03.120 --> 00:16:05.699 +it should look a lot better. + +NOTE Substituting constants + +00:16:05.700 --> 00:16:09.059 +Now that we've cleaned up the look of the exported document, + +00:16:09.060 --> 00:16:10.640 +we'll take a look at a better way + +00:16:10.640 --> 00:16:13.377 +of solving the problem with the introduction. + +00:16:13.378 --> 00:16:15.518 +Thinking like a programmer for a moment, + +00:16:15.519 --> 00:16:19.734 +what I really want here is a way of specifying a constant. + +00:16:19.735 --> 00:16:22.640 +Rather than hard-coding the name "Debian" or "RedHat" + +00:16:22.640 --> 00:16:24.569 +or whatever into my document, + +00:16:24.570 --> 00:16:28.234 +I want to substitute that text with a symbolic constant, + +00:16:28.235 --> 00:16:31.960 +named something like "distro", that can dynamically change + +00:16:31.960 --> 00:16:36.120 +to "Debian" or "RedHat" or "Slackware" or whatever, + +00:16:36.120 --> 00:16:38.689 +depending on how the document is configured. + +00:16:38.690 --> 00:16:41.640 +In the past, I've come up with some pretty cumbersome ways + +00:16:41.640 --> 00:16:44.640 +of doing this, but eventually I stumbled upon the idea + +00:16:44.640 --> 00:16:46.639 +of using Org-mode properties + +00:16:46.640 --> 00:16:49.409 +as a way of storing these constants. + +00:16:49.410 --> 00:16:53.059 +Like it says in the docs, properties are key-value pairs + +00:16:53.060 --> 00:16:55.169 +that are associated with an entry + +00:16:55.170 --> 00:16:58.379 +and they live in a collapsible properties drawer. + +00:16:58.380 --> 00:17:00.699 +Let's do a bit of cleanup on our document + +00:17:00.700 --> 00:17:02.600 +and we'll put things into sections. + +00:17:02.600 --> 00:17:14.000 +We'll also add a section for document constants. + +00:17:14.000 --> 00:17:19.560 +And that's where we'll put the properties drawer + +00:17:19.560 --> 00:17:25.739 +with the "distro" property. + +NOTE Getting the properties + +00:17:25.740 --> 00:17:27.120 +Now the question is, + +00:17:27.120 --> 00:17:30.099 +how do we reference these properties in the document? + +00:17:30.100 --> 00:17:32.520 +It turns out there's an Elisp function + +00:17:32.520 --> 00:17:35.440 +called `org-property-values`, which does what we want. + +00:17:35.440 --> 00:17:38.840 +If we run it and give it the name of our property, + +00:17:38.840 --> 00:17:42.679 +it returns a list with the string "Debian" in it. + +00:17:42.680 --> 00:17:45.919 +It's worth noting that this function is named + +00:17:45.920 --> 00:17:49.989 +`org-property-values` with values being plural. + +00:17:49.990 --> 00:17:52.889 +In org-mode, there could be a property named "foo" + +00:17:52.890 --> 00:17:55.880 +that has different values depending on which heading level + +00:17:55.880 --> 00:17:57.609 +you're at in the document, + +00:17:57.610 --> 00:17:59.720 +which is why the function returns a list. + +00:17:59.720 --> 00:18:01.289 +For our purposes though, + +00:18:01.290 --> 00:18:04.480 +we can just pull off the first value in the list with car + +00:18:04.480 --> 00:18:05.680 +and we're good to go. + +00:18:05.680 --> 00:18:10.040 +Now we'll make an Emacs Lisp list function called `get_prop` + +00:18:10.040 --> 00:18:11.440 +that does just that. + +00:18:11.440 --> 00:18:14.160 +This function takes one argument called `prop`, + +00:18:14.160 --> 00:18:15.920 +which is the property to look up + +00:18:15.920 --> 00:18:18.519 +and we'll give it a default value of "distro". + +00:18:18.520 --> 00:18:20.960 +So we can hit `C-c C-c` on the block + +00:18:20.960 --> 00:18:23.149 +to verify that it works. + +00:18:23.150 --> 00:18:25.480 +Now we just have to make an inline call + +00:18:25.480 --> 00:18:26.920 +to our `get_prop` function + +00:18:26.920 --> 00:18:29.559 +within the prose of the introduction section. + +00:18:29.560 --> 00:18:31.659 +And that should get us much closer + +00:18:31.660 --> 00:18:35.619 +to not hard coding distro names into our document. + +00:18:35.620 --> 00:18:36.869 +But before we do that, + +00:18:36.870 --> 00:18:39.849 +I need to clean up something that's been bothering me. + +00:18:39.850 --> 00:18:42.909 +By default, Emacs' `fill-column` variable + +00:18:42.910 --> 00:18:44.989 +is set to 70 characters, + +00:18:44.990 --> 00:18:47.720 +which may have been appropriate for 1970, + +00:18:47.720 --> 00:18:51.319 +but it's not great for 2023. + +00:18:51.320 --> 00:18:53.920 +We'll just cruise up to our startup block + +00:18:53.920 --> 00:18:56.539 +and set the variable there. + +00:18:56.540 --> 00:18:58.800 +We'll hit `C-c C-c`, + +00:18:58.800 --> 00:19:02.289 +and now our document will wrap at 100 columns, + +00:19:02.290 --> 00:19:05.829 +which for our purposes, I think is much more reasonable. + +00:19:05.830 --> 00:19:09.320 +The org-mode syntax for making an inline function call + +00:19:09.320 --> 00:19:13.059 +within the prose of your document is `call_`, + +00:19:13.060 --> 00:19:15.000 +followed by the name of the function, + +00:19:15.000 --> 00:19:17.040 +some optional header arguments, + +00:19:17.040 --> 00:19:19.719 +and then the function arguments. + +00:19:19.720 --> 00:19:21.680 +Now, when we export the document, + +00:19:21.680 --> 00:19:26.049 +we see that it's replaced our previously hard coded "Debian" + +00:19:26.050 --> 00:19:29.409 +with the value from the property. Huzzah! + +00:19:29.410 --> 00:19:32.959 +Now this is close to, but not exactly what we want. + +00:19:32.960 --> 00:19:36.720 +You can see that "Debian" is surrounded by a backtick + +00:19:36.720 --> 00:19:37.800 +and a single quote, + +00:19:37.800 --> 00:19:40.320 +which is the plain text exporters way + +00:19:40.320 --> 00:19:43.029 +of showing you verbatim text. + +00:19:43.030 --> 00:19:45.600 +In more sophisticated document backends, + +00:19:45.600 --> 00:19:49.379 +verbatim text is rendered in monospace. + +00:19:49.380 --> 00:19:54.080 +We can fix that by adding a ":results raw" header argument + +00:19:54.080 --> 00:19:56.459 +to the inline call. + +00:19:56.460 --> 00:19:58.239 +Now, when we export the document, + +00:19:58.240 --> 00:20:00.289 +it looks like what we'd expect. + +00:20:00.290 --> 00:20:02.960 +Now this is getting better, but it's still not great. + +NOTE Macros + +00:20:03.060 --> 00:20:05.840 +The `call_` syntax is pretty cumbersome, + +00:20:05.840 --> 00:20:08.560 +and it's a lot to type every time we want + +00:20:08.560 --> 00:20:09.849 +to reference a constant + +00:20:09.850 --> 00:20:13.219 +and not have it be marked up as verbatim. + +00:20:13.220 --> 00:20:17.169 +This is where org-mode macros come to our rescue. + +00:20:17.170 --> 00:20:19.469 +If we head to the top of the document, + +00:20:19.470 --> 00:20:21.480 +we can create a couple of macros + +00:20:21.480 --> 00:20:24.699 +using the `#+MACRO:` export keyword. + +00:20:24.700 --> 00:20:27.600 +We'll define two macros with short names. + +00:20:27.600 --> 00:20:30.240 +One named "p" for "property", + +00:20:30.240 --> 00:20:34.640 +and the other one named "pr" for "property raw". + +00:20:34.640 --> 00:20:39.160 +Org-mode macros are expanded when the document is exported, + +00:20:39.160 --> 00:20:41.640 +and any positional arguments provided + +00:20:41.640 --> 00:20:43.559 +are referenced by their number. + +00:20:43.860 --> 00:20:45.160 +Now in the introduction, + +00:20:45.160 --> 00:20:47.880 +we can use the macro replacement syntax, + +00:20:47.880 --> 00:20:49.800 +which is three curly braces, + +00:20:49.800 --> 00:20:52.760 +followed by the macro name and any arguments, + +00:20:52.760 --> 00:20:55.559 +and then three ending curly braces. + +00:20:55.560 --> 00:20:58.699 +You see why I kept the macro name short. + +00:20:58.700 --> 00:21:01.280 +That's six curly braces in total we're typing, + +00:21:01.280 --> 00:21:05.239 +which still takes up a fair amount of space. + +NOTE Properties in practice + +00:21:05.240 --> 00:21:07.120 +Now let's take a look at how we might use + +00:21:07.120 --> 00:21:09.159 +these properties in practice. + +00:21:09.160 --> 00:21:10.920 +Debian and RedHat distros differ + +00:21:11.120 --> 00:21:12.929 +on how they install packages. + +00:21:12.930 --> 00:21:16.120 +So we're gonna want an "install" property, + +00:21:16.120 --> 00:21:24.579 +where in Debian we use `sudo apt-get install -qq`, + +00:21:24.580 --> 00:21:26.939 +and on RedHat we'll use something like + +00:21:26.940 --> 00:21:33.119 +`sudo dnf install -y`. + +00:21:33.120 --> 00:21:35.329 +Now development packages + +00:21:35.330 --> 00:21:38.049 +also have a different naming convention. + +00:21:38.050 --> 00:21:40.760 +For example, the `ncurses` library on Debian + +00:21:40.760 --> 00:21:43.520 +is called `libncurses-dev`, + +00:21:43.520 --> 00:21:48.259 +where on RedHat it's called `ncurses-devel`. + +00:21:48.260 --> 00:21:49.640 +There are likely going to be + +00:21:49.640 --> 00:21:52.120 +many more little differences like this + +00:21:52.120 --> 00:21:55.339 +that we'll need to solve with properties. + +00:21:55.340 --> 00:21:58.609 +Now I already don't like where this is going. + +00:21:58.610 --> 00:22:00.880 +Switching between the Debian and RedHat + +00:22:00.880 --> 00:22:03.160 +versions of the document is gonna mean + +00:22:03.160 --> 00:22:05.200 +commenting and uncommenting out + +00:22:05.200 --> 00:22:06.989 +a bunch of different properties, + +00:22:06.990 --> 00:22:09.019 +which is pretty janky. + +NOTE Using a prefix + +00:22:09.020 --> 00:22:11.079 +Luckily we can solve this problem + +00:22:11.080 --> 00:22:14.439 +with a little bit of Emacs Lisp. + +00:22:14.440 --> 00:22:16.879 +We'll start by modifying our properties, + +00:22:16.880 --> 00:22:19.140 +so their property names are prefixed + +00:22:19.141 --> 00:22:23.119 +with either `deb_` or `rh_` + +00:22:23.120 --> 00:22:27.719 +to signify which distro the property applies to.` + +00:22:27.720 --> 00:22:31.160 +We'll also create a single property called "prefix", + +00:22:31.160 --> 00:22:34.589 +which will be prepended to the property name + +00:22:34.590 --> 00:22:36.529 +by the `get_prop` function + +00:22:36.530 --> 00:22:39.509 +if the requested property is not found. + +00:22:39.510 --> 00:22:42.200 +This way, when we want to switch between + +00:22:42.200 --> 00:22:45.349 +the Debian and RedHat versions of the document, + +00:22:45.350 --> 00:22:49.029 +we just need to change the prefix property. + +00:22:49.030 --> 00:22:51.379 +So now we'll change the Elisp code. + +00:22:51.380 --> 00:22:55.209 +So we'll use a let expression with two bound variables. + +00:22:55.210 --> 00:22:56.919 +The first one is called ret, + +00:22:56.920 --> 00:22:59.160 +which determines if the initial call + +00:22:59.160 --> 00:23:01.949 +to `org-property-values` succeeds. + +00:23:01.950 --> 00:23:04.039 +The second variable is called prefix, + +00:23:04.040 --> 00:23:06.219 +which is the prefix property. + +00:23:06.220 --> 00:23:09.120 +If the first call to `org-property-values` succeeds, + +00:23:09.120 --> 00:23:11.159 +we return it as normal. + +00:23:11.160 --> 00:23:14.249 +If not, we concatenate the property value + +00:23:14.250 --> 00:23:15.920 +that was passed into the function + +00:23:15.920 --> 00:23:18.969 +onto the prefix and try again. + +00:23:18.970 --> 00:23:23.800 +Now when we call the `get_prop` function with "distro" + +00:23:23.800 --> 00:23:26.360 +as the prop argument, it won't be found. + +00:23:26.360 --> 00:23:29.689 +So the code will slap our prefix tag on the front, + +00:23:29.690 --> 00:23:33.249 +making it something like `rh_distro`, + +00:23:33.250 --> 00:23:35.329 +and it will be found and returned. + +00:23:35.330 --> 00:23:39.999 +Let's see that in action. + +00:23:40.000 --> 00:23:42.009 +All right, now we're talking. + +NOTE Switching distributions + +00:23:42.010 --> 00:23:44.419 +This setup is starting to look pretty good, + +00:23:44.420 --> 00:23:46.040 +but there are just a few things + +00:23:46.040 --> 00:23:48.659 +that I want to add before we move on. + +00:23:48.660 --> 00:23:51.240 +First of all, I think the document should have a subtitle, + +00:23:51.240 --> 00:23:53.960 +something that tells you if you're looking at the RedHat + +00:23:53.960 --> 00:23:56.160 +or the Debian version of the document. + +00:23:56.160 --> 00:23:57.880 +I also think it would be great + +00:23:57.880 --> 00:24:00.520 +if the file name of the exported document + +00:24:00.520 --> 00:24:04.999 +reflected the distribution as well. + +00:24:05.000 --> 00:24:08.040 +I also want to add a quick Debian only section + +00:24:08.040 --> 00:24:11.799 +to the document that explains how it got its name. + +00:24:11.800 --> 00:24:17.739 +Now let's see what happens when we export the document. + +00:24:17.740 --> 00:24:20.439 +This did not work out as we wanted. + +00:24:20.440 --> 00:24:23.360 +As you can see, the macro we used in the subtitles + +00:24:23.360 --> 00:24:24.959 +didn't expand properly, + +00:24:24.960 --> 00:24:28.640 +and as a result, our subtitle didn't render right. + +00:24:28.640 --> 00:24:30.640 +Sadly, you can't use macros + +00:24:30.640 --> 00:24:32.909 +or inline function calls everywhere. + +00:24:32.910 --> 00:24:34.680 +And one place where they don't work + +00:24:34.680 --> 00:24:37.189 +is inside of certain export keywords. + +00:24:37.190 --> 00:24:43.219 +So we're gonna have to hard code them here. + +00:24:43.220 --> 00:24:46.320 +Another mistake that we made is we forgot to update + +00:24:46.320 --> 00:24:49.099 +the `#+EXCLUDE_TAGS` export keyword, + +00:24:49.100 --> 00:24:51.439 +because with the RedHat version of the document, + +00:24:51.440 --> 00:24:54.509 +we want to exclude the Debian tag. + +00:24:54.510 --> 00:24:56.400 +Now when we export the document, + +00:24:56.400 --> 00:24:57.839 +everything should be correct. + +00:24:57.840 --> 00:25:00.619 +The word RedHat should appear in the subtitle, + +00:25:00.620 --> 00:25:04.799 +and the Debian fun fact section should not be present. + +00:25:04.800 --> 00:25:06.960 +Now we just need to add a section to the README + +00:25:06.960 --> 00:25:09.280 +that explains the steps you need to take + +00:25:09.280 --> 00:25:11.000 +in order to switch the document + +00:25:11.000 --> 00:25:12.759 +from RedHat to Debian. + +00:25:12.760 --> 00:25:14.000 +Okay, let's see here. + +00:25:14.000 --> 00:25:18.309 +We have to change `#+SUBTITLE`, change the `#+EXCLUDE_TAGS`, + +00:25:18.310 --> 00:25:20.429 +change the `#+EXPORT_FILE_NAME`, + +00:25:20.430 --> 00:25:23.289 +and change the `prefix` property. + +00:25:23.290 --> 00:25:26.289 +This is OK, but it's not great. + +00:25:26.290 --> 00:25:29.429 +Emacs Lisp can once again come to our rescue. + +00:25:29.430 --> 00:25:32.080 +What we'll do is make an Elisp code block + +00:25:32.080 --> 00:25:35.480 +that will invite the user to hit `C-c C-c` on. + +00:25:35.480 --> 00:25:39.520 +And the code block will essentially make all these changes + +00:25:39.520 --> 00:25:40.919 +in the document for them. + +00:25:40.920 --> 00:25:43.280 +This code block, which we'll call `switch_distro`, + +00:25:43.280 --> 00:25:45.680 +takes one argument called `os`, + +00:25:45.680 --> 00:25:48.689 +which by default is set to "Debian". + +00:25:48.690 --> 00:25:50.760 +It starts out with a let expression + +00:25:50.760 --> 00:25:53.029 +that defines three bound variables. + +00:25:53.030 --> 00:25:55.969 +The `debian` variable is a boolean that is true + +00:25:55.970 --> 00:25:58.699 +if the distro we're switching to is Debian. + +00:25:58.700 --> 00:26:00.360 +Based on the value of this boolean, + +00:26:00.360 --> 00:26:04.169 +we'll set the `noexport` and `prefix` variables accordingly. + +00:26:04.170 --> 00:26:06.720 +The `save-excursion` block tells Emacs + +00:26:06.720 --> 00:26:09.199 +that we're going to be moving around in the document + +00:26:09.200 --> 00:26:11.680 +and to remember to put our point back where we started + +00:26:11.680 --> 00:26:13.429 +when the block finishes. + +00:26:13.430 --> 00:26:16.249 +After that, we essentially go to the top of the document + +00:26:16.250 --> 00:26:19.839 +and search and replace the subtitle, `exclude_tags`, + +00:26:19.840 --> 00:26:22.499 +`export_file_name`, and the `prefix`. + +00:26:22.500 --> 00:26:23.389 +Pretty cool. + +00:26:23.390 --> 00:26:25.029 +Let's see this in action. + +00:26:25.030 --> 00:26:27.869 +If we hit `C-c C-c` on this block, + +00:26:27.870 --> 00:26:30.480 +we should see the document automatically change a bit. + +00:26:30.480 --> 00:26:32.320 +And now when we export it, + +00:26:32.320 --> 00:26:36.089 +we get the Debian version of the doc. + +00:26:36.090 --> 00:26:37.629 +If we want to change it back, + +00:26:37.630 --> 00:26:39.880 +we can just head back over to the code block + +00:26:39.880 --> 00:26:43.149 +and change the default value for the os variable + +00:26:43.150 --> 00:26:47.619 +from "Debian" to "RedHat" and hit `C-c C-c` again. + +00:26:47.620 --> 00:26:49.919 +And now when we re-export, + +00:26:49.920 --> 00:26:52.909 +we're looking at the RedHat version of the document. + +00:26:52.910 --> 00:26:55.859 +Just as an aside, if you ever thought to yourself, + +00:26:55.860 --> 00:26:58.159 +"I should learn Emacs Lisp someday" + +00:26:58.160 --> 00:27:01.289 +Make it someday soon. You'll be happy you did. + +00:27:01.290 --> 00:27:03.769 +Not only is it a fun programming language, + +00:27:03.770 --> 00:27:06.679 +but you can do powerful things with it in Emacs, + +00:27:06.680 --> 00:27:12.149 +which I hope is a point that folks take away from this talk. + +00:27:12.150 --> 00:27:14.149 +All right, that was a lot. + +NOTE A tour + +00:27:14.150 --> 00:27:16.840 +Now that we've spent the past 20 minutes or so + +00:27:16.840 --> 00:27:19.409 +digging into some of the tips and tricks I used + +00:27:19.410 --> 00:27:22.879 +when creating my build Emacs from source document, + +00:27:22.880 --> 00:27:26.279 +we'll say goodbye to this document we've been working on + +00:27:26.280 --> 00:27:27.480 +and we'll start a tour + +00:27:27.480 --> 00:27:29.960 +of the actual literate document I wrote. + +00:27:29.960 --> 00:27:33.080 +A document that I'll demonstrate actually downloading + +00:27:33.080 --> 00:27:35.659 +and building a new Emacs when I export it + +00:27:35.660 --> 00:27:38.959 +on both my Ubuntu and RedHat virtual machines. + +00:27:38.960 --> 00:27:41.689 +I'll also show you how org-mode can generate + +00:27:41.690 --> 00:27:44.519 +slick professional looking PDF files + +00:27:44.520 --> 00:27:46.579 +through the power of LaTeX. + +00:27:46.580 --> 00:27:49.619 +We'll start here at the orgdemo2 directory, + +00:27:49.620 --> 00:27:51.229 +which I've cloned from GitLab. + +00:27:51.230 --> 00:27:55.599 +This repository has all the source materials for this talk. + +00:27:55.600 --> 00:27:59.040 +The buildemacs.org file is where most of the good stuff is. + +00:27:59.040 --> 00:28:01.479 +So that's where we'll start. + +00:28:01.480 --> 00:28:03.360 +There's a lot of file-local variables + +00:28:03.360 --> 00:28:04.800 +that we'll need to confirm. + +00:28:04.800 --> 00:28:06.439 +So we'll do that too. + +00:28:06.440 --> 00:28:07.560 +So the first thing we're gonna do + +00:28:07.560 --> 00:28:10.080 +is hit `C-u TAB` twice, + +00:28:10.780 --> 00:28:13.360 +which will give us a top-level overview + +00:28:13.360 --> 00:28:15.139 +of all of our headings. + +00:28:15.140 --> 00:28:16.600 +As you can see, we've got a lot + +00:28:16.600 --> 00:28:20.119 +of the same familiar export keywords we had before. + +00:28:20.120 --> 00:28:23.099 +`#+TITLE`, `#+SUBTITLE`, `#+AUTHOR`, `#+EMAIL`, + +00:28:23.100 --> 00:28:25.359 +plus a few we haven't seen before. + +00:28:25.360 --> 00:28:27.720 +For example, I've squirreled away + +00:28:27.720 --> 00:28:30.619 +a lot of the `#+LATEX_HEADER` export keywords + +00:28:30.620 --> 00:28:33.539 +in this file called latex.setup. + +00:28:33.540 --> 00:28:36.539 +And I did this just so they don't clutter up the document. + +00:28:36.540 --> 00:28:38.320 +Much of the LaTeX magic + +00:28:38.320 --> 00:28:40.909 +that makes the exported document look good + +00:28:40.910 --> 00:28:42.589 +is in these headers. + +00:28:42.590 --> 00:28:45.119 +LaTeX commands begin with a backslash. + +00:28:45.120 --> 00:28:49.679 +And a common one we use a lot here is `\usepackage`. + +00:28:49.680 --> 00:28:52.200 +This lets us bring in packages like geometry, + +00:28:52.200 --> 00:28:56.539 +svg for the cool SeaGL SVG logo, + +00:28:56.540 --> 00:28:58.440 +`fancyhdr` and fancy verbatim [`fancyvrb`] + +00:28:58.440 --> 00:29:00.689 +to keep things looking pretty fancy. + +00:29:00.690 --> 00:29:03.200 +Using a scalable vector image format + +00:29:03.200 --> 00:29:05.720 +makes it possible for us to do really cool things + +00:29:05.720 --> 00:29:09.269 +like having a scaled-down version of the SeaGL logo + +00:29:09.270 --> 00:29:11.979 +appear in the fancy footer below. + +00:29:11.980 --> 00:29:15.360 +I also include some macros in a separate file + +00:29:15.360 --> 00:29:18.120 +just to help keep things tidy in the main document. + +00:29:18.120 --> 00:29:20.600 +Here I've got the familiar macros + +00:29:20.600 --> 00:29:23.399 +we've seen before for `get_prop`. + +00:29:23.400 --> 00:29:25.520 +But here I use different permutations + +00:29:25.520 --> 00:29:28.160 +depending on if I want results raw + +00:29:28.160 --> 00:29:31.869 +or raw verbatim or just verbatim. + +00:29:31.870 --> 00:29:35.069 +I also have a couple of macros here at the top of the file + +00:29:35.070 --> 00:29:40.280 +that are for pulling strings out of results blocks + +00:29:40.280 --> 00:29:41.920 +and then trimming them + +00:29:41.920 --> 00:29:44.719 +so there's no white space on either side. + +00:29:44.720 --> 00:29:46.440 +Like in the version of the document + +00:29:46.440 --> 00:29:48.429 +we worked on at the start of this talk, + +00:29:48.430 --> 00:29:51.079 +the real document also has a README section + +00:29:51.080 --> 00:29:53.469 +marked with the `:noexport:` tag. + +00:29:53.470 --> 00:29:55.400 +It also has a section about choosing + +00:29:55.400 --> 00:29:57.909 +which version of the document to export + +00:29:57.910 --> 00:30:00.599 +and a code block on how to switch between them. + +00:30:00.600 --> 00:30:03.000 +It's also got a lot of helpful information in it + +00:30:03.000 --> 00:30:05.819 +like what OS and Emacs versions + +00:30:05.820 --> 00:30:09.559 +the document has been tested to "run" on, + +00:30:09.560 --> 00:30:12.329 +a section on the LaTeX prerequisites + +00:30:12.330 --> 00:30:14.080 +and the section on executing + +00:30:14.080 --> 00:30:16.199 +the document's various code blocks. + +NOTE TeX and LaTeX + +00:30:16.200 --> 00:30:19.199 +The latter two sections we'll take a look at now. + +00:30:19.200 --> 00:30:22.579 +Out of the box on Fedora and Ubuntu server distros, + +00:30:22.580 --> 00:30:24.709 +the TeX typesetting system + +00:30:24.710 --> 00:30:27.669 +also by noted computer scientist Donald Knuth + +00:30:27.670 --> 00:30:28.859 +is not installed. + +00:30:28.860 --> 00:30:31.719 +So we'll need to install some packages. + +00:30:31.720 --> 00:30:34.449 +Starting out we'll need the `texlive` package + +00:30:34.450 --> 00:30:37.459 +which gets you a fully featured TeX setup. + +00:30:37.460 --> 00:30:39.289 +This also gets you LaTeX + +00:30:39.290 --> 00:30:42.789 +which can be viewed as a distribution of TeX macros. + +00:30:42.790 --> 00:30:44.899 +You'll also need XeTeX. + +00:30:44.900 --> 00:30:49.779 +This gets you Unicode support and lets you use modern fonts. + +00:30:49.780 --> 00:30:52.809 +We'll also want to install pdfTeX. + +00:30:52.810 --> 00:30:57.209 +This gets us the ability to generate PDFs from TeX sources. + +00:30:57.210 --> 00:31:01.299 +And finally, we're gonna need to install latexmk + +00:31:01.300 --> 00:31:02.400 +which is a Perl script + +00:31:02.400 --> 00:31:05.139 +that knows how to run LaTeX multiple times + +00:31:05.140 --> 00:31:09.249 +in order to properly deal with intra-document links. + +NOTE Other prerequisites + +00:31:09.250 --> 00:31:11.069 +But wait, there's more. + +00:31:11.070 --> 00:31:12.960 +We're also gonna need Inkscape + +00:31:12.960 --> 00:31:15.520 +to rasterize our SeaGL vector logo + +00:31:15.520 --> 00:31:17.339 +at different resolutions. + +00:31:17.340 --> 00:31:20.360 +And we're gonna need the JetBrains Mono font + +00:31:20.360 --> 00:31:23.059 +to make our source code look snazzy. + +00:31:23.060 --> 00:31:24.680 +We'll also need the Inter font + +00:31:24.680 --> 00:31:28.039 +to make our prose look snazzy as well. + +00:31:28.040 --> 00:31:31.299 +I've helpfully added a bash code block in the README + +00:31:31.300 --> 00:31:35.739 +that you can hit C-c C-c on to install. + +00:31:35.740 --> 00:31:38.520 +This really does lock up Emacs for a few minutes + +00:31:38.520 --> 00:31:40.329 +and it's sort of annoying. + +00:31:40.330 --> 00:31:43.040 +When we export the document and turn off all caching + +00:31:43.040 --> 00:31:45.599 +and it actually builds Emacs for real, + +00:31:45.600 --> 00:31:48.769 +Emacs can be locked up for tens of minutes. + +00:31:48.770 --> 00:31:50.880 +There's a package called ob-async + +00:31:50.880 --> 00:31:54.259 +that I've been meaning to check out that might help here. + +00:31:54.260 --> 00:31:55.760 +But since I wanted this document + +00:31:55.760 --> 00:31:58.000 +to work on bog-standard Emacs setups, + +00:31:58.000 --> 00:32:00.059 +I didn't get around to it. + +NOTE Caching + +00:32:00.060 --> 00:32:03.139 +Before we get into talking about running the document, + +00:32:03.140 --> 00:32:06.449 +let's talk briefly about results caching. + +00:32:06.450 --> 00:32:08.839 +We'll take a look at the section of the document + +00:32:08.840 --> 00:32:13.139 +where we talk about Git tags for an example. + +00:32:13.140 --> 00:32:15.760 +The `num_tags` bash code block determines + +00:32:15.760 --> 00:32:19.039 +how many tags there are in the Emacs Git repo. + +00:32:19.040 --> 00:32:21.600 +And when I hit C-c C-c on that block + +00:32:21.600 --> 00:32:25.059 +several days ago, when I was first creating the document, + +00:32:25.060 --> 00:32:28.019 +that number was 183. + +00:32:28.020 --> 00:32:32.169 +That result has remained cached in the document since then. + +00:32:32.170 --> 00:32:34.899 +And you can see a snippet of the SHA1 hash + +00:32:34.900 --> 00:32:38.389 +of the contents of the source block below. + +00:32:38.390 --> 00:32:40.800 +You can see where I referenced the result + +00:32:40.800 --> 00:32:44.960 +using the `sr` for string raw macro in the prose below, + +00:32:44.960 --> 00:32:50.509 +and how it gets rendered in the exported PDF document. + +00:32:50.510 --> 00:32:52.880 +All the source blocks in the exported sections + +00:32:52.880 --> 00:32:56.559 +of the document include cached results like this. + +00:32:56.560 --> 00:33:01.389 +If I export the document now, it won't take that long to do + +00:33:01.390 --> 00:33:03.800 +because while there are a ton of code blocks + +00:33:03.800 --> 00:33:09.069 +in the exported sections, they're all cached. + +00:33:09.070 --> 00:33:11.560 +Now let's get back to the section of the README + +00:33:11.560 --> 00:33:14.909 +that explains how to execute the code in the document. + +00:33:14.910 --> 00:33:17.640 +Here I explain that if you want to build Emacs + +00:33:17.640 --> 00:33:20.189 +on your computer using this document, + +00:33:20.190 --> 00:33:22.019 +you've got a couple of options. + +00:33:22.020 --> 00:33:25.649 +The first option is to manually invalidate the caches + +00:33:25.650 --> 00:33:28.960 +and take C-c C-c on every code block + +00:33:28.960 --> 00:33:30.959 +in the main document. + +00:33:30.960 --> 00:33:33.160 +This lets you supervise the entire process, + +00:33:33.160 --> 00:33:36.939 +and it also creates new cached result blocks, + +00:33:36.940 --> 00:33:39.239 +but it's time consuming. + +00:33:39.240 --> 00:33:43.440 +There is also an internal link to the main document here, + +00:33:43.440 --> 00:33:47.379 +and you can jump to it with C-c C-o. + +00:33:47.380 --> 00:33:50.040 +This is one of those intra-document links + +00:33:50.040 --> 00:33:52.999 +that is really tricky to get right with LaTeX, + +00:33:53.000 --> 00:33:56.989 +and is why we opted to use the latexmk Perl script + +00:33:56.990 --> 00:34:00.049 +to build the PDF version of the document. + +00:34:00.050 --> 00:34:01.920 +I'm mentioning it specifically here + +00:34:01.920 --> 00:34:05.629 +because it took me forever to figure this out. + +00:34:05.630 --> 00:34:07.269 +The second option you've got + +00:34:07.270 --> 00:34:09.280 +is to change the default header arg + +00:34:09.280 --> 00:34:13.739 +from `:cache yes` to `:cache no` at the top of the document. + +00:34:13.740 --> 00:34:16.269 +If we cruise up to the top of the document, + +00:34:16.270 --> 00:34:19.129 +you can see that this header argument property + +00:34:19.130 --> 00:34:22.440 +basically says that unless a code block + +00:34:22.440 --> 00:34:24.160 +explicitly says otherwise, + +00:34:24.160 --> 00:34:27.118 +it's by default supposed to be cached. + +00:34:27.119 --> 00:34:29.440 +That's how we were able to export the document + +00:34:29.440 --> 00:34:31.558 +before so quickly. + +00:34:31.559 --> 00:34:34.819 +The code block named `no_cache_no_confirm` + +00:34:34.820 --> 00:34:38.618 +uses the `save-excursion` and regex replace trick + +00:34:38.619 --> 00:34:40.348 +that I demonstrated earlier + +00:34:40.349 --> 00:34:42.819 +to munch the default cache header arg + +00:34:42.820 --> 00:34:45.409 +from "cache yes" to "cache no". + +00:34:45.410 --> 00:34:49.299 +And it also turns off confirmations on bash code blocks. + +00:34:49.300 --> 00:34:51.939 +Let's do that now. + +00:34:51.940 --> 00:34:54.559 +Now we'll export the document to PDF, + +00:34:54.560 --> 00:34:57.439 +which will ignore the cache result blocks + +00:34:57.440 --> 00:35:00.319 +and clone the Git repository on Savannah, + +00:35:00.320 --> 00:35:01.760 +create a branch that points + +00:35:01.760 --> 00:35:05.459 +to the most recently tagged version of Emacs 29, + +00:35:05.460 --> 00:35:07.759 +run configure a handful of times, + +00:35:07.760 --> 00:35:10.720 +installing packages to fix missing dependencies + +00:35:10.720 --> 00:35:12.399 +along the way, + +00:35:12.400 --> 00:35:16.099 +build Emacs, install Emacs in our home directory, + +00:35:16.100 --> 00:35:19.339 +verify that it has successfully built a binary, + +00:35:19.340 --> 00:35:22.549 +run it in batch mode with some sample Elisp + +00:35:22.550 --> 00:35:26.869 +and show the file sizes and dates of the generated files. + +00:35:26.870 --> 00:35:28.339 +This is gonna take a while. + +00:35:28.340 --> 00:35:32.829 +And while it's running, we'll pop over to our Fedora box. + +00:35:32.830 --> 00:35:34.680 +All right, now we'll fire up Emacs, + +00:35:34.680 --> 00:35:39.280 +hit `C-c C-c` on the `configure_document` code block + +00:35:39.280 --> 00:35:41.849 +to configure the document for RedHat + +00:35:41.850 --> 00:35:45.709 +since Fedora here is a RedHat based distro. + +00:35:45.710 --> 00:35:47.040 +Then what we'll do is we'll pop down + +00:35:47.040 --> 00:35:49.589 +and hit `C-c C-c` + +00:35:49.590 --> 00:35:53.699 +on the `rh_install_latex` code block + +00:35:53.700 --> 00:35:56.229 +to install the LaTeX prerequisites + +00:35:56.230 --> 00:35:58.459 +for this Fedora virtual machine. + +00:35:58.460 --> 00:36:02.589 +Finally, we'll execute the `no_cache_no_confirm` block + +00:36:02.590 --> 00:36:05.049 +and then kick off the export. + +00:36:05.050 --> 00:36:07.280 +Then we'll go and check back on what's happening + +00:36:07.280 --> 00:36:09.529 +on the Ubuntu box. + +00:36:09.530 --> 00:36:11.240 +Ooh, top looks pretty quiet. + +00:36:11.240 --> 00:36:14.039 +I think the export is complete. + +00:36:14.040 --> 00:36:17.559 +Ooh, those are the words I love to see in the status area, + +00:36:17.560 --> 00:36:20.609 +PDF file produced! + +NOTE Looking at the PDF + +00:36:20.610 --> 00:36:22.600 +Now I can't use my web browser + +00:36:22.600 --> 00:36:24.959 +to take a look at this PDF file + +00:36:24.960 --> 00:36:27.080 +because I haven't set up a web server + +00:36:27.080 --> 00:36:30.759 +or anything like that on the Ubuntu virtual machine. + +00:36:30.760 --> 00:36:34.439 +I can, however, use TRAMP with the ssh method + +00:36:34.440 --> 00:36:36.560 +to poke around on the ubuntu host + +00:36:36.560 --> 00:36:39.120 +on my personal version of Emacs. + +00:36:39.120 --> 00:36:40.939 +So let's do that. + +00:36:40.940 --> 00:36:44.809 +Okay, so now if we go into the source directory + +00:36:44.810 --> 00:36:48.039 +and then we hop into the orgdemo2 directory + +00:36:48.040 --> 00:36:51.619 +and then we look at the deb version of the PDF, + +00:36:51.620 --> 00:36:54.149 +there she blows. + +00:36:54.150 --> 00:36:58.160 +Now, if we go down to the Building Emacs section, + +00:36:58.160 --> 00:37:00.129 +we can see that it built. + +00:37:00.130 --> 00:37:03.839 +And if we look in the bin directory, + +00:37:03.840 --> 00:37:06.779 +we can see that at 17:01, + +00:37:06.780 --> 00:37:11.379 +that's when all of those files got created. + +00:37:11.380 --> 00:37:15.589 +Also the file creation date on the PDF is 17:01. + +00:37:15.590 --> 00:37:18.720 +So all of this code executed roughly the same time + +00:37:18.720 --> 00:37:21.159 +the PDF was created. + +00:37:21.160 --> 00:37:25.339 +All right, so now let's head back over to the Fedora box + +00:37:25.340 --> 00:37:27.920 +and then we'll navigate to the source directory, + +00:37:27.920 --> 00:37:30.119 +the orgdemo2 directory, + +00:37:30.120 --> 00:37:35.719 +and there is our RedHat version of the built Emacs PDF. + +00:37:35.720 --> 00:37:38.219 +And Bob's your uncle. + +00:37:38.220 --> 00:37:42.549 +And you can see it is the RedHat version of the document + +00:37:42.550 --> 00:37:44.939 +because this is a RedHat box. + +00:37:44.940 --> 00:37:51.639 +And if we go over to the What did we install? section, + +00:37:51.640 --> 00:37:56.049 +you can see that these binaries were built at 17:35. + +00:37:56.050 --> 00:37:58.699 +And now if we pop open dired + +00:37:58.700 --> 00:38:00.739 +and we take a look at the PDF, + +00:38:00.740 --> 00:38:07.329 +we can see it also was created at 17:35. + +00:38:07.330 --> 00:38:10.039 +All right, in the couple minutes remaining, + +00:38:10.040 --> 00:38:11.640 +I thought it would be a good idea + +00:38:11.640 --> 00:38:15.739 +just to take a look at the document + +00:38:15.740 --> 00:38:19.000 +and maybe just go through some of what it actually does + +00:38:19.000 --> 00:38:22.579 +in explaining how to build Emacs from source. + +00:38:22.580 --> 00:38:27.139 +We'll look at the RedHat version since we're here. + +00:38:27.140 --> 00:38:28.160 +And the first thing you do is + +00:38:28.160 --> 00:38:31.539 +you have to get access to the source code. + +00:38:31.540 --> 00:38:32.840 +And before you can do anything, + +00:38:32.840 --> 00:38:35.419 +this is a RedHat-specific section + +00:38:35.420 --> 00:38:38.299 +where you need to install some development tools. + +00:38:38.300 --> 00:38:41.539 +And this development tools group actually has Git. + +00:38:41.540 --> 00:38:44.640 +Now I installed Git earlier, but if you didn't do that, + +00:38:44.640 --> 00:38:46.939 +that would be the first thing that you need to do. + +00:38:46.940 --> 00:38:50.039 +We create a source directory, we cd into it, + +00:38:50.040 --> 00:38:53.059 +we clone the repo from Savannah. + +00:38:53.060 --> 00:38:56.059 +And then we start to take a look at some of the Git tags. + +00:38:56.060 --> 00:38:58.560 +And we showed this before where we check out + +00:38:58.560 --> 00:39:00.369 +how many different tags there are. + +00:39:00.370 --> 00:39:02.400 +And then we run this kind of funky Git command + +00:39:02.400 --> 00:39:06.040 +to sort of list all the tags that begin with 'emacs-29', + +00:39:06.040 --> 00:39:08.759 +and we sort them by when they were tagged. + +00:39:08.760 --> 00:39:12.400 +So we can see that Emacs 29.1.pretest + +00:39:12.400 --> 00:39:14.439 +is the most recent version. + +00:39:14.440 --> 00:39:15.880 +So that's the one we grab + +00:39:15.880 --> 00:39:18.659 +and that's the one we decide to build. + +00:39:18.660 --> 00:39:22.779 +And then we create a branch that is based on this tag. + +00:39:22.780 --> 00:39:27.479 +And this is dynamically generated based on what we saw here. + +00:39:27.480 --> 00:39:29.439 +So that's what we use here. + +NOTE Errors + +00:39:29.440 --> 00:39:32.920 +In this case, we're piping standard error + +00:39:32.920 --> 00:39:35.099 +to where standard out goes. + +00:39:35.100 --> 00:39:36.069 +That's another trick. + +00:39:36.070 --> 00:39:39.559 +If you want to actually see an error get created, + +00:39:39.560 --> 00:39:44.119 +org-mode will capture any errors that code blocks produce, + +00:39:44.120 --> 00:39:46.819 +and it will show you the error message in a buffer. + +00:39:46.820 --> 00:39:49.240 +So if you actually wanna show what it looks like + +00:39:49.240 --> 00:39:53.059 +when something errors out, this is the trick you have to use. + +00:39:53.060 --> 00:39:56.200 +And then what we do is we look for a configure script + +00:39:56.200 --> 00:39:57.419 +and there isn't one. + +00:39:57.420 --> 00:39:58.599 +And then we realize, + +00:39:58.600 --> 00:40:00.909 +uh-oh, we're gonna have to deal with autotools. + +00:40:00.910 --> 00:40:05.560 +So, you know, we run the autogen script and it complains + +00:40:05.560 --> 00:40:08.679 +because we're missing some prerequisites. + +00:40:08.680 --> 00:40:11.349 +So we have to install autoconf, + +00:40:11.350 --> 00:40:13.019 +and then we run it again, + +00:40:13.020 --> 00:40:15.959 +and finally it generates a configure script. + +00:40:15.960 --> 00:40:19.019 +And this is another case where I pull this number + +00:40:19.020 --> 00:40:21.979 +right here into the actual prose. + +00:40:21.980 --> 00:40:24.840 +And I can see it's, oh, it's, you know, this how many bytes. + +00:40:24.840 --> 00:40:26.800 +When was the last time you wrote a shell script + +00:40:26.800 --> 00:40:29.579 +that was this many bytes long? + +00:40:29.580 --> 00:40:31.320 +And then we configure the build process. + +00:40:31.320 --> 00:40:33.760 +And, you know, it's not gonna work right away + +00:40:33.760 --> 00:40:36.699 +because we don't have GNU Texinfo installed. + +00:40:36.700 --> 00:40:41.439 +So we gotta do that, which we do with `dnf install` here. + +00:40:41.440 --> 00:40:44.320 +And then there's this section that is either RedHat- + +00:40:44.320 --> 00:40:48.919 +or Debian-specific that talks about, like, + +00:40:48.920 --> 00:40:51.240 +if you don't know the name of a package + +00:40:51.240 --> 00:40:55.160 +that contains a given file name, how do you query it? + +00:40:55.160 --> 00:40:59.519 +And in the RedHat world, you use `dnf provides makeinfo`. + +00:40:59.520 --> 00:41:02.289 +In the Debian world, you do something entirely different. + +00:41:02.290 --> 00:41:06.639 +And then we have to install the `ncurses` binary. + +00:41:06.640 --> 00:41:10.299 +And finally we get like a minimal configuration + +00:41:10.300 --> 00:41:13.699 +and you can see that there's a whole bunch of nos here. + +00:41:13.700 --> 00:41:15.200 +So, you know, we don't have cairo, + +00:41:15.200 --> 00:41:18.799 +we don't have imagemagick, we don't have dbus, + +00:41:18.800 --> 00:41:20.600 +you know, there's a whole bunch of stuff we don't have. + +00:41:20.600 --> 00:41:23.880 +We don't have X, we don't have libjansson, no tree-sitter. + +00:41:23.880 --> 00:41:25.960 +This is really a bare-bones Emacs + +00:41:25.960 --> 00:41:28.639 +that is strictly terminal mode. + +00:41:28.640 --> 00:41:30.800 +Then we actually build Emacs, which is, you know, + +00:41:30.800 --> 00:41:33.259 +kind of boring, we're just gonna type make + +00:41:33.260 --> 00:41:35.259 +and then make is gonna run successfully. + +00:41:35.260 --> 00:41:37.880 +And make is gonna spew a ton of output, right? + +00:41:37.880 --> 00:41:41.099 +So here's where I do that /dev/null trick, + +00:41:41.100 --> 00:41:42.600 +where I pipe everything to /dev/null + +00:41:42.600 --> 00:41:45.819 +and then I, or I pipe standard output to /dev/null + +00:41:45.820 --> 00:41:47.520 +and then I pipe standard error + +00:41:47.520 --> 00:41:50.239 +to wherever standard output's going. + +00:41:50.240 --> 00:41:52.799 +And then at the end to say that it ran successfully, + +00:41:52.800 --> 00:41:55.379 +I say "Make ran successfully!" + +00:41:55.380 --> 00:41:57.799 +Then we take a look at the Emacs binary + +00:41:57.800 --> 00:41:59.879 +and you know, it's an elf binary. + +00:41:59.880 --> 00:42:01.720 +And, you know, because this is running on my Mac, + +00:42:01.720 --> 00:42:06.619 +this is an ARM-based machine, this virtual machine is. + +00:42:06.620 --> 00:42:10.519 +Oops, and this is a bug. + +00:42:10.520 --> 00:42:12.200 +This really should be a macro call, + +00:42:12.200 --> 00:42:14.800 +but I think I have the wrong number of curly braces + +00:42:14.800 --> 00:42:16.159 +or something in there. + +00:42:16.160 --> 00:42:19.129 +I need to figure out why that's not right. + +00:42:19.130 --> 00:42:21.109 +I'll look into that later. + +00:42:21.110 --> 00:42:23.979 +And then we install Emacs and then we kind of show + +00:42:23.980 --> 00:42:27.719 +like the file sizes of everything in the home directory. + +00:42:27.720 --> 00:42:31.989 +And then we, you know, show the binaries that got installed. + +NOTE Final thoughts + +00:42:31.990 --> 00:42:35.599 +Anyway, so this is the final thoughts section. + +00:42:35.600 --> 00:42:39.219 +And my final thoughts are, is I hope you enjoyed this talk + +00:42:39.220 --> 00:42:42.379 +and I hope you actually learned a thing or two. + +00:42:42.380 --> 00:42:43.360 +All right, thanks everybody. + +00:42:43.360 --> 00:42:45.200 +And I'll see you all next time. diff --git a/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt b/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt new file mode 100644 index 00000000..ccc2126f --- /dev/null +++ b/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt @@ -0,0 +1,244 @@ +WEBVTT captioned by sachac + +NOTE Intro + +00:00:00.000 --> 00:00:04.199 +Hello everyone. Welcome to my talk. + +00:00:04.200 --> 00:00:09.359 +I am Akib Azmain Turja and my talk is titled + +00:00:09.360 --> 00:00:11.519 +"Eat and Eat-powered Eshell: + +00:00:11.520 --> 00:00:15.439 +Fast, featureful terminal inside Emacs." + +NOTE Benchmarking + +00:00:15.440 --> 00:00:22.839 +So I just claimed that Eat is a fast terminal emulator. + +00:00:22.840 --> 00:00:33.279 +Let me show you that. I will print a 1-megabyte sized file + +00:00:33.280 --> 00:00:39.039 +in the terminal using this command. + +00:00:39.040 --> 00:00:47.359 +It takes 0.76 seconds. Now let's benchmark term-mode. + +00:00:47.360 --> 00:00:54.799 +I will be in term -mode. I use the same command, + +00:00:54.800 --> 00:01:06.599 +and it's clearly the loser. + +00:01:06.600 --> 00:01:18.319 +It took 12 seconds, more than an order of magnitude slower. + +00:01:18.320 --> 00:01:27.279 +Let's also measure the speed of return. + +00:01:27.280 --> 00:01:33.479 +And it took 0.79 seconds. + +00:01:33.480 --> 00:01:36.159 +But this is actually a little bit slower than Eat. + +00:01:36.160 --> 00:01:41.799 +Why? That shouldn't happen. + +00:01:41.800 --> 00:01:49.719 +Anyway, hopefully that shows how fast Eat is. + +NOTE Running programs + +00:01:49.720 --> 00:01:54.439 +So let's run some extra programs in Eat, + +00:01:54.440 --> 00:02:05.639 +like top. You can also run htop or even btop. + +00:02:05.640 --> 00:02:08.559 +There is a fancy version of top. + +00:02:08.560 --> 00:02:20.239 +And obviously you can run Emacs in it. + +00:02:20.240 --> 00:02:33.879 +There is mouse support, and there is true color support. + +00:02:33.880 --> 00:02:38.799 +You can show any color in the terminal + +00:02:38.800 --> 00:02:47.079 +as long as your main display supports it. + +NOTE Shell integration + +00:02:47.080 --> 00:02:50.359 +And then there is shell integration. + +00:02:50.360 --> 00:02:52.399 +For example, directory tracking. + +00:02:52.400 --> 00:03:07.479 +Like, I can switch to some other directory + +00:03:07.480 --> 00:03:11.919 +and Emacs follows the shell directory. + +NOTE Prompt annotation + +00:03:11.920 --> 00:03:16.439 +Then there is prompt annotation, + +00:03:16.440 --> 00:03:20.319 +this column. These zeros indicate + +00:03:20.320 --> 00:03:27.079 +that the command has executed successfully. + +00:03:27.080 --> 00:03:37.679 +Then you can navigate between commands like this. + +NOTE Message passing + +00:03:37.680 --> 00:03:39.399 +There is message passing. + +00:03:39.400 --> 00:03:44.119 +By message passing, I mean sending something + +00:03:44.120 --> 00:03:46.959 +from the terminal to the host Emacs. + +00:03:46.960 --> 00:03:52.119 +By host Emacs, I mean Emacs running the terminal. + +00:03:52.120 --> 00:03:57.439 +For example I can say "hi" and it's showing "hi" + +00:03:57.440 --> 00:04:03.519 +in this echo area of my Emacs. + +NOTE Shell integration + +00:04:03.520 --> 00:04:08.679 +Then let's show you the killer feature of Eat, + +00:04:08.680 --> 00:04:20.239 +Eat's shell integration. + +00:04:20.240 --> 00:04:37.839 +You can run any program in it. For example: top, btop, + +00:04:37.840 --> 00:04:52.159 +and obviously Emacs itself. + +NOTE Input modes + +00:04:52.160 --> 00:05:03.159 +So let's discuss how to use Eat. There are four input modes. + +00:05:03.160 --> 00:05:07.319 +The first one is semi-char mode. That is the default mode. + +00:05:07.320 --> 00:05:10.919 +This is like vterm. All keys are the same to your terminal + +00:05:10.920 --> 00:05:17.879 +except these keys: C-c, C-x, C-g, M-x, etc. + +00:05:17.880 --> 00:05:20.599 +And then there is char-mode, where all keys + +00:05:20.600 --> 00:05:26.919 +are same to your terminal, except this M-RET key + +00:05:26.920 --> 00:05:29.679 +which takes you back to the semi-char mode. + +00:05:29.680 --> 00:05:34.559 +Then there is Emacs mode where you can select + +00:05:34.560 --> 00:05:39.719 +and copy from the terminal buffer. + +00:05:39.720 --> 00:05:42.679 +And finally, there is line mode. + +00:05:42.680 --> 00:05:49.199 +You can use it to use your terminal like a comint buffer. + +00:05:49.200 --> 00:05:55.999 +All these input modes are available in both Eat + +00:05:56.000 --> 00:06:05.879 +and eat-eshell mode, except this line mode-- + +00:06:05.880 --> 00:06:10.439 +it's only available on Eat. + +00:06:10.440 --> 00:06:13.959 +By "on Eat", I mean the terminal you get + +00:06:13.960 --> 00:06:20.159 +by this eat command. By eshell, I mean + +00:06:20.160 --> 00:06:23.144 +when eat-eshell integration is enabled + +00:06:23.145 --> 00:06:28.446 +inside the eshell buffer. + +NOTE Documentation + +00:06:33.760 --> 00:06:36.719 +There is an info manual, + +00:06:36.720 --> 00:06:51.599 +And also the README is quite informative + +00:06:51.600 --> 00:06:54.999 +for you to get started. + +00:06:55.000 --> 00:07:13.519 +If you hit any problem, + +00:07:13.520 --> 00:07:22.959 +there is a dedicated chapter for debugging that, + +00:07:22.960 --> 00:07:26.119 +a common problems chapter. + +00:07:26.120 --> 00:07:27.999 +If your problem is still not fixed, + +00:07:28.000 --> 00:07:29.519 +please report it to me. + +00:07:29.520 --> 00:07:36.119 +This helps me improve it for everyone. + +00:07:36.120 --> 00:07:40.359 +When you report, please read this chapter + +00:07:40.360 --> 00:07:53.159 +so that you can make a better bug report. + +00:07:53.160 --> 00:07:57.639 +I am really looking forward to how people use it + +00:07:57.640 --> 00:07:59.079 +in their workflow. + +00:07:59.080 --> 00:08:03.479 +I am excited about that. + +00:08:03.480 --> 00:08:10.759 +Hopefully you enjoyed my talk. That was all. + +00:08:10.760 --> 00:08:12.720 +Enjoy EmacsConf. Goodbye. diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt new file mode 100644 index 00000000..ecfdd018 --- /dev/null +++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt @@ -0,0 +1,8261 @@ +WEBVTT + + +00:00:53.489 --> 00:00:53.989 +[Speaker 0]: All right. I have unmuted. + +00:00:59.860 --> 00:01:00.180 +It's been a while since I've actually done an + +00:01:05.360 --> 00:01:05.860 +actual presentation. Hi. + +00:01:08.979 --> 00:01:09.380 +Okay. I'm going to deafen myself and mumble + +00:01:12.540 --> 00:01:13.040 +so that I don't get distracted by backstage + +00:01:16.400 --> 00:01:16.900 +chatter. Hello, everyone! Okay, + +00:01:17.980 --> 00:01:18.480 +so where are we? Questions, + +00:01:20.800 --> 00:01:21.300 +questions, questions. Okay, + +00:01:23.400 --> 00:01:23.600 +how easy would it be for someone else to + +00:01:25.960 --> 00:01:26.120 +reuse the Emacs conf strips and config to do + +00:01:29.380 --> 00:01:29.640 +a conf of their own? Like everything else, + +00:01:32.220 --> 00:01:32.560 +I have no idea if things actually work until + +00:01:35.140 --> 00:01:35.600 +somebody does it for, you know, + +00:01:37.500 --> 00:01:37.680 +to get everything to run on a computer that + +00:01:40.080 --> 00:01:40.200 +isn't my computer and with assumptions that + +00:01:40.640 --> 00:01:41.120 +aren't my assumptions. + +00:01:42.840 --> 00:01:43.340 +So, I have no idea. But optimistically, + +00:01:46.000 --> 00:01:46.480 +I have put most of the EmacsConf things, + +00:01:48.760 --> 00:01:49.200 +like EmacsConf, the name of the conference + +00:01:50.120 --> 00:01:50.620 +and things like that in variables. + +00:01:53.160 --> 00:01:53.320 +So if theoretically someone were to run an + +00:01:56.040 --> 00:01:56.320 +org mode conference or something like that, + +00:01:58.440 --> 00:01:58.940 +it might be possible to reuse all this code. + +00:02:01.960 --> 00:02:02.080 +We'll see. I don't know if it's going to be + +00:02:03.480 --> 00:02:03.560 +easy. I don't even know if it's going to be + +00:02:04.760 --> 00:02:05.260 +possible, but it might be fun to try. + +00:02:09.840 --> 00:02:10.199 +What tools would I like to exist in Emacs + +00:02:11.720 --> 00:02:12.220 +land to help with preparing the conference + +00:02:15.880 --> 00:02:16.320 +next time? Well, I've already been thinking + +00:02:18.420 --> 00:02:18.600 +about adjustments that I want to make to + +00:02:21.220 --> 00:02:21.720 +sub-eds so that the audio synchronization + +00:02:24.340 --> 00:02:24.560 +issues that we sometimes have with FFmpeg can + +00:02:26.600 --> 00:02:27.040 +be something that I can flag and maybe fix + +00:02:29.060 --> 00:02:29.560 +even while I'm watching a video. + +00:02:32.960 --> 00:02:33.340 +But also as much as possible, + +00:02:36.820 --> 00:02:37.020 +I like to leave the actual FFMPEG audio and + +00:02:39.220 --> 00:02:39.440 +visual tinkering with to other people like + +00:02:41.320 --> 00:02:41.520 +Leo, whose patience is slightly more than + +00:02:44.680 --> 00:02:45.180 +mine, because audio is, + +00:02:47.080 --> 00:02:47.260 +I still don't have the patience to sit for + +00:02:48.620 --> 00:02:48.900 +it. You can tell I talk really, + +00:02:50.540 --> 00:02:50.860 +really quickly. I'm still trying to squeeze + +00:02:53.000 --> 00:02:53.160 +everything into however little focus time I + +00:02:56.140 --> 00:02:56.280 +actually have. So it would be kind of nice to + +00:03:00.820 --> 00:03:01.320 +use that. Emacs is already doing quite a ton + +00:03:04.740 --> 00:03:04.900 +and stuffing more multimedia processing and + +00:03:06.180 --> 00:03:06.300 +other fun things into it might be + +00:03:07.000 --> 00:03:07.260 +interesting. Who knows? + +00:03:09.280 --> 00:03:09.440 +Oh, the other thing that I would really love + +00:03:12.280 --> 00:03:12.720 +to have that people always ask for is a way + +00:03:15.360 --> 00:03:15.860 +from Emacs to interact with the Etherpad. + +00:03:18.900 --> 00:03:19.340 +The Etherpad API, it seems very granular. + +00:03:21.120 --> 00:03:21.180 +Like, you can set the HTML of a pad, + +00:03:22.920 --> 00:03:23.100 +but you can't actually just append stuff to + +00:03:24.640 --> 00:03:24.960 +it. And I was trying to get something that + +00:03:26.820 --> 00:03:26.980 +could take questions from IRC and + +00:03:28.480 --> 00:03:28.980 +automatically push them into the pad, + +00:03:30.920 --> 00:03:31.400 +even from an ERC bot or whatever, + +00:03:34.400 --> 00:03:34.900 +but no go. If someone were to figure out some + +00:03:38.860 --> 00:03:39.160 +CRDT thing where we can collaboratively edit + +00:03:41.280 --> 00:03:41.500 +the document, that I think is the number 1 + +00:03:42.720 --> 00:03:43.140 +request that people always have around + +00:03:46.560 --> 00:03:46.760 +EmacsConf. That would be really cool to do + +00:03:48.900 --> 00:03:49.320 +more of the conference itself from within + +00:03:53.240 --> 00:03:53.740 +Emacs. I don't know if actually, + +00:03:55.360 --> 00:03:55.860 +well, we have an org file now that launches + +00:03:59.440 --> 00:03:59.940 +the MPV from Emacs. But if you want to have + +00:04:01.960 --> 00:04:02.300 +an ex-widget or something else watching the + +00:04:03.740 --> 00:04:04.240 +conference from within Emacs itself. + +00:04:05.640 --> 00:04:06.140 +I think that will also be really cool. + +00:04:09.480 --> 00:04:09.980 +Yes. And then other fun stuff. + +00:04:12.980 --> 00:04:13.220 +OK, how can speakers and viewers help make + +00:04:15.280 --> 00:04:15.540 +preparing for next year's Emacs Conf even + +00:04:16.300 --> 00:04:16.800 +more fun for the organizers? + +00:04:20.440 --> 00:04:20.899 +Well, I love it when not only do the speakers + +00:04:24.280 --> 00:04:24.780 +do all that work to prepare their talk, + +00:04:27.620 --> 00:04:28.040 +but lately people have actually even been + +00:04:29.780 --> 00:04:30.280 +volunteering to caption their own talks. + +00:04:33.600 --> 00:04:33.740 +And that's great because then they know the + +00:04:36.000 --> 00:04:36.500 +words that they use. And if I can show them + +00:04:39.140 --> 00:04:39.280 +the workflow that we have so that they can do + +00:04:41.920 --> 00:04:42.420 +it very efficiently, because there's all + +00:04:44.620 --> 00:04:44.860 +these wonderful things that I do now with + +00:04:48.340 --> 00:04:48.580 +Subweb Waveform and Aeneas for like the + +00:04:49.900 --> 00:04:50.400 +forced alignment so we can get timestamps + +00:04:53.100 --> 00:04:53.360 +from text and all these other fun things that + +00:04:55.520 --> 00:04:55.680 +make getting a transcript or editing the + +00:04:57.380 --> 00:04:57.880 +captions fun and easy. + +00:05:00.780 --> 00:05:01.000 +That makes it easier for not only speakers to + +00:05:02.800 --> 00:05:03.280 +contribute captions for their own talks, + +00:05:05.220 --> 00:05:05.720 +but also interested volunteers who, + +00:05:07.760 --> 00:05:07.920 +as mentioned, get early access to all the + +00:05:09.140 --> 00:05:09.640 +talks and can watch them at leisure. + +00:05:12.540 --> 00:05:12.800 +And it's, you know, nice prick there. + +00:05:13.700 --> 00:05:14.200 +Definitely should try that. + +00:05:19.400 --> 00:05:19.600 +I do have some sample videos of how we use + +00:05:21.500 --> 00:05:22.000 +subed. But of course, in the process of + +00:05:24.280 --> 00:05:24.780 +shoving like 30 or 40 talks, + +00:05:26.600 --> 00:05:27.100 +maybe 30 talks through it for EmacsConf, + +00:05:29.440 --> 00:05:29.640 +this is like the stress test season for + +00:05:30.340 --> 00:05:30.760 +subed, which is great, + +00:05:31.880 --> 00:05:32.380 +I ended up adding more features. + +00:05:36.260 --> 00:05:36.500 +So 1 of my big to-dos afterwards is I have to + +00:05:38.300 --> 00:05:38.600 +document the different workflows for things + +00:05:40.260 --> 00:05:40.760 +like, okay, you've got a script. + +00:05:43.520 --> 00:05:43.700 +You can use WDiff to get word diffs so you + +00:05:45.600 --> 00:05:45.760 +can take the subtitles and compare them with + +00:05:47.540 --> 00:05:47.720 +the original script and see where the + +00:05:48.880 --> 00:05:49.380 +misrecognized words are. + +00:05:52.960 --> 00:05:53.360 +And that's great. Or you can use SubWeb + +00:05:54.960 --> 00:05:55.440 +Waveform to start adjusting things. + +00:05:56.820 --> 00:05:57.320 +Or for example, if there's a synchronization + +00:06:01.320 --> 00:06:01.820 +issue, I can now middle click on a subtitle + +00:06:03.680 --> 00:06:04.000 +where I want the subtitle to actually start + +00:06:06.500 --> 00:06:06.680 +and then move all the subtitles to start at + +00:06:09.020 --> 00:06:09.280 +that point. So it's getting to be a really + +00:06:10.860 --> 00:06:11.000 +elaborate tool. And I definitely need to + +00:06:15.220 --> 00:06:15.520 +document that and stick all the blog post + +00:06:17.860 --> 00:06:18.040 +links into the readme so that people can find + +00:06:20.560 --> 00:06:20.740 +this in the future. So it's very, + +00:06:23.080 --> 00:06:23.320 +very nifty. And the reason why we do this is + +00:06:24.720 --> 00:06:25.220 +because, well, personally, + +00:06:26.820 --> 00:06:27.160 +I have a hard time sitting and watching + +00:06:28.940 --> 00:06:29.080 +videos. I like to be able to just jump to the + +00:06:31.540 --> 00:06:31.780 +interesting parts or watch it at 3 times + +00:06:33.400 --> 00:06:33.900 +speed, which MPV lets me do. + +00:06:36.160 --> 00:06:36.660 +And the text makes it a lot more searchable, + +00:06:38.960 --> 00:06:39.460 +which is fantastic. And also because, + +00:06:41.000 --> 00:06:41.480 +you know, if you've got all these interesting + +00:06:44.220 --> 00:06:44.720 +variable names and key bindings and whatever, + +00:06:47.360 --> 00:06:47.520 +and the automatic subtitles just don't do the + +00:06:49.540 --> 00:06:49.740 +right thing. So it's nice that people do the + +00:06:53.360 --> 00:06:53.480 +captioning. So, yeah, so that's 1 thing that + +00:06:55.080 --> 00:06:55.380 +people can help with. Captioning is always + +00:06:57.160 --> 00:06:57.280 +very interesting. And the other thing that + +00:07:00.600 --> 00:07:00.780 +people can do is take the inspiration that + +00:07:02.860 --> 00:07:03.340 +you get from EmacsConf and from the ideas + +00:07:04.640 --> 00:07:05.140 +that you have when you're working with Emacs, + +00:07:07.280 --> 00:07:07.780 +and suggest talks for next year's EmacsConf. + +00:07:09.760 --> 00:07:10.260 +And it doesn't have to be a super fancy, + +00:07:13.740 --> 00:07:14.060 +nobody else needs to go out and do a really + +00:07:14.920 --> 00:07:15.420 +professional-looking video. + +00:07:17.480 --> 00:07:17.640 +Even though Howard has set the bar this you + +00:07:19.640 --> 00:07:19.840 +know it's pretty high you don't have to do + +00:07:22.540 --> 00:07:22.660 +that kind of thing it can be just you in a + +00:07:24.860 --> 00:07:25.240 +screen or even just a screen and you talking + +00:07:27.340 --> 00:07:27.400 +about this cool thing that you learned and + +00:07:29.040 --> 00:07:29.340 +they could be a video or it could be a blog + +00:07:31.560 --> 00:07:31.940 +post it could be something else and that + +00:07:34.780 --> 00:07:35.020 +those those things are fantastic because they + +00:07:36.960 --> 00:07:37.200 +inspire people to see what's possible with + +00:07:39.440 --> 00:07:39.620 +Emacs. So that's another big thing that + +00:07:40.800 --> 00:07:41.300 +people can do to help. + +00:07:44.080 --> 00:07:44.480 +And then there's sharing the word about it. + +00:07:46.360 --> 00:07:46.840 +So if you saw something that you really like, + +00:07:48.760 --> 00:07:49.080 +if you write a blog post about it or a tweet + +00:07:51.220 --> 00:07:51.480 +or a toot or whatever else you want to do, + +00:07:52.480 --> 00:07:52.980 +you make a reaction video, + +00:07:55.280 --> 00:07:55.780 +that helps other people discover that stuff + +00:07:57.800 --> 00:07:58.080 +not just today, not just next week, + +00:08:00.340 --> 00:08:00.540 +but you know even later as they search for + +00:08:04.640 --> 00:08:05.140 +these words that as people search for ideas + +00:08:07.360 --> 00:08:07.760 +using words that are not necessarily the ones + +00:08:10.320 --> 00:08:10.560 +in the video, you describing things in other + +00:08:11.980 --> 00:08:12.400 +ways helps with the search engine + +00:08:13.500 --> 00:08:13.740 +optimization, you're not really, + +00:08:15.200 --> 00:08:15.700 +it's just people finding stuff, + +00:08:17.220 --> 00:08:17.500 +which is amazing. So yes, + +00:08:19.000 --> 00:08:19.500 +please write about the cool things that + +00:08:22.840 --> 00:08:23.040 +you've seen and what you'd like to tell other + +00:08:25.920 --> 00:08:26.280 +people about. Suggesting ideas for talks. + +00:08:30.040 --> 00:08:30.340 +Yes. Making talks. All sorts of wonderful + +00:08:35.220 --> 00:08:35.380 +things. OK. Could you elaborate on the + +00:08:37.080 --> 00:08:37.320 +workflow that goes on in your mind for when + +00:08:38.080 --> 00:08:38.320 +approaching these things? + +00:08:40.260 --> 00:08:40.460 +Do you start with an Emacs org solution right + +00:08:42.240 --> 00:08:42.340 +off the bat at this point when faced with a + +00:08:44.059 --> 00:08:44.340 +task? Are there some conscious steps involved + +00:08:46.200 --> 00:08:46.460 +from early ideas to automation of the kind + +00:08:48.740 --> 00:08:49.080 +you just showed? Mostly it starts with, + +00:08:50.740 --> 00:08:51.040 +okay, we got to do this thing. + +00:08:53.720 --> 00:08:54.220 +So I have this to-do. And sometimes, + +00:08:55.860 --> 00:08:56.200 +like in the week before the conference, + +00:08:57.440 --> 00:08:57.720 +I have to think, okay, + +00:09:00.740 --> 00:09:01.000 +is this a top priority thing that I can do + +00:09:01.460 --> 00:09:01.960 +before the conference, + +00:09:03.480 --> 00:09:03.980 +or is it something that I can, + +00:09:05.800 --> 00:09:06.160 +I, I, like we can still do the conference + +00:09:08.200 --> 00:09:08.360 +without doing so I have to just postpone it + +00:09:09.860 --> 00:09:10.360 +until afterwards? So some prioritization + +00:09:12.160 --> 00:09:12.280 +happens. But a lot of times it's like, + +00:09:13.140 --> 00:09:13.320 +okay, you know, like this, + +00:09:14.620 --> 00:09:14.820 +there's a thing that I need to do here. + +00:09:15.920 --> 00:09:16.360 +I don't know how to figure it out, + +00:09:18.840 --> 00:09:19.080 +let me start an org Babble block and start + +00:09:19.760 --> 00:09:20.240 +sketching out something, + +00:09:22.120 --> 00:09:22.620 +you know, custom function or whatever else, + +00:09:23.980 --> 00:09:24.200 +and then say okay, you know, + +00:09:25.380 --> 00:09:25.760 +hey, that looks kind of useful, + +00:09:27.180 --> 00:09:27.600 +let me see if I can generalize that, + +00:09:29.440 --> 00:09:29.640 +and then let me stick it into the library so + +00:09:30.820 --> 00:09:31.320 +that I can find it next year. + +00:09:33.200 --> 00:09:33.520 +And that's basically how it goes. + +00:09:35.500 --> 00:09:36.000 +It just goes, it just like, + +00:09:37.540 --> 00:09:38.040 +I have a thing that I need to do. + +00:09:40.080 --> 00:09:40.280 +If it's, if I'm going to do it more than + +00:09:42.440 --> 00:09:42.720 +once, or actually even if I'm going to do it, + +00:09:44.640 --> 00:09:44.800 +you know, once I tried to automate it just so + +00:09:46.000 --> 00:09:46.500 +that I can understand it and, + +00:09:47.700 --> 00:09:48.100 +and then I can, I can, + +00:09:50.280 --> 00:09:50.440 +I can squeeze it into like the 15 minutes I + +00:09:54.140 --> 00:09:54.280 +actually have and I can pause and I can pick + +00:09:56.240 --> 00:09:56.380 +it up again and the code is still there and + +00:09:57.160 --> 00:09:57.660 +my notes are still there? + +00:10:00.600 --> 00:10:00.760 +And then every little bit of the, + +00:10:03.540 --> 00:10:04.040 +every little step like that builds up. + +00:10:05.740 --> 00:10:06.100 +So I can write a short function today, + +00:10:07.680 --> 00:10:07.820 +and then tomorrow when the kid was asleep, + +00:10:09.240 --> 00:10:09.740 +I can write a little bit more of that. + +00:10:11.160 --> 00:10:11.660 +And so it just goes on from there. + +00:10:14.260 --> 00:10:14.760 +And then I just stuff that all in there. + +00:10:17.660 --> 00:10:17.900 +How well does this approach allow for other + +00:10:19.960 --> 00:10:20.140 +organisers to do individual customisations to + +00:10:21.500 --> 00:10:21.640 +their liking while still being able to + +00:10:22.120 --> 00:10:22.620 +collaborate effectively? + +00:10:25.960 --> 00:10:26.460 +We've actually split things up fairly neatly + +00:10:28.020 --> 00:10:28.260 +in the sense that for this year, + +00:10:30.620 --> 00:10:30.940 +for example, most everyone else was super + +00:10:34.400 --> 00:10:34.900 +busy, so I did all the heavy lifting up until + +00:10:37.420 --> 00:10:37.540 +people were available and then they jumped in + +00:10:38.240 --> 00:10:38.740 +with the audio normalization. + +00:10:39.600 --> 00:10:39.840 +Thank you very much, Leo, + +00:10:41.280 --> 00:10:41.780 +for doing all of that stuff and the hosting + +00:10:42.840 --> 00:10:43.340 +and all the other things. + +00:10:45.720 --> 00:10:46.040 +So I tend to do most of the Emacs list + +00:10:48.080 --> 00:10:48.360 +fiddling with and the shell scripting and + +00:10:49.960 --> 00:10:50.460 +stuff like that, aside from the FFmpeg + +00:10:53.100 --> 00:10:53.520 +incantations, which are too arcane for me to + +00:10:56.860 --> 00:10:57.040 +even think about. And then in the course of + +00:10:57.980 --> 00:10:58.180 +watching me deal with like, + +00:10:59.440 --> 00:10:59.640 +oh, no, this video is not playing. + +00:11:01.080 --> 00:11:01.280 +And then they see the commands that I'm + +00:11:04.240 --> 00:11:04.640 +using, like play and then, + +00:11:05.740 --> 00:11:06.240 +you know, play a world, + +00:11:08.760 --> 00:11:08.920 +which is the ideas of the talk that we were + +00:11:10.440 --> 00:11:10.940 +having a hard time with or MPD or whatever. + +00:11:13.520 --> 00:11:13.740 +Then the other organizers kind of just pick + +00:11:15.320 --> 00:11:15.480 +that up by osmosis, because We didn't even + +00:11:17.160 --> 00:11:17.360 +have time to do dry runs for training this + +00:11:20.540 --> 00:11:20.740 +year. So it's just there's not much + +00:11:22.500 --> 00:11:22.660 +collaboration in the sense that I'm just + +00:11:24.400 --> 00:11:24.740 +basically saying, OK, these are the scripts + +00:11:25.760 --> 00:11:26.260 +that I'm going to write for myself. + +00:11:28.980 --> 00:11:29.480 +And you all figure out how to work with that. + +00:11:34.780 --> 00:11:35.280 +What was the hardest problem you encountered + +00:11:37.040 --> 00:11:37.180 +in organizing or running the conference this + +00:11:38.540 --> 00:11:39.040 +year and how do you deal with it? + +00:11:40.680 --> 00:11:40.840 +Oh, the constant, constant problem with + +00:11:43.340 --> 00:11:43.820 +e-mails. There's so many amazing ideas. + +00:11:45.660 --> 00:11:46.160 +I want to fit into the time. + +00:11:46.920 --> 00:11:47.420 +And then afterwards, like, + +00:11:49.740 --> 00:11:49.960 +Sasha, do not mess with production the day + +00:11:50.440 --> 00:11:50.860 +before the conference. + +00:11:52.480 --> 00:11:52.680 +You're going to save that for after the + +00:11:54.440 --> 00:11:54.920 +conference, right? So that's the hardest + +00:11:56.140 --> 00:11:56.420 +part, is just saying, OK, + +00:11:58.620 --> 00:11:58.780 +yes, that's an idea. I'm going to put that in + +00:12:01.400 --> 00:12:01.680 +the inbox. We're going to maybe get to that + +00:12:03.120 --> 00:12:03.620 +next year. But right now, + +00:12:05.400 --> 00:12:05.560 +these are the things that I need to do in + +00:12:07.200 --> 00:12:07.700 +order to get the conference off the ground + +00:12:14.820 --> 00:12:15.320 +reasonably in a reasonable amount of time. + +00:12:17.140 --> 00:12:17.640 +So earlier in the conference, + +00:12:19.240 --> 00:12:19.740 +then I can be like, OK, + +00:12:21.900 --> 00:12:22.360 +what if we do this? What if we run everything + +00:12:24.360 --> 00:12:24.640 +off a crontab instead of using Emacs tramp + +00:12:25.680 --> 00:12:26.180 +timers? Wouldn't that be great? + +00:12:28.380 --> 00:12:28.840 +And then I can explore all those crazy ideas. + +00:12:30.440 --> 00:12:30.720 +But then as we get closer and closer to date, + +00:12:32.440 --> 00:12:32.720 +I'm like, okay, fine. I'm going to like just + +00:12:34.200 --> 00:12:34.700 +capture the idea and deal with it later. + +00:12:36.080 --> 00:12:36.580 +So that's really, really hard for me. + +00:12:39.520 --> 00:12:39.800 +Year to your growth in attendance and after + +00:12:40.760 --> 00:12:41.260 +the conference video watching. + +00:12:46.240 --> 00:12:46.740 +The growth, well, first thing, + +00:12:51.110 --> 00:12:51.610 +there is like absolute growth in the kind of + +00:12:53.520 --> 00:12:53.720 +the quantity of things that people are + +00:12:56.820 --> 00:12:57.180 +sharing. I have a blog post about this that + +00:12:59.440 --> 00:12:59.820 +talks about a number of minutes of talks, + +00:13:02.160 --> 00:13:02.360 +and it's going up. Last year, + +00:13:03.740 --> 00:13:03.960 +we did 2 tracks because I couldn't fit + +00:13:05.460 --> 00:13:05.720 +everything in 1 day. And this year, + +00:13:07.000 --> 00:13:07.240 +we did 2 tracks, but even then, + +00:13:08.000 --> 00:13:08.360 +everything was kind of squished, + +00:13:09.880 --> 00:13:10.040 +and I was trying to find space in the + +00:13:11.940 --> 00:13:12.160 +schedule. And if you make it so that next + +00:13:13.500 --> 00:13:14.000 +year, we have to figure out 3 tracks, + +00:13:15.760 --> 00:13:16.000 +I think We have another host now, + +00:13:16.840 --> 00:13:17.340 +so it might be doable, + +00:13:19.540 --> 00:13:19.820 +which is great. Who knows? + +00:13:23.600 --> 00:13:23.860 +We'll see. And the other interesting thing + +00:13:25.320 --> 00:13:25.520 +that I'm seeing in terms of growth is that + +00:13:27.440 --> 00:13:27.720 +people are starting to refer to the talks + +00:13:29.800 --> 00:13:30.300 +from previous conferences that inspired them. + +00:13:32.980 --> 00:13:33.220 +So the evil plan is working in that it is + +00:13:35.000 --> 00:13:35.160 +getting people to get cool stuff out of their + +00:13:37.020 --> 00:13:37.200 +heads and into videos that have like + +00:13:39.560 --> 00:13:39.720 +searchable transcripts and that people can + +00:13:41.980 --> 00:13:42.280 +refer to as for inspiration and for showing + +00:13:42.980 --> 00:13:43.200 +other people, hey, look, + +00:13:44.060 --> 00:13:44.560 +this is what it can do. + +00:13:46.360 --> 00:13:46.860 +So that is fantastic growth. + +00:13:49.400 --> 00:13:49.540 +The actual numbers, I'm intense to look at + +00:13:51.160 --> 00:13:51.660 +the number of simultaneous viewers. + +00:13:53.860 --> 00:13:53.980 +And every so often, it's kind of nice to go + +00:13:55.960 --> 00:13:56.360 +through the YouTube stats or whatever. + +00:13:57.560 --> 00:13:57.980 +But that's not so much as a, + +00:14:01.120 --> 00:14:01.320 +like, I don't really keep that in mind as + +00:14:05.060 --> 00:14:05.560 +much, just because as long as people are + +00:14:07.660 --> 00:14:07.880 +connecting to the ideas and getting stuff out + +00:14:13.120 --> 00:14:13.440 +there and being inspired to think around + +00:14:16.220 --> 00:14:16.720 +more, then it's doing the thing. + +00:14:21.300 --> 00:14:21.460 +Cognizant is working. So where are we now for + +00:14:22.640 --> 00:14:23.140 +questions? Ooh, I can actually, + +00:14:25.320 --> 00:14:25.820 +I have ERC here. I can find eventually. + +00:14:28.200 --> 00:14:28.700 +1 of my screens has Dev in it. + +00:14:30.780 --> 00:14:31.260 +Okay, here we are. What are the other + +00:14:34.900 --> 00:14:35.400 +questions? Probably, Probably an IRC. + +00:14:39.120 --> 00:14:39.520 +Where's IRC? Dove, dove, + +00:14:45.700 --> 00:14:46.200 +dove. I did try to record things more slowly, + +00:14:47.200 --> 00:14:47.520 +and I tried several times, + +00:14:49.920 --> 00:14:50.020 +but I really just speak very quickly when I + +00:14:53.300 --> 00:14:53.480 +get excited and Emacs is very fun so it is + +00:14:59.960 --> 00:15:00.460 +tough oh yes okay so 1 in once yes automated + +00:15:04.440 --> 00:15:04.540 +present workflows oh yeah okay so where are + +00:15:05.660 --> 00:15:05.840 +we now for time? Oh look, + +00:15:07.440 --> 00:15:07.900 +it's 4.30, should we do our closing remarks + +00:15:09.280 --> 00:15:09.440 +or like how are things going over in the + +00:15:11.840 --> 00:15:12.340 +other stream? I should find out. + +00:15:14.760 --> 00:15:14.860 +[Speaker 1]: Yeah, I've been keeping a close eye on the + +00:15:16.400 --> 00:15:16.900 +other 1, but yeah, I believe that- + +00:15:19.800 --> 00:15:20.300 +[Speaker 0]: Yay, look at that, good timing. + +00:15:22.880 --> 00:15:23.300 +Okay, I have managed to zoom through the + +00:15:26.660 --> 00:15:26.980 +questions and we can switch over to the + +00:15:31.240 --> 00:15:31.740 +closing remarks how do we do this yes okay + +00:15:35.060 --> 00:15:35.400 +okay we're gonna oh wait people okay people + +00:15:37.580 --> 00:15:37.760 +who wanted to ask questions how do you want + +00:15:39.120 --> 00:15:39.360 +to do this? Because there are a lot of people + +00:15:42.040 --> 00:15:42.240 +in this 1 here too. You want to go to the + +00:15:48.820 --> 00:15:49.320 +other 1? 0 no, they aren't done yet. + +00:15:51.180 --> 00:15:51.600 +Sorry, I forgot to turn on the con tab + +00:15:52.500 --> 00:15:53.000 +because of course I got excited. + +00:15:54.840 --> 00:15:55.200 +Okay, so Jacob is still answering questions, + +00:15:56.940 --> 00:15:57.440 +which means I get to still answer questions. + +00:15:59.880 --> 00:16:00.060 +Now I'll try to be quiet and let people in + +00:16:01.720 --> 00:16:02.220 +the BBB room speak up if we want to. + +00:16:12.040 --> 00:16:12.540 +Okay that means + +00:16:13.585 --> 00:16:13.650 +[Speaker 3]: are going to hear. + +00:16:13.715 --> 00:16:13.780 +[Speaker 1]: Some more + +00:16:15.660 --> 00:16:16.100 +[Speaker 2]: people in the chat ideas I had on the Emacs + +00:16:17.500 --> 00:16:18.000 +conferences you could have like a little + +00:16:21.300 --> 00:16:21.660 +Emacs starter config just for like the Emacs + +00:16:26.720 --> 00:16:27.040 +conference where you have emms playlist and + +00:16:29.540 --> 00:16:29.780 +IRC help cheer function to help get you into + +00:16:35.200 --> 00:16:35.320 +IRC into ERC and then the to-do states that I + +00:16:36.060 --> 00:16:36.560 +was talking about before. + +00:16:40.200 --> 00:16:40.380 +So you can say, I'm watching this 1, + +00:16:41.320 --> 00:16:41.480 +I want to re-watch this 1, + +00:16:42.780 --> 00:16:43.080 +but I'm going to skip it because I'm watching + +00:16:52.820 --> 00:16:53.220 +something else. I used the HyperBowl package + +00:16:55.680 --> 00:16:55.860 +to go straight to the web pages to all the + +00:16:59.600 --> 00:16:59.860 +either pads but you can also have some quick + +00:17:04.540 --> 00:17:04.960 +functions to go into a CRDT buffer hosted + +00:17:07.400 --> 00:17:07.900 +buffer, where all the org mode Etherpad + +00:17:14.220 --> 00:17:14.440 +documents would be. And then that would get + +00:17:15.280 --> 00:17:15.780 +everybody using Emacs, + +00:17:17.680 --> 00:17:17.839 +and then they could all be chatting with each + +00:17:23.480 --> 00:17:23.980 +other with CRDT, with controlling Emacs. + +00:17:25.440 --> 00:17:25.680 +I don't know how the sub stuff, + +00:17:27.160 --> 00:17:27.339 +I don't know if you can get the sub stuff in + +00:17:29.720 --> 00:17:30.060 +there working, but yeah, + +00:17:32.900 --> 00:17:33.160 +It could be a good way of getting it all + +00:17:34.920 --> 00:17:35.420 +wrapped up together. And also, + +00:17:38.040 --> 00:17:38.400 +Mkron, if you ever looked at that versus + +00:17:40.800 --> 00:17:41.300 +Kron, Mkron is configured in Elisp. + +00:17:43.320 --> 00:17:43.740 +Then you can also write some custom functions + +00:17:44.620 --> 00:17:45.120 +in the middle of your Kron. + +00:17:46.800 --> 00:17:47.280 +So maybe you could make some like conditional + +00:17:48.960 --> 00:17:49.460 +things where you can start or stop it. + +00:17:56.320 --> 00:17:56.440 +And like 1 of the differences is if your + +00:17:58.860 --> 00:17:59.100 +computer reboots, it can start up and say, + +00:18:01.780 --> 00:18:02.160 +oh, I'm supposed to run this cron job at this + +00:18:04.960 --> 00:18:05.200 +time and then just Do the correct thing + +00:18:08.100 --> 00:18:08.600 +rather than losing the state Randomly because + +00:18:10.440 --> 00:18:10.940 +your computer lost power + +00:18:15.700 --> 00:18:15.900 +[Speaker 0]: Thanks for those recommendations I will add + +00:18:17.640 --> 00:18:18.140 +mcron to my list of things to check out. + +00:18:23.640 --> 00:18:24.020 +And yeah, we finally remembered to publish + +00:18:25.160 --> 00:18:25.400 +all those schedules as org, + +00:18:27.540 --> 00:18:27.840 +and I decided to just spam all the time zones + +00:18:28.520 --> 00:18:29.020 +with them, which was fantastic. + +00:18:30.480 --> 00:18:30.620 +And other people have mentioned that this is + +00:18:32.720 --> 00:18:32.960 +useful. We get to figure out how to use this + +00:18:35.740 --> 00:18:35.900 +to teach people more about what you can do + +00:18:36.620 --> 00:18:37.120 +with org. As you mentioned, + +00:18:40.920 --> 00:18:41.280 +encouraging them to tag the stuff with things + +00:18:43.360 --> 00:18:43.860 +that they want to attend gives us the ability + +00:18:45.920 --> 00:18:46.240 +to set up an agenda view for them that has + +00:18:47.840 --> 00:18:48.340 +the talks that are tagged with those tags. + +00:18:48.580 --> 00:18:48.600 +[Speaker 3]: So I + +00:18:49.280 --> 00:18:49.780 +[Speaker 0]: was like, okay, let's, + +00:18:53.880 --> 00:18:54.340 +let's teach org mode and lisp in the process + +00:18:58.120 --> 00:18:58.380 +of doing things. Okay, + +00:19:00.860 --> 00:19:01.000 +there was a question about any chance of an + +00:19:02.720 --> 00:19:03.220 +in person EmacsConf again someday. + +00:19:05.580 --> 00:19:06.000 +And I was actually at the very first EMAX + +00:19:11.040 --> 00:19:11.400 +Conf, which was 2013 and organized in London + +00:19:12.980 --> 00:19:13.080 +to take advantage of the fact that I had a + +00:19:15.920 --> 00:19:16.160 +business shift there. It was fantastic being + +00:19:18.760 --> 00:19:19.120 +in a room with 100 other people who are all + +00:19:19.960 --> 00:19:20.460 +really interested in Emacs, + +00:19:23.400 --> 00:19:23.560 +but I'm not traveling like any time for the + +00:19:25.560 --> 00:19:25.680 +foreseeable future, so if other people are + +00:19:27.500 --> 00:19:27.800 +interested in organizing something like that, + +00:19:29.260 --> 00:19:29.760 +I am totally happy to spread the word. + +00:19:31.440 --> 00:19:31.860 +It doesn't fit with my current lifestyle, + +00:19:32.860 --> 00:19:33.360 +but it might fit somebody's. + +00:19:37.080 --> 00:19:37.580 +I don't know. We're still just here. + +00:19:38.800 --> 00:19:39.300 +And I like the virtual conference. + +00:19:41.880 --> 00:19:42.120 +I really like the fact that we can bring + +00:19:43.780 --> 00:19:44.280 +together people from all over the world. + +00:19:46.720 --> 00:19:46.840 +I can take a look at my schedule with all the + +00:19:47.540 --> 00:19:47.720 +time constraints. Okay, + +00:19:49.000 --> 00:19:49.300 +I need to put this person in the morning + +00:19:50.720 --> 00:19:50.800 +because they're in Australia and I need to + +00:19:52.160 --> 00:19:52.360 +put this person in the afternoon because + +00:19:56.120 --> 00:19:56.360 +they're from Vancouver or from somewhere else + +00:19:58.020 --> 00:19:58.520 +in the Pacific time zone. + +00:20:01.420 --> 00:20:01.920 +And it's just this breadth of people. + +00:20:04.140 --> 00:20:04.300 +But the other thing that I would love for + +00:20:06.220 --> 00:20:06.420 +people to start thinking about is if we could + +00:20:08.300 --> 00:20:08.560 +have a virtual conference in other time + +00:20:11.320 --> 00:20:11.580 +zones, so that's easier for people in Asia + +00:20:12.720 --> 00:20:13.220 +Pacific or Europe to attend. + +00:20:16.080 --> 00:20:16.580 +And as we're getting the hang of this, + +00:20:17.840 --> 00:20:18.080 +this crontab-based thing, + +00:20:20.140 --> 00:20:20.320 +I think we might almost be at the point where + +00:20:22.320 --> 00:20:22.540 +I can set it up to run even when I'm + +00:20:24.720 --> 00:20:25.080 +sleeping. And then other people can figure + +00:20:26.120 --> 00:20:26.520 +out, you know, the exception handling, + +00:20:27.780 --> 00:20:27.900 +oh, you know, this talk needs to be + +00:20:30.420 --> 00:20:30.780 +restarted. Okay, just play it again and scrub + +00:20:31.800 --> 00:20:32.300 +around to find the right part, + +00:20:34.500 --> 00:20:35.000 +which means we could have replays, + +00:20:37.060 --> 00:20:37.560 +or we can have like the Asia Pacific + +00:20:39.140 --> 00:20:39.440 +Alternate Event that we had the other time + +00:20:45.600 --> 00:20:45.780 +where some speakers came back online and did + +00:20:48.840 --> 00:20:49.040 +another Q&A session just for that kind of + +00:20:51.360 --> 00:20:51.660 +event. So those are other cool, + +00:20:52.960 --> 00:20:53.460 +fun things that would love to be, + +00:20:57.700 --> 00:20:58.140 +would be great. Satellite events, + +00:20:59.480 --> 00:20:59.980 +someone mentioned in the etherpad. + +00:21:03.280 --> 00:21:03.520 +Some people have been organizing these, + +00:21:05.020 --> 00:21:05.280 +which are great. Basically a bunch of people + +00:21:07.800 --> 00:21:08.080 +get together in a room or 2 rooms now because + +00:21:10.320 --> 00:21:10.820 +of the tracks and watch Emacs Conf together. + +00:21:12.940 --> 00:21:13.140 +So if you have a physical meetup or if you'd + +00:21:15.360 --> 00:21:15.760 +like to start 1, It's basically, + +00:21:17.860 --> 00:21:17.960 +you know, do this, maybe have stickers if you + +00:21:19.900 --> 00:21:20.200 +have stickers. You know, + +00:21:22.540 --> 00:21:22.800 +it's just have everyone come over and hang + +00:21:24.440 --> 00:21:24.680 +out and meet people. I don't know. + +00:21:27.540 --> 00:21:27.660 +It's a thing. Specifically how to do it, + +00:21:29.200 --> 00:21:29.700 +I have no idea how to organize these things. + +00:21:32.080 --> 00:21:32.580 +But Alain does. So talk to him. + +00:21:35.280 --> 00:21:35.580 +[Speaker 2]: Another way of adding multiple tracks is + +00:21:37.640 --> 00:21:38.140 +changing it to doing it like 2 times a year, + +00:21:39.760 --> 00:21:40.260 +in max confidence. + +00:21:44.340 --> 00:21:44.640 +[Speaker 0]: Yeah, yeah, people have mentioned something + +00:21:50.080 --> 00:21:50.320 +like that. Or the fact that org often has + +00:21:51.860 --> 00:21:52.280 +like a full day of talks by itself, + +00:21:53.800 --> 00:21:53.980 +and actually a little bit more than a day + +00:21:55.440 --> 00:21:55.640 +now, because I've been squeezing things into + +00:21:58.260 --> 00:21:58.760 +other tracks. There has been some potential + +00:22:00.060 --> 00:22:00.560 +interest in having an org conf. + +00:22:03.240 --> 00:22:03.480 +It could be a thing. And I'd love to see + +00:22:05.760 --> 00:22:06.240 +also, we'd love to experiment with other + +00:22:08.900 --> 00:22:09.240 +formats. So there could be a bug hunting + +00:22:13.740 --> 00:22:13.900 +session or let's use the breakout rooms to + +00:22:15.920 --> 00:22:16.120 +split up into little mentoring groups and see + +00:22:18.040 --> 00:22:18.240 +how that works. So lots of things that we can + +00:22:21.460 --> 00:22:21.760 +do. They've actually finished over in the Gen + +00:22:24.360 --> 00:22:24.620 +track so I don't know if people want to very + +00:22:26.480 --> 00:22:26.920 +quickly ask questions here or if we go there. + +00:22:31.000 --> 00:22:31.260 +Leo has come over here instead so okay he's + +00:22:32.560 --> 00:22:33.060 +joining over here on the other side. + +00:22:35.680 --> 00:22:36.180 +Okay, hello. + +00:22:38.060 --> 00:22:38.560 +[Speaker 3]: I + +00:22:43.260 --> 00:22:43.440 +[Speaker 1]: have 1 thing to add. Yeah, + +00:22:46.480 --> 00:22:46.720 +[Speaker 4]: No, no, no, I was just about to say I am not + +00:22:48.420 --> 00:22:48.680 +hosting anymore. You 2 do a wonderful job, + +00:22:49.640 --> 00:22:50.140 +and I'm happy to just watch. + +00:22:53.860 --> 00:22:54.000 +[Speaker 1]: go ahead. Cool. Yeah, I was going to add 1 + +00:22:56.520 --> 00:22:56.660 +quick note about any potential suggestions or + +00:22:58.080 --> 00:22:58.240 +recommendations for hosting Emacs on + +00:23:00.160 --> 00:23:00.240 +satellites. Is that, I mean, + +00:23:01.800 --> 00:23:02.300 +given that we are an event centered around + +00:23:07.360 --> 00:23:07.440 +Emacs, and Emacs is backed by the Free + +00:23:09.160 --> 00:23:09.320 +Software Foundation, if you do reach out to + +00:23:11.180 --> 00:23:11.680 +them, they're usually pretty helpful in terms + +00:23:14.340 --> 00:23:14.840 +of sending goodies and stickers and such. + +00:23:16.880 --> 00:23:17.040 +So yeah, if you give them a heads up and + +00:23:17.900 --> 00:23:18.400 +reach out to them in advance, + +00:23:20.800 --> 00:23:20.880 +you might well end up with a whole bunch of + +00:23:22.800 --> 00:23:23.000 +swag on your hands that you could give out + +00:23:24.860 --> 00:23:25.360 +during the satellite. So that's the thing. + +00:23:35.500 --> 00:23:36.000 +[Speaker 5]: Well, I just wanted to note it felt kind of + +00:23:37.640 --> 00:23:37.840 +even smoother. I mean, + +00:23:39.720 --> 00:23:40.160 +you guys always run a nice conference, + +00:23:43.180 --> 00:23:43.460 +but it felt smoother this year than ever + +00:23:45.600 --> 00:23:45.980 +before, which listening to your talk, + +00:23:48.480 --> 00:23:48.900 +Sasha, All the automation that you're doing + +00:23:52.400 --> 00:23:52.740 +is pretty incredible. So I think it's paying + +00:23:52.740 --> 00:23:53.240 +off. + +00:23:58.180 --> 00:23:58.320 +[Speaker 0]: Yay! You know, it is very amusing to hear the + +00:23:59.240 --> 00:23:59.440 +host say, okay, you know, + +00:24:00.720 --> 00:24:01.000 +but we've got to wrap up in the next 30 + +00:24:02.960 --> 00:24:03.040 +seconds because Sasha's contact is going to + +00:24:03.240 --> 00:24:03.740 +go yoink! + +00:24:12.800 --> 00:24:12.980 +[Speaker 5]: I have a person I work with who keeps the + +00:24:15.360 --> 00:24:15.860 +trains running on time shall we say and like + +00:24:18.940 --> 00:24:19.140 +cuts off every meeting like the second that + +00:24:21.140 --> 00:24:21.320 +it's supposed to end while somebody's in + +00:24:24.860 --> 00:24:25.080 +mid-sentence and I hope we don't get to that + +00:24:25.380 --> 00:24:25.880 +point here. + +00:24:34.560 --> 00:24:34.740 +[Speaker 0]: So do we have any more, + +00:24:36.080 --> 00:24:36.360 +[Speaker 4]: oh sorry I'm reverting to the hosting, + +00:24:37.440 --> 00:24:37.900 +Do we have any more questions for MaxConf? + +00:24:39.760 --> 00:24:39.960 +Although maybe we want to switch to the other + +00:24:41.580 --> 00:24:41.760 +room so that we don't struggle too much to + +00:24:44.340 --> 00:24:44.840 +find... Organize the stuff on BBB afterwards. + +00:24:46.360 --> 00:24:46.620 +[Speaker 0]: Oh, the recording. Well, + +00:24:48.340 --> 00:24:48.640 +this is a way to make sure the recording gets + +00:24:54.240 --> 00:24:54.640 +online. But we could do that too. + +00:24:55.760 --> 00:24:56.260 +I don't know. What do y'all think? + +00:25:00.580 --> 00:25:00.900 +[Speaker 4]: I'm personally fine. If we want to stay here + +00:25:02.720 --> 00:25:03.220 +right now, the development track is currently + +00:25:05.280 --> 00:25:05.780 +streaming this BBB room. + +00:25:08.760 --> 00:25:08.940 +So are we on Jen. So we're going to leave it + +00:25:10.760 --> 00:25:10.840 +at is and move into closing remarks if we + +00:25:10.840 --> 00:25:11.340 +want. + +00:25:14.720 --> 00:25:15.060 +[Speaker 1]: Oh, yeah, just, I guess, + +00:25:17.720 --> 00:25:17.920 +make sure that every 1 of the organizers are + +00:25:20.740 --> 00:25:21.060 +here. I see Flo here. Let's see, + +00:25:23.480 --> 00:25:23.860 +Corbyn, are you here? Can you maybe speak + +00:25:24.280 --> 00:25:24.780 +here on BBB? + +00:25:32.860 --> 00:25:33.000 +[Speaker 4]: We'll give some time for Corbyn to figure it + +00:25:33.840 --> 00:25:34.280 +out. He did figure it out eventually + +00:25:36.260 --> 00:25:36.420 +yesterday, so surely today will go + +00:25:36.420 --> 00:25:36.920 +swimmingly. + +00:25:47.420 --> 00:25:47.720 +Right. We're getting everything ready, + +00:25:47.720 --> 00:25:48.220 +folks. + +00:25:57.100 --> 00:25:57.600 +[Speaker 0]: Okay. So while we sort out Corwin, + +00:25:58.980 --> 00:25:59.280 +can someone tell him on mumble, + +00:26:00.480 --> 00:26:00.980 +I guess? Because I'm not sure if he's... + +00:26:05.060 --> 00:26:05.420 +Anyway. I also want to say that in the Emacs + +00:26:06.580 --> 00:26:06.740 +conference channel, people have been + +00:26:08.880 --> 00:26:09.060 +mentioning that the remote stuff has been + +00:26:10.840 --> 00:26:10.920 +working for them. And I really do like the + +00:26:12.720 --> 00:26:12.880 +way that this means we can have all the + +00:26:13.980 --> 00:26:14.480 +videos, you know, all prepared, + +00:26:16.020 --> 00:26:16.220 +they're captioned, you know, + +00:26:17.160 --> 00:26:17.580 +We can send them to people, + +00:26:19.000 --> 00:26:19.500 +we can post them on the website afterwards. + +00:26:21.540 --> 00:26:22.020 +We can bring all these people together who + +00:26:23.440 --> 00:26:23.880 +might not be able to convince their companies + +00:26:25.240 --> 00:26:25.680 +to fly them somewhere for an Emacs + +00:26:29.640 --> 00:26:29.760 +conference. And also I can do this kind of + +00:26:32.120 --> 00:26:32.620 +prep while having my now seven-year-old still + +00:26:34.480 --> 00:26:34.980 +be able to wander by and whatever. + +00:26:36.820 --> 00:26:37.320 +Travelling is really tough. + +00:26:39.220 --> 00:26:39.600 +So, this is fine. This is cool. + +00:26:40.760 --> 00:26:41.260 +I like this. We'll keep doing it. + +00:26:44.240 --> 00:26:44.740 +[Speaker 4]: It's definitely playing into the low-cost + +00:26:46.360 --> 00:26:46.820 +conference. To do it online, + +00:26:48.160 --> 00:26:48.400 +So many people can just access it very + +00:26:53.760 --> 00:26:54.220 +easily. All right, so we've messaged Colwyn. + +00:26:55.760 --> 00:26:56.040 +I guess we can get started with Dalim. + +00:26:57.720 --> 00:26:57.900 +It should maybe take a minute or 2 to join + +00:27:01.400 --> 00:27:01.640 +us. Should I get started with the Final words + +00:27:04.540 --> 00:27:04.900 +of the day? All right, + +00:27:05.740 --> 00:27:06.240 +cool. All right, folks, + +00:27:08.220 --> 00:27:08.440 +we made it. We are at the end of the second + +00:27:10.320 --> 00:27:10.820 +day of EmacsConf, the second of 2 days. + +00:27:12.620 --> 00:27:13.040 +And the first thing I want to say is first, + +00:27:15.360 --> 00:27:15.660 +thank you so much for joining us for this new + +00:27:19.020 --> 00:27:19.200 +edition. It's personally my fourth year doing + +00:27:22.000 --> 00:27:22.500 +the EmacsConf, but if you go to emacsconf-org + +00:27:24.660 --> 00:27:25.080 +and you see the different sessions, + +00:27:27.380 --> 00:27:27.660 +you will realize that the first 1 was in + +00:27:29.820 --> 00:27:30.300 +2013, which happens to be 10 years ago. + +00:27:33.340 --> 00:27:33.480 +So we are obviously very excited about all of + +00:27:35.420 --> 00:27:35.680 +this and we'll tell you perhaps a little more + +00:27:38.100 --> 00:27:38.300 +about what has changed over the last 10 + +00:27:41.760 --> 00:27:42.260 +years. As usual, you know the pre-recorded + +00:27:44.540 --> 00:27:44.800 +talks are available right now on the talk + +00:27:46.640 --> 00:27:46.800 +page, at least for all those which were + +00:27:48.620 --> 00:27:48.760 +pre-recorded. All the ones which happened on + +00:27:50.200 --> 00:27:50.320 +the Google button, it will take us a little + +00:27:52.360 --> 00:27:52.780 +bit of time to figure out how to, + +00:27:54.320 --> 00:27:54.820 +well, when to put them available. + +00:27:56.480 --> 00:27:56.880 +We need to do subtitles and all this jazzy + +00:27:59.060 --> 00:27:59.440 +stuff. And we'll also upload them to YouTube + +00:28:01.500 --> 00:28:02.000 +and other places once we check the audio, + +00:28:02.700 --> 00:28:03.200 +especially for the Q&As. + +00:28:05.140 --> 00:28:05.280 +We need to clean up some of the audios and + +00:28:08.300 --> 00:28:08.680 +make sure that we do not publish any personal + +00:28:13.040 --> 00:28:13.220 +stuff. All the live talks and Q&As will do + +00:28:14.200 --> 00:28:14.700 +this in the weeks to come. + +00:28:16.680 --> 00:28:16.800 +Usually, it takes us about 1 to 2 months to + +00:28:17.480 --> 00:28:17.640 +try to get everything out, + +00:28:18.280 --> 00:28:18.680 +but if it takes longer, + +00:28:19.540 --> 00:28:20.040 +it's fine. Eventually, + +00:28:20.900 --> 00:28:21.180 +everything will be there. + +00:28:23.360 --> 00:28:23.860 +The 1 thing we can say is that by EmacsConf + +00:28:26.160 --> 00:28:26.660 +2024, when it comes around, + +00:28:28.680 --> 00:28:28.840 +everything should have been uploaded at some + +00:28:30.100 --> 00:28:30.600 +point. So that's a wide window. + +00:28:34.340 --> 00:28:34.700 +So again, and as usual, + +00:28:35.980 --> 00:28:36.480 +feel free to spread the word about EmacsConf + +00:28:38.860 --> 00:28:38.940 +because, you know, we've been doing this for + +00:28:42.100 --> 00:28:42.280 +a while and every year more people show up to + +00:28:43.980 --> 00:28:44.440 +these events and more people watch the videos + +00:28:46.620 --> 00:28:47.120 +on YouTube and it's wonderful to see, + +00:28:49.940 --> 00:28:50.220 +you know, our main goal which is to get cool + +00:28:51.400 --> 00:28:51.900 +ideas out of the head of people, + +00:28:53.860 --> 00:28:54.280 +shared and viewed by so many people. + +00:28:56.660 --> 00:28:57.160 +It's always amazing. Also, + +00:28:58.180 --> 00:28:58.680 +I would like to ask you personally, + +00:28:59.700 --> 00:29:00.060 +what did you like about this conference? + +00:29:01.780 --> 00:29:01.980 +Or what do you like, what do you feel was + +00:29:02.640 --> 00:29:02.860 +better than last year, + +00:29:05.440 --> 00:29:05.840 +because the feedback is very useful to us. + +00:29:07.340 --> 00:29:07.540 +We'd also like to know if you've got any + +00:29:08.940 --> 00:29:09.440 +ideas for making things even better. + +00:29:11.680 --> 00:29:12.180 +And we've got a general conference discussion + +00:29:13.900 --> 00:29:14.400 +slash notes slash community message board, + +00:29:14.920 --> 00:29:15.420 +which is pad.emaxconf.org + +00:29:19.280 --> 00:29:19.640 +slash 2023. And you can also just mention + +00:29:22.120 --> 00:29:22.300 +them. You know, we might open this room for + +00:29:24.080 --> 00:29:24.520 +people to join us and chat, + +00:29:25.480 --> 00:29:25.960 +although Flowy and myself, + +00:29:27.340 --> 00:29:27.540 +your up team, needs to go to bed. + +00:29:28.480 --> 00:29:28.680 +So please be mindful of this. + +00:29:29.760 --> 00:29:30.160 +If you ask a very interesting question, + +00:29:32.260 --> 00:29:32.560 +We will both have to make sacrifices to stay + +00:29:34.300 --> 00:29:34.680 +a while longer because you're too damn + +00:29:38.620 --> 00:29:39.080 +interesting. Now we'd like to move into + +00:29:41.000 --> 00:29:41.500 +thanking all the people who make EmacsConf + +00:29:42.660 --> 00:29:43.080 +possible. And obviously, + +00:29:45.060 --> 00:29:45.560 +first, we have to thank all the speakers, + +00:29:46.960 --> 00:29:47.460 +all the volunteers, the participants, + +00:29:49.960 --> 00:29:50.240 +and to all those other people in our lives + +00:29:51.660 --> 00:29:51.820 +who make it possible through time and + +00:29:53.920 --> 00:29:54.060 +support, thank you so much for allowing us to + +00:29:55.760 --> 00:29:55.960 +run EmacsCount. It wouldn't happen without + +00:29:57.160 --> 00:29:57.440 +you, and without us, I suppose, + +00:29:58.540 --> 00:29:59.040 +because we are included in this. + +00:30:01.720 --> 00:30:02.220 +This year's conference hosts are myself, + +00:30:03.400 --> 00:30:03.900 +Leo Vivier, Amine Bendali, + +00:30:05.860 --> 00:30:06.100 +and joining our team of hosts for the first + +00:30:07.080 --> 00:30:07.540 +time this year, Flobby Coder. + +00:30:08.200 --> 00:30:08.360 +Thank you so much, Flobby. + +00:30:09.340 --> 00:30:09.840 +You did a wonderful job. + +00:30:11.600 --> 00:30:12.100 +It's right there. No, dammit. + +00:30:15.180 --> 00:30:15.360 +No, I can't. I can never remember if BBB is + +00:30:17.120 --> 00:30:17.360 +flipping stuff, so either 1 of those + +00:30:19.600 --> 00:30:20.020 +directions. The streams this year, + +00:30:21.760 --> 00:30:22.200 +as last year, were managed by Sasha Schwa, + +00:30:24.400 --> 00:30:24.820 +obviously. And the check-ins by Flobby Coder, + +00:30:27.400 --> 00:30:27.740 +and I'm in with Miscellaneous running around + +00:30:30.020 --> 00:30:30.520 +by Corwin Brust, who will be joining us + +00:30:32.000 --> 00:30:32.500 +momentarily. Apparently, + +00:30:34.920 --> 00:30:35.140 +all his USB failed, so he will be with us as + +00:30:38.140 --> 00:30:38.640 +[Speaker 3]: Roost. Rhymes with Roost. + +00:30:41.040 --> 00:30:41.380 +Do I have audio now? Alright, + +00:30:42.380 --> 00:30:42.800 +I'll go to work on my camera. + +00:30:43.820 --> 00:30:44.320 +Hi. Hello? + +00:30:45.540 --> 00:30:45.980 +[Speaker 4]: soon as he can. It's Lovely. + +00:30:46.640 --> 00:30:47.140 +Okay, I'll keep going. + +00:30:49.120 --> 00:30:49.460 +I also need to thank, well, + +00:30:51.100 --> 00:30:51.480 +need, no, I want to thank all the captioning + +00:30:53.040 --> 00:30:53.400 +volunteers, the captioners as we call them. + +00:30:54.380 --> 00:30:54.880 +You've got Daniel Molina, + +00:30:57.160 --> 00:30:57.660 +Bala Ramadoui, Durai, sorry, + +00:30:59.140 --> 00:30:59.640 +Bhavin Gandhi, Amin Zayed, + +00:31:02.220 --> 00:31:02.440 +Yoni Rapkin, who presented 1 of the talk + +00:31:04.240 --> 00:31:04.740 +earlier, Daniel Alejandro Tapia, + +00:31:06.060 --> 00:31:06.560 +Hannah Miller, Ken Huang, + +00:31:07.200 --> 00:31:07.700 +Jean-Christophe Ellary, + +00:31:10.440 --> 00:31:10.800 +and James Howell. Also thanking + +00:31:11.320 --> 00:31:11.760 +Jean-Christophe Ellary, + +00:31:13.220 --> 00:31:13.680 +Colwyn, Quiliro, Kern, + +00:31:15.420 --> 00:31:15.800 +and Amin Bendali for helping with the early + +00:31:18.120 --> 00:31:18.620 +acceptance process. Sasha, + +00:31:21.180 --> 00:31:21.600 +do I read this 1? It's weird to think myself. + +00:31:22.740 --> 00:31:23.080 +I'm gonna pat myself on the back, + +00:31:24.780 --> 00:31:25.280 +I guess. Go on, Sasha. + +00:31:26.720 --> 00:31:26.920 +I'll do it. I'll do it. + +00:31:29.160 --> 00:31:29.340 +It's fine. Thanks to myself for fiddling with + +00:31:30.900 --> 00:31:31.400 +the audio to get things nicely synced, + +00:31:34.120 --> 00:31:34.340 +And thanks to myself again and other people, + +00:31:36.840 --> 00:31:37.340 +we kept the mailing list free from spam. + +00:31:39.320 --> 00:31:39.440 +Because I'm not sure what happened since May, + +00:31:41.820 --> 00:31:42.180 +but we've been receiving about 3 to 4 spam + +00:31:44.760 --> 00:31:45.040 +emails. And it just happened all of a sudden, + +00:31:46.400 --> 00:31:46.900 +and I was really weirded out by this process. + +00:31:51.380 --> 00:31:51.880 +Where was I? OK, thanks to Andrew Ducurty for + +00:31:53.000 --> 00:31:53.500 +helping with whisper processing. + +00:31:55.840 --> 00:31:56.200 +Thanks to Ashki Ghekwad for design + +00:31:57.540 --> 00:31:58.040 +contribution. Thanks to Yoshin, + +00:31:59.900 --> 00:32:00.040 +our grand changro for all the music that + +00:32:01.840 --> 00:32:01.960 +we've been using for the last 3 years at this + +00:32:04.740 --> 00:32:04.840 +point, I think. Also thanks to Rye for the + +00:32:06.820 --> 00:32:07.020 +server that we're using for OBS streaming and + +00:32:07.720 --> 00:32:08.220 +for processing videos. + +00:32:10.440 --> 00:32:10.800 +And also thanks to the free software + +00:32:12.540 --> 00:32:13.040 +foundation for obviously Emacs itself, + +00:32:14.340 --> 00:32:14.840 +the mailing list that we use, + +00:32:15.340 --> 00:32:15.840 +and the media.emacsconf-org + +00:32:19.540 --> 00:32:19.780 +server where all of the presentations are + +00:32:22.200 --> 00:32:22.580 +currently hosted. We'd also like to thank + +00:32:23.520 --> 00:32:24.020 +BigBlueButton, Etherpad, + +00:32:25.920 --> 00:32:26.420 +IceCast, OBS, The Lounge, + +00:32:28.480 --> 00:32:28.980 +Libre.chat, FFmpeg, OpenAI, + +00:32:31.300 --> 00:32:31.800 +Whisper, the E-N-E-S force alignment tool, + +00:32:34.640 --> 00:32:35.000 +Site Transfer, SubD, and contributors to all + +00:32:36.900 --> 00:32:37.020 +of the tools and services we used in the + +00:32:37.600 --> 00:32:38.000 +making of this conference. + +00:32:39.520 --> 00:32:39.960 +And obviously, all of them are free, + +00:32:41.480 --> 00:32:41.880 +as Sasha obviously told you, + +00:32:44.080 --> 00:32:44.260 +and as we will be telling you again for many + +00:32:47.700 --> 00:32:48.060 +years to come. We'd also like again to thank + +00:32:49.780 --> 00:32:50.140 +everyone for attending the conference and + +00:32:51.820 --> 00:32:52.320 +making EmacsConf what it is. + +00:32:54.000 --> 00:32:54.280 +And for those who were on the general track, + +00:32:56.540 --> 00:32:56.720 +you know Sasha did it in parallel to the last + +00:32:58.980 --> 00:32:59.340 +talk we had today. She did a wonderful talk + +00:33:01.680 --> 00:33:02.180 +on how EmacsConf is actually run. + +00:33:05.620 --> 00:33:06.060 +So there's her talk, there's also an entire + +00:33:07.760 --> 00:33:08.260 +page on our wiki about the infrastructure + +00:33:09.920 --> 00:33:10.400 +that we use. So if you're interested, + +00:33:11.880 --> 00:33:12.380 +especially in running an event of your own, + +00:33:14.340 --> 00:33:14.540 +you've got as much information as you want, + +00:33:15.600 --> 00:33:15.940 +and as Sacha probably told you, + +00:33:17.600 --> 00:33:18.100 +we are available for sharing the knowledge + +00:33:20.820 --> 00:33:20.940 +and enabling your dreams of making a + +00:33:24.220 --> 00:33:24.340 +conference. Amint, do you want to take it + +00:33:25.680 --> 00:33:26.180 +over with the fiscal sponsorship + +00:33:29.320 --> 00:33:29.480 +[Speaker 1]: Yeah, sure. Let's see. + +00:33:30.980 --> 00:33:31.480 +Can you please scroll down a little bit? + +00:33:33.520 --> 00:33:34.020 +Whoever is kindly sharing the screen. + +00:33:34.460 --> 00:33:34.960 +[Speaker 4]: announcements? Okay. Oh, + +00:33:36.140 --> 00:33:36.360 +I was scrolling on my end. + +00:33:36.360 --> 00:33:36.860 +Sorry. + +00:33:41.380 --> 00:33:41.780 +[Speaker 1]: Thanks, Sasha. Yeah, so kind of super excited + +00:33:43.080 --> 00:33:43.300 +to finally get into this. + +00:33:45.220 --> 00:33:45.300 +And this is something that we've been kind of + +00:33:46.960 --> 00:33:47.200 +hoping to get worked out for a long time + +00:33:48.280 --> 00:33:48.780 +actually and it's finally here. + +00:33:52.900 --> 00:33:53.140 +So people might have already seen this but as + +00:33:57.620 --> 00:33:58.120 +of this last Thursday we're actually fiscally + +00:33:59.440 --> 00:33:59.940 +sponsored by the Free Software Foundation. + +00:34:03.480 --> 00:34:03.740 +So we joined their Working Together for Free + +00:34:07.720 --> 00:34:07.840 +Software program. And DFSF published the + +00:34:08.540 --> 00:34:08.940 +announcement on their website. + +00:34:11.000 --> 00:34:11.500 +You're welcome to go and check it out there. + +00:34:14.060 --> 00:34:14.280 +But I just want to quickly get into a little + +00:34:17.900 --> 00:34:18.040 +bit about what it means and some of the + +00:34:21.719 --> 00:34:22.000 +benefits, I guess. So as part of this working + +00:34:23.300 --> 00:34:23.800 +together for a free software fund, + +00:34:26.580 --> 00:34:26.679 +the FSF provides fiscal sponsorship for a + +00:34:29.060 --> 00:34:29.320 +number of important free software and new + +00:34:30.900 --> 00:34:31.239 +technical projects, such as the new tool + +00:34:33.679 --> 00:34:33.840 +chain and Replicant, which is a free fork of + +00:34:36.340 --> 00:34:36.540 +Android. And starting this year, + +00:34:38.360 --> 00:34:38.800 +EmacsConf has joined the program as well. + +00:34:40.960 --> 00:34:41.440 +And as a fiscal sponsor, + +00:34:43.520 --> 00:34:44.020 +DFSF can assist us by providing services + +00:34:46.500 --> 00:34:46.940 +required by a legal entity, + +00:34:49.300 --> 00:34:49.460 +like signing contracts and receiving and + +00:34:53.080 --> 00:34:53.360 +processing payments. So to provide some + +00:34:56.820 --> 00:34:57.040 +context, eMAXConf is and always has been an + +00:34:58.740 --> 00:34:58.940 +independent initiative organized by a very + +00:34:59.700 --> 00:35:00.140 +small number of people, + +00:35:02.120 --> 00:35:02.560 +a small team of people without any corporate + +00:35:05.980 --> 00:35:06.220 +sponsors. And that's important in part + +00:35:08.880 --> 00:35:09.380 +because I believe part of our message is that + +00:35:11.860 --> 00:35:12.040 +we want to showcase that everybody can do + +00:35:14.200 --> 00:35:14.380 +this and organize a conference like this no + +00:35:17.200 --> 00:35:17.560 +matter how small your team is and how modest + +00:35:19.540 --> 00:35:19.900 +your resources are, which we will actually + +00:35:21.260 --> 00:35:21.560 +get into a little bit later in the closing + +00:35:25.760 --> 00:35:25.900 +remarks. But yeah, so now having the FSF as + +00:35:27.780 --> 00:35:28.020 +our fiscal sponsor, we're in a better + +00:35:30.200 --> 00:35:30.680 +position to accept donations as 1 potential + +00:35:33.360 --> 00:35:33.860 +way to contribute or help the conference. + +00:35:36.360 --> 00:35:36.860 +And just to clarify, we're currently not + +00:35:39.360 --> 00:35:39.520 +struggling at all to cover these costs of the + +00:35:41.000 --> 00:35:41.240 +servers and such, which we will get into + +00:35:44.720 --> 00:35:45.060 +again. But this is just 1 extra avenue if + +00:35:46.720 --> 00:35:46.880 +people are feeling generous and would like to + +00:35:47.880 --> 00:35:48.380 +help, it's much appreciated. + +00:35:54.400 --> 00:35:54.620 +And yeah, so having a 501c3 nonprofit like + +00:35:57.160 --> 00:35:57.660 +the FSF, as a fiscal sponsor, + +00:36:00.060 --> 00:36:00.340 +many donors will receive tax benefits that + +00:36:02.180 --> 00:36:02.360 +they otherwise wouldn't receive if they were + +00:36:04.540 --> 00:36:04.680 +to like donate to like individuals running a + +00:36:07.500 --> 00:36:07.720 +project directly. And also donors can know + +00:36:08.860 --> 00:36:09.140 +that, you know, the funds that they're + +00:36:10.920 --> 00:36:11.420 +donating are being handled by an accountable + +00:36:14.060 --> 00:36:14.540 +institution. And also importantly, + +00:36:16.020 --> 00:36:16.520 +when donating through the FSF, + +00:36:19.960 --> 00:36:20.460 +Let's see, text changing. + +00:36:23.320 --> 00:36:23.560 +Okay, yeah. People can donate without having + +00:36:24.600 --> 00:36:25.100 +to run any non-free JavaScript, + +00:36:27.380 --> 00:36:27.880 +which is nice. Because unfortunately, + +00:36:29.440 --> 00:36:29.540 +usually these days on the web when you do + +00:36:30.600 --> 00:36:30.880 +want to buy something or spend money, + +00:36:31.840 --> 00:36:32.340 +you have to run non-free JavaScript, + +00:36:35.020 --> 00:36:35.220 +which isn't the case when donating through + +00:36:37.720 --> 00:36:38.160 +the FSF. Yeah, so we just joined, + +00:36:39.000 --> 00:36:39.500 +as I said, on Thursday, + +00:36:43.020 --> 00:36:43.220 +and we've already received our very first + +00:36:45.400 --> 00:36:45.640 +donation, so we'd like to extend our thanks + +00:36:46.800 --> 00:36:47.300 +and gratitude to Scott Ranby, + +00:36:49.480 --> 00:36:49.980 +who is actually our first ever kind donor. + +00:36:51.820 --> 00:36:52.320 +They agreed to be thanked publicly. + +00:36:55.900 --> 00:36:56.200 +So thank you, Scott. And yeah, + +00:36:57.040 --> 00:36:57.540 +so this is a recent development. + +00:36:59.800 --> 00:36:59.980 +And we plan to add much more information and + +00:37:01.880 --> 00:37:02.020 +details about this whole situation to the + +00:37:04.200 --> 00:37:04.700 +wiki, including links to the announcements, + +00:37:06.280 --> 00:37:06.780 +some more information about the program, + +00:37:08.040 --> 00:37:08.540 +and our donation page of course, + +00:37:12.880 --> 00:37:13.140 +in the new future. And in the meantime I'm + +00:37:15.080 --> 00:37:15.240 +also happy to help answer any questions as + +00:37:17.900 --> 00:37:18.400 +best as I can, So feel free to ping me on IRC + +00:37:19.640 --> 00:37:20.140 +or just email me at bandalia.guinard.org. + +00:37:26.140 --> 00:37:26.640 +[Speaker 3]: Which gives me a chance to jump in and just + +00:37:29.060 --> 00:37:29.560 +point out 1 question that we know people have + +00:37:32.680 --> 00:37:32.960 +is just about how much of the money goes to + +00:37:35.660 --> 00:37:35.860 +FSF when you make a contribution through the + +00:37:36.860 --> 00:37:37.360 +fund toward EmacsConf? + +00:37:40.560 --> 00:37:40.760 +[Speaker 1]: Right, exactly. Yeah, and the answer to that + +00:37:44.540 --> 00:37:44.720 +is that it's 10%, which is for supporting the + +00:37:46.720 --> 00:37:46.960 +operation of the Working Together program and + +00:37:48.800 --> 00:37:49.300 +also the shared GNU infrastructure, + +00:37:52.040 --> 00:37:52.540 +which we as EmacsConf use and depend on, + +00:37:54.920 --> 00:37:55.420 +along with several hundred GNU packages. + +00:37:59.860 --> 00:38:00.060 +So, yeah, and it covers things like + +00:38:03.060 --> 00:38:03.480 +transaction costs that the FSF's payment + +00:38:04.000 --> 00:38:04.500 +processor charges? + +00:38:10.040 --> 00:38:10.240 +[Speaker 3]: And then again I'll come back to say this is + +00:38:12.280 --> 00:38:12.780 +a real fair price. I have some experience + +00:38:15.300 --> 00:38:15.540 +with working with payment processing and + +00:38:19.120 --> 00:38:19.440 +things like this and like 10% that's a that's + +00:38:22.440 --> 00:38:22.940 +something that you see in Bigger businesses + +00:38:25.900 --> 00:38:26.380 +that have a model around making money on that + +00:38:29.160 --> 00:38:29.280 +Transaction so to be able to do that as a + +00:38:31.400 --> 00:38:31.760 +nonprofit. We're taking advantage of a really + +00:38:32.400 --> 00:38:32.900 +awesome thing there. + +00:38:35.860 --> 00:38:36.060 +[Speaker 1]: Yeah, exactly. And yeah, + +00:38:36.820 --> 00:38:37.120 +just for a quick plug, + +00:38:38.860 --> 00:38:39.060 +the FSF is actually doing an end of year + +00:38:41.780 --> 00:38:42.020 +fundraiser right now. So if you want to go + +00:38:44.220 --> 00:38:44.700 +donate to them, or if you donate to us, + +00:38:47.760 --> 00:38:48.260 +a part of it will go to the FSF to support + +00:38:51.400 --> 00:38:51.900 +their work on free software, + +00:38:53.000 --> 00:38:53.500 +helping grow the movement, + +00:38:56.000 --> 00:38:56.120 +and spread the word about it. + +00:39:02.080 --> 00:39:02.360 +So, thank you. And I guess now is a good time + +00:39:05.380 --> 00:39:05.800 +for me to pass the baton to the next + +00:39:08.160 --> 00:39:08.320 +organizer who wants to talk about some of the + +00:39:11.040 --> 00:39:11.540 +specs of the servers that we use right now. + +00:39:14.720 --> 00:39:14.860 +[Speaker 0]: We actually don't have to go about this in + +00:39:16.560 --> 00:39:16.840 +detail. I just put it in there in case people + +00:39:19.280 --> 00:39:19.540 +were curious about how much it takes to run + +00:39:20.740 --> 00:39:21.240 +something like this. Not a lot. + +00:39:22.900 --> 00:39:23.100 +It's just really, you know, + +00:39:26.100 --> 00:39:26.260 +2 days of computing is not that expensive in + +00:39:29.060 --> 00:39:29.480 +today's world, and all the rest is just + +00:39:32.220 --> 00:39:32.640 +volunteer time and a heck of a lot of Emacs + +00:39:34.080 --> 00:39:34.280 +lists as previously discussed in our + +00:39:41.020 --> 00:39:41.180 +presentation. So, we'll just skip through + +00:39:42.280 --> 00:39:42.440 +that instead of reading all of it. + +00:39:43.580 --> 00:39:43.840 +Unless people are specifically curious, + +00:39:44.640 --> 00:39:45.140 +you can ask questions afterwards. + +00:39:46.320 --> 00:39:46.820 +But yes, happy birthday, + +00:39:49.200 --> 00:39:49.440 +EmacsConf, and here's another wonderful 10 + +00:39:49.440 --> 00:39:49.940 +years. + +00:39:56.820 --> 00:39:57.040 +[Speaker 4]: All right, I think we are at the end of the + +00:39:58.820 --> 00:39:59.320 +closing remarks. Have I forgotten anything? + +00:40:00.060 --> 00:40:00.380 +We haven't had Flowy yet, + +00:40:03.340 --> 00:40:03.560 +I believe. Sorry for putting you on the spot + +00:40:03.560 --> 00:40:04.060 +again. + +00:40:07.940 --> 00:40:08.400 +[Speaker 6]: I guess I have nothing really to say besides + +00:40:09.280 --> 00:40:09.780 +what you have already said. + +00:40:12.560 --> 00:40:13.060 +So thank everybody to make a presentation, + +00:40:15.360 --> 00:40:15.640 +to do anything here. Thanks for all of you + +00:40:16.880 --> 00:40:17.080 +that I could be a part of it. + +00:40:17.880 --> 00:40:18.380 +I have to admit it also. + +00:40:21.020 --> 00:40:21.520 +So thank you all. And yeah, + +00:40:22.540 --> 00:40:23.040 +nothing to say probably. + +00:40:25.560 --> 00:40:25.840 +[Speaker 1]: And I also want to send the thanks to Flowy + +00:40:27.260 --> 00:40:27.380 +for, you know, stepping in. + +00:40:29.340 --> 00:40:29.480 +We kind of like throw this on you like at the + +00:40:31.560 --> 00:40:31.720 +last second, but Flowy actually stepped in + +00:40:33.840 --> 00:40:34.160 +and hosted graciously a couple of the talks + +00:40:34.920 --> 00:40:35.140 +on the Dev track today. + +00:40:36.880 --> 00:40:37.200 +So, which I think went very well. + +00:40:38.480 --> 00:40:38.980 +So congrats and thank you. + +00:40:39.720 --> 00:40:40.220 +[Speaker 6]: Thank you. + +00:40:41.420 --> 00:40:41.920 +[Speaker 4]: Speaking of which we were not monsters. + +00:40:43.420 --> 00:40:43.660 +We kindly asked Floey yesterday because + +00:40:44.540 --> 00:40:44.760 +everything was going so well. + +00:40:45.520 --> 00:40:45.600 +And now we can say it, + +00:40:46.840 --> 00:40:47.240 +you know, I can say things are going well. + +00:40:48.760 --> 00:40:48.880 +Usually it's a bad thing when you're doing a + +00:40:50.500 --> 00:40:50.740 +broadcast to say things are going well right + +00:40:53.080 --> 00:40:53.300 +now because it tends to backfires at some + +00:40:56.980 --> 00:40:57.480 +[Speaker 3]: Hours of notice, hours of notice. + +00:40:58.900 --> 00:40:59.400 +That, that's planning. + +00:41:02.420 --> 00:41:02.920 +[Speaker 4]: point. But yesterday- So hours of notice, + +00:41:04.840 --> 00:41:05.340 +Flowy didn't sleep all that much because we + +00:41:06.500 --> 00:41:06.980 +tasked him with hosting, + +00:41:08.440 --> 00:41:08.720 +so he was turning in his bed all night + +00:41:09.960 --> 00:41:10.460 +thinking, oh, I'm going to host MaxCons. + +00:41:13.660 --> 00:41:13.860 +But Flowy, you did a wonderful job and I am + +00:41:15.720 --> 00:41:15.940 +so glad that not only you were able to join + +00:41:17.760 --> 00:41:17.900 +us again this year, but that also you were + +00:41:19.760 --> 00:41:20.140 +able to host. Because last year, + +00:41:20.900 --> 00:41:21.140 +had we asked you to host, + +00:41:21.820 --> 00:41:22.320 +you would have said no. + +00:41:25.120 --> 00:41:25.580 +First time we asked you this year was yes, + +00:41:27.100 --> 00:41:27.600 +but give me some time to think about it. + +00:41:30.100 --> 00:41:30.600 +[Speaker 6]: Next year it is yes completely. + +00:41:32.780 --> 00:41:32.940 +[Speaker 4]: If we've done a good job, + +00:41:33.560 --> 00:41:34.060 +it will be yes directly. + +00:41:38.000 --> 00:41:38.080 +All right, so since we are at the end of the + +00:41:41.140 --> 00:41:41.320 +thankings and I did say europe team needs to + +00:41:43.580 --> 00:41:43.700 +go to bed in about 12 minutes that leaves us + +00:41:45.940 --> 00:41:46.440 +about 12 minutes to try to answer as many + +00:41:47.840 --> 00:41:48.340 +points as you'd like to raise. + +00:41:50.640 --> 00:41:50.940 +Sasha, I think the Q&A room is still open + +00:41:52.680 --> 00:41:53.100 +because we are technically still in the Emacs + +00:41:53.560 --> 00:41:54.020 +conference room currently. + +00:41:56.480 --> 00:41:56.660 +So, if you... We're going to put the link + +00:41:57.840 --> 00:41:58.000 +again if you need to find it. + +00:41:59.800 --> 00:42:00.300 +Otherwise, scroll up and find the 1 on there. + +00:42:04.400 --> 00:42:04.900 +[Speaker 0]: I think I can change the redirect. + +00:42:07.240 --> 00:42:07.740 +Maybe. I will go figure this out. + +00:42:08.600 --> 00:42:09.100 +Keep talking in the background. + +00:42:12.160 --> 00:42:12.280 +[Speaker 4]: Right. So, whilst we figure this out in the + +00:42:13.740 --> 00:42:13.860 +background, it would be nice if you could + +00:42:14.640 --> 00:42:15.040 +join us and ask questions, + +00:42:15.900 --> 00:42:16.020 +either by dropping them. + +00:42:18.080 --> 00:42:18.340 +I see plenty of people have already left some + +00:42:19.440 --> 00:42:19.840 +comments. We have 2 places, + +00:42:21.820 --> 00:42:22.240 +right now it's more about a chitchatting + +00:42:23.000 --> 00:42:23.360 +about the end of the conference. + +00:42:24.160 --> 00:42:24.660 +If you've got general feedback, + +00:42:26.160 --> 00:42:26.400 +we've mentioned it at the top, + +00:42:28.580 --> 00:42:28.780 +but if you want to write your general + +00:42:30.920 --> 00:42:31.080 +feedback here, it will find its way at some + +00:42:32.960 --> 00:42:33.160 +point in the years of the relevant people who + +00:42:33.920 --> 00:42:34.280 +can make things change. + +00:42:35.920 --> 00:42:36.040 +So don't worry too much about where you put + +00:42:37.120 --> 00:42:37.540 +your feedback, it'll be fine. + +00:42:40.240 --> 00:42:40.440 +But now, how about we start reading some of + +00:42:42.700 --> 00:42:43.080 +the notes that people have said or questions + +00:42:43.080 --> 00:42:43.260 +that + +00:42:47.094 --> 00:42:47.151 +[Speaker 3]: have been asked. So here's 1 for Amin. + +00:42:48.460 --> 00:42:48.820 +Do you have any stats on how many people + +00:42:52.200 --> 00:42:52.700 +watched for an IRC and BBB over the 2 days? + +00:42:58.140 --> 00:42:58.620 +[Speaker 1]: Right, yeah, so I guess for IceCast, + +00:43:00.040 --> 00:43:00.540 +which I can answer more readily, + +00:43:03.760 --> 00:43:04.260 +I think yesterday we were averaging around + +00:43:08.120 --> 00:43:08.620 +240, 250 concurrent viewers at a time. + +00:43:12.760 --> 00:43:13.260 +And today, so today it varied. + +00:43:16.300 --> 00:43:16.740 +I think the maximum was again like around 200 + +00:43:19.600 --> 00:43:19.820 +to 20-ish with the average being more around + +00:43:24.960 --> 00:43:25.460 +180, 190 viewers. We've had a lot of hits to + +00:43:28.700 --> 00:43:29.180 +the actual web pages for the Emacs Conf Wiki + +00:43:31.720 --> 00:43:31.960 +or the pad, which are all being served on 1 + +00:43:34.740 --> 00:43:35.140 +server. I pulled some numbers. + +00:43:36.140 --> 00:43:36.640 +I'm not sure if they're correct. + +00:43:38.480 --> 00:43:38.900 +So I'm like a little bit hesitant to discuss + +00:43:41.760 --> 00:43:41.980 +them. Safe to say they're easily in the tens + +00:43:44.380 --> 00:43:44.580 +of thousands, maybe in the hundreds of + +00:43:47.960 --> 00:43:48.420 +thousands of total visits over the past, + +00:43:52.540 --> 00:43:53.040 +[Speaker 0]: Maybe the pad makes a lot of small requests. + +00:43:53.940 --> 00:43:54.400 +[Speaker 1]: I guess, 48 hours. Right, + +00:43:57.040 --> 00:43:57.200 +okay. So, yeah, that's why I'm hesitant to + +00:43:59.240 --> 00:43:59.380 +say. But yeah, easily in the thousands or + +00:44:01.860 --> 00:44:02.020 +[Speaker 3]: You know + +00:44:02.980 --> 00:44:03.260 +[Speaker 4]: who you are anyway, the crowd, + +00:44:04.080 --> 00:44:04.240 +you know how many you are, + +00:44:05.340 --> 00:44:05.840 +you do not need exact numbers + +00:44:08.720 --> 00:44:09.220 +[Speaker 1]: tens of thousands. Yeah, + +00:44:11.000 --> 00:44:11.200 +so I don't have the exact numbers but I guess + +00:44:13.260 --> 00:44:13.460 +it's always kind of fun to maybe try to pull + +00:44:15.700 --> 00:44:15.840 +some numbers and look at it that way but you + +00:44:18.080 --> 00:44:18.580 +know of course we all know that what we do, + +00:44:19.720 --> 00:44:20.220 +every single person counts. + +00:44:24.320 --> 00:44:24.660 +So I don't know, trying to look at turning + +00:44:27.900 --> 00:44:28.400 +people into abstract numbers isn't, + +00:44:30.480 --> 00:44:30.820 +I don't know, inspiring to me very much, + +00:44:31.840 --> 00:44:32.340 +but it's cool. So. + +00:44:36.020 --> 00:44:36.140 +[Speaker 4]: All right. So how about we go into the + +00:44:37.640 --> 00:44:38.140 +questions. So Sasha is now in the viewport + +00:44:39.480 --> 00:44:39.780 +where we can see some questions. + +00:44:41.200 --> 00:44:41.700 +So how about we take some of them. + +00:44:43.900 --> 00:44:44.060 +I can read them or if anyone of the + +00:44:45.020 --> 00:44:45.520 +organizers wants to do this, + +00:44:46.720 --> 00:44:47.040 +feel free, especially those who haven't + +00:44:48.040 --> 00:44:48.540 +talked to a whole lot this year. + +00:44:53.000 --> 00:44:53.480 +Cohen, do you want to try it? + +00:44:54.760 --> 00:44:55.260 +[Speaker 3]: I didn't make my motive clear. + +00:44:59.220 --> 00:44:59.500 +I did and I'm done. I took the first + +00:45:01.120 --> 00:45:01.320 +question, I picked the bottom question off + +00:45:02.920 --> 00:45:03.120 +the list because I knew exactly who it was + +00:45:05.140 --> 00:45:05.500 +going for. The person who wants to answer or + +00:45:07.080 --> 00:45:07.580 +direct the next question is welcome. + +00:45:10.520 --> 00:45:10.760 +Sorry, I could have given a little better + +00:45:11.400 --> 00:45:11.680 +stage direction there. + +00:45:13.660 --> 00:45:14.160 +I'm not prepared to answer how many emaxers + +00:45:16.080 --> 00:45:16.560 +are from Nordic countries other than to say + +00:45:17.680 --> 00:45:18.180 +definitely yes and several. + +00:45:21.900 --> 00:45:22.080 +And I haven't looked close enough at the + +00:45:22.580 --> 00:45:23.080 +suggestion yet. + +00:45:27.280 --> 00:45:27.720 +[Speaker 4]: Right, okay. I can take the question about + +00:45:30.020 --> 00:45:30.060 +the BBB limitations. So it's the second 1, + +00:45:31.560 --> 00:45:32.060 +the red 1. Small suggestion, + +00:45:33.120 --> 00:45:33.520 +likely out of your control, + +00:45:36.340 --> 00:45:36.660 +but anyway, the blue button seems to work + +00:45:38.300 --> 00:45:38.560 +very well, but it would be a bit more + +00:45:40.680 --> 00:45:40.840 +watchable if the webcam frames were lined up + +00:45:42.660 --> 00:45:42.920 +vertically on 1 side, because it would allow + +00:45:44.760 --> 00:45:44.920 +the screen share frames to be larger and + +00:45:47.080 --> 00:45:47.560 +would make much better use of the viewable + +00:45:49.740 --> 00:45:50.240 +space. Maybe worth a bug report to upstream. + +00:45:53.080 --> 00:45:53.420 +And I agree, BBB has been really good. + +00:45:54.400 --> 00:45:54.900 +Amine, did you want to say something? + +00:45:55.120 --> 00:45:55.240 +[Speaker 3]: I'm going + +00:45:56.760 --> 00:45:56.880 +[Speaker 1]: to continue and then I'll add something at + +00:45:56.960 --> 00:45:57.460 +the end. + +00:45:59.960 --> 00:46:00.100 +[Speaker 4]: Okay, sure. So BBB has been really good for + +00:46:04.440 --> 00:46:04.940 +us. It allows us to have many parallel rooms + +00:46:07.700 --> 00:46:07.800 +which are all recording service side at the + +00:46:09.920 --> 00:46:10.120 +same time. And it's wonderful for us because + +00:46:11.260 --> 00:46:11.580 +we can gather. At some point, + +00:46:13.520 --> 00:46:13.820 +I think last year, we had 4 concurrent talks + +00:46:15.220 --> 00:46:15.360 +being recorded because people were just so + +00:46:17.040 --> 00:46:17.540 +interested in what was going on in rooms. + +00:46:19.040 --> 00:46:19.540 +And you know, we only, + +00:46:21.660 --> 00:46:22.160 +like this year, the co-organizers, + +00:46:23.720 --> 00:46:23.940 +it's the 5 people you see in a room + +00:46:26.760 --> 00:46:26.880 +currently. And if we had all of us to be in a + +00:46:28.440 --> 00:46:28.580 +separate room, having to record on the + +00:46:29.340 --> 00:46:29.640 +machine, it wouldn't work. + +00:46:32.120 --> 00:46:32.280 +So we are able to demultiply the amount of + +00:46:33.560 --> 00:46:34.060 +content that we produce thanks to BBB, + +00:46:37.540 --> 00:46:37.700 +but sadly, we are also quite limited by the + +00:46:39.560 --> 00:46:39.720 +interface of BBB. Another problem that is + +00:46:43.860 --> 00:46:44.360 +dear to me is that audio tends to be fairly + +00:46:46.240 --> 00:46:46.740 +bad at some points depending on the speakers + +00:46:50.080 --> 00:46:50.580 +because BBB has really funky audio correction + +00:46:51.500 --> 00:46:51.820 +stuff going in the background, + +00:46:52.540 --> 00:46:52.900 +and sometimes it works, + +00:46:53.760 --> 00:46:54.260 +sometimes it doesn't work, + +00:46:55.480 --> 00:46:55.980 +and especially on my machine, + +00:46:58.320 --> 00:46:58.480 +the specs are above in the document if you're + +00:47:02.040 --> 00:47:02.220 +interested, but BBB and OBS do not play well + +00:47:04.640 --> 00:47:04.820 +at all. You might have heard me speaking with + +00:47:06.120 --> 00:47:06.500 +some clicks in my voice at some point. + +00:47:07.600 --> 00:47:08.100 +That's another problem of BBB. + +00:47:09.240 --> 00:47:09.520 +Anyway, I mean, you wanted to add something + +00:47:09.720 --> 00:47:10.220 +as well. + +00:47:14.060 --> 00:47:14.340 +[Speaker 1]: Right, yeah, I kind of empathize and also + +00:47:17.220 --> 00:47:17.640 +emphasize the problems with audio on BBB + +00:47:19.860 --> 00:47:20.360 +sometimes, but about the specific suggestion + +00:47:22.540 --> 00:47:22.760 +here of like lighting things up at least + +00:47:24.780 --> 00:47:24.960 +visually, I think that's like much more + +00:47:26.940 --> 00:47:27.440 +doable even if you don't open a bug upstream. + +00:47:30.140 --> 00:47:30.520 +I believe the Free Software Foundation for + +00:47:31.360 --> 00:47:31.860 +their LibrePlanet conference, + +00:47:33.740 --> 00:47:34.200 +either last year or the year before, + +00:47:36.500 --> 00:47:36.760 +they had some custom, like clients signed + +00:47:38.000 --> 00:47:38.500 +into browser, custom CSS, + +00:47:40.520 --> 00:47:40.720 +where it would do exactly something like + +00:47:44.440 --> 00:47:44.820 +that. It would like enlarge the shared screen + +00:47:46.840 --> 00:47:47.000 +on the 1 side and then stack up all of the + +00:47:48.000 --> 00:47:48.280 +webcam feeds on 1 side. + +00:47:50.280 --> 00:47:50.440 +So we might be able to use something like + +00:47:50.440 --> 00:47:50.940 +that. + +00:47:53.040 --> 00:47:53.540 +[Speaker 3]: So I'll tack on to that. + +00:47:56.760 --> 00:47:56.880 +And now I feel like a heel as soon as I + +00:47:59.340 --> 00:47:59.500 +opened my mouth, because I think I almost get + +00:48:01.480 --> 00:48:01.720 +the sense Floyd wants to jump in here and + +00:48:03.680 --> 00:48:03.840 +we're all talking, everyone except Sasha who + +00:48:06.420 --> 00:48:06.660 +actually wrote OBS, you know, + +00:48:10.680 --> 00:48:10.920 +the OBS WebSocket plugin that is probably the + +00:48:12.100 --> 00:48:12.600 +answer to all the different questions + +00:48:13.360 --> 00:48:13.480 +everyone is bringing up. + +00:48:15.060 --> 00:48:15.420 +So I guess I'll leave my input at that And + +00:48:16.680 --> 00:48:16.800 +Chloe, did you have anything to say, + +00:48:17.720 --> 00:48:18.220 +or can we pick on Sasha? + +00:48:20.460 --> 00:48:20.960 +[Speaker 6]: Nothing to say. + +00:48:25.120 --> 00:48:25.320 +[Speaker 0]: I need to update the OBS WebSocket plugin for + +00:48:27.260 --> 00:48:27.440 +the protocol change, because I think the + +00:48:29.040 --> 00:48:29.540 +protocol change was from 4 to 5. + +00:48:32.080 --> 00:48:32.300 +It's 1 of those things that I haven't gotten + +00:48:35.280 --> 00:48:35.580 +[Speaker 1]: Cool. But + +00:48:37.120 --> 00:48:37.280 +[Speaker 0]: around to. yeah, so we'll try to solve it in + +00:48:41.240 --> 00:48:41.380 +CSS. So if I can tinker with the CSS or if + +00:48:44.160 --> 00:48:44.380 +somebody else would like to volunteer to move + +00:48:45.720 --> 00:48:46.220 +things around, then that would be fantastic + +00:48:48.040 --> 00:48:48.540 +because front-end should be things. + +00:48:53.480 --> 00:48:53.600 +Okay, oh, what order of magnitude hours do + +00:48:55.360 --> 00:48:55.520 +you each of you think you devote to the + +00:48:58.260 --> 00:48:58.580 +conference yearly? I have I expected someone + +00:48:59.540 --> 00:49:00.040 +would ask this question. + +00:49:07.840 --> 00:49:08.120 +So I have I have my the past 11 years of time + +00:49:11.000 --> 00:49:11.400 +analysis. This is my Emacs category, + +00:49:12.780 --> 00:49:13.280 +so it also includes Emacs news. + +00:49:15.660 --> 00:49:16.160 +So this is my Emacs hours by month and year. + +00:49:17.920 --> 00:49:18.420 +So you can see last year, + +00:49:21.140 --> 00:49:21.640 +it spiked up a lot. But this year, + +00:49:23.100 --> 00:49:23.440 +it has taken less time. + +00:49:26.260 --> 00:49:26.760 +So last month, it was about 93 hours. + +00:49:29.020 --> 00:49:29.520 +And the month before that was just about 87 + +00:49:31.400 --> 00:49:31.880 +hours of prep. And this actually includes + +00:49:33.240 --> 00:49:33.740 +things like captioning and, + +00:49:36.260 --> 00:49:36.340 +and coordination. And then you can see a + +00:49:38.560 --> 00:49:38.940 +little bit of time here like the EMAX news + +00:49:42.040 --> 00:49:42.440 +and and harvesting q&a and adding chapter + +00:49:43.780 --> 00:49:44.280 +index indices and things like that. + +00:49:47.960 --> 00:49:48.460 +So I, I like it, it's it's my form of fun. + +00:49:50.540 --> 00:49:50.640 +And Otherwise, I'm mostly just, + +00:49:52.960 --> 00:49:53.460 +you know, helping the kiddo go to play dates + +00:49:54.320 --> 00:49:54.820 +and carrying things around. + +00:49:57.280 --> 00:49:57.500 +And, you know, so this is the stuff that I do + +00:49:58.260 --> 00:49:58.760 +to keep my brain happy. + +00:50:00.060 --> 00:50:00.320 +And if you're wondering, + +00:50:01.360 --> 00:50:01.860 +okay, well, do you sleep? + +00:50:03.520 --> 00:50:03.820 +That's the next question I expected people + +00:50:04.840 --> 00:50:05.060 +ask. The answer is yes, + +00:50:06.420 --> 00:50:06.660 +we still actually do manage to sleep, + +00:50:09.640 --> 00:50:09.800 +or at least I do. Less so now that I have a + +00:50:10.760 --> 00:50:11.260 +kid, this is like 2016, + +00:50:13.100 --> 00:50:13.260 +had a kiddo, and then suddenly much less + +00:50:14.640 --> 00:50:14.800 +sleep, but still a reasonable amount of + +00:50:16.780 --> 00:50:17.280 +sleep. So Emacs stuff happens, + +00:50:19.600 --> 00:50:20.100 +I can still sleep, and it's a lot of fun. + +00:50:23.260 --> 00:50:23.760 +[Speaker 4]: Now that's data for you folks. + +00:50:26.960 --> 00:50:27.460 +[Speaker 1]: Yeah, we can't top that at all. + +00:50:30.420 --> 00:50:30.820 +[Speaker 0]: It's a blog post also, + +00:50:30.820 --> 00:50:31.320 +yeah. + +00:50:33.160 --> 00:50:33.340 +[Speaker 4]: Especially, you start like this, + +00:50:36.540 --> 00:50:37.040 +how do you expect all of us to say anything + +00:50:38.680 --> 00:50:38.740 +after this? Whatever we say is not going to + +00:50:40.560 --> 00:50:40.680 +be backed up by data, it's not going to be as + +00:50:42.360 --> 00:50:42.520 +many hours, and it's not going to be as + +00:50:43.180 --> 00:50:43.680 +qualitative in general. + +00:50:53.640 --> 00:50:53.900 +I can remark on something because for me it's + +00:50:56.040 --> 00:50:56.540 +my fourth year helping to organize EmacsConf + +00:50:59.280 --> 00:50:59.780 +and there's a definite change this year. + +00:51:02.480 --> 00:51:02.980 +I did spend, usually I get into EmacsConf + +00:51:05.640 --> 00:51:06.040 +mode in late September when I start worrying + +00:51:07.900 --> 00:51:08.080 +about the CFP, the call for proposal is + +00:51:09.720 --> 00:51:10.080 +finishing, and then we need to start running + +00:51:12.580 --> 00:51:12.780 +after speakers to secure the proposals to + +00:51:13.860 --> 00:51:14.360 +make sure, oh, can you do this? + +00:51:16.500 --> 00:51:16.680 +Can you do maybe a 10-minute format instead + +00:51:17.400 --> 00:51:17.560 +of a 20-minute format, + +00:51:18.760 --> 00:51:19.260 +you know, all this jazzy stuff. + +00:51:21.820 --> 00:51:22.020 +And usually it kind of looks like Sasha for + +00:51:22.940 --> 00:51:23.400 +me in terms of involvement, + +00:51:24.900 --> 00:51:25.400 +or at least it did for the previous year. + +00:51:28.920 --> 00:51:29.300 +But this year, now that I've been gainfully + +00:51:30.220 --> 00:51:30.720 +employed as a software developer, + +00:51:33.760 --> 00:51:33.900 +I found it much harder to find the time to + +00:51:36.500 --> 00:51:36.660 +invest into MaxComp. But 1 of the things that + +00:51:39.520 --> 00:51:39.800 +allowed me to still stay efficient at my day + +00:51:42.100 --> 00:51:42.260 +job is the fact that I knew that Sasha and + +00:51:43.680 --> 00:51:44.180 +all the work that we did in previous years + +00:51:46.240 --> 00:51:46.560 +would come to help us organize this year's + +00:51:48.160 --> 00:51:48.560 +conference. And I'm not kidding, + +00:51:49.900 --> 00:51:50.140 +this year, I've been keeping an eye, + +00:51:51.300 --> 00:51:51.480 +obviously, and we've been chatting with all + +00:51:53.860 --> 00:51:54.340 +the organizers, but it's mostly been Sasha + +00:51:56.880 --> 00:51:57.080 +holding the fort from the end of the CFP in + +00:52:00.060 --> 00:52:00.560 +September to right about end of November. + +00:52:02.220 --> 00:52:02.720 +So I'll use the opportunity, + +00:52:04.780 --> 00:52:05.160 +as well my fellow co-organizers will, + +00:52:07.300 --> 00:52:07.480 +to thank you Sasha for putting so much time + +00:52:09.720 --> 00:52:09.900 +and energy into this. Not only Sasha from + +00:52:11.680 --> 00:52:11.920 +this year, but also Sasha from last year, + +00:52:12.840 --> 00:52:13.340 +and last year, and last year. + +00:52:19.920 --> 00:52:20.160 +And I will not be able to give you a figure + +00:52:20.840 --> 00:52:21.000 +of how much time it takes. + +00:52:22.920 --> 00:52:23.220 +I can tell you that the 2 days of Emacs Con + +00:52:28.180 --> 00:52:28.380 +are a bloody marathon because we cannot share + +00:52:31.060 --> 00:52:31.220 +our screens with you, but Sasha has given you + +00:52:32.220 --> 00:52:32.580 +a little bit of pointers about, + +00:52:34.080 --> 00:52:34.580 +you know, how much stuff we need to monitor. + +00:52:36.560 --> 00:52:36.820 +Sasha just switches constantly between + +00:52:38.860 --> 00:52:39.320 +workspaces. I just put everything on 1 + +00:52:41.400 --> 00:52:41.900 +workspace and my screen looks absolutely + +00:52:44.480 --> 00:52:44.920 +mental. And then I wonder why my microphone + +00:52:46.020 --> 00:52:46.520 +is clipping on BVB, I suppose. + +00:52:47.400 --> 00:52:47.540 +All right, that's all for me. + +00:52:48.900 --> 00:52:49.040 +Anyone wants to say anything about how much + +00:52:49.920 --> 00:52:50.420 +time it takes? Sasha, please. + +00:52:52.800 --> 00:52:53.000 +[Speaker 0]: I have a nice setup this year because I + +00:52:55.840 --> 00:52:55.960 +actually have a Matthew Lent donated a + +00:52:57.440 --> 00:52:57.660 +computer to me that can handle the big + +00:53:00.240 --> 00:53:00.420 +monitor and I'm stealing my husband's big + +00:53:01.100 --> 00:53:01.280 +monitor over there. See, + +00:53:02.240 --> 00:53:02.740 +So this is my setup today. + +00:53:05.600 --> 00:53:06.020 +It's got like conference stuff on my laptop + +00:53:08.800 --> 00:53:09.240 +and then just IOC on the other big screen and + +00:53:10.640 --> 00:53:11.000 +the 480p so I can see, + +00:53:12.340 --> 00:53:12.840 +I can make sure it doesn't fall down. + +00:53:14.900 --> 00:53:15.400 +Yes, so I have a nice setup today. + +00:53:22.260 --> 00:53:22.400 +[Speaker 4]: Anyone wants to comment about how much time + +00:53:24.160 --> 00:53:24.360 +it takes for them to organize the MaxCon for + +00:53:25.440 --> 00:53:25.940 +2, you know, including everything, + +00:53:26.580 --> 00:53:27.080 +be it the brainstorming, + +00:53:28.940 --> 00:53:29.440 +the answering volunteers and stuff like this? + +00:53:31.320 --> 00:53:31.640 +Or we can move to another question, + +00:53:31.800 --> 00:53:32.300 +of course. + +00:53:34.600 --> 00:53:34.960 +[Speaker 1]: I mean, I know for myself, + +00:53:36.180 --> 00:53:36.580 +I kind of dropped the ball this year, + +00:53:38.940 --> 00:53:39.440 +somewhat unintentionally or unintentionally. + +00:53:41.640 --> 00:53:42.040 +Well, yeah, I didn't have any other choice, + +00:53:44.280 --> 00:53:44.780 +basically, at least in like September through + +00:53:46.940 --> 00:53:47.440 +like early November or mid November. + +00:53:51.100 --> 00:53:51.500 +But I think like, it sort of differs, + +00:53:52.480 --> 00:53:52.820 +I guess, from year to year. + +00:53:53.520 --> 00:53:54.020 +Sometimes life happens, + +00:53:57.900 --> 00:53:58.400 +and no matter how much you would love to put + +00:53:59.540 --> 00:53:59.880 +a ton of time into something, + +00:54:01.620 --> 00:54:01.820 +you just can't. And maybe next year you can + +00:54:04.340 --> 00:54:04.540 +do a lot more. So I'm optimistic I'll be able + +00:54:07.080 --> 00:54:07.260 +to put in much more time into things for + +00:54:09.580 --> 00:54:10.080 +EmacsConf next year, but that's just me. + +00:54:12.360 --> 00:54:12.560 +[Speaker 4]: I just want to say something before Robin + +00:54:13.900 --> 00:54:14.400 +drops in. Sasha, go please first. + +00:54:18.800 --> 00:54:19.120 +[Speaker 0]: And I think people shouldn't like feel bad + +00:54:20.280 --> 00:54:20.780 +about having those. I think designing + +00:54:24.120 --> 00:54:24.280 +conference systems or processes so that they + +00:54:26.800 --> 00:54:27.300 +can take advantage of little pockets of time + +00:54:30.460 --> 00:54:30.680 +is the way to go. I love the fact that we now + +00:54:33.200 --> 00:54:33.360 +have a system where hosts can show up on the + +00:54:35.280 --> 00:54:35.680 +day of and just rock it, + +00:54:36.880 --> 00:54:37.380 +right? So this is great. + +00:54:41.580 --> 00:54:42.080 +It is good that we can get by with less time + +00:54:43.940 --> 00:54:44.120 +throughout the process and just take + +00:54:45.660 --> 00:54:46.160 +advantage of whatever time people have. + +00:54:46.960 --> 00:54:47.180 +Whether it's, you know, + +00:54:49.120 --> 00:54:49.280 +they've got 2 hours, they want to caption a + +00:54:51.560 --> 00:54:52.040 +talk, that sort of stuff is already totally + +00:54:52.040 --> 00:54:52.540 +awesome. + +00:54:57.480 --> 00:54:57.980 +[Speaker 3]: And yeah, you both, thank you. + +00:55:00.820 --> 00:55:01.020 +Yeah, you both stole my Thunder and then put + +00:55:03.880 --> 00:55:04.120 +a quarterback in me. I couldn't agree more + +00:55:04.920 --> 00:55:05.280 +with everything you said. + +00:55:09.020 --> 00:55:09.220 +That's something that just typifies what is + +00:55:10.360 --> 00:55:10.860 +amazing about this conference, + +00:55:12.340 --> 00:55:12.840 +right? It's a kind of accessibility, + +00:55:17.120 --> 00:55:17.500 +isn't it? Having some work I can give you + +00:55:19.380 --> 00:55:19.880 +that helps you give back to your community + +00:55:21.340 --> 00:55:21.840 +that is at your level, + +00:55:23.300 --> 00:55:23.800 +that fits your time budget, + +00:55:26.960 --> 00:55:27.120 +that is something that you're willing to go + +00:55:28.280 --> 00:55:28.780 +care about because it intersects, + +00:55:31.400 --> 00:55:31.780 +you know, the world you live in in some + +00:55:34.240 --> 00:55:34.540 +practical way and therefore you can make time + +00:55:37.360 --> 00:55:37.860 +for it. We all live in a lot of different + +00:55:40.520 --> 00:55:40.600 +trenches and making them intersect is 1 of + +00:55:42.500 --> 00:55:43.000 +the things Emacs does in a technical way + +00:55:43.820 --> 00:55:44.020 +[Speaker 5]: and + +00:55:47.260 --> 00:55:47.580 +[Speaker 3]: through this conference at least in a very + +00:55:51.100 --> 00:55:51.340 +community way. Okay, and it brings me back + +00:55:52.360 --> 00:55:52.680 +also on the OBS front. + +00:55:54.080 --> 00:55:54.240 +And I think that's what really excited me + +00:55:56.260 --> 00:55:56.580 +too. When I think about the potential that's + +00:55:59.440 --> 00:55:59.940 +out there and getting a bunch of people + +00:56:01.960 --> 00:56:02.080 +looking at the work you've already done with + +00:56:03.960 --> 00:56:04.440 +OBS WebSocket and thinking about, + +00:56:06.660 --> 00:56:06.960 +you know, oh, we want more timers that count + +00:56:09.280 --> 00:56:09.340 +things down and we want each organizer to be + +00:56:10.680 --> 00:56:11.040 +able to have a little palette of them, + +00:56:12.780 --> 00:56:12.940 +some of which are gonna be handed to you by + +00:56:14.620 --> 00:56:14.760 +the conference director and some of which you + +00:56:16.800 --> 00:56:17.240 +can add yourself because they help you and + +00:56:19.600 --> 00:56:20.020 +that's right. And, you know, + +00:56:21.780 --> 00:56:22.120 +have, you know, keeping things really fast + +00:56:24.120 --> 00:56:24.620 +and loose so we can make the artistic + +00:56:26.880 --> 00:56:27.340 +decisions on the fly that make our conference + +00:56:30.340 --> 00:56:30.840 +what it is, but then making, + +00:56:33.480 --> 00:56:33.740 +you know, a simple automated tool chain that + +00:56:36.380 --> 00:56:36.560 +anyone can learn and that we know how to + +00:56:37.700 --> 00:56:38.200 +execute the steps of manually. + +00:56:41.000 --> 00:56:41.280 +That's the actual design pattern that you've + +00:56:42.980 --> 00:56:43.480 +implemented here that's working so well. + +00:56:47.460 --> 00:56:47.580 +So the + +00:56:50.080 --> 00:56:50.540 +[Speaker 4]: 1 thing I wanted to ask about Amin saying, + +00:56:51.600 --> 00:56:52.100 +oh, I've dropped the ball this year. + +00:56:53.600 --> 00:56:53.940 +Amin's, just to be clear with everyone, + +00:56:55.380 --> 00:56:55.520 +Amin's definition of dropping the ball is + +00:56:56.940 --> 00:56:57.360 +securing a sponsorship with the FSF. + +00:56:58.680 --> 00:56:59.180 +So that's dropping the ball for you. + +00:57:02.320 --> 00:57:02.720 +[Speaker 3]: Well attending a weekly meeting, + +00:57:04.480 --> 00:57:04.640 +We take 1 week off a month where we + +00:57:08.400 --> 00:57:08.720 +coordinate infrastructure issues between this + +00:57:13.200 --> 00:57:13.440 +and other FSF supported projects using quote + +00:57:14.320 --> 00:57:14.820 +unquote GNU infrastructure. + +00:57:16.860 --> 00:57:17.360 +That's kind of a, GNU is really an umbrella + +00:57:19.220 --> 00:57:19.720 +term once you get kind of close to it. + +00:57:22.220 --> 00:57:22.400 +You know, it's like GNU is all of the + +00:57:25.020 --> 00:57:25.240 +volunteers helping with this vision we have + +00:57:25.840 --> 00:57:26.340 +of user rights. + +00:57:31.380 --> 00:57:31.560 +[Speaker 4]: 1 last thing I wanted to add about how much + +00:57:32.220 --> 00:57:32.480 +time we spend on this. + +00:57:33.900 --> 00:57:34.400 +It's just the fact that we've experimented + +00:57:36.180 --> 00:57:36.380 +over the 4 years I've been part of this. + +00:57:38.480 --> 00:57:38.760 +You know, the first year we had so many + +00:57:40.720 --> 00:57:40.840 +meetings because we thought this would be the + +00:57:42.640 --> 00:57:42.800 +way to know 1 another and this would be the + +00:57:44.280 --> 00:57:44.780 +way to create qualitative notes. + +00:57:46.520 --> 00:57:46.560 +And we've come back to this. + +00:57:48.180 --> 00:57:48.340 +[Speaker 3]: That is what I saw. I can't help but + +00:57:49.940 --> 00:57:50.440 +interrupt you again. This is all I do. + +00:57:52.080 --> 00:57:52.580 +Leo This is why I keep off the microphone + +00:57:54.060 --> 00:57:54.440 +until the last 20 minutes of the conference + +00:57:56.580 --> 00:57:56.760 +once everybody already wants to hang up Then + +00:57:58.940 --> 00:57:59.080 +I know you'll be honest with me But I have to + +00:58:01.880 --> 00:58:02.240 +say when I looked at that table of data all I + +00:58:05.280 --> 00:58:05.440 +saw was 200 hours of Sasha's life that she + +00:58:06.940 --> 00:58:07.240 +spent talking to the, you know, + +00:58:08.360 --> 00:58:08.680 +all many of us were involved. + +00:58:10.960 --> 00:58:11.320 +It's not just the 4 or 5 of us that, + +00:58:13.160 --> 00:58:13.460 +you know, that have done this last 2 years + +00:58:14.440 --> 00:58:14.940 +convention, right? It's, + +00:58:17.120 --> 00:58:17.260 +you know, there's been many people that have + +00:58:19.340 --> 00:58:19.780 +come in, shared wise thoughts, + +00:58:22.120 --> 00:58:22.420 +helping us form the, I don't know, + +00:58:24.400 --> 00:58:24.620 +ethos or all of the things that we're + +00:58:26.680 --> 00:58:27.180 +carrying forward into 2024. + +00:58:31.460 --> 00:58:31.960 +Sorry, Leo. + +00:58:32.640 --> 00:58:32.880 +[Speaker 1]: No, no, + +00:58:33.560 --> 00:58:33.940 +[Speaker 4]: you're fine, You're fine. + +00:58:35.980 --> 00:58:36.060 +I mean, you pretty much continued with what I + +00:58:37.500 --> 00:58:38.000 +was going to talk about. + +00:58:41.040 --> 00:58:41.540 +So I'm looking at the time and I've already + +00:58:44.640 --> 00:58:44.700 +extended by 5 minutes the amount of time I + +00:58:46.640 --> 00:58:46.800 +was supposed to stay and Flowy is looking at + +00:58:50.320 --> 00:58:50.660 +me with very teary eyes because he's thinking + +00:58:51.900 --> 00:58:52.280 +about the meeting he's going to have at 9am + +00:58:53.440 --> 00:58:53.940 +tomorrow, as will I by the way. + +00:58:54.720 --> 00:58:54.920 +Yeah, don't you have to + +00:58:56.380 --> 00:58:56.760 +[Speaker 3]: be commuting like right now Flowy? + +00:58:58.200 --> 00:58:58.700 +I mean aren't you supposed to be... + +00:59:01.560 --> 00:59:01.840 +I hope you get to sleep before work. + +00:59:04.820 --> 00:59:04.960 +Thank you so much for your awesome work this + +00:59:04.960 --> 00:59:05.460 +year. + +00:59:07.360 --> 00:59:07.680 +[Speaker 6]: I mean, I didn't do so much at the Emojis + +00:59:09.100 --> 00:59:09.600 +Conference, so I'm just here like from + +00:59:13.180 --> 00:59:13.320 +Friday. At first, I was looking at the + +00:59:14.760 --> 00:59:15.060 +website, which talks we're having, + +00:59:17.860 --> 00:59:18.040 +So it's all fine. So maybe next year or the + +00:59:19.740 --> 00:59:19.960 +coming year, I can do a little bit more + +00:59:19.960 --> 00:59:20.460 +privacy. + +00:59:23.260 --> 00:59:23.760 +[Speaker 4]: A little more, like again, + +00:59:25.920 --> 00:59:26.420 +like with Amin, Flowy's definition of doing, + +00:59:30.240 --> 00:59:30.400 +not having done much is hosting 1 of many of + +00:59:34.120 --> 00:59:34.240 +the Dev talks. So you could be kind of + +00:59:35.680 --> 00:59:36.140 +worried about it. All right, + +00:59:38.480 --> 00:59:38.720 +folks, considering the question that we have + +00:59:40.440 --> 00:59:40.640 +right now, we still see people adding + +00:59:42.260 --> 00:59:42.620 +questions, but I think we are all pretty + +00:59:44.960 --> 00:59:45.060 +tired and we need to get on with the rest of + +00:59:46.280 --> 00:59:46.780 +our weekends or nights. + +00:59:49.740 --> 00:59:50.080 +So do I go into parting words now everyone? + +00:59:50.720 --> 00:59:51.220 +Are we okay with this? + +00:59:55.280 --> 00:59:55.680 +I'll take this for a yes. + +00:59:56.780 --> 00:59:57.280 +I'll ask Sasha, yeah? + +01:00:00.780 --> 01:00:01.080 +[Speaker 0]: Oh I think I basically have until the kiddo + +01:00:03.560 --> 01:00:03.760 +yells at me to come for dinner so I can hang + +01:00:04.440 --> 01:00:04.940 +out with people after. + +01:00:09.240 --> 01:00:09.740 +and do the wrapping up. + +01:00:09.920 --> 01:00:10.080 +[Speaker 3]: But I + +01:00:10.080 --> 01:00:10.440 +[Speaker 4]: All right, splendid. Go ahead know, + +01:00:12.100 --> 01:00:12.600 +right, I'll do the wrapping up for the + +01:00:13.860 --> 01:00:14.040 +perhaps the stream. We might leave it up + +01:00:16.360 --> 01:00:16.700 +because there's no impetus for us to close + +01:00:20.100 --> 01:00:20.280 +it. But at least to officially close while + +01:00:22.340 --> 01:00:22.840 +we're still there, EmacsConf 2023, + +01:00:25.480 --> 01:00:25.900 +I will have again to thank everyone, + +01:00:28.200 --> 01:00:28.700 +all the speakers, all my co-organizers for + +01:00:31.020 --> 01:00:31.160 +making this possible. You've seen all the + +01:00:32.120 --> 01:00:32.260 +care that we put into it, + +01:00:34.900 --> 01:00:35.320 +and we are glad every year that all this work + +01:00:37.940 --> 01:00:38.440 +is doing something in terms of community + +01:00:41.420 --> 01:00:41.600 +building, in terms of leading more people to + +01:00:42.880 --> 01:00:43.380 +join us every year as speakers, + +01:00:45.040 --> 01:00:45.540 +or just join us as a user of Emacs. + +01:00:49.940 --> 01:00:50.100 +And it's always a pleasure to organize the + +01:00:51.140 --> 01:00:51.640 +conference, to host it, + +01:00:53.360 --> 01:00:53.620 +and to work with everyone in the room + +01:00:56.840 --> 01:00:57.340 +currently. Corwin and I are constantly joking + +01:00:59.640 --> 01:01:00.140 +when we are backstage making jokes. + +01:01:03.540 --> 01:01:03.840 +I think it's Corwin we said last year during + +01:01:06.620 --> 01:01:06.900 +the closing remarks that there was no other + +01:01:09.000 --> 01:01:09.500 +place they'd rather be than in the backstage. + +01:01:12.800 --> 01:01:12.940 +And for me, even though many things have + +01:01:15.040 --> 01:01:15.360 +changed in my life over the last year, + +01:01:16.240 --> 01:01:16.740 +many good things have happened, + +01:01:19.640 --> 01:01:19.860 +it's good to come back to Emacs Cons as this + +01:01:22.080 --> 01:01:22.580 +milestone and say, oh yeah, + +01:01:23.960 --> 01:01:24.220 +I'm exactly where I want to be, + +01:01:25.320 --> 01:01:25.820 +with the people I want to be with, + +01:01:29.020 --> 01:01:29.220 +and I see myself and I cannot wait to see + +01:01:30.660 --> 01:01:31.080 +myself again in the situation next year. + +01:01:32.080 --> 01:01:32.580 +So thank you so much everyone. + +01:01:34.440 --> 01:01:34.640 +If you want to join us, + +01:01:36.100 --> 01:01:36.180 +ask questions, we'll still be here for a + +01:01:37.360 --> 01:01:37.640 +while. Floey might drop out, + +01:01:39.520 --> 01:01:40.020 +I might drop out, Sasha might drop out, + +01:01:41.600 --> 01:01:41.880 +but we'll be here to answer as many questions + +01:01:43.140 --> 01:01:43.640 +as you want for as long as we can. + +01:01:46.120 --> 01:01:46.280 +Bye bye everyone and let's get started with + +01:01:46.800 --> 01:01:47.300 +the after show now. + +01:01:51.540 --> 01:01:52.040 +[Speaker 0]: Bye Leo, bye Chloe! I'll drop out eventually + +01:01:53.000 --> 01:01:53.500 +when the kiddo yells at me. + +01:01:56.200 --> 01:01:56.440 +[Speaker 3]: I can't tell you how much fun this is, + +01:01:58.260 --> 01:01:58.440 +yeah. The way to remember what I said, + +01:02:00.400 --> 01:02:00.700 +Leo, it's 100% true. Oh man, + +01:02:01.380 --> 01:02:01.640 +turning off your lights, + +01:02:02.880 --> 01:02:03.220 +I'm doing it. I'm doing it too. + +01:02:04.600 --> 01:02:04.900 +Sorry y'all. Oh, yeah, + +01:02:05.380 --> 01:02:05.880 +bye-bye lights + +01:02:10.440 --> 01:02:10.760 +[Speaker 4]: Yeah, that's every year that's how we finish + +01:02:12.340 --> 01:02:12.500 +we just turn off the the big lights that we + +01:02:14.240 --> 01:02:14.440 +have in our faces all the day especially the + +01:02:14.440 --> 01:02:14.940 +hosts + +01:02:19.120 --> 01:02:19.460 +[Speaker 3]: and Tell me if there's too much back chatter + +01:02:22.700 --> 01:02:23.200 +[Speaker 5]: get off my headphones, + +01:02:24.280 --> 01:02:24.720 +too, so I can + +01:02:25.260 --> 01:02:25.760 +[Speaker 3]: when I hear you in the room. + +01:02:28.860 --> 01:02:29.360 +Can I hear you now? Yeah. + +01:02:31.960 --> 01:02:32.460 +Is it feeding back pretty bad? + +01:02:34.480 --> 01:02:34.980 +[Speaker 1]: Hello? there is some echo. + +01:02:37.460 --> 01:02:37.960 +[Speaker 4]: Yeah, there is some echo. + +01:02:41.200 --> 01:02:41.380 +[Speaker 3]: I think Okay. Fine. I can live with my + +01:02:42.160 --> 01:02:42.660 +headset a little longer. + +01:02:44.860 --> 01:02:45.360 +I give 1 ear a break at a time. + +01:02:47.140 --> 01:02:47.640 +[Speaker 1]: Thanks for your sacrifice. + +01:02:50.060 --> 01:02:50.560 +[Speaker 3]: Oh, well, you know, it's a small, + +01:02:53.080 --> 01:02:53.360 +small, small price to pay to get to smooth + +01:02:56.600 --> 01:02:56.820 +with y'all. Yeah, I was just looking at that + +01:02:58.580 --> 01:02:58.820 +chart and I was thinking about all of those + +01:03:01.360 --> 01:03:01.560 +meetings that we had like 18 months we were + +01:03:05.900 --> 01:03:06.400 +just on this death march to organize this and + +01:03:09.240 --> 01:03:09.520 +it's just such an amazing accomplishment that + +01:03:11.960 --> 01:03:12.140 +you you have here Sasha like I'm sorry to + +01:03:14.540 --> 01:03:14.760 +pick on you personally but the work that you + +01:03:16.680 --> 01:03:17.180 +put in keep being able to keep it the whole + +01:03:18.760 --> 01:03:19.260 +technical project in your mind, + +01:03:21.580 --> 01:03:21.760 +all the way down to presenting it at this + +01:03:24.100 --> 01:03:24.480 +year's conference and like kind of spoon + +01:03:26.380 --> 01:03:26.520 +feeding it to people that want to run off in + +01:03:27.900 --> 01:03:28.260 +their own damn direction and then handing + +01:03:31.480 --> 01:03:31.880 +them an org is the 1 that people keep bugging + +01:03:33.440 --> 01:03:33.940 +us about. So if you're looking for a project, + +01:03:37.340 --> 01:03:37.840 +here it is. Just really well done. + +01:03:43.540 --> 01:03:43.980 +I no longer feel like we wasted a lot of time + +01:03:46.460 --> 01:03:46.680 +there. I mean, you remember I enjoyed so much + +01:03:48.600 --> 01:03:49.100 +all of our check ins and all of that stuff. + +01:03:51.420 --> 01:03:51.920 +But we had so many ideas, + +01:03:53.480 --> 01:03:53.980 +you can imagine that I wondered, + +01:03:56.980 --> 01:03:57.160 +you know, I wondered if we should have had + +01:03:58.520 --> 01:03:58.700 +more focused meetings and all that. + +01:04:01.100 --> 01:04:01.360 +And I was glad when we stopped having like + +01:04:04.240 --> 01:04:04.540 +weekly meetings, because you know what I mean + +01:04:06.980 --> 01:04:07.120 +To keep this much power in the room once a + +01:04:08.160 --> 01:04:08.660 +week, it feels creepy. + +01:04:10.560 --> 01:04:11.060 +This much intellectual power. + +01:04:18.525 --> 01:04:18.820 +Anyway, that's it. I think that's it for me. + +01:04:19.600 --> 01:04:19.760 +[Speaker 1]: Yeah, and I'll say, I mean, + +01:04:22.280 --> 01:04:22.540 +I can't obviously speak for Sash or anyone + +01:04:24.840 --> 01:04:24.940 +else. Yeah, the regular meetings were a + +01:04:26.980 --> 01:04:27.180 +little bit intense than we had the year + +01:04:29.540 --> 01:04:29.680 +before, but I'm kind of also super glad that + +01:04:31.840 --> 01:04:32.040 +we did do them. And, you know, + +01:04:34.840 --> 01:04:34.960 +in a way, it did help us sort of connect and + +01:04:38.180 --> 01:04:38.360 +get to know each other much more regularly or + +01:04:41.200 --> 01:04:41.440 +much more which is great and I see thumbs up + +01:04:44.900 --> 01:04:45.060 +from Leo and Corwin so yeah happy we did + +01:04:49.080 --> 01:04:49.280 +them. Might want to have some kind of + +01:04:51.820 --> 01:04:52.040 +actually irregular ones every once in a while + +01:04:53.400 --> 01:04:53.860 +if we have to decide on something. + +01:04:55.240 --> 01:04:55.520 +But if like this year, + +01:04:57.400 --> 01:04:57.600 +everything can be worked out pretty much ad + +01:04:58.780 --> 01:04:59.020 +hoc, whenever needs be, + +01:05:00.480 --> 01:05:00.980 +like over asynchronous communications. + +01:05:03.640 --> 01:05:04.140 +I see Sasha nodding very excitedly. + +01:05:07.820 --> 01:05:08.320 +This also works. So yeah. + +01:05:10.920 --> 01:05:11.420 +And I also see some questions coming in here + +01:05:14.580 --> 01:05:15.040 +in BBB. If other folks want to join, + +01:05:16.280 --> 01:05:16.780 +please feel free to do that as well. + +01:05:18.800 --> 01:05:19.300 +Yeah, I don't think we have an issue tracker + +01:05:22.440 --> 01:05:22.860 +right now, but our whole website is a wiki. + +01:05:24.780 --> 01:05:25.280 +So if you wanna like create a new page or + +01:05:26.180 --> 01:05:26.480 +there might be a page, + +01:05:28.640 --> 01:05:28.780 +I don't know. You can of course go in and + +01:05:29.760 --> 01:05:30.260 +edit it to your heart's content. + +01:05:36.540 --> 01:05:37.040 +[Speaker 3]: Yeah. Hilarious, I couldn't, + +01:05:39.440 --> 01:05:39.600 +like I almost managed to type that as fast as + +01:05:40.760 --> 01:05:41.260 +you could say it, you know. + +01:05:43.840 --> 01:05:43.940 +That's fine. I get the same answer in the + +01:05:46.620 --> 01:05:46.800 +chat. Yep. Our website's a wiki and we + +01:05:48.060 --> 01:05:48.260 +definitely use ideas here. + +01:05:50.280 --> 01:05:50.540 +If you want to implement them or you know + +01:05:53.100 --> 01:05:53.440 +document them enough that even Corwin can + +01:05:55.240 --> 01:05:55.740 +code it then you know I'll do that. + +01:05:58.220 --> 01:05:58.380 +[Speaker 0]: Also I'll go through all the etherpads at + +01:06:00.240 --> 01:06:00.480 +some point to harvest them and I think I have + +01:06:02.240 --> 01:06:02.480 +yeah I have an Emacs list function that does + +01:06:05.020 --> 01:06:05.280 +this for me. So that I can go through that + +01:06:06.820 --> 01:06:07.280 +thing and include that in our organizers + +01:06:09.060 --> 01:06:09.280 +notebooks, lessons learned and ideas for next + +01:06:09.280 --> 01:06:09.780 +year. + +01:06:11.120 --> 01:06:11.620 +[Speaker 3]: Yeah. + +01:06:15.010 --> 01:06:15.060 +[Speaker 4]: Yeah, because something that you know, + +01:06:16.280 --> 01:06:16.720 +We were talking about the different models + +01:06:18.680 --> 01:06:18.840 +between having many, many meetings and how it + +01:06:20.280 --> 01:06:20.760 +paid off eventually. The thing is, + +01:06:22.160 --> 01:06:22.660 +this year we had no meetings. + +01:06:27.440 --> 01:06:27.660 +We met Friday morning on Mumble and we were + +01:06:29.540 --> 01:06:29.720 +ready to go. We did chat things up a little + +01:06:30.180 --> 01:06:30.660 +bit on ISE, obviously, + +01:06:31.780 --> 01:06:32.120 +but no meeting this year. + +01:06:33.420 --> 01:06:33.640 +So I'm tempted to say that, + +01:06:34.800 --> 01:06:35.080 +yes, we could have off-hand meetings, + +01:06:36.360 --> 01:06:36.480 +but I think it's mostly because we want to + +01:06:38.240 --> 01:06:38.680 +see 1 another, not because we need + +01:06:40.680 --> 01:06:41.160 +necessarily for those meetings to prepare + +01:06:45.480 --> 01:06:45.660 +Emacs cons. But what I wanted to say as well + +01:06:49.740 --> 01:06:50.200 +is that I think it's a testament to the bets + +01:06:52.940 --> 01:06:53.140 +that Sasha took last year to automatize a lot + +01:06:54.520 --> 01:06:54.720 +of things. I mean, we'd already been + +01:06:55.760 --> 01:06:56.120 +automatizing a lot of stuff, + +01:06:58.260 --> 01:06:58.760 +like writing scripts for every single thing + +01:07:02.220 --> 01:07:02.600 +in ESPire, but last year we made a big bet to + +01:07:04.600 --> 01:07:04.920 +say, what if we had OBS in the cloud? + +01:07:06.580 --> 01:07:06.760 +What if we had a streaming platform that was + +01:07:08.680 --> 01:07:08.860 +running on a machine? And this is what + +01:07:11.660 --> 01:07:12.100 +allowed us to very smoothly have 2 tracks, + +01:07:13.380 --> 01:07:13.880 +the general track and the dev track. + +01:07:16.640 --> 01:07:16.980 +And I think the beauty of this system is + +01:07:19.680 --> 01:07:19.840 +that, obviously, because we get more and more + +01:07:20.720 --> 01:07:21.220 +speakers submitting talks, + +01:07:22.800 --> 01:07:23.100 +we are starting to think maybe we actually + +01:07:26.480 --> 01:07:26.740 +need a third track or something and no 1 is + +01:07:28.580 --> 01:07:29.080 +stressed in the room when Sasha says this. + +01:07:31.100 --> 01:07:31.360 +You know, there's not the reaction that's + +01:07:32.320 --> 01:07:32.540 +like, oh no it's gonna be tough, + +01:07:33.200 --> 01:07:33.620 +we're gonna need more hosts, + +01:07:34.480 --> 01:07:34.980 +organizers, it's just a calm... + +01:07:37.580 --> 01:07:38.040 +[Speaker 3]: Now, point of order, Now Flowy is stressed + +01:07:39.000 --> 01:07:39.500 +when Sasha says this. + +01:07:44.640 --> 01:07:45.060 +[Speaker 4]: That was just a- + +01:07:46.640 --> 01:07:46.800 +[Speaker 0]: I didn't know, Colin, we could put you in the + +01:07:47.720 --> 01:07:47.880 +spot next year. You'd be like, + +01:07:49.200 --> 01:07:49.400 +you know, hey, Colin, what do you feel about + +01:07:49.400 --> 01:07:49.900 +hosting? + +01:07:53.300 --> 01:07:53.800 +[Speaker 3]: You know, I'm happy to do it. + +01:07:56.960 --> 01:07:57.260 +And I feel, I mean, just to jump in there and + +01:07:59.540 --> 01:08:00.040 +say, yes, exactly. No, + +01:08:01.400 --> 01:08:01.560 +there's no concern on the part of the + +01:08:03.220 --> 01:08:03.720 +organizer committee that we could expand + +01:08:06.000 --> 01:08:06.180 +this. If you said we needed to expand to 4 + +01:08:08.400 --> 01:08:08.900 +tracks, I think we would gulp and consider + +01:08:10.080 --> 01:08:10.360 +it, you know, from there, + +01:08:11.040 --> 01:08:11.540 +it gets a little crazy, + +01:08:13.980 --> 01:08:14.260 +but strictly because there aren't that many + +01:08:16.399 --> 01:08:16.899 +people that we know want to commit. + +01:08:18.120 --> 01:08:18.399 +What did we see there? + +01:08:20.600 --> 01:08:20.939 +80 hours of potential work that, + +01:08:23.000 --> 01:08:23.200 +you know, that could go into organizing next + +01:08:25.439 --> 01:08:25.580 +year's conference if you find that it's a + +01:08:26.979 --> 01:08:27.399 +rabbit hole for you and being a streamer + +01:08:28.979 --> 01:08:29.140 +means you want to read every email and + +01:08:31.500 --> 01:08:31.819 +respond to every, as Sasha has done this last + +01:08:34.439 --> 01:08:34.819 +year, right? So when I look at her numbers + +01:08:35.359 --> 01:08:35.859 +for total participation, + +01:08:38.000 --> 01:08:38.500 +that's really a high watermark. + +01:08:43.439 --> 01:08:43.939 +Sasha really took care of this convention, + +01:08:46.680 --> 01:08:47.180 +you know, like a producer might. + +01:08:52.240 --> 01:08:52.660 +And the fact that what used to take 200 hours + +01:08:56.000 --> 01:08:56.260 +before, I mean, I can't harp enough on the + +01:08:57.720 --> 01:08:57.979 +story that that's telling you, + +01:09:00.399 --> 01:09:00.800 +right? And as I think about it with a project + +01:09:01.800 --> 01:09:02.080 +manager hat on, right? + +01:09:02.960 --> 01:09:03.160 +I'm saying, okay, well, + +01:09:07.080 --> 01:09:07.580 +that's, you know, that work can potentially + +01:09:09.800 --> 01:09:09.960 +be amplified to many thousands of hours of + +01:09:11.800 --> 01:09:11.920 +work, considering the automation and the + +01:09:13.279 --> 01:09:13.439 +potential for bringing people in. + +01:09:14.540 --> 01:09:14.800 +So if you thought about it as a money-making + +01:09:16.319 --> 01:09:16.520 +thing, If we were trying to make money by + +01:09:16.960 --> 01:09:17.460 +having these conventions, + +01:09:19.040 --> 01:09:19.540 +you would think we have a very profitable + +01:09:23.760 --> 01:09:24.000 +business here because we can amplify the + +01:09:25.640 --> 01:09:25.939 +talent that walks in the door really + +01:09:28.140 --> 01:09:28.640 +effectively, if that makes sense, + +01:09:29.800 --> 01:09:30.300 +through the tools and the training. + +01:09:33.800 --> 01:09:33.960 +[Speaker 0]: So we should clarify that if anyone wants to + +01:09:35.920 --> 01:09:36.180 +volunteer as a host or just check in, + +01:09:38.300 --> 01:09:38.380 +let's just talk host. It's really just a + +01:09:40.080 --> 01:09:40.580 +matter of showing up, making sure your BVB + +01:09:42.160 --> 01:09:42.439 +works so you can talk. + +01:09:43.260 --> 01:09:43.620 +If you want to share your webcam, + +01:09:44.899 --> 01:09:45.040 +you can. You can skip it if you don't want + +01:09:46.359 --> 01:09:46.859 +to. You can share the screen with the pad. + +01:09:48.640 --> 01:09:48.800 +And then you just sit there and you chat with + +01:09:51.260 --> 01:09:51.399 +a speaker and you read the questions off the + +01:09:53.240 --> 01:09:53.399 +pad in case they don't read the questions off + +01:09:56.740 --> 01:09:57.240 +themselves. So it can be a very low effort, + +01:09:59.440 --> 01:09:59.940 +low stress way to get into it and just there + +01:10:02.840 --> 01:10:03.000 +kind of helping the speaker have somebody to + +01:10:05.540 --> 01:10:05.820 +talk to. It doesn't have to take 80 hours. + +01:10:08.220 --> 01:10:08.720 +It can take 2 hours and that's cool. + +01:10:10.680 --> 01:10:10.840 +[Speaker 3]: And the same, and that's just like the + +01:10:11.820 --> 01:10:12.040 +transcription task. Yeah, + +01:10:13.700 --> 01:10:13.980 +sorry, I probably missed the lead there, + +01:10:16.080 --> 01:10:16.360 +right? Every individual part of this is + +01:10:19.160 --> 01:10:19.660 +really easy. So it's an open-ended commitment + +01:10:22.360 --> 01:10:22.860 +to come and kind of meet a part of the + +01:10:24.840 --> 01:10:25.340 +committee, a part of the community, + +01:10:27.040 --> 01:10:27.540 +right? To come in and say, + +01:10:29.440 --> 01:10:29.940 +maybe you're really excited about org, + +01:10:33.420 --> 01:10:33.600 +you could review talks and just review the + +01:10:35.420 --> 01:10:35.660 +org ones. There's not an obligation that says + +01:10:37.440 --> 01:10:37.800 +you're going to look at every talk that's + +01:10:40.520 --> 01:10:40.640 +submitted, right? Share your thoughts on the + +01:10:42.500 --> 01:10:42.660 +talks that you have a chance to review the + +01:10:44.440 --> 01:10:44.900 +proposals. That's the submissions review + +01:10:48.040 --> 01:10:48.540 +part, right? So there's a way to help with + +01:10:51.820 --> 01:10:52.120 +almost any appetite for I'd like a little + +01:10:54.520 --> 01:10:54.780 +extra work in the Emacs department here like + +01:10:56.480 --> 01:10:56.640 +if you want to feel like you're part of the + +01:10:59.600 --> 01:10:59.800 +team this this team is really easy to get + +01:11:02.440 --> 01:11:02.710 +[Speaker 7]: think that's + +01:11:03.680 --> 01:11:03.840 +[Speaker 3]: involved with. I I mean, + +01:11:04.280 --> 01:11:04.440 +please. Go ahead, + +01:11:06.820 --> 01:11:07.320 +[Speaker 4]: No, no, please. I've talked enough. + +01:11:08.940 --> 01:11:09.100 +[Speaker 1]: sort of the... Leo. Well, + +01:11:10.380 --> 01:11:10.660 +I don't get tired of hearing you talk, + +01:11:13.000 --> 01:11:13.500 +but yeah, I was going to say, + +01:11:16.920 --> 01:11:17.320 +Yeah, I feel like that's the general message + +01:11:19.600 --> 01:11:19.920 +here is that we're all just a bunch of people + +01:11:21.360 --> 01:11:21.860 +who are interested in this. + +01:11:24.060 --> 01:11:24.560 +And of course, being humans, + +01:11:26.120 --> 01:11:26.280 +each of us have different kinds of lives and + +01:11:27.560 --> 01:11:27.720 +different kinds of availabilities and + +01:11:28.260 --> 01:11:28.760 +different kinds of interests. + +01:11:29.860 --> 01:11:30.360 +And there is something for everybody, + +01:11:34.300 --> 01:11:34.540 +both in terms of the kinds of tasks that you + +01:11:37.480 --> 01:11:37.760 +need doing, but also in terms of the amount + +01:11:39.980 --> 01:11:40.480 +of time that you want or are able to put in. + +01:11:43.780 --> 01:11:44.080 +So yes, if you do think this is something + +01:11:46.240 --> 01:11:46.700 +that you might be interested in helping with + +01:11:47.980 --> 01:11:48.400 +for future additions and such, + +01:11:51.140 --> 01:11:51.340 +or even some of the post-conference work that + +01:11:52.300 --> 01:11:52.800 +needs doing after this year. + +01:11:55.800 --> 01:11:55.960 +Please reach out there's something for + +01:11:57.440 --> 01:11:57.940 +everybody and I would love to have + +01:12:03.020 --> 01:12:03.360 +[Speaker 6]: you. I can confirm there was an easy access + +01:12:06.260 --> 01:12:06.500 +so I came here last year just doing some + +01:12:08.600 --> 01:12:09.100 +checking in and the process of getting, + +01:12:10.840 --> 01:12:11.120 +it's called a trained in was really, + +01:12:12.520 --> 01:12:12.620 +really short. There was a lot of + +01:12:13.700 --> 01:12:14.200 +documentation how to do something. + +01:12:17.720 --> 01:12:17.920 +I mean, there's a pad that gets sent and what + +01:12:20.540 --> 01:12:20.660 +to do, when to do, and what to ask is like + +01:12:22.160 --> 01:12:22.660 +really incredible. So thank you for that. + +01:12:26.320 --> 01:12:26.820 +Just come here, write an email, + +01:12:28.860 --> 01:12:29.200 +join us. It's really, really cool. + +01:12:30.920 --> 01:12:31.420 +And it's a great experience to be honest. + +01:12:35.680 --> 01:12:35.900 +[Speaker 4]: Thank you. And while Sasha is speaking about + +01:12:36.820 --> 01:12:37.280 +the update of the wiki, + +01:12:38.320 --> 01:12:38.820 +oh Coleman did you want to say something? + +01:12:41.140 --> 01:12:41.600 +[Speaker 3]: No I was just I was just gonna embarrass + +01:12:44.240 --> 01:12:44.740 +Floey Coder further but you go ahead. + +01:12:51.000 --> 01:12:51.200 +I was just gonna say I think you're pretty + +01:12:52.420 --> 01:12:52.900 +quick, you're pretty quick, + +01:12:55.320 --> 01:12:55.820 +you took to it really quickly or you show + +01:12:57.240 --> 01:12:57.740 +just kind of a reflexive calm. + +01:12:59.340 --> 01:12:59.720 +Like you know how to not talk over people. + +01:13:01.200 --> 01:13:01.700 +You're already better at it than I am. + +01:13:06.500 --> 01:13:07.000 +Now, you know, I think, + +01:13:09.000 --> 01:13:09.280 +yeah, I hope you're enjoying the new stuff + +01:13:10.600 --> 01:13:10.720 +that you're starting to take on because you + +01:13:12.040 --> 01:13:12.540 +seem to be doing great with it. + +01:13:14.220 --> 01:13:14.500 +And yeah, I hope you're not sitting there + +01:13:15.720 --> 01:13:16.080 +thinking that you're taking, + +01:13:17.960 --> 01:13:18.340 +you know, that you're coming on, + +01:13:19.700 --> 01:13:19.920 +that you're not taking on enough + +01:13:21.420 --> 01:13:21.680 +responsibility or anything like that, + +01:13:23.100 --> 01:13:23.600 +or I don't know, maybe. + +01:13:26.040 --> 01:13:26.240 +I picked up like a little undercurrent of + +01:13:28.100 --> 01:13:28.380 +like, I don't do that much, + +01:13:31.440 --> 01:13:31.940 +and I hope you don't feel that way because I + +01:13:33.719 --> 01:13:34.219 +just enjoyed really having your help the last + +01:13:38.680 --> 01:13:39.180 +couple of years. Thank you very much. + +01:13:47.640 --> 01:13:47.720 +[Speaker 4]: Yeah, that's how they get you, + +01:13:48.560 --> 01:13:48.680 +you know, they just tell you, + +01:13:49.340 --> 01:13:49.840 +oh, could you do check-ins? + +01:13:51.820 --> 01:13:52.180 +Like I showed up for 4 years ago saying, + +01:13:54.660 --> 01:13:55.080 +oh, I'd like to help and look at me now. + +01:13:56.780 --> 01:13:57.040 +I think I did I host on the first year? + +01:13:57.800 --> 01:13:58.300 +I'm pretty sure I did. + +01:14:00.020 --> 01:14:00.420 +Like it took 2 months basically of onboarding + +01:14:02.960 --> 01:14:03.160 +to convince me to do some of the hosting and + +01:14:06.820 --> 01:14:07.000 +back then oh it was so tough for us to do the + +01:14:08.440 --> 01:14:08.680 +hosting because we didn't have all the fancy + +01:14:10.320 --> 01:14:10.680 +setup we have this year and we were + +01:14:13.680 --> 01:14:14.180 +struggling with OBS with bid rates with + +01:14:18.160 --> 01:14:18.340 +sharing scenes I'm glad we are where we are + +01:14:20.460 --> 01:14:20.760 +today, where I don't have to worry as much + +01:14:21.880 --> 01:14:22.120 +about this. But it's also nice, + +01:14:24.440 --> 01:14:24.580 +it's also 1 thing, we do have a culture of + +01:14:25.760 --> 01:14:26.260 +documentation as Sasha exemplified, + +01:14:28.140 --> 01:14:28.640 +and like Flo mentioned, + +01:14:29.540 --> 01:14:29.820 +documentation on the roles. + +01:14:33.060 --> 01:14:33.560 +Yes, We did do this to help people join us. + +01:14:39.360 --> 01:14:39.840 +But really, I'm the host of General, + +01:14:41.660 --> 01:14:41.840 +but it could be just anyone else because we + +01:14:43.780 --> 01:14:44.020 +have so much documentation on how to do + +01:14:46.560 --> 01:14:46.780 +things. Obviously, when a co-organizer is + +01:14:48.740 --> 01:14:48.900 +doing a role, we tend to have an eye on how + +01:14:49.740 --> 01:14:50.160 +the infrastructure is going. + +01:14:51.820 --> 01:14:52.320 +But really, if you want to join us, + +01:14:54.720 --> 01:14:54.940 +we will make sure that the jobs that you + +01:14:57.240 --> 01:14:57.500 +have, first, you like them and it's something + +01:14:59.440 --> 01:14:59.640 +that interests you, and we will also make + +01:15:04.180 --> 01:15:04.400 +sure that on our end, everything goes well + +01:15:06.140 --> 01:15:06.640 +for you. Like we'll be monitoring the streams + +01:15:08.540 --> 01:15:09.040 +and every time we have a new person join us, + +01:15:13.500 --> 01:15:14.000 +it is as much energy and mental availability + +01:15:17.780 --> 01:15:18.220 +to invest into, oh, maybe we could do this. + +01:15:19.800 --> 01:15:19.940 +Oh, 0, we have a fire going out because the + +01:15:21.320 --> 01:15:21.820 +speaker hasn't checked in yet. + +01:15:24.060 --> 01:15:24.560 +So it's all about sharing expertise, + +01:15:27.180 --> 01:15:27.260 +it's all about making people level up in + +01:15:28.520 --> 01:15:29.020 +terms of skills that are really useful. + +01:15:34.120 --> 01:15:34.280 +I will attribute a lot of my success in + +01:15:35.920 --> 01:15:36.120 +public speaking to the work I do with + +01:15:38.620 --> 01:15:39.120 +EmacsConf, and I'm sure plenty of people + +01:15:43.420 --> 01:15:43.620 +would gain from joining us and learning these + +01:15:47.440 --> 01:15:47.940 +skills. All right, It's about 30 minutes past + +01:15:49.740 --> 01:15:49.920 +the official time. Do we want to go a little + +01:15:51.180 --> 01:15:51.680 +longer? Are we still available to go? + +01:15:55.180 --> 01:15:55.680 +All right, well, let's keep going. + +01:16:00.443 --> 01:16:00.486 +I don't see any more people joining us on the + +01:16:00.660 --> 01:16:00.703 +[Speaker 1]: We have Bob, + +01:16:01.240 --> 01:16:01.720 +[Speaker 4]: Blue Button. who was 1 of the speakers today + +01:16:03.940 --> 01:16:04.200 +in the room. Bob, do you want to maybe unmute + +01:16:05.400 --> 01:16:05.900 +yourself and ask us some questions? + +01:16:08.420 --> 01:16:08.720 +Or just thank us. I mean, + +01:16:09.480 --> 01:16:09.840 +I'm just begging for something. + +01:16:10.920 --> 01:16:11.420 +But I know you've been very helpful. + +01:16:15.340 --> 01:16:15.720 +[Speaker 5]: Yes. How are you? No, I've really had fun. + +01:16:18.340 --> 01:16:18.600 +No, I'm exhausted. I'm exhausted for you, + +01:16:22.800 --> 01:16:23.300 +I think. So I learned something. + +01:16:25.040 --> 01:16:25.460 +Everybody wants to record their videos, + +01:16:26.460 --> 01:16:26.940 +which of course, is great, + +01:16:28.380 --> 01:16:28.480 +and then you have the subtitles and + +01:16:31.560 --> 01:16:32.040 +everything. But I saved a lot of time by + +01:16:35.600 --> 01:16:35.740 +doing it live this year and not going in and + +01:16:38.040 --> 01:16:38.200 +tweaking and doing all the editing and + +01:16:39.440 --> 01:16:39.860 +spending all the time that we do. + +01:16:42.480 --> 01:16:42.720 +And it was kind of fun to do it that way too. + +01:16:44.900 --> 01:16:45.400 +So just a little note there. + +01:16:48.340 --> 01:16:48.640 +But I look forward to seeing 1 of my talks + +01:16:53.760 --> 01:16:53.940 +subtitled someday. So no, + +01:16:55.240 --> 01:16:55.740 +I love what you do. It's fun. + +01:16:57.660 --> 01:16:57.900 +I've only seen part of Sasha's talk, + +01:17:00.660 --> 01:17:01.000 +so I'll go and review that about how you're + +01:17:03.840 --> 01:17:04.340 +automating all this. You know, + +01:17:06.560 --> 01:17:06.680 +it's a little sad for me personally that of + +01:17:09.080 --> 01:17:09.580 +course, Org gets all the attention, + +01:17:14.060 --> 01:17:14.340 +but you know, we're exposing hyperbole more + +01:17:16.820 --> 01:17:17.240 +now and There's definitely a growing interest + +01:17:18.800 --> 01:17:19.020 +on Reddit and you know, + +01:17:20.140 --> 01:17:20.640 +I think it's kind of like EmacsConf. + +01:17:23.680 --> 01:17:23.900 +Give it a few years. We went away for a long + +01:17:24.840 --> 01:17:25.340 +time and then we came back. + +01:17:30.420 --> 01:17:30.880 +We'll start to see it permeate the Emacs + +01:17:33.160 --> 01:17:33.660 +first. But I was thinking that, + +01:17:36.720 --> 01:17:36.960 +you know, I think people who like Emacs and + +01:17:38.340 --> 01:17:38.840 +stuff, they read things online, + +01:17:40.920 --> 01:17:41.420 +they come to this conference, + +01:17:43.620 --> 01:17:43.940 +but we're always hearing about, + +01:17:44.620 --> 01:17:45.120 +well, the next generation. + +01:17:47.260 --> 01:17:47.500 +We have to deal with that. + +01:17:50.000 --> 01:17:50.160 +And I think a lot of people get exposed to + +01:17:52.900 --> 01:17:53.120 +Emacs in college. Now a professor turns them + +01:17:55.080 --> 01:17:55.460 +on to it and makes them use it, + +01:17:57.100 --> 01:17:57.600 +and then they go out into the real world, + +01:17:59.720 --> 01:18:00.220 +and there's no encouragement anymore, + +01:18:01.460 --> 01:18:01.960 +and they just drop it. + +01:18:05.600 --> 01:18:05.980 +And with all of what you're putting together + +01:18:09.280 --> 01:18:09.720 +here, it seems like if there was some reach + +01:18:14.120 --> 01:18:14.620 +out to universities and college students, + +01:18:18.600 --> 01:18:19.100 +You know, we might get a whole new big crowd + +01:18:22.360 --> 01:18:22.580 +of people coming in. You know, + +01:18:25.200 --> 01:18:25.320 +just as I think OREG has really attracted a + +01:18:26.840 --> 01:18:27.340 +lot of people in the sciences, + +01:18:30.060 --> 01:18:30.440 +since that's what it was originally developed + +01:18:32.500 --> 01:18:32.860 +for. So just a thought, + +01:18:35.740 --> 01:18:35.900 +you know, maybe if you get any volunteers who + +01:18:38.440 --> 01:18:38.940 +can help in the reach out or just, + +01:18:40.320 --> 01:18:40.560 +you know, sending things around to + +01:18:43.780 --> 01:18:44.020 +universities that might really extend who + +01:18:45.060 --> 01:18:45.560 +gets exposed to this stuff. + +01:18:49.240 --> 01:18:49.480 +[Speaker 1]: Yeah, I think that's a great and very + +01:18:51.960 --> 01:18:52.020 +interesting idea. And it sort of touches on a + +01:18:52.600 --> 01:18:53.000 +couple of different things. + +01:18:53.640 --> 01:18:54.140 +Sort of like you mentioned, + +01:18:56.180 --> 01:18:56.400 +well, with org, it sort of really drew into + +01:19:00.060 --> 01:19:00.560 +sciences, folks. It would be interesting to + +01:19:03.280 --> 01:19:03.780 +see other parts of Emacs doing that for other + +01:19:05.740 --> 01:19:06.240 +kinds of communities, but also specifically, + +01:19:08.920 --> 01:19:09.420 +I guess, for colleges and universities. + +01:19:14.220 --> 01:19:14.680 +Yeah, it would be cool if we had local groups + +01:19:17.140 --> 01:19:17.300 +or local meetups, because so far right now, + +01:19:20.140 --> 01:19:20.420 +I think the most common ones are like by city + +01:19:22.280 --> 01:19:22.440 +like for example a Toronto Emacs meetup or + +01:19:25.320 --> 01:19:25.760 +something like that yeah if you could maybe + +01:19:28.820 --> 01:19:29.320 +encourage or help foster a university level + +01:19:32.200 --> 01:19:32.520 +type of thing you know University of blah + +01:19:35.360 --> 01:19:35.860 +blah Emacs group or something like that and + +01:19:39.860 --> 01:19:40.080 +you know seeing what their needs would be or + +01:19:42.860 --> 01:19:43.360 +trying to think also what features of Emacs + +01:19:46.260 --> 01:19:46.560 +would be very useful in an academic slash + +01:19:48.680 --> 01:19:48.920 +educational setting. Yeah, + +01:19:50.460 --> 01:19:50.840 +lots of food for thought there. + +01:19:52.120 --> 01:19:52.620 +So thank you for mentioning this. + +01:20:02.420 --> 01:20:02.920 +[Speaker 5]: Sure. And I guess, yeah, + +01:20:04.400 --> 01:20:04.900 +OBS is coming up here. + +01:20:06.820 --> 01:20:07.040 +I worked with that a bit, + +01:20:08.920 --> 01:20:09.240 +yes, last year. You know, + +01:20:12.040 --> 01:20:12.540 +another powerful piece of software with a + +01:20:15.240 --> 01:20:15.740 +sort of, I think, a weak user interface, + +01:20:20.080 --> 01:20:20.540 +you know, for the newbies coming along on it. + +01:20:23.200 --> 01:20:23.700 +And maybe, you know, if there's, + +01:20:25.920 --> 01:20:26.420 +if that's kind of what people use, + +01:20:29.540 --> 01:20:29.700 +figuring out or putting some information in + +01:20:32.740 --> 01:20:33.240 +the wiki about how to do that, + +01:20:34.900 --> 01:20:35.400 +you know, work with it or... + +01:20:36.300 --> 01:20:36.800 +[Speaker 4]: Oh, good idea. + +01:20:43.140 --> 01:20:43.340 +[Speaker 3]: I can comment. It is definitely the + +01:20:46.420 --> 01:20:46.920 +preeminent streamer software out there, + +01:20:49.120 --> 01:20:49.620 +well beyond the free software community. + +01:20:54.120 --> 01:20:54.500 +It's used by most streamers on Twitch and + +01:20:59.680 --> 01:20:59.960 +other like commercial for-profit things but + +01:21:01.780 --> 01:21:02.220 +of course those companies are making money + +01:21:04.480 --> 01:21:04.700 +off people trying to give money to the + +01:21:07.200 --> 01:21:07.440 +streamers. Those streamers aren't getting any + +01:21:10.160 --> 01:21:10.660 +software help. So actually most of them are + +01:21:13.900 --> 01:21:14.400 +dependent for their income on free software + +01:21:18.680 --> 01:21:18.900 +like OBS and OBS in specific or by some kind + +01:21:23.100 --> 01:21:23.600 +of forked brand name is the primary tool. + +01:21:28.660 --> 01:21:28.820 +[Speaker 4]: If I'm not mistaken I believe Stefan has + +01:21:29.860 --> 01:21:30.360 +joined us right now in the room. + +01:21:33.240 --> 01:21:33.420 +I'm putting you on the spot, + +01:21:34.480 --> 01:21:34.760 +if you want to stay muted you can. + +01:21:35.640 --> 01:21:36.140 +Oh, you have unmuted yourself. + +01:21:38.400 --> 01:21:38.900 +[Speaker 7]: I managed to click the unmute button. + +01:21:41.180 --> 01:21:41.680 +Yes, I'm here. How are you guys doing? + +01:21:43.840 --> 01:21:44.200 +[Speaker 4]: Doing good, surviving here. + +01:21:44.200 --> 01:21:44.700 +[Speaker 1]: Congratulations. + +01:21:45.480 --> 01:21:45.980 +[Speaker 4]: Late in your time. + +01:21:50.040 --> 01:21:50.220 +[Speaker 7]: Really amazing work organizing the + +01:21:51.960 --> 01:21:52.460 +conference. I really have to congratulate + +01:21:56.120 --> 01:21:56.480 +everyone. So I just hopped on here to sort of + +01:21:58.140 --> 01:21:58.640 +say that I'm extremely impressed. + +01:22:04.240 --> 01:22:04.540 +And I think this is an example to follow for + +01:22:07.040 --> 01:22:07.440 +other conferences and for Emacs in general. + +01:22:09.400 --> 01:22:09.900 +I think we need more of this community-type + +01:22:12.940 --> 01:22:13.380 +organizing and just getting people interested + +01:22:15.960 --> 01:22:16.240 +and involved on all kinds of levels can only + +01:22:20.200 --> 01:22:20.340 +help Emacs. Because we are in this for the + +01:22:22.540 --> 01:22:23.040 +long haul. That's it. + +01:22:25.280 --> 01:22:25.780 +[Speaker 3]: Oh, what a great point. + +01:22:28.500 --> 01:22:28.740 +If I can comment, that's 1 of the things that + +01:22:30.720 --> 01:22:31.020 +drew me to trying to contribute to free + +01:22:32.580 --> 01:22:32.960 +software when I was a kid, + +01:22:35.580 --> 01:22:36.080 +like we're talking now 30 plus years ago, + +01:22:38.360 --> 01:22:38.860 +the idea like, and I recognized it from + +01:22:42.180 --> 01:22:42.620 +Stallman's initial manifestos on the topic, + +01:22:45.060 --> 01:22:45.360 +right? He was clearly in this for the long + +01:22:47.040 --> 01:22:47.540 +haul. Like I am building the library of + +01:22:50.500 --> 01:22:50.740 +Alexandria here and like linking the work + +01:22:52.420 --> 01:22:52.580 +that we're trying to do to community that I + +01:22:54.640 --> 01:22:54.900 +don't know how you could touch my heart you + +01:22:57.620 --> 01:22:57.840 +know more surely because that's that's + +01:22:59.440 --> 01:22:59.940 +exactly what we want to do not necessarily + +01:23:03.800 --> 01:23:04.300 +any given talk or comment but the idea that + +01:23:07.960 --> 01:23:08.460 +we have to get together and share our ideas + +01:23:10.900 --> 01:23:11.400 +and the place that we do that has to be just + +01:23:14.380 --> 01:23:14.880 +has to be a buffet and not a crucible. + +01:23:17.620 --> 01:23:17.800 +[Speaker 7]: And look, we're standing on the shoulders of + +01:23:19.400 --> 01:23:19.840 +giants, really, when we're looking at Emacs + +01:23:21.100 --> 01:23:21.600 +and sort of what we have achieved. + +01:23:24.680 --> 01:23:24.840 +And the galaxy of talent that exists in the + +01:23:27.040 --> 01:23:27.540 +Emacs community is also like truly + +01:23:30.800 --> 01:23:31.300 +impressive, I think. So There's a lot of work + +01:23:34.280 --> 01:23:34.780 +to be done, but we've also achieved some + +01:23:37.120 --> 01:23:37.480 +pretty impressive things so far. + +01:23:38.620 --> 01:23:39.120 +So let's just keep at it. + +01:23:43.200 --> 01:23:43.700 +I'm sure we'll have a fantastic future for + +01:23:44.180 --> 01:23:44.680 +Emacs. + +01:23:52.540 --> 01:23:53.040 +[Speaker 5]: You know, I'm kind of interested in what + +01:23:56.540 --> 01:23:57.040 +Stefan's here. You know, + +01:24:00.400 --> 01:24:00.900 +just the common tropes that go around. + +01:24:05.320 --> 01:24:05.740 +I just hear it so much on the net, + +01:24:07.540 --> 01:24:08.040 +you know, is Emacs still alive? + +01:24:09.960 --> 01:24:10.460 +Do people still use it? + +01:24:11.120 --> 01:24:11.480 +You know, and of course, + +01:24:13.620 --> 01:24:14.100 +it's like you have an older piece of software + +01:24:15.200 --> 01:24:15.700 +that started so long ago, + +01:24:17.540 --> 01:24:17.720 +people don't realize that it's still up, + +01:24:20.320 --> 01:24:20.820 +but it's also because of the trends, + +01:24:22.900 --> 01:24:23.400 +right? You know, we've got the electron-based + +01:24:28.580 --> 01:24:28.740 +development and Visual Studio is slick out of + +01:24:32.720 --> 01:24:33.220 +the box. So what's in the core Emacs + +01:24:36.260 --> 01:24:36.540 +developers realm, obviously you guys are + +01:24:38.160 --> 01:24:38.660 +taking this longer term perspective, + +01:24:44.060 --> 01:24:44.380 +which makes sense, but what do you think + +01:24:48.480 --> 01:24:48.980 +about this issue, the shorter term and how to + +01:24:52.200 --> 01:24:52.540 +alleviate those concerns that some people + +01:24:52.540 --> 01:24:53.040 +represent? + +01:24:54.820 --> 01:24:55.040 +[Speaker 7]: Of course, yes. I mean, + +01:24:55.840 --> 01:24:56.160 +this is something that, + +01:24:59.340 --> 01:24:59.600 +I mean, clearly people are discussing and as + +01:25:01.480 --> 01:25:01.800 +you say, It's almost like a trope at this + +01:25:04.200 --> 01:25:04.700 +point. And it's been discussed on EmacsDevil, + +01:25:07.800 --> 01:25:07.960 +what can we do to promote Emacs more and to + +01:25:10.240 --> 01:25:10.740 +what extent should we care about that? + +01:25:15.100 --> 01:25:15.600 +And I mean, my reply to that is usually just, + +01:25:19.120 --> 01:25:19.620 +the rumors of my death are very accurate. + +01:25:24.720 --> 01:25:25.220 +And I think this is true also for Emacs. + +01:25:29.240 --> 01:25:29.700 +So we are very much here. + +01:25:31.960 --> 01:25:32.460 +I think what has happened also is reflective + +01:25:34.960 --> 01:25:35.220 +of basically that there are just more + +01:25:36.580 --> 01:25:37.080 +programmers on the planet, + +01:25:38.040 --> 01:25:38.240 +[Speaker 3]: And we + +01:25:39.920 --> 01:25:40.420 +[Speaker 7]: right? haven't been able to sort of catch + +01:25:41.960 --> 01:25:42.460 +that segment as it's been growing, + +01:25:44.680 --> 01:25:45.060 +but also we have more Emacs users I think + +01:25:47.500 --> 01:25:47.860 +today than probably ever before. + +01:25:48.420 --> 01:25:48.920 +We have more packages, + +01:25:50.540 --> 01:25:51.040 +we have more stuff going on. + +01:25:55.580 --> 01:25:55.980 +So I think it's a challenge as well, + +01:25:58.200 --> 01:25:58.440 +like to what extent do we wanna be like a + +01:26:00.260 --> 01:26:00.420 +niche and to what extent do we wanna be the + +01:26:03.280 --> 01:26:03.780 +text editor for programmers. + +01:26:06.420 --> 01:26:06.720 +And I think there's a tension there because + +01:26:09.780 --> 01:26:09.960 +we want to stay true to what Emacs is and to + +01:26:12.440 --> 01:26:12.940 +its sort of core values of what makes Emacs + +01:26:16.720 --> 01:26:16.880 +great, but can we still make some changes to + +01:26:18.340 --> 01:26:18.760 +sort of stay relevant. + +01:26:21.060 --> 01:26:21.340 +And I think that's a huge win. + +01:26:24.800 --> 01:26:24.960 +And clearly these discussions are going on on + +01:26:26.980 --> 01:26:27.280 +the Emacs level and in the minds of core + +01:26:29.340 --> 01:26:29.640 +developers, I think, every day. + +01:26:32.040 --> 01:26:32.540 +Even though, I mean, most of our work is just + +01:26:35.320 --> 01:26:35.820 +trying to keep adding new features, + +01:26:38.220 --> 01:26:38.720 +make sure that we have that sort of core + +01:26:40.060 --> 01:26:40.400 +infrastructure in place, + +01:26:42.280 --> 01:26:42.500 +which is part of the reason why I gave the + +01:26:44.260 --> 01:26:44.680 +talk I did yesterday, to invite more people + +01:26:46.920 --> 01:26:46.960 +to come on board. Because I see a lot of + +01:26:48.200 --> 01:26:48.700 +people have opinions about Emacs, + +01:26:50.700 --> 01:26:51.200 +which is amazing, and we need more of that. + +01:26:54.160 --> 01:26:54.660 +But I think, let's say, + +01:26:56.280 --> 01:26:56.780 +patches speak louder than words. + +01:27:01.300 --> 01:27:01.780 +Software. And it's definitely true in Emacs + +01:27:01.780 --> 01:27:02.280 +development. + +01:27:04.680 --> 01:27:04.960 +[Speaker 3]: I want to just piggyback on, + +01:27:06.820 --> 01:27:06.940 +like attack the premise of the question a + +01:27:09.800 --> 01:27:09.960 +little bit, right? Remember that we are sort + +01:27:11.880 --> 01:27:12.380 +of in a trench warfare with commercial + +01:27:15.160 --> 01:27:15.660 +interests that are dependent on dominating + +01:27:20.660 --> 01:27:21.160 +software ecosystems in order to exploit users + +01:27:24.600 --> 01:27:24.760 +for money. Like that is a necessary thing to + +01:27:26.020 --> 01:27:26.420 +a lot of people's business model. + +01:27:30.060 --> 01:27:30.560 +And so we live in a world where software is + +01:27:32.760 --> 01:27:33.260 +more than tools. It is clothing. + +01:27:38.480 --> 01:27:38.840 +And so when I put on my Mac and I put on my + +01:27:42.860 --> 01:27:43.180 +UI skin, I'm not just choosing whether I like + +01:27:46.640 --> 01:27:46.960 +sliders or radio buttons or check boxes or + +01:27:49.840 --> 01:27:50.340 +the other UI mechanics that give that + +01:27:53.920 --> 01:27:54.160 +heuristic and make it make me think it's easy + +01:27:55.440 --> 01:27:55.940 +to use, easy to learn to use, + +01:27:59.160 --> 01:27:59.340 +right? I'm also choosing a whole line of + +01:28:02.080 --> 01:28:02.580 +implementation detail that I'm being actively + +01:28:06.040 --> 01:28:06.540 +trained not to try to understand by, + +01:28:08.720 --> 01:28:09.020 +you know, kind of the dark side of the force + +01:28:11.780 --> 01:28:12.100 +over here. So when I think about, + +01:28:14.380 --> 01:28:14.880 +you know, make Emacs more like Toaster, + +01:28:18.860 --> 01:28:19.060 +[Speaker 1]: you know, + +01:28:21.340 --> 01:28:21.560 +[Speaker 3]: I, 1 of my responses is every time that + +01:28:22.740 --> 01:28:22.960 +question asks, you know, + +01:28:24.160 --> 01:28:24.480 +an angel grows, gets asked, + +01:28:25.440 --> 01:28:25.720 +an angel grows its wings. + +01:28:27.040 --> 01:28:27.540 +A developer submits a patch, + +01:28:30.040 --> 01:28:30.240 +a bug gets opened that we can, + +01:28:31.840 --> 01:28:32.320 +you know, with enough information to actually + +01:28:33.240 --> 01:28:33.740 +do something about it, + +01:28:34.920 --> 01:28:35.280 +the ecosystem gets better, + +01:28:38.100 --> 01:28:38.600 +right? Whether a new user comes or not, + +01:28:40.680 --> 01:28:41.040 +like somebody's actually asking a question + +01:28:42.780 --> 01:28:42.900 +that's going to lead them someday to pick a + +01:28:43.260 --> 01:28:43.760 +better tool. + +01:28:47.620 --> 01:28:48.120 +[Speaker 7]: Yeah, it's true. I mean, + +01:28:50.000 --> 01:28:50.280 +we have powerful enemies and they are not + +01:28:52.540 --> 01:28:52.720 +working for us. And when they are working on + +01:28:54.960 --> 01:28:55.160 +improving VS code, you can't be under any + +01:28:56.640 --> 01:28:56.720 +illusion that they are doing that in the + +01:28:57.340 --> 01:28:57.660 +interest of the users. + +01:28:59.760 --> 01:29:00.060 +They're doing that in their interest of the + +01:29:02.620 --> 01:29:02.780 +corporate owners. So this is the reality that + +01:29:04.640 --> 01:29:04.900 +we have to face and Emacs is just not like + +01:29:07.920 --> 01:29:08.040 +that. And this is of course part of the + +01:29:09.960 --> 01:29:10.460 +reason why it's so important that we continue + +01:29:14.040 --> 01:29:14.260 +this work for the future of being able to do + +01:29:17.640 --> 01:29:17.800 +computing in a free way and in a way that is + +01:29:20.220 --> 01:29:20.380 +actually, you know, supports the types of + +01:29:21.740 --> 01:29:22.240 +workflows that we know and love. + +01:29:26.720 --> 01:29:26.920 +[Speaker 4]: Something that I'd like to add to this is + +01:29:29.680 --> 01:29:30.060 +that, you know, you've mentioned we need more + +01:29:30.640 --> 01:29:31.140 +programmers in the world. + +01:29:33.240 --> 01:29:33.340 +And in light of what we're doing with + +01:29:35.140 --> 01:29:35.220 +EmacsConf, perhaps we need more people to be + +01:29:36.580 --> 01:29:36.960 +at EmacsConf talking, not necessarily + +01:29:38.100 --> 01:29:38.600 +programmers, but just people apprehending + +01:29:40.520 --> 01:29:40.940 +Emacs and talking about it. + +01:29:42.720 --> 01:29:43.180 +It feels like we've got different missions + +01:29:44.440 --> 01:29:44.700 +that we're trying to accomplish with this. + +01:29:45.820 --> 01:29:46.320 +We are... Okay, you... + +01:29:47.780 --> 01:29:48.280 +Go ahead, Colin. + +01:29:49.600 --> 01:29:49.940 +[Speaker 3]: I can't leave that alone. + +01:29:52.120 --> 01:29:52.420 +I almost came in there on the previous point. + +01:29:55.020 --> 01:29:55.240 +Yeah, I actually Completely agree with that + +01:29:58.900 --> 01:29:59.140 +Leo. That's something that and I mean to be + +01:30:02.780 --> 01:30:03.240 +fair. I owe a good I owe dev al a good email + +01:30:05.800 --> 01:30:06.160 +on this topic, but we desperately need more + +01:30:07.840 --> 01:30:08.340 +project managers, more solutions architect, + +01:30:10.380 --> 01:30:10.880 +more business process analysts, + +01:30:12.660 --> 01:30:13.160 +more systems analysts, + +01:30:15.100 --> 01:30:15.560 +more, you know, and the best tech, + +01:30:17.900 --> 01:30:18.400 +you know, some of the best threads start with + +01:30:23.100 --> 01:30:23.420 +quite a bit of an analytical work done on the + +01:30:24.940 --> 01:30:25.440 +part of an engineer who's come along. + +01:30:29.320 --> 01:30:29.680 +But actually, Larry Wall has this quote, + +01:30:31.640 --> 01:30:32.140 +right? Where he says, consider 3 solutions + +01:30:34.120 --> 01:30:34.300 +and build 1. And I think we struggle with + +01:30:36.760 --> 01:30:37.260 +that as a community because getting a patch + +01:30:39.920 --> 01:30:40.120 +is a lot of work and a lot to ask for + +01:30:42.900 --> 01:30:43.080 +somebody. So asking 3 people to submit a + +01:30:45.200 --> 01:30:45.260 +patch means you're saying no to a lot of + +01:30:47.280 --> 01:30:47.560 +blood, sweat and tears on the part of like 2 + +01:30:48.960 --> 01:30:49.460 +people, maybe 2 teams of people. + +01:30:55.520 --> 01:30:56.020 +[Speaker 5]: And 1 thing I think is a big expansion is + +01:31:02.020 --> 01:31:02.520 +usability and user experience design. + +01:31:05.560 --> 01:31:05.900 +I think, and not in the sense like, + +01:31:08.260 --> 01:31:08.760 +you know, CUA mode or, + +01:31:12.440 --> 01:31:12.560 +you know, people don't realize that Emacs key + +01:31:13.680 --> 01:31:14.180 +bindings are actually ergonomic, + +01:31:16.720 --> 01:31:17.220 +but more, you know, like for myself, + +01:31:20.240 --> 01:31:20.740 +I did a lot of work in sort of bringing out + +01:31:24.480 --> 01:31:24.880 +Emacs features and did a lot of things + +01:31:26.240 --> 01:31:26.740 +creating this info doc, + +01:31:28.940 --> 01:31:29.100 +you know, which is sort of like Space Max or + +01:31:30.300 --> 01:31:30.800 +something in the old days. + +01:31:33.900 --> 01:31:34.200 +But the process, yeah, + +01:31:38.600 --> 01:31:39.100 +kept a lot of that from ever making it into + +01:31:40.460 --> 01:31:40.680 +CoreDMX and, you know, + +01:31:44.180 --> 01:31:44.680 +just a lack of time on my part to follow up. + +01:31:46.560 --> 01:31:47.060 +But if you had somebody, + +01:31:51.220 --> 01:31:51.500 +you know, who sort of coalesced all the + +01:31:52.820 --> 01:31:53.260 +technical work on like, + +01:31:56.280 --> 01:31:56.480 +here's how we can put it together and make it + +01:32:01.320 --> 01:32:01.820 +more accessible, I've seen that go a long way + +01:32:02.800 --> 01:32:03.300 +in certain environments. + +01:32:06.100 --> 01:32:06.340 +And I imagine, you know, + +01:32:08.160 --> 01:32:08.660 +it's just not the experience of, + +01:32:11.180 --> 01:32:11.680 +you know, most people on the core team. + +01:32:14.620 --> 01:32:15.060 +[Speaker 7]: Yeah, for sure. I mean, + +01:32:16.160 --> 01:32:16.560 +We don't have, I mean, + +01:32:18.760 --> 01:32:18.900 +we're mostly a bunch, we're a bunch of + +01:32:20.080 --> 01:32:20.280 +programmers. That's what we are, + +01:32:22.640 --> 01:32:22.800 +right? We don't have graphical signers or any + +01:32:24.320 --> 01:32:24.620 +of the stuff that you're talking about. + +01:32:28.380 --> 01:32:28.580 +So we don't have really any UX experts on + +01:32:30.380 --> 01:32:30.800 +board. So perhaps that would be welcome. + +01:32:35.460 --> 01:32:35.960 +But then again, how do you even fit the EMAX + +01:32:38.880 --> 01:32:39.280 +paradigm into what is typically taught and + +01:32:40.840 --> 01:32:41.120 +discussed in UX? I mean, + +01:32:43.220 --> 01:32:43.380 +maybe there is a way. I'm sure there are + +01:32:45.640 --> 01:32:45.920 +general principles and a lot that we could + +01:32:47.880 --> 01:32:48.380 +learn, But then there is also like this, + +01:32:52.240 --> 01:32:52.440 +we have to stay true to what Emacs is to some + +01:32:53.940 --> 01:32:54.400 +extent and what does that look like + +01:32:56.320 --> 01:32:56.580 +concretely. There are discussions to be had + +01:32:58.620 --> 01:32:59.120 +for sure, but we would definitely benefit + +01:33:02.900 --> 01:33:03.400 +from that type of specific input. + +01:33:04.360 --> 01:33:04.480 +[Speaker 3]: Well, I + +01:33:06.940 --> 01:33:07.240 +[Speaker 5]: mean, like a simple example today is I looked + +01:33:09.720 --> 01:33:09.900 +at the conference guidelines I always stay in + +01:33:13.160 --> 01:33:13.420 +dark mode and it said well use light mode for + +01:33:16.220 --> 01:33:16.420 +your presentation so okay I'll switch to + +01:33:19.280 --> 01:33:19.480 +light mode let me load a theme so I go into + +01:33:21.280 --> 01:33:21.780 +all the default themes and, + +01:33:23.900 --> 01:33:24.400 +you know, start going through the light ones + +01:33:28.080 --> 01:33:28.580 +and then I check all the faces and, + +01:33:31.120 --> 01:33:31.620 +you know, there are at least 3 to 5 faces + +01:33:35.160 --> 01:33:35.600 +that have nearly invisible text as a result + +01:33:38.480 --> 01:33:38.980 +of the background highlighting on them. + +01:33:40.080 --> 01:33:40.460 +And I'm like, you know, + +01:33:43.380 --> 01:33:43.680 +so there's low hanging fruit like that where + +01:33:46.840 --> 01:33:47.020 +people would deal with the structure of the + +01:33:49.400 --> 01:33:49.900 +menus, the actual faces, + +01:33:53.120 --> 01:33:53.620 +the themes, that don't have to do anything + +01:33:57.840 --> 01:33:58.060 +affecting core Emacs except make the + +01:33:59.960 --> 01:34:00.460 +presentation much better. + +01:34:03.380 --> 01:34:03.640 +[Speaker 7]: Yeah, definitely. If people want to send such + +01:34:06.160 --> 01:34:06.660 +polishing patches for various aspects, + +01:34:09.280 --> 01:34:09.520 +I spent some time making a new help screen. + +01:34:10.520 --> 01:34:10.960 +I don't know if you noticed, + +01:34:12.740 --> 01:34:13.040 +I don't know how many people press Control H, + +01:34:14.160 --> 01:34:14.660 +Control H on their keyboards, + +01:34:17.540 --> 01:34:17.720 +But it's like with new sections and it's + +01:34:18.480 --> 01:34:18.980 +sorted a little bit better. + +01:34:20.500 --> 01:34:20.640 +It didn't take much. I mean, + +01:34:21.660 --> 01:34:22.060 +it took a time obviously, + +01:34:23.940 --> 01:34:24.440 +but it's not like it required some fantastic + +01:34:28.140 --> 01:34:28.260 +technical knowledge or deep expertise in + +01:34:29.200 --> 01:34:29.700 +Emacs Lisp to do that. + +01:34:31.480 --> 01:34:31.980 +It's Basically anyone can do stuff like that. + +01:34:34.200 --> 01:34:34.340 +So definitely if you're interested in doing + +01:34:37.440 --> 01:34:37.680 +that type of work, start discussing with us. + +01:34:41.040 --> 01:34:41.440 +Let's talk about what we can do and get doing + +01:34:41.820 --> 01:34:42.320 +it, really. + +01:34:44.960 --> 01:34:45.140 +[Speaker 4]: Yeah, this is exactly in line with your + +01:34:45.800 --> 01:34:46.240 +presentation from yesterday, + +01:34:47.720 --> 01:34:47.920 +Stefan, as well, because you were just + +01:34:50.160 --> 01:34:50.320 +inviting people who are not contributing to + +01:34:51.380 --> 01:34:51.740 +the core of Emacs to do so. + +01:34:53.200 --> 01:34:53.360 +You were talking to package developer on + +01:34:55.120 --> 01:34:55.440 +MailPub, but you were also talking just about + +01:34:58.200 --> 01:34:58.380 +the average Joe or Jane just doing their own + +01:34:59.580 --> 01:35:00.080 +things or encountering a problem. + +01:35:01.120 --> 01:35:01.280 +Now, yes, we talked about, + +01:35:02.800 --> 01:35:02.960 +oh, you need to build master and all this, + +01:35:03.920 --> 01:35:04.420 +but at the end of the day, + +01:35:06.680 --> 01:35:06.960 +low-hanging fruits like the ones Bob just + +01:35:09.840 --> 01:35:10.120 +described. If everyone does this at the end, + +01:35:11.280 --> 01:35:11.780 +you end up with something that is extremely + +01:35:13.520 --> 01:35:13.620 +polished. Perhaps you do not need to have a + +01:35:14.900 --> 01:35:15.140 +UX specialist to tell you that, + +01:35:18.220 --> 01:35:18.340 +oh, those 2 colors are actually very close to + +01:35:21.220 --> 01:35:21.600 +1 another. I think it's kind of a discussion + +01:35:23.580 --> 01:35:24.020 +about same defaults as well that you had + +01:35:25.080 --> 01:35:25.580 +yesterday. Ultimately, + +01:35:27.340 --> 01:35:27.600 +we do not need... Yes, + +01:35:28.780 --> 01:35:29.040 +we need more programmers in the world. + +01:35:30.480 --> 01:35:30.980 +We want more people to use Emacs. + +01:35:33.740 --> 01:35:34.240 +But you don't know. Like, + +01:35:36.220 --> 01:35:36.500 +is it going to be someone in computer science + +01:35:38.420 --> 01:35:38.620 +that's going to be the next giant on whose + +01:35:39.580 --> 01:35:39.880 +shoulders we're going to stand? + +01:35:41.003 --> 01:35:41.010 +[Speaker 3]: computer science? Is it going to be someone + +01:35:41.066 --> 01:35:41.074 +in computer science that's going to be the + +01:35:41.082 --> 01:35:41.090 +next giant + +01:35:41.137 --> 01:35:41.145 +[Speaker 1]: on whose shoulders we're going to stand? + +01:35:41.184 --> 01:35:41.192 +Is it someone who did not + +01:35:41.192 --> 01:35:41.200 +[Speaker 4]: Is it someone who did not study study + +01:35:42.660 --> 01:35:42.980 +computer science? Is it going to be someone + +01:35:44.060 --> 01:35:44.560 +who did something completely different? + +01:35:46.960 --> 01:35:47.120 +We do not know the prototypical user of + +01:35:49.280 --> 01:35:49.640 +Emacs. We have some idea about the fact that + +01:35:51.760 --> 01:35:51.940 +they might be using you know, + +01:35:52.580 --> 01:35:53.080 +Emacs for their programming, + +01:35:55.560 --> 01:35:55.680 +but more and more, and as is evidenced by the + +01:35:56.420 --> 01:35:56.920 +talks we received with EmacsConf, + +01:36:01.020 --> 01:36:01.360 +it's just people doing writing or taking + +01:36:01.920 --> 01:36:02.420 +notes for their classes. + +01:36:06.340 --> 01:36:06.540 +So it's really interesting to see how and to + +01:36:09.400 --> 01:36:09.480 +explore for us how we can give back to the + +01:36:11.180 --> 01:36:11.600 +core of Emacs in a way that is mutually + +01:36:12.360 --> 01:36:12.700 +constructive because again, + +01:36:14.440 --> 01:36:14.940 +to go back to the philosophy or the political + +01:36:17.400 --> 01:36:17.640 +agenda that we have is for more people to use + +01:36:19.700 --> 01:36:20.200 +software that is not the liberties. + +01:36:20.500 --> 01:36:21.000 +Exactly. + +01:36:24.140 --> 01:36:24.280 +[Speaker 3]: So right. Yeah. I mean, + +01:36:25.840 --> 01:36:26.100 +that's a good spot for me to come right back + +01:36:27.380 --> 01:36:27.720 +in. And that's exactly where I do. + +01:36:30.200 --> 01:36:30.420 +Right. Because that's that's what it's all + +01:36:33.040 --> 01:36:33.540 +about. In the In terms of a tool user, + +01:36:36.600 --> 01:36:37.100 +you know, the evolution of using tools as, + +01:36:38.620 --> 01:36:39.120 +you know, these creatures have fought, + +01:36:42.820 --> 01:36:43.220 +Emacs is fire. Emacs is the ability to learn + +01:36:45.920 --> 01:36:46.320 +languages, the ability to manipulate other + +01:36:48.140 --> 01:36:48.640 +tools. I mean, it's almost like, + +01:36:50.680 --> 01:36:51.140 +you know, God Emperor of Dune level, + +01:36:53.720 --> 01:36:54.140 +you know, some Frank Herbert type of powers + +01:36:56.480 --> 01:36:56.680 +that you have over your computer and you are + +01:36:58.460 --> 01:36:58.740 +not required to understand how all those + +01:37:02.440 --> 01:37:02.940 +things work. So from a support standpoint + +01:37:04.540 --> 01:37:04.840 +that puts us in a challenging position, + +01:37:06.300 --> 01:37:06.720 +right? I spend a lot of time on Pound Emacs + +01:37:07.760 --> 01:37:08.040 +and the questions that go by there, + +01:37:09.840 --> 01:37:09.960 +I feel bad for people that feel like they + +01:37:12.600 --> 01:37:12.720 +have to answer every question that goes by in + +01:37:14.060 --> 01:37:14.500 +the channel because no 1 could. + +01:37:16.640 --> 01:37:17.080 +No 1 can give an intelligent answer to the, + +01:37:18.040 --> 01:37:18.540 +you know, everything from, + +01:37:21.260 --> 01:37:21.440 +Hey, how do I change my default font on this + +01:37:23.520 --> 01:37:24.020 +operating system? You've never heard of to, + +01:37:26.140 --> 01:37:26.480 +you know, how do you know this list code? + +01:37:28.040 --> 01:37:28.340 +That's 40 lines long doesn't work. + +01:37:30.040 --> 01:37:30.260 +And I think it was a recent change that was + +01:37:31.720 --> 01:37:32.220 +made to the P case macro. + +01:37:39.480 --> 01:37:39.980 +Do you agree? Right? And as deep as that, + +01:37:42.740 --> 01:37:43.240 +well is, if you turn it 90 degrees, + +01:37:45.040 --> 01:37:45.200 +the Emacs is that kind of tool to the + +01:37:46.080 --> 01:37:46.400 +operating system level. + +01:37:48.800 --> 01:37:49.280 +It's letting me walk across to other systems, + +01:37:51.360 --> 01:37:51.780 +multi-hop, become the super user, + +01:37:55.120 --> 01:37:55.620 +right? And, you know, the just the power, + +01:37:57.600 --> 01:37:58.020 +the amplification of power there, + +01:38:02.320 --> 01:38:02.820 +it's like the lever combined with the magnet, + +01:38:08.140 --> 01:38:08.640 +etc, etc. I mean, just, + +01:38:14.760 --> 01:38:14.960 +yeah, I don't know. So I guess where we kind + +01:38:16.260 --> 01:38:16.640 +of jump off, where that gets stuck, + +01:38:18.580 --> 01:38:18.740 +right, is trying to change something like the + +01:38:19.760 --> 01:38:20.260 +defaults in the user experience. + +01:38:22.740 --> 01:38:23.240 +So I imagine, you know, + +01:38:26.580 --> 01:38:26.920 +we don't get 1 great idea about user + +01:38:28.020 --> 01:38:28.520 +experience, we'll get 3, + +01:38:30.240 --> 01:38:30.480 +right? And then Once again, + +01:38:32.980 --> 01:38:33.400 +we have to send our brave developers off to + +01:38:36.220 --> 01:38:36.440 +build 1 to 3 patches, some of which won't see + +01:38:41.040 --> 01:38:41.140 +the light of day. I think that's where the + +01:38:41.920 --> 01:38:42.420 +breakthrough is needed. + +01:38:46.680 --> 01:38:47.180 +Another evolution in the packaging thought, + +01:38:48.620 --> 01:38:49.120 +or maybe it's not packaging. + +01:38:50.920 --> 01:38:51.380 +Maybe it's the compilation step. + +01:38:52.800 --> 01:38:53.220 +Maybe it's the distribution step. + +01:38:56.120 --> 01:38:56.280 +Maybe we want the Debians of the world to + +01:38:59.220 --> 01:38:59.540 +deliver Emacs as 2 different pieces now. + +01:39:03.540 --> 01:39:03.700 +And there's a UX piece that we want you to + +01:39:05.280 --> 01:39:05.780 +package each 1 that you package, + +01:39:09.060 --> 01:39:09.240 +each 1 per window manager that you support or + +01:39:11.380 --> 01:39:11.660 +at the intersection of each window manager + +01:39:12.940 --> 01:39:13.300 +and display manager you port. + +01:39:15.200 --> 01:39:15.300 +And the other one's just the server and you + +01:39:17.040 --> 01:39:17.280 +don't even have to package that if I'm only + +01:39:19.680 --> 01:39:20.020 +offering the CLI or there's a you know like + +01:39:21.960 --> 01:39:22.280 +I'm making all this up and I can't code a + +01:39:23.760 --> 01:39:24.260 +single thing like what I just said, + +01:39:26.920 --> 01:39:27.420 +but I think that there's a technical + +01:39:31.640 --> 01:39:32.140 +opportunity. Pretty high level for technical + +01:39:35.020 --> 01:39:35.520 +there of just thinking about a way to accept + +01:39:40.560 --> 01:39:40.680 +contributions of experience with maybe a + +01:39:43.780 --> 01:39:44.280 +little less rigor and a little less ground + +01:39:44.900 --> 01:39:45.400 +into the marble. + +01:39:50.400 --> 01:39:50.800 +[Speaker 5]: Yeah it makes me think of somebody at work + +01:39:54.220 --> 01:39:54.340 +just brought up pair programming and he's in + +01:39:58.080 --> 01:39:58.580 +love with it. He wants to pair up and do it, + +01:40:01.120 --> 01:40:01.620 +which is not true of all programmers. + +01:40:05.800 --> 01:40:06.300 +But I said, okay, so you spearhead that. + +01:40:10.680 --> 01:40:10.900 +If we, I think it is a very high barrier to + +01:40:13.580 --> 01:40:13.780 +get your patches in because of course they + +01:40:15.420 --> 01:40:15.860 +need to meet the quality standard of Emacs. + +01:40:20.800 --> 01:40:21.300 +So if people who are doing day-to-day + +01:40:24.200 --> 01:40:24.700 +understand that process and can do it well, + +01:40:28.200 --> 01:40:28.540 +could work with some of the people who can't + +01:40:30.040 --> 01:40:30.540 +quite contribute at that level, + +01:40:35.020 --> 01:40:35.240 +but have ideas that are on the level that + +01:40:39.780 --> 01:40:40.280 +should go in, pairing them up could really + +01:40:41.420 --> 01:40:41.920 +move a lot of that forward. + +01:40:46.000 --> 01:40:46.500 +Like Lars, I don't know what his, + +01:40:50.000 --> 01:40:50.500 +I get the feeling maybe he's retired. + +01:40:54.960 --> 01:40:55.380 +So, you know, maybe he has some time, + +01:40:58.300 --> 01:40:58.640 +you know, and he's really good at going back + +01:41:00.320 --> 01:41:00.480 +in and saying, you know, + +01:41:02.400 --> 01:41:02.480 +these areas haven't gotten attention in a + +01:41:05.660 --> 01:41:05.900 +while, so I'm going to go kill some bugs and + +01:41:08.160 --> 01:41:08.660 +look at them and fix them up. + +01:41:13.640 --> 01:41:13.840 +So I would think he would be good to do that + +01:41:15.340 --> 01:41:15.480 +with someone. But you know, + +01:41:22.400 --> 01:41:22.740 +Again, I've got years of code that would just + +01:41:25.320 --> 01:41:25.760 +require somebody to work through it to update + +01:41:28.340 --> 01:41:28.660 +to the latest code base and diff against it. + +01:41:30.080 --> 01:41:30.480 +But it does things like, + +01:41:32.960 --> 01:41:33.420 +I mean, like if anybody used RMAIL anymore, + +01:41:36.200 --> 01:41:36.700 +I made the summary mode of RMAIL exactly + +01:41:40.080 --> 01:41:40.580 +compatible key-wise with the main buffer, + +01:41:43.140 --> 01:41:43.260 +which it never was, and fixed a number of + +01:41:46.120 --> 01:41:46.620 +other features. Dured made operations + +01:41:49.340 --> 01:41:49.480 +reversible, where you mark something and you + +01:41:51.420 --> 01:41:51.920 +unmark it, and you can go up and down. + +01:41:53.160 --> 01:41:53.480 +And there are all these little + +01:41:56.260 --> 01:41:56.760 +incompatibilities that kind of add up across + +01:42:00.120 --> 01:42:00.620 +time, and they never seem to get addressed. + +01:42:06.180 --> 01:42:06.480 +We could just fix them and people would start + +01:42:09.400 --> 01:42:09.640 +to say, oh, this is smoother and they are + +01:42:12.580 --> 01:42:12.820 +getting more of that experience because it + +01:42:15.060 --> 01:42:15.560 +feels like the systems maybe 80, + +01:42:20.740 --> 01:42:21.240 +85% of the way there in a lot of thoughtful + +01:42:26.040 --> 01:42:26.200 +design. But that last 15% could be the + +01:42:29.640 --> 01:42:30.100 +difference between an iPhone and an Android + +01:42:32.260 --> 01:42:32.760 +phone of usability-wise. + +01:42:38.720 --> 01:42:38.940 +So that's a thought. That's a + +01:42:41.100 --> 01:42:41.240 +[Speaker 3]: brilliant idea, and it probably can be + +01:42:42.840 --> 01:42:43.340 +applied far wider than emacs. + +01:42:46.060 --> 01:42:46.320 +That's something that that FSF should + +01:42:48.480 --> 01:42:48.980 +consider suggesting across, + +01:42:49.920 --> 01:42:50.420 +you know, GNU packages, + +01:42:54.280 --> 01:42:54.600 +for example, like a matchmaking project seems + +01:42:56.520 --> 01:42:56.880 +like something that FSF community teams + +01:43:04.020 --> 01:43:04.110 +should think about. Yeah, + +01:43:04.360 --> 01:43:04.520 +I was going + +01:43:04.920 --> 01:43:05.420 +[Speaker 1]: That's so... to say also, + +01:43:08.080 --> 01:43:08.140 +I noticed that the name Debian came up a + +01:43:09.840 --> 01:43:10.260 +while ago and now we were talking about + +01:43:14.540 --> 01:43:15.040 +programming and such and Mentoring maybe and + +01:43:17.960 --> 01:43:18.320 +Debian has this service or part of their site + +01:43:19.600 --> 01:43:20.100 +or community called Mentors. + +01:43:22.120 --> 01:43:22.620 +They have a website, mentors.debian.net, + +01:43:26.920 --> 01:43:27.100 +where the idea is that people who want to get + +01:43:28.100 --> 01:43:28.480 +into contributing to Debian, + +01:43:29.580 --> 01:43:30.080 +for example, to package things, + +01:43:33.200 --> 01:43:33.480 +but obviously don't have upload rights right + +01:43:35.720 --> 01:43:36.000 +away. This is where they can go to, + +01:43:38.460 --> 01:43:38.760 +and this is separate from their mailing list + +01:43:42.340 --> 01:43:42.580 +or bug trackers. They can basically build + +01:43:44.760 --> 01:43:45.260 +their changed packages and upload them here, + +01:43:48.220 --> 01:43:48.480 +and then Debian developers who have commit or + +01:43:51.380 --> 01:43:51.620 +upload rights to the Debian archive can go + +01:43:55.960 --> 01:43:56.120 +and review and give them feedback or ask them + +01:43:57.620 --> 01:43:58.120 +to change something or if it's good, + +01:44:01.620 --> 01:44:01.920 +then just easily upload the package right + +01:44:04.200 --> 01:44:04.440 +from there. And I wonder if it might make + +01:44:07.760 --> 01:44:08.000 +sense to have something kind of like that in + +01:44:10.360 --> 01:44:10.840 +like the context of Emacs or the GNU project + +01:44:13.360 --> 01:44:13.660 +as a whole, where we have like some kind of + +01:44:15.520 --> 01:44:16.020 +a, like loosely defined mentoring thing, + +01:44:18.840 --> 01:44:19.120 +where we could pair up people who are more + +01:44:20.500 --> 01:44:21.000 +experienced, who, for example, + +01:44:22.540 --> 01:44:22.740 +have commit rights in the Emacs core + +01:44:27.080 --> 01:44:27.240 +repository to match them up with someone who + +01:44:29.080 --> 01:44:29.260 +is just making your very first patches or + +01:44:31.640 --> 01:44:31.960 +contributions to Emacs or whatever other GNU + +01:44:34.000 --> 01:44:34.200 +package. Just some food for thought, + +01:44:38.040 --> 01:44:38.540 +[Speaker 5]: Yeah, sounds good. + +01:44:44.340 --> 01:44:44.600 +[Speaker 1]: I guess. Yeah, and then I guess 1 feature of + +01:44:47.360 --> 01:44:47.860 +such a system which would be nice is that it, + +01:44:49.200 --> 01:44:49.340 +at least in terms of, you know, + +01:44:50.380 --> 01:44:50.580 +the mentors that Debbie and that, + +01:44:52.200 --> 01:44:52.700 +that it has a web UI, which, + +01:44:56.040 --> 01:44:56.200 +is nice because mailing lists might be + +01:44:58.140 --> 01:44:58.380 +intimidating for someone who is just getting + +01:44:59.340 --> 01:44:59.840 +started, like in these communities. + +01:45:03.960 --> 01:45:04.200 +Or, you know, just making patches like that, + +01:45:05.440 --> 01:45:05.940 +or just have a series of concrete + +01:45:08.100 --> 01:45:08.320 +instructions. Like with mentors at + +01:45:11.100 --> 01:45:11.200 +Devian.net, I feel like you can't go wrong in + +01:45:13.820 --> 01:45:14.240 +terms of finding the steps of figuring out + +01:45:16.260 --> 01:45:16.500 +what you need to do to put together some + +01:45:19.040 --> 01:45:19.240 +change. Which I think the same idea could + +01:45:20.280 --> 01:45:20.740 +apply to Emacs, for example, + +01:45:20.860 --> 01:45:21.360 +as well. + +01:45:24.560 --> 01:45:24.960 +[Speaker 7]: I think this is a good point about lowering + +01:45:27.440 --> 01:45:27.620 +barriers, and how email is a barrier to + +01:45:28.860 --> 01:45:29.240 +people. I mean, so on the 1 hand, + +01:45:31.100 --> 01:45:31.320 +you have us guys on Emacs level, + +01:45:32.860 --> 01:45:33.360 +we're very used to the email workflow. + +01:45:35.140 --> 01:45:35.500 +Like we're not just using it for fun. + +01:45:37.040 --> 01:45:37.160 +You know what I mean? Like this is a + +01:45:38.320 --> 01:45:38.820 +workhorse. It really is. + +01:45:41.400 --> 01:45:41.840 +And it's tried, it's battled, + +01:45:42.900 --> 01:45:43.300 +tested. It has some quirks, + +01:45:45.140 --> 01:45:45.340 +but we know them extremely well on the other + +01:45:48.060 --> 01:45:48.380 +hand. So, but still we want more people + +01:45:50.700 --> 01:45:50.880 +involved, right? And we realized that, + +01:45:52.760 --> 01:45:52.960 +you know, times are changing as well. + +01:45:54.720 --> 01:45:54.900 +And people are more used to doing stuff from + +01:45:55.640 --> 01:45:56.140 +the web browser, perhaps. + +01:46:00.040 --> 01:46:00.320 +So we do want to move to a forge, + +01:46:01.920 --> 01:46:02.420 +or at least start looking into that. + +01:46:03.560 --> 01:46:04.060 +But there are some obstacles. + +01:46:06.060 --> 01:46:06.280 +So we are looking for volunteers to do that + +01:46:07.360 --> 01:46:07.580 +work. I'm not just saying it, + +01:46:08.640 --> 01:46:09.140 +like we are very serious. + +01:46:11.660 --> 01:46:11.760 +I'm very seriously asking people in the + +01:46:12.520 --> 01:46:13.020 +community to consider, + +01:46:14.920 --> 01:46:15.280 +hey, could you dedicate some time? + +01:46:18.660 --> 01:46:18.900 +I mean, it will take some dedication for sure + +01:46:20.600 --> 01:46:20.820 +it will take some time and it will take some + +01:46:23.040 --> 01:46:23.300 +describe probably even you know Be prepared + +01:46:24.760 --> 01:46:25.260 +to be frustrated at times right, + +01:46:26.980 --> 01:46:27.180 +but if you're serious about doing that type + +01:46:28.040 --> 01:46:28.260 +of work, okay now + +01:46:32.520 --> 01:46:32.900 +[Speaker 3]: I believe you Well, I'm just I'm just teasing + +01:46:35.900 --> 01:46:36.140 +but but but yes exactly any I mean it's it's + +01:46:38.560 --> 01:46:39.060 +not even a joke right Any serious undertaking + +01:46:41.420 --> 01:46:41.920 +having to do with any free software project, + +01:46:45.300 --> 01:46:45.600 +just because we are open to the entire world + +01:46:47.760 --> 01:46:48.160 +and we pride ourselves on trying to take + +01:46:50.020 --> 01:46:50.460 +seriously all input. And if it's a logical + +01:46:51.940 --> 01:46:52.040 +argument, then we'll go ahead and take the + +01:46:53.000 --> 01:46:53.200 +time to combat with you, + +01:46:54.960 --> 01:46:55.180 +even though the maintainer has 300 other + +01:46:57.260 --> 01:46:57.760 +things to do. Like, man, + +01:46:58.280 --> 01:46:58.740 +this + +01:47:00.020 --> 01:47:00.280 +[Speaker 7]: is just the way it is, + +01:47:02.840 --> 01:47:03.160 +right? It just, It's not like Emacs is way + +01:47:06.960 --> 01:47:07.460 +harder to change than any other project of + +01:47:08.680 --> 01:47:09.180 +its longevity and size. + +01:47:10.800 --> 01:47:11.100 +It's just these things take time. + +01:47:13.420 --> 01:47:13.920 +Try getting a change into Debian. + +01:47:15.060 --> 01:47:15.460 +That's an uphill battle. + +01:47:16.960 --> 01:47:17.460 +I don't even know where to start with that. + +01:47:19.540 --> 01:47:20.040 +That's huge, right? And I have tremendous + +01:47:21.640 --> 01:47:21.820 +respect for the people doing that type of + +01:47:22.760 --> 01:47:23.260 +work because it takes dedication, + +01:47:26.280 --> 01:47:26.440 +it takes effort. So we really need someone to + +01:47:27.180 --> 01:47:27.600 +step up from the community, + +01:47:29.760 --> 01:47:30.060 +I think, to be a champion for something like + +01:47:33.160 --> 01:47:33.600 +this and work together with us on Emacs Devil + +01:47:37.800 --> 01:47:38.200 +and off Emacs Devil, probably with me and Eli + +01:47:40.320 --> 01:47:40.600 +and perhaps some other people that could be + +01:47:41.820 --> 01:47:42.280 +in the mail thread, and we could coordinate + +01:47:44.620 --> 01:47:44.960 +this type of work. I would be super excited + +01:47:46.560 --> 01:47:47.060 +if someone wanted to get the ball rolling. + +01:47:48.480 --> 01:47:48.980 +I can't do everything. + +01:47:51.100 --> 01:47:51.340 +I wish I could. Like, I thought about it. + +01:47:52.840 --> 01:47:53.000 +Should I just put everything to the side and + +01:47:53.860 --> 01:47:54.000 +do this? But then, I mean, + +01:47:54.800 --> 01:47:55.080 +there are some, there are other + +01:47:56.040 --> 01:47:56.400 +responsibilities as well. + +01:47:57.740 --> 01:47:58.040 +So we need someone to step up. + +01:47:58.520 --> 01:47:59.020 +We need help here. + +01:48:03.220 --> 01:48:03.460 +[Speaker 3]: you're gonna speak. I was totally gonna pick + +01:48:04.120 --> 01:48:04.620 +on you. Go ahead. + +01:48:05.540 --> 01:48:05.820 +[Speaker 1]: Yeah, so. Oh, good, Thanks, + +01:48:06.540 --> 01:48:06.860 +yeah, I was just gonna say, + +01:48:08.460 --> 01:48:08.960 +yeah, I echo Stefan's sentiments. + +01:48:11.680 --> 01:48:11.960 +And that, yeah, in terms of like maybe + +01:48:14.020 --> 01:48:14.080 +experimenting with a different Forge or a + +01:48:15.280 --> 01:48:15.600 +better Forge and like, + +01:48:16.124 --> 01:48:16.296 +you know, supplementing Savannah. + +01:48:16.640 --> 01:48:17.140 +And supplementing Savannah. + +01:48:20.860 --> 01:48:20.920 +I actually did some initial work a couple of + +01:48:23.240 --> 01:48:23.740 +months ago to get a SourceFed instance + +01:48:24.860 --> 01:48:25.360 +installed for the new project. + +01:48:28.440 --> 01:48:28.660 +And I've done some work on and off, + +01:48:29.340 --> 01:48:29.760 +but then life happens, + +01:48:32.140 --> 01:48:32.640 +especially from September onwards. + +01:48:35.240 --> 01:48:35.500 +But even from earlier in the year, + +01:48:36.460 --> 01:48:36.960 +the project has been semi-dormant, + +01:48:38.740 --> 01:48:39.240 +but I have been meaning to get to that. + +01:48:42.740 --> 01:48:42.900 +So I'm like 1 such person who's interested in + +01:48:44.760 --> 01:48:44.960 +that type of work and driving it forward and + +01:48:47.640 --> 01:48:47.880 +I would love you know if anyone's and anyone + +01:48:50.820 --> 01:48:50.980 +else has the kind of time and energy and the + +01:48:52.760 --> 01:48:53.260 +interest to help with something like that. + +01:48:55.280 --> 01:48:55.780 +Yes, please reach out to all of us, + +01:48:56.880 --> 01:48:57.380 +to Emacs core developers, + +01:48:58.100 --> 01:48:58.600 +of course, and to myself. + +01:49:01.840 --> 01:49:02.340 +This is something that could be very useful, + +01:49:04.960 --> 01:49:05.460 +not just for GNU Emacs and Emacs developers, + +01:49:09.760 --> 01:49:10.240 +but also for any other GNU package as well. + +01:49:13.040 --> 01:49:13.480 +So yeah, that's 1 area of potential + +01:49:15.660 --> 01:49:16.060 +contribution and 1 thing that we sort of, + +01:49:17.860 --> 01:49:18.340 +I guess, regularly meet with the FSF + +01:49:20.140 --> 01:49:20.640 +sysadmins to discuss these kinds of projects + +01:49:22.120 --> 01:49:22.620 +and things as Corwin would know. + +01:49:24.520 --> 01:49:24.720 +[Speaker 3]: Yeah, that's kind of, I mean, + +01:49:26.280 --> 01:49:26.420 +you knew exactly where I was going to, + +01:49:27.960 --> 01:49:28.420 +and I'm glad that you volunteered yourself + +01:49:30.040 --> 01:49:30.540 +personally because that's the best choice. + +01:49:32.320 --> 01:49:32.820 +If you're hearing this and you're thinking, + +01:49:35.760 --> 01:49:36.260 +you know, maybe I should do some sysop stuff, + +01:49:38.200 --> 01:49:38.700 +literally reach out to Amin. + +01:49:41.040 --> 01:49:41.420 +And because it's complicated, + +01:49:43.040 --> 01:49:43.320 +there are a lot of projects to volunteer for. + +01:49:44.120 --> 01:49:44.620 +They're all very worthy. + +01:49:48.760 --> 01:49:49.020 +And it's sort of political to figure out what + +01:49:52.760 --> 01:49:53.000 +we're gonna try to change for whom first to + +01:49:55.940 --> 01:49:56.260 +demonstrate we can do all the things we wanna + +01:49:58.320 --> 01:49:58.440 +do to make it better without losing all the + +01:50:00.340 --> 01:50:00.540 +things that are important about how it is + +01:50:04.040 --> 01:50:04.480 +today. And we'll do it in a measured way like + +01:50:06.500 --> 01:50:06.760 +everybody's just like room full of rocking + +01:50:09.640 --> 01:50:09.780 +chairs everybody's got a long tail it's a + +01:50:12.340 --> 01:50:12.620 +hard project but you will do something that + +01:50:15.380 --> 01:50:15.540 +just a lot like as a Savannah hacker which I + +01:50:17.920 --> 01:50:18.240 +am with Amin So that's how I know about his + +01:50:20.080 --> 01:50:20.340 +work on that project. We worked together on + +01:50:22.300 --> 01:50:22.800 +the Savannah Forge. I'm aware of his work + +01:50:26.660 --> 01:50:26.980 +piloting SourceHut recently and just with a + +01:50:29.020 --> 01:50:29.240 +working group there to look at the next + +01:50:30.540 --> 01:50:31.040 +generation of forges for GNU. + +01:50:34.160 --> 01:50:34.340 +Emacs of course as a GNU package could go do + +01:50:36.540 --> 01:50:36.820 +its own thing. FFS would most likely give + +01:50:38.360 --> 01:50:38.560 +cash to go do its own thing, + +01:50:39.720 --> 01:50:39.860 +even if it didn't like it. + +01:50:41.140 --> 01:50:41.520 +We know, you know, as a, + +01:50:42.800 --> 01:50:43.260 +like if I put on, I'm not FSF, + +01:50:44.260 --> 01:50:44.600 +but if I put on that hat, + +01:50:45.800 --> 01:50:46.300 +I imagine that we must know. + +01:50:50.020 --> 01:50:50.200 +Emacs is a flagship thing that people in the + +01:50:52.420 --> 01:50:52.800 +real world depend on. If I get this ancient + +01:50:55.320 --> 01:50:55.820 +computer, I get a working Linux distribution + +01:50:59.340 --> 01:50:59.500 +and Emacs. Maybe it's not Microsoft Word as a + +01:51:00.800 --> 01:51:01.300 +word processor, but you guys, + +01:51:03.080 --> 01:51:03.580 +you can learn a language on it for sure, + +01:51:05.600 --> 01:51:05.800 +you know And you can do your homework on it + +01:51:08.300 --> 01:51:08.680 +and you know It's it makes your you can edit + +01:51:10.580 --> 01:51:10.960 +things and then you can edit your system + +01:51:13.900 --> 01:51:14.340 +files and teach yourself how to manage a GNU + +01:51:17.860 --> 01:51:18.040 +system and you can You know so Emacs is + +01:51:19.540 --> 01:51:19.840 +really powerful as a practical tool. + +01:51:21.560 --> 01:51:21.720 +Like I keep coming back to that point when I + +01:51:25.040 --> 01:51:25.320 +think about Emacs, like I really put it as + +01:51:27.380 --> 01:51:27.880 +like, it's an important tool on the like + +01:51:31.780 --> 01:51:32.080 +humans inventing tools level just because it + +01:51:35.080 --> 01:51:35.280 +lets me make this editor into whatever I need + +01:51:37.580 --> 01:51:38.080 +it to be to get my actual work done. + +01:51:39.520 --> 01:51:39.860 +Whether that's getting the length, + +01:51:41.460 --> 01:51:41.600 +maybe that's making the font big enough that + +01:51:43.260 --> 01:51:43.380 +I can see it, or making it easy enough to + +01:51:44.760 --> 01:51:45.060 +change from this font to that font, + +01:51:45.920 --> 01:51:46.420 +changing the background colors, + +01:51:47.960 --> 01:51:48.460 +like your basic vision, + +01:51:49.960 --> 01:51:50.460 +accessibility issues, right? + +01:51:52.740 --> 01:51:53.120 +All, you know, solved, + +01:51:55.080 --> 01:51:55.320 +I can bake that customization in and I can + +01:51:56.320 --> 01:51:56.580 +pretty much depend on, + +01:51:57.900 --> 01:51:58.400 +no matter what we change in Emacs, + +01:51:59.760 --> 01:52:00.140 +I'm gonna accept the new version, + +01:52:01.920 --> 01:52:02.220 +it's gonna be on the next computer I get, + +01:52:03.840 --> 01:52:04.000 +I'm going to install the package and my + +01:52:05.920 --> 01:52:06.100 +configuration that sets all that up will be + +01:52:10.960 --> 01:52:11.100 +there for me. Right? It's like back to + +01:52:13.300 --> 01:52:13.780 +Stefan's point, what, 6 and a half hours ago, + +01:52:16.120 --> 01:52:16.620 +I mean, you know, 20 minutes ago about + +01:52:23.680 --> 01:52:24.180 +just... Oh gosh, I lost it. + +01:52:27.980 --> 01:52:28.260 +Boy, I really thought I had handed that + +01:52:29.020 --> 01:52:29.520 +neatly back to you. + +01:52:36.040 --> 01:52:36.220 +[Speaker 1]: No problem, Yeah, I think we're in general in + +01:52:36.220 --> 01:52:36.720 +agreement. + +01:52:41.980 --> 01:52:42.480 +[Speaker 4]: If we are now in the realm of Concord, + +01:52:44.800 --> 01:52:44.960 +of harmony, and the realm of midnight in + +01:52:47.560 --> 01:52:47.720 +Europe, Should we bring this discussion to a + +01:52:49.200 --> 01:52:49.460 +close or we could go all night, + +01:52:51.180 --> 01:52:51.500 +but I'll need to explain to my employer why + +01:52:52.720 --> 01:52:53.220 +my eyes are barely open tomorrow. + +01:52:56.600 --> 01:52:57.100 +[Speaker 1]: Yeah, I think that's probably a good idea. + +01:52:59.960 --> 01:53:00.460 +I see some folks starting to slowly sign off. + +01:53:02.740 --> 01:53:03.060 +[Speaker 0]: Yeah, also, you know, Leo, + +01:53:04.680 --> 01:53:05.180 +you could leave and just miss out. + +01:53:05.460 --> 01:53:05.960 +What? + +01:53:13.620 --> 01:53:13.820 +[Speaker 7]: Hey, Sasha, can I say something like what an + +01:53:15.880 --> 01:53:16.020 +amazing job with everything you're doing in + +01:53:16.960 --> 01:53:17.300 +the community over the years? + +01:53:18.820 --> 01:53:19.240 +I'm so impressed with Emacs News. + +01:53:22.020 --> 01:53:22.160 +What a great resource to stay up to date in + +01:53:24.720 --> 01:53:24.760 +Emacs. Just really hats off to you for a + +01:53:25.080 --> 01:53:25.580 +whole lot. + +01:53:26.680 --> 01:53:26.880 +[Speaker 3]: Thank you + +01:53:29.440 --> 01:53:29.700 +[Speaker 0]: very much. It actually turned out to be quite + +01:53:31.840 --> 01:53:32.220 +timely that John Wheatley had suggested it + +01:53:35.020 --> 01:53:35.140 +back when he was maintainer because when I + +01:53:36.980 --> 01:53:37.200 +had the kiddo, I suddenly had 0 time to + +01:53:38.000 --> 01:53:38.440 +actually write new things. + +01:53:39.560 --> 01:53:39.840 +But reading things is fine. + +01:53:41.820 --> 01:53:42.040 +I can just speed read all the Reddit things + +01:53:43.160 --> 01:53:43.660 +and put the links together. + +01:53:45.800 --> 01:53:46.300 +So I'm very glad that Emacs news is helpful. + +01:53:49.080 --> 01:53:49.580 +[Speaker 7]: it really is, yeah. + +01:53:55.380 --> 01:53:55.880 +[Speaker 3]: It is, So, okay, now let's try to go for our + +01:54:00.040 --> 01:54:00.480 +closing thoughts here while Leo's still here. + +01:54:01.740 --> 01:54:02.140 +And then if we wanna keep rolling, + +01:54:04.760 --> 01:54:05.260 +even after Leo drops, we won't tell him, + +01:54:06.420 --> 01:54:06.920 +we'll tell him we're stuck. + +01:54:12.380 --> 01:54:12.540 +[Speaker 4]: I guess that was a beacon to me to perhaps go + +01:54:14.140 --> 01:54:14.440 +for the second close of the day I've already + +01:54:18.080 --> 01:54:18.380 +done it I can do it again But I will prove + +01:54:19.300 --> 01:54:19.480 +Sasha wrong this time. + +01:54:21.020 --> 01:54:21.520 +I will miss out if need be because really, + +01:54:24.160 --> 01:54:24.660 +I have been very impressed with the sleep + +01:54:28.700 --> 01:54:29.120 +record that you had and I am very envious + +01:54:32.040 --> 01:54:32.220 +right now of your past ability to sleep more + +01:54:33.160 --> 01:54:33.380 +than 9 hours per night. + +01:54:35.440 --> 01:54:35.560 +And I wish I would be able to go back to + +01:54:37.300 --> 01:54:37.800 +this. But anyway, folks, + +01:54:38.560 --> 01:54:39.060 +I'm going to drop out. + +01:54:40.520 --> 01:54:40.680 +People might hang out for a little while + +01:54:42.360 --> 01:54:42.520 +longer. Bear in mind that Sasha might get + +01:54:44.480 --> 01:54:44.980 +called at any point to go take care of Kido. + +01:54:47.220 --> 01:54:47.720 +So this might wrap up very fast afterwards. + +01:54:49.780 --> 01:54:49.920 +But at any rate, it was my pleasure to be the + +01:54:51.420 --> 01:54:51.820 +host today. Stefan, thank you for joining. + +01:54:53.520 --> 01:54:54.020 +Bob, thank you for joining and interacting + +01:54:56.040 --> 01:54:56.320 +with us and making this a little more + +01:54:58.860 --> 01:54:59.020 +interactive and more plural than just the + +01:55:01.260 --> 01:55:01.760 +co-organizers. And on that note, + +01:55:03.640 --> 01:55:03.900 +I will be leaving. So have a wonderful night, + +01:55:05.860 --> 01:55:06.020 +everyone. And we'll see you next year for the + +01:55:06.740 --> 01:55:07.240 +next edition, potentially. + +01:55:09.560 --> 01:55:10.060 +[Speaker 3]: Thank you, Leo. You're my hero. + +01:55:11.580 --> 01:55:12.040 +I take everything I said on mumble back. + +01:55:12.280 --> 01:55:12.780 +You're amazing. + +01:55:14.840 --> 01:55:15.340 +[Speaker 4]: bye everyone. + +01:55:16.400 --> 01:55:16.680 +[Speaker 1]: All right, Thank you all. + +01:55:17.960 --> 01:55:18.220 +Take care. Bye. I will + +01:55:20.200 --> 01:55:20.580 +[Speaker 6]: also say bye bye. I also need to go to bed. + +01:55:22.200 --> 01:55:22.700 +Thank you all for this cool conference and + +01:55:24.920 --> 01:55:25.080 +hopefully we're here through the year and at + +01:55:25.900 --> 01:55:26.400 +least in 1 year. + +01:55:30.900 --> 01:55:31.400 +[Speaker 3]: You've probably made the rest of the rest of + +01:55:34.440 --> 01:55:34.700 +the victorious. You really stepped up. + +01:55:38.300 --> 01:55:38.800 +[Speaker 5]: your contributions. + +01:55:38.980 --> 01:55:39.220 +[Speaker 3]: Thanks so much for Yeah, + +01:55:40.580 --> 01:55:40.960 +[Speaker 1]: thanks so much for being a part of it, + +01:55:41.720 --> 01:55:42.100 +specifically you, Floey, + +01:55:43.480 --> 01:55:43.980 +and just everyone. Thank you all. + +01:55:48.180 --> 01:55:48.420 +[Speaker 6]: Have a nice day or night and we'll hear each + +01:55:48.740 --> 01:55:49.240 +other. Bye! + +01:55:51.220 --> 01:55:51.420 +[Speaker 1]: See you. Okay, well, + +01:55:51.880 --> 01:55:52.360 +[Speaker 3]: Thanks, Zen. I'll go next. + +01:55:53.800 --> 01:55:54.300 +I'm the next newest, I think. + +01:55:59.640 --> 01:56:00.140 +Well, I want to say also, + +01:56:01.800 --> 01:56:02.300 +you know, Bob and Stefan, + +01:56:03.660 --> 01:56:03.760 +thank you so much for jumping in and + +01:56:04.860 --> 01:56:05.360 +participating in the closing remarks. + +01:56:06.700 --> 01:56:07.200 +I too think it's a lot of, + +01:56:08.560 --> 01:56:08.960 +like, it's fun to just, + +01:56:10.760 --> 01:56:11.260 +like, share the buzz after the convention. + +01:56:13.260 --> 01:56:13.460 +We've got all these millions of ideas and + +01:56:16.120 --> 01:56:16.480 +then to have a group, a little group think + +01:56:18.960 --> 01:56:19.460 +about what we're walking away from that with. + +01:56:22.360 --> 01:56:22.540 +What is the temperature of the fire in your + +01:56:24.360 --> 01:56:24.860 +belly? And it's just... + +01:56:28.440 --> 01:56:28.740 +I mean, this is 1 of the highlights of my + +01:56:30.200 --> 01:56:30.700 +year in a way that it's just... + +01:56:31.780 --> 01:56:31.970 +I don't think other people... + +01:56:33.880 --> 01:56:34.120 +I don't think I dare explain it to other + +01:56:35.880 --> 01:56:36.020 +people. I think my wife understands and I + +01:56:40.600 --> 01:56:40.860 +will do. So thank you very much for this + +01:56:42.340 --> 01:56:42.840 +conference and the opportunity to participate + +01:56:45.540 --> 01:56:46.040 +in it. You know, just the conversation, + +01:56:48.540 --> 01:56:49.040 +how vibrant the chat is on IRC, + +01:56:52.080 --> 01:56:52.580 +how the variety of talks, + +01:56:54.140 --> 01:56:54.640 +some of the talks that look like television + +01:56:59.380 --> 01:56:59.540 +content to me and others that look a lot like + +01:57:03.840 --> 01:57:03.960 +my talk. And working through your slides and + +01:57:06.100 --> 01:57:06.280 +doing it live and you know I appreciate that + +01:57:10.240 --> 01:57:10.380 +we make a place for all those levels and and + +01:57:12.720 --> 01:57:13.220 +show people how to improve our craft as well. + +01:57:26.140 --> 01:57:26.460 +I'm not actually dropping or going anywhere. + +01:57:29.040 --> 01:57:29.220 +I'll continue to talk about eMAX until I get + +01:57:30.860 --> 01:57:31.000 +the dinner time bell. I've probably got an + +01:57:40.240 --> 01:57:40.580 +hour here. I'll tell you what will happen + +01:57:42.040 --> 01:57:42.160 +though is I'm guaranteed to light a + +01:57:43.780 --> 01:57:43.940 +cigarette. You can already see me kind of + +01:57:45.860 --> 01:57:46.160 +hovering about my room because I'm trying to + +01:57:47.440 --> 01:57:47.780 +avoid like smoking on camera. + +01:57:49.300 --> 01:57:49.540 +I don't know where that came from. + +01:57:52.360 --> 01:57:52.860 +I'm giving it up in approximately 5 seconds. + +01:57:58.980 --> 01:57:59.480 +[Speaker 7]: Yeah I'm gonna hop off. + +01:58:00.800 --> 01:58:01.300 +It's possibly right here. + +01:58:02.220 --> 01:58:02.720 +I'll work tomorrow. + +01:58:06.200 --> 01:58:06.380 +[Speaker 3]: I took the next 2 days off. + +01:58:07.320 --> 01:58:07.820 +I'm actually going camping, + +01:58:11.040 --> 01:58:11.280 +Stefan. I know I've learned that this + +01:58:12.800 --> 01:58:13.300 +conference leaves me completely emotionally + +01:58:16.360 --> 01:58:16.860 +exhausted. I just like, + +01:58:18.700 --> 01:58:19.140 +I don't know, I watch all, + +01:58:20.820 --> 01:58:21.320 +I feel like I just connect with all the, + +01:58:23.440 --> 01:58:23.640 +like it's this time where I connect with all + +01:58:25.260 --> 01:58:25.580 +these people that spend as much time thinking + +01:58:26.580 --> 01:58:27.080 +about Emacs as I do. + +01:58:31.480 --> 01:58:31.760 +[Speaker 0]: All right, so maybe we should wrap up before + +01:58:32.440 --> 01:58:32.940 +you have like, you know, + +01:58:35.380 --> 01:58:35.880 +that overflow error and just... + +01:58:38.000 --> 01:58:38.500 +[Speaker 3]: In buster thrill, okay. + +01:58:41.720 --> 01:58:41.980 +Thank you + +01:58:45.200 --> 01:58:45.440 +[Speaker 0]: so much, everyone. Let us actually wrap up + +01:58:47.360 --> 01:58:47.440 +then. Everyone can find the recordings if you + +01:58:48.640 --> 01:58:49.140 +want to keep the conversation going. + +01:58:51.900 --> 01:58:52.120 +There are meetups, there are people's blog + +01:58:54.240 --> 01:58:54.520 +posts and video channels and mailing lists + +01:58:55.320 --> 01:58:55.820 +and all those other things. + +01:58:58.820 --> 01:58:59.180 +I often I list a lot of meetups in Emacs news + +01:59:00.680 --> 01:59:01.080 +so that's another great way to stay connected + +01:59:02.560 --> 01:59:03.060 +through the year and we hope to see everybody + +01:59:04.740 --> 01:59:05.240 +next year at EmacsConf 2024. + +01:59:11.260 --> 01:59:11.420 +[Speaker 4]: Thanks Sasha for the send off and goodbye to + +01:59:16.740 --> 01:59:16.940 +everyone. Oh Sasha I think you were muted but + +01:59:18.340 --> 01:59:18.520 +yes I was still there I assume that's what + +01:59:21.220 --> 01:59:21.720 +you just said. I lied. + +01:59:23.680 --> 01:59:23.920 +I was staying around like Corwin was. + +01:59:25.440 --> 01:59:25.580 +I just said goodbye, but then I wait in the + +01:59:26.520 --> 01:59:27.020 +bushes, waiting for the ambush. + +01:59:29.340 --> 01:59:29.840 +[Speaker 3]: Well I'm personally surprised, + +01:59:32.780 --> 01:59:33.040 +speaking for myself. I wouldn't have guessed + +01:59:36.040 --> 01:59:36.340 +that would happen. All right, + +01:59:36.340 --> 01:59:36.580 +[Speaker 4]: The perfect moment. well, + +01:59:37.360 --> 01:59:37.680 +I guess that's a wrap then. + +01:59:39.060 --> 01:59:39.560 +Thank you, everyone, and see you next year. + +01:59:43.440 --> 01:59:43.740 +[Speaker 3]: I thought we were clear like 10 minutes ago. + +01:59:45.340 --> 01:59:45.840 +Are we not? We are, right? + +01:59:47.400 --> 01:59:47.780 +We're definitely clear. + +01:59:48.040 --> 01:59:48.220 +[Speaker 5]: OK, I'm + +01:59:49.240 --> 01:59:49.440 +[Speaker 3]: hanging up now. Good night. + +01:59:50.640 --> 01:59:51.140 +It was wonderful to meet you. + +01:59:51.900 --> 01:59:52.400 +[Speaker 7]: Take care Corwin + +01:59:56.520 --> 01:59:57.020 +[Speaker 4]: Bye Stefan. Bye. Bye all diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt new file mode 100644 index 00000000..2a53cea7 --- /dev/null +++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt @@ -0,0 +1,53 @@ +WEBVTT + + +00:00:00.000 --> 00:00:16.579 +Intro + +00:00:16.580 --> 00:01:09.399 +Reasons + +00:01:09.400 --> 00:02:09.159 +Information + +00:02:09.160 --> 00:03:53.119 +Properties + +00:03:53.120 --> 00:04:29.719 +Timezones + +00:04:29.720 --> 00:05:41.779 +Scheduling + +00:05:41.780 --> 00:06:48.399 +Templates + +00:06:48.400 --> 00:08:04.379 +Wiki + +00:08:04.380 --> 00:08:28.199 +Etherpad + +00:08:28.200 --> 00:09:05.919 +E-mail + +00:09:05.920 --> 00:10:08.120 +BigBlueButton web conferences + +00:10:08.121 --> 00:10:36.699 +Shortcuts + +00:10:36.700 --> 00:11:03.679 +Logbook + +00:11:03.680 --> 00:12:13.219 +Captions + +00:12:13.220 --> 00:13:11.279 +Crontabs and playing the talks + +00:13:11.280 --> 00:13:49.879 +Transitions + +00:13:49.880 --> 00:15:05.200 +Wrapping up diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt new file mode 100644 index 00000000..cbec1bb1 --- /dev/null +++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt @@ -0,0 +1,1076 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Intro + +00:00:00.000 --> 00:00:04.839 +Hi, I'm Sacha Chua. This presentation is a quick tour + +00:00:04.840 --> 00:00:07.959 +of some of the things we do to run EmacsConf. + +00:00:07.960 --> 00:00:12.239 +Since 2019, we've run it as an entirely online conference, + +00:00:12.240 --> 00:00:14.699 +and we do as much of the organization as possible + +00:00:14.700 --> 00:00:16.579 +within Emacs itself. + +NOTE Reasons + +00:00:16.580 --> 00:00:19.759 +I have three reasons for making this presentation. + +00:00:19.760 --> 00:00:22.759 +The first is entirely selfish: I need to figure out + +00:00:22.760 --> 00:00:25.359 +all the stuff I built for last year's EmacsConf, + +00:00:25.360 --> 00:00:28.079 +since it was a bit of a crazy scramble. + +00:00:28.080 --> 00:00:30.159 +The second is that I want to show people + +00:00:30.160 --> 00:00:33.239 +the process of thinking about a complex project, + +00:00:33.240 --> 00:00:35.879 +looking for little things to automate in Emacs, + +00:00:35.880 --> 00:00:38.439 +and building things up from small pieces. + +00:00:38.440 --> 00:00:39.799 +Maybe you'll get some ideas + +00:00:39.800 --> 00:00:42.759 +and start building tools for yourself, too. + +00:00:42.760 --> 00:00:47.039 +The third is that you find any of these little tools interesting, + +00:00:47.040 --> 00:00:49.439 +I want to point you to blog posts and source code + +00:00:49.440 --> 00:00:51.239 +where you can find out more. + +00:00:51.240 --> 00:00:52.559 +That way, you don't need to try + +00:00:52.560 --> 00:00:55.399 +to read and understand everything quickly. + +00:00:55.400 --> 00:00:57.719 +You can find this presentation and other links + +00:00:57.720 --> 00:01:04.439 +on the talk page at emacsconf.org/2023/talks/emacsconf. + +00:01:04.440 --> 00:01:06.319 +There are a lot of different parts, + +00:01:06.320 --> 00:01:09.399 +so I'll try to use this map to help make sense of it all. + +NOTE Information + +00:01:09.400 --> 00:01:11.199 +There's so much information to work with, + +00:01:11.200 --> 00:01:14.919 +so it probably doesn't surprise you that we use Org Mode a lot. + +00:01:14.920 --> 00:01:17.999 +Most of the conference coordination happens over e-mail, + +00:01:18.000 --> 00:01:20.639 +which I can quickly search with notmuch. + +00:01:20.640 --> 00:01:22.359 +Some of the information is private, + +00:01:22.360 --> 00:01:24.519 +like emergency contact numbers. + +00:01:24.520 --> 00:01:28.079 +We store the talk information in a private Org file. + +00:01:28.080 --> 00:01:30.079 +I try to put as much as possible + +00:01:30.080 --> 00:01:32.319 +into our public organizers' notebook + +00:01:32.320 --> 00:01:35.359 +so that processes and decisions are documented. + +00:01:35.360 --> 00:01:36.919 +We need a public website. + +00:01:36.920 --> 00:01:39.039 +We use Ikiwiki to make the webpages + +00:01:39.040 --> 00:01:41.119 +because we can work with plain text files + +00:01:41.120 --> 00:01:42.599 +in a Git repository. + +00:01:42.600 --> 00:01:45.399 +We also make a few static HTML pages + +00:01:45.400 --> 00:01:48.119 +for things where Ikiwiki is a little awkward. + +00:01:48.120 --> 00:01:50.519 +We post announcements to mailing lists. + +00:01:50.520 --> 00:01:53.159 +We also receive submissions in a private mailing list + +00:01:53.160 --> 00:01:55.639 +so that a number of people can review them. + +00:01:55.640 --> 00:01:56.839 +We have a backstage area + +00:01:56.840 --> 00:01:59.959 +for sharing files with volunteers and speakers. + +00:01:59.960 --> 00:02:03.119 +We share those files publicly when the talk goes live. + +00:02:03.120 --> 00:02:06.319 +And there's all the other stuff that goes into running EmacsConf, + +00:02:06.320 --> 00:02:09.159 +like shell scripts and configuration files. + +NOTE Properties + +00:02:09.160 --> 00:02:12.319 +First, speakers propose a talk by sending an e-mail. + +00:02:12.320 --> 00:02:15.799 +We take the info from that e-mail and store it in Org properties + +00:02:15.800 --> 00:02:18.199 +so that we can work with it later. + +00:02:18.200 --> 00:02:20.599 +Every talk is identified with an ID, + +00:02:20.600 --> 00:02:24.119 +but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org, + +00:02:24.120 --> 00:02:25.399 +I use `:SLUG:` as the keyword. + +00:02:25.600 --> 00:02:27.759 +Speakers' names go into the `:NAME:` property, + +00:02:27.760 --> 00:02:29.799 +and a short version goes into `:NAME_SHORT:` + +00:02:29.800 --> 00:02:32.199 +so that we can include that in a greeting. + +00:02:32.200 --> 00:02:34.439 +If people follow the template closely... + +00:02:34.440 --> 00:02:38.039 +...we can even automatically fill in the Org subtree for their talk. + +00:02:38.040 --> 00:02:40.799 +We can use regular expressions to recognize the text + +00:02:40.800 --> 00:02:42.879 +and extract the properties. + +00:02:42.880 --> 00:02:45.359 +Other properties need to be set by hand. + +00:02:45.360 --> 00:02:47.559 +I often mess things up when I retype them. + +00:02:47.560 --> 00:02:51.039 +To avoid typos, I have a function that sets a property + +00:02:51.040 --> 00:02:56.039 +based on the current region. I bind that to `C-c C-x p`. + +00:02:56.040 --> 00:02:58.599 +That makes it much easier to set properties + +00:02:58.600 --> 00:03:01.239 +that couldn't automatically be recognized. + +00:03:01.240 --> 00:03:04.519 +Sometimes it makes sense to dynamically generate a property + +00:03:04.520 --> 00:03:07.679 +and then edit it, like with filenames. + +00:03:07.680 --> 00:03:10.399 +We like to name all the talk files the same way, + +00:03:10.400 --> 00:03:14.439 +but sometimes special characters in talk titles or speaker names + +00:03:14.440 --> 00:03:17.839 +need a little tweaking. I'll put that in a `:FILE_PREFIX:` property + +00:03:17.840 --> 00:03:19.439 +so I can edit it. + +00:03:19.440 --> 00:03:22.799 +An Org property match can map over all the talk entries + +00:03:22.800 --> 00:03:25.439 +that don't have `:FILE_PREFIX:` defined. + +00:03:25.440 --> 00:03:29.199 +We can use that `:FILE_PREFIX:` to rename files from Emacs. + +00:03:29.200 --> 00:03:32.639 +With that property, we can then rename files using that prefix, + +00:03:32.640 --> 00:03:35.639 +some extra text, and the file extension. + +00:03:35.640 --> 00:03:38.879 +Sometimes it's easier to work with the data outside Emacs, + +00:03:38.880 --> 00:03:42.119 +like when I want to rename files with a shell script. + +00:03:42.120 --> 00:03:45.319 +If I export a subset of the data as JSON + +00:03:45.320 --> 00:03:48.959 +or JavaScript Object Notation, using `json-encode`... + +00:03:48.960 --> 00:03:51.119 +... then I can extract the data with `jq` + +00:03:51.120 --> 00:03:53.119 +and use it in shell scripts. + +NOTE Timezones + +00:03:53.120 --> 00:03:55.639 +Another example of semi-structured information + +00:03:55.640 --> 00:03:57.299 +is speaker availability. + +00:03:57.300 --> 00:03:59.619 +We have speakers from all over the world, + +00:03:59.620 --> 00:04:03.019 +so we try to schedule live Q&A sessions when they're around. + +00:04:03.020 --> 00:04:05.019 +That means working with timezones. + +00:04:05.020 --> 00:04:08.439 +Completion makes it much easier to set the timezone property + +00:04:08.440 --> 00:04:10.599 +without worrying about typos. + +00:04:10.600 --> 00:04:14.359 +We can take advantage of the timezone list from the tzc package, + +00:04:14.360 --> 00:04:17.159 +which works with Unix timezone definitions. + +00:04:17.160 --> 00:04:19.919 +Then we can convert times using Emacs. + +00:04:19.920 --> 00:04:22.639 +Using a standard format to encode the availability + +00:04:22.640 --> 00:04:24.399 +makes it easier to parse. + +00:04:24.400 --> 00:04:27.439 +I can use those availability constraints to report errors + +00:04:27.440 --> 00:04:29.719 +when I'm experimenting with the schedule. + +NOTE Scheduling + +00:04:29.720 --> 00:04:31.679 +Now that I have the availability information, + +00:04:31.680 --> 00:04:33.940 +I can think about scheduling. + +00:04:33.941 --> 00:04:38.239 +When we were planning EmacsConf 2022, the schedule was so full, + +00:04:38.240 --> 00:04:40.839 +I wanted to see if we could make it more manageable + +00:04:40.840 --> 00:04:43.039 +by splitting it up into two tracks. + +00:04:43.040 --> 00:04:45.919 +It was hard to think about times with just a table. + +00:04:45.920 --> 00:04:48.199 +I was able to turn the schedule information + +00:04:48.200 --> 00:04:51.279 +into an SVG to convince the other organizers + +00:04:51.280 --> 00:04:53.359 +to get on board with this crazy plan. + +00:04:53.360 --> 00:04:54.959 +And the nice thing about SVGs is that + +00:04:54.960 --> 00:04:57.519 +they can even be clickable on the wiki. + +00:04:57.520 --> 00:05:00.639 +Being able to quickly make SVGs of different schedules + +00:05:00.640 --> 00:05:04.199 +also helped me test scheduling ideas and think out loud. + +00:05:04.200 --> 00:05:06.879 +I could change the time between talks, the order of the talks, + +00:05:06.880 --> 00:05:08.939 +and even what tracks the talks were in. + +00:05:08.940 --> 00:05:10.719 +This was helpful when I needed to include + +00:05:10.720 --> 00:05:13.239 +some late submissions or availability changes + +00:05:13.240 --> 00:05:15.599 +and I wanted to ask speakers what they thought. + +00:05:15.600 --> 00:05:18.799 +They could see the different schedule options themselves. + +00:05:18.800 --> 00:05:22.679 +It's really nice to have Emacs Lisp support for working with SVGs. + +00:05:22.680 --> 00:05:25.399 +I also love how I can have an Emacs Lisp block + +00:05:25.400 --> 00:05:28.599 +in an Org Mode document that updates an SVG + +00:05:28.600 --> 00:05:31.999 +that I can view right there in my text editor. + +00:05:32.000 --> 00:05:34.799 +Setting the timezone lets me automatically translate times + +00:05:34.800 --> 00:05:37.819 +to the speaker's local timezone when I e-mail them. + +00:05:37.820 --> 00:05:41.779 +That's mostly a matter of using `format-time-string` with a timezone. + +NOTE Templates + +00:05:41.780 --> 00:05:43.159 +There's a lot of text to work with, + +00:05:43.160 --> 00:05:45.699 +which means templates are super handy. + +00:05:45.700 --> 00:05:48.119 +There are a number of templating functions for Emacs Lisp, + +00:05:48.120 --> 00:05:52.959 +like the built-in `tempo.el` or `s-lex-format` from `s.el`. + +00:05:52.960 --> 00:05:54.439 +I ended up writing something + +00:05:54.440 --> 00:05:58.019 +that works with property lists (plists) instead, + +00:05:58.020 --> 00:06:02.199 +since we use plists all over the emacsconf-el library. + +00:06:02.200 --> 00:06:03.999 +All it does is replace `${variable}` + +00:06:04.000 --> 00:06:05.519 +with the value from a property list. + +00:06:05.520 --> 00:06:07.559 +I use this mostly because I have a hard time + +00:06:07.560 --> 00:06:11.079 +keeping track of which `%s` is which when I use `format`, + +00:06:11.080 --> 00:06:14.299 +and it's hard to get an overall view if I just use `concat`. + +00:06:14.300 --> 00:06:17.599 +The code looks for the properties and replaces them with the values. + +00:06:17.600 --> 00:06:21.299 +I just find it a little easier to think about sometimes. + +00:06:21.300 --> 00:06:24.079 +Getting all the information is just a matter of going over + +00:06:24.080 --> 00:06:27.399 +all the talk entries using `org-map-entries`. + +00:06:27.400 --> 00:06:30.699 +This builds the talk info by running a bunch of functions. + +00:06:30.700 --> 00:06:33.819 +Some functions get the information from the Org file. + +00:06:33.820 --> 00:06:36.959 +Other functions use the info already collected. + +00:06:36.960 --> 00:06:39.259 +This can take a while to do again and again. + +00:06:39.260 --> 00:06:41.739 +It's useful to `memoize` this function + +00:06:41.740 --> 00:06:43.499 +when I know I'll be using it a lot, + +00:06:43.500 --> 00:06:45.959 +like when I export the organizers notebook. + +00:06:45.960 --> 00:06:48.399 +Memoize caches recent values. + +NOTE Wiki + +00:06:48.400 --> 00:06:50.239 +We combine this templating function + +00:06:50.240 --> 00:06:51.479 +with the talk information + +00:06:51.480 --> 00:06:53.439 +to fill in the conference wiki, + +00:06:53.440 --> 00:06:56.479 +since that's a matter of writing templated strings to files. + +00:06:56.480 --> 00:06:58.279 +The talk pages are generated once + +00:06:58.280 --> 00:07:00.279 +and then left alone for manual editing, + +00:07:00.280 --> 00:07:02.399 +while the navigation is regenerated + +00:07:02.400 --> 00:07:04.659 +every time we change the details. + +00:07:04.660 --> 00:07:05.799 +Here are some examples + +00:07:05.800 --> 00:07:07.919 +of how we fill in the conference wiki. + +00:07:07.920 --> 00:07:10.959 +We put in the format of the talk, how Q&A works, + +00:07:10.960 --> 00:07:12.319 +and what the status is. + +00:07:12.320 --> 00:07:14.959 +Once the talk is live, we include the video + +00:07:14.960 --> 00:07:17.079 +and the links to the files, too. + +00:07:17.080 --> 00:07:18.719 +The code is a little bit long, + +00:07:18.720 --> 00:07:20.079 +but the important part is that + +00:07:20.080 --> 00:07:22.879 +we fill in a plist with the values we calculate, + +00:07:22.880 --> 00:07:26.379 +and then we can use `emacsconf-replace-plist-in-string` + +00:07:26.380 --> 00:07:28.019 +to put that all together. + +00:07:28.020 --> 00:07:30.279 +The schedule is a little more complicated. + +00:07:30.280 --> 00:07:32.079 +I wrote an Ikiwiki directive + +00:07:32.080 --> 00:07:34.019 +so that the markup is more manageable, + +00:07:34.020 --> 00:07:36.519 +and the Emacs Lisp function uses that. + +00:07:36.520 --> 00:07:40.619 +The Ikiwiki directive takes all the data and turns it into HTML... + +00:07:40.620 --> 00:07:42.959 +...so we can use Emacs Lisp to iterate over + +00:07:42.960 --> 00:07:44.819 +a slightly smaller property list + +00:07:44.820 --> 00:07:47.779 +and put them into the format Ikiwiki expects. + +00:07:47.780 --> 00:07:50.079 +It's nice to be able to navigate between talks + +00:07:50.080 --> 00:07:52.839 +without going back to the schedule page each time. + +00:07:52.840 --> 00:07:55.579 +This is handled by keeping two extra copies of the list: + +00:07:55.580 --> 00:07:57.559 +one with the first talk popped off, + +00:07:57.560 --> 00:08:00.359 +and one with an extra element added to the beginning. + +00:08:00.360 --> 00:08:02.439 +Then we can use the heads of those lists + +00:08:02.440 --> 00:08:04.379 +for next/previous links. + +NOTE Etherpad + +00:08:04.380 --> 00:08:06.679 +Links to the next talks are also handy + +00:08:06.680 --> 00:08:08.639 +on the collaborative Etherpad documents + +00:08:08.640 --> 00:08:12.039 +that we use for collecting questions, answers, and notes + +00:08:12.040 --> 00:08:12.839 +during each talk. + +00:08:12.840 --> 00:08:15.299 +Etherpad has an API... + +00:08:15.300 --> 00:08:17.319 +...so I can start the pads off with a template + +00:08:17.320 --> 00:08:18.939 +before the conference. + +00:08:18.940 --> 00:08:21.239 +I don't want to accidentally overwrite a pad + +00:08:21.240 --> 00:08:22.939 +that has been manually edited. + +00:08:22.940 --> 00:08:25.719 +We can save the timestamp of the last modification + +00:08:25.720 --> 00:08:28.199 +and then compare it before overwriting. + +NOTE E-mail + +00:08:28.200 --> 00:08:31.239 +Templates are also very handy when it comes to e-mail. + +00:08:31.240 --> 00:08:33.599 +Sometimes we send e-mails one at a time, + +00:08:33.600 --> 00:08:35.199 +like when we let a speaker know + +00:08:35.200 --> 00:08:36.879 +that we've received their proposal. + +00:08:36.880 --> 00:08:39.559 +That's mostly a matter of plugging the talk's properties + +00:08:39.560 --> 00:08:41.559 +into the right places in the template. + +00:08:41.560 --> 00:08:45.019 +Sometimes we send e-mails to lots of speakers at the same time, + +00:08:45.020 --> 00:08:48.299 +like when we send them instructions for uploading their files. + +00:08:48.300 --> 00:08:51.619 +Instead of sending one e-mail and Bcc-ing everyone, + +00:08:51.620 --> 00:08:53.479 +or sending people multiple e-mails + +00:08:53.480 --> 00:08:55.139 +because they have multiple talks, + +00:08:55.140 --> 00:08:57.559 +I like to draft these as individual e-mails + +00:08:57.560 --> 00:08:59.799 +to each speaker (or group of speakers, + +00:08:59.800 --> 00:09:02.599 +if more than one person is associated with a talk). + +00:09:02.600 --> 00:09:05.919 +That gives me an opportunity to personalize it further. + +NOTE BigBlueButton web conferences + +00:09:05.920 --> 00:09:08.119 +Many speakers answer questions live + +00:09:08.120 --> 00:09:10.039 +in BigBlueButton web conference rooms. + +00:09:10.440 --> 00:09:12.639 +Setting up one room per group of speakers + +00:09:12.640 --> 00:09:15.199 +makes it easy to give the speakers the details + +00:09:15.400 --> 00:09:18.719 +and associate the recorded video with the talk afterwards. + +00:09:18.720 --> 00:09:20.599 +For EmacsConf 2023, + +00:09:20.600 --> 00:09:25.079 +I used Spookfox to control Mozilla Firefox from Emacs + +00:09:25.080 --> 00:09:27.479 +so that I could automate creating the rooms + +00:09:27.480 --> 00:09:30.919 +and adding the URLs to the talk properties in my Org file. + +00:09:30.957 --> 00:09:33.959 +Then I can use mail merge to send each speaker + +00:09:33.960 --> 00:09:36.899 +the check-in instructions for their specific room. + +00:09:36.900 --> 00:09:39.139 +Some speakers will take questions by e-mail + +00:09:39.140 --> 00:09:41.619 +after the conference instead of attending live, + +00:09:41.620 --> 00:09:43.359 +so we send them shorter instructions + +00:09:43.360 --> 00:09:45.539 +just in case they want to drop by. + +00:09:45.540 --> 00:09:47.799 +[Live Q&A sessions]: After the first rush of questions, + +00:09:47.800 --> 00:09:50.579 +we can open it up for other people to join. + +00:09:50.580 --> 00:09:53.039 +This is handled by changing the public page + +00:09:53.040 --> 00:09:55.119 +from one that just refreshes in a loop + +00:09:55.120 --> 00:09:58.820 +to one that redirects to the actual web conference room. + +00:09:58.821 --> 00:10:00.079 +Just in case, we also + +00:10:00.080 --> 00:10:02.159 +generate static copies of those redirects + +00:10:02.160 --> 00:10:04.299 +so that we can copy them if needed. + +00:10:04.300 --> 00:10:06.679 +That way, I don't have to count on Emacs being able to + +00:10:06.680 --> 00:10:08.120 +publish them over TRAMP. + +NOTE Shortcuts + +00:10:08.121 --> 00:10:11.659 +During the conference, I'm often jumping from talk to talk. + +00:10:11.660 --> 00:10:13.199 +Instead of going to the Org file + +00:10:13.200 --> 00:10:14.519 +and then searching for the talk, + +00:10:14.520 --> 00:10:17.239 +I've made a little Hydra with keyboard shortcuts. + +00:10:17.240 --> 00:10:19.079 +One of these shortcuts lets me + +00:10:19.080 --> 00:10:20.959 +jump to a talk with completion + +00:10:20.960 --> 00:10:24.259 +so that I can just type in part of the talk ID, + +00:10:24.260 --> 00:10:26.399 +title, or speaker name. + +00:10:26.400 --> 00:10:28.679 +I've also defined some Embark actions + +00:10:28.680 --> 00:10:32.079 +so that I can act on a talk right from the completion menu. + +00:10:32.080 --> 00:10:35.079 +For example, I might want to jump to the wiki page + +00:10:35.080 --> 00:10:36.699 +or e-mail the speaker. + +NOTE Logbook + +00:10:36.700 --> 00:10:40.099 +I can also add notes to a talk while looking at an email, + +00:10:40.100 --> 00:10:41.639 +like when a speaker lets me know + +00:10:41.640 --> 00:10:43.279 +that their video will be late. + +00:10:43.280 --> 00:10:45.799 +Making it easy to add a note turns Emacs into + +00:10:45.800 --> 00:10:49.959 +a very basic contact relationship management system, or CRM. + +00:10:49.960 --> 00:10:52.439 +The way this works is that we have a function + +00:10:52.440 --> 00:10:55.459 +that lists all the email addresses associated with a talk. + +00:10:55.460 --> 00:10:57.919 +We can then map that over the list of talks, + +00:10:57.920 --> 00:10:59.959 +look up the author of the current email, + +00:10:59.960 --> 00:11:03.679 +prompt the user for the talk to add the note to, and add the note. + +NOTE Captions + +00:11:03.680 --> 00:11:04.679 +On to captions. + +00:11:04.680 --> 00:11:07.239 +We've been doing captions for the last couple of years, + +00:11:07.240 --> 00:11:10.419 +and now we have a small army of volunteer captioners. + +00:11:10.420 --> 00:11:12.679 +They get early access to the recorded talks + +00:11:12.680 --> 00:11:16.159 +and fix up misrecognized words, format keyboard shortcuts + +00:11:16.160 --> 00:11:19.579 +to follow Emacs conventions, spell names correctly, + +00:11:19.580 --> 00:11:21.839 +and do all sorts of other wonderful things. + +00:11:21.840 --> 00:11:24.399 +One of our evil plans with EmacsConf + +00:11:24.400 --> 00:11:28.359 +is to get cool stuff out of people's heads into videos + +00:11:28.360 --> 00:11:32.039 +and also make captions so that those videos can be searched. + +00:11:32.040 --> 00:11:34.999 +To make that possible, we first need a backstage area + +00:11:35.000 --> 00:11:36.919 +where volunteers can get the files. + +00:11:36.920 --> 00:11:39.839 +This is just a simple password-protected directory + +00:11:39.840 --> 00:11:43.739 +with a static HTML page that lists the talks by status + +00:11:43.740 --> 00:11:46.379 +and shows the files related to each talk. + +00:11:46.380 --> 00:11:49.899 +As a talk moves through the process, I update its TODO state + +00:11:49.900 --> 00:11:51.359 +and republish this index. + +00:11:51.360 --> 00:11:54.519 +Talks that are ready to be captioned show up in that section, + +00:11:54.520 --> 00:11:58.179 +and volunteers can call dibs on the talk they're interested in. + +00:11:58.180 --> 00:12:00.979 +That's all done with a function that formats the information + +00:12:00.980 --> 00:12:04.319 +and uses TRAMP to save the file directly to the server. + +00:12:04.320 --> 00:12:06.679 +You can find more details on our captioning process + +00:12:06.680 --> 00:12:09.039 +at emacsconf.org/captioning. + +00:12:09.040 --> 00:12:13.219 +I like using subed to edit subtitles within Emacs. + +NOTE Crontabs and playing the talks + +00:12:13.220 --> 00:12:16.059 +Let's talk about actually playing the talks. + +00:12:16.060 --> 00:12:19.559 +For EmacsConf 2022, we tried using Emacs timers + +00:12:19.560 --> 00:12:20.939 +to run the talks. + +00:12:20.940 --> 00:12:24.079 +It turns out that you can't call TRAMP from a timer + +00:12:24.080 --> 00:12:26.719 +when you're already using TRAMP from another timer + +00:12:26.720 --> 00:12:27.799 +at the same time. + +00:12:27.800 --> 00:12:29.719 +I thought about just tweaking the schedule + +00:12:29.720 --> 00:12:31.799 +so that we always start things at different times, + +00:12:31.800 --> 00:12:35.119 +but I figured there's probably a more elegant way to do this. + +00:12:35.120 --> 00:12:37.519 +This year, I'm planning to experiment with using cron + +00:12:37.520 --> 00:12:39.599 +to start talks on autopilot. + +00:12:39.600 --> 00:12:42.479 +The shell scripts will take care of playing the videos... + +00:12:42.480 --> 00:12:44.839 +... figuring out the appropriate Q&A... + +00:12:44.840 --> 00:12:47.579 +... and joining the web conference if needed. + +00:12:47.580 --> 00:12:49.599 +We just need to format the information... + +00:12:49.600 --> 00:12:52.219 +...and install it as the track's crontab. + +00:12:52.220 --> 00:12:54.079 +It's useful to be able to switch tracks + +00:12:54.080 --> 00:12:55.879 +to manual mode independently, + +00:12:55.880 --> 00:12:57.899 +just in case things go haywire. + +00:12:57.900 --> 00:13:00.119 +Then we can start everything manually. + +00:13:00.120 --> 00:13:02.799 +I can also manually update a talk's status, + +00:13:02.800 --> 00:13:06.519 +like when the host tells me that it's okay to open up the Q&A. + +00:13:06.520 --> 00:13:08.719 +The shell scripts we run from the crontab + +00:13:08.720 --> 00:13:11.279 +can also update the talk status themselves. + +NOTE Transitions + +00:13:11.280 --> 00:13:14.319 +Then a bunch of things automatically happen based on + +00:13:14.320 --> 00:13:15.599 +the talk status changes. + +00:13:15.600 --> 00:13:18.959 +This uses `org-after-todo-state-change-hook`. + +00:13:18.960 --> 00:13:20.359 +We get the talk information + +00:13:20.360 --> 00:13:22.519 +and pass it to a list of functions. + +00:13:22.520 --> 00:13:26.279 +Internet Relay Chat or IRC is an easy way for people + +00:13:26.280 --> 00:13:29.139 +to join the conversation around EmacsConf. + +00:13:29.140 --> 00:13:31.799 +We announce a talk whenever it changes state. + +00:13:31.800 --> 00:13:33.599 +For example, when a talk starts, + +00:13:33.600 --> 00:13:36.039 +we post the URLs to the talk webpage + +00:13:36.040 --> 00:13:39.439 +and the Etherpad for questions. We change the topic as well, + +00:13:39.440 --> 00:13:41.879 +so anyone can see the current talk's information + +00:13:41.880 --> 00:13:43.039 +even if they're a little late. + +00:13:43.180 --> 00:13:45.799 +This is easy to do with a little bit of Emacs Lisp + +00:13:45.800 --> 00:13:48.519 +because (of course!) Emacs has an IRC client. + +00:13:48.520 --> 00:13:49.879 +In fact, it has several. + +NOTE Wrapping up + +00:13:49.880 --> 00:13:53.139 +It seems like a lot of automation and Emacs Lisp, + +00:13:53.140 --> 00:13:56.899 +but really, all of this was just built up little by little. + +00:13:56.900 --> 00:13:59.279 +And tinkering with this is *fun*, you know? + +00:13:59.280 --> 00:14:01.259 +It's like always being able to ask, + +00:14:01.260 --> 00:14:03.300 +"Hey, wouldn't it be cool if..." + +00:14:03.301 --> 00:14:05.279 +and then actually being able to go and do it. + +00:14:05.280 --> 00:14:07.999 +Sometimes it feels like EmacsConf is an excuse + +00:14:08.000 --> 00:14:10.199 +for me to play with Emacs. + +00:14:10.200 --> 00:14:11.999 +It's pretty amazing what you can do + +00:14:12.000 --> 00:14:13.799 +by combining a bunch of pieces. + +00:14:13.800 --> 00:14:16.719 +A way to store slightly-structured information. + +00:14:16.720 --> 00:14:18.879 +A way to get it out again. Templates. + +00:14:18.880 --> 00:14:20.679 +TRAMP, for working with remote files + +00:14:20.680 --> 00:14:21.919 +and running remote commands. + +00:14:21.920 --> 00:14:23.839 +A way to talk to a web browser. + +00:14:23.840 --> 00:14:25.399 +A way to work with SVGs. + +00:14:25.400 --> 00:14:27.759 +An email client. A chat client. + +00:14:27.760 --> 00:14:29.639 +You can smoosh them all together + +00:14:29.640 --> 00:14:32.699 +in a way that you couldn't if they were all separate things. + +00:14:32.700 --> 00:14:36.279 +The code is in the emacsconf-el repository. + +00:14:36.280 --> 00:14:39.119 +It's a bit of a tangle because it's accumulating organically + +00:14:39.120 --> 00:14:40.879 +and I haven't really had the brainspace + +00:14:40.880 --> 00:14:42.579 +to step back and clean it up. + +00:14:42.580 --> 00:14:45.919 +But if you spotted anything interesting in this presentation, + +00:14:45.920 --> 00:14:48.619 +you can go check it out and see what you can scavenge. + +00:14:48.620 --> 00:14:50.999 +The link and this presentation are available + +00:14:51.000 --> 00:14:59.119 +from this talk's webpage at emacsconf.org/2023/talks/emacsconf . + +00:14:59.120 --> 00:15:05.200 +Let's figure out how to make Emacsconf even awesomer next year! diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt new file mode 100644 index 00000000..4f89a184 --- /dev/null +++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt @@ -0,0 +1,3803 @@ +WEBVTT + + +00:00:00.040 --> 00:00:00.540 +[Speaker 0]: Here. + +00:00:05.140 --> 00:00:05.440 +[Speaker 1]: All right. Yeah. So thanks, + +00:00:06.279 --> 00:00:06.779 +Fermin, for the great talk. + +00:00:08.039 --> 00:00:08.540 +People have questions, + +00:00:12.179 --> 00:00:12.380 +please post them on the pad or the IRC as + +00:00:13.259 --> 00:00:13.759 +well and we'll take them up. + +00:00:17.240 --> 00:00:17.480 +[Speaker 2]: Thank you very much. The guests will be here + +00:00:21.720 --> 00:00:22.220 +to answer questions. Let's see. + +00:00:23.560 --> 00:00:24.060 +Yep. + +00:00:28.080 --> 00:00:28.220 +[Speaker 1]: And also, Fermin, if you later want to + +00:00:30.660 --> 00:00:31.160 +clarify anything or fix any URLs or such, + +00:00:32.860 --> 00:00:33.000 +you're always welcome to do that either like + +00:00:36.000 --> 00:00:36.140 +on the Wiki page, or if you like email any of + +00:00:37.560 --> 00:00:37.840 +the organizers, they should be able to help + +00:00:38.400 --> 00:00:38.900 +with that as well. + +00:00:41.000 --> 00:00:41.500 +[Speaker 2]: Okay. Yeah, I put the wrong URL. + +00:00:46.020 --> 00:00:46.360 +Yeah, not a big deal really, + +00:00:48.480 --> 00:00:48.980 +if you look it up. Yeah, + +00:00:50.940 --> 00:00:51.440 +that's really better. Thank you very much. + +00:00:56.920 --> 00:00:57.420 +Checking, no questions. + +00:00:58.780 --> 00:00:59.280 +Very good to be in touch. + +00:01:17.220 --> 00:01:17.360 +[Speaker 1]: Oh, we have a question here in the big blue + +00:01:17.720 --> 00:01:18.220 +button chat. + +00:01:21.820 --> 00:01:22.320 +[Speaker 2]: Oh, public chat. I see. + +00:01:26.380 --> 00:01:26.600 +Is LEM an acronym? I think it is, + +00:01:32.960 --> 00:01:33.080 +but I never remember. The complete name is + +00:01:36.160 --> 00:01:36.660 +like something... It's also a circle, + +00:01:38.940 --> 00:01:39.440 +like, you know, a self-referencing, + +00:01:41.320 --> 00:01:41.820 +you know, recursive name. + +00:01:42.900 --> 00:01:43.400 +I never remember it, sorry. + +00:01:45.860 --> 00:01:46.360 +It's like... Yeah, someone... + +00:01:50.580 --> 00:01:51.080 +Okay, someone asked about the DEM community, + +00:01:56.200 --> 00:01:56.700 +how big it is. So I don't remember, + +00:01:57.500 --> 00:01:57.720 +to answer the question, + +00:01:58.440 --> 00:01:58.740 +I don't remember the acronym, + +00:02:00.640 --> 00:02:01.140 +but it is an acronym. I just never... + +00:02:04.700 --> 00:02:05.060 +And it's not written anywhere, + +00:02:06.380 --> 00:02:06.880 +I think, or someone... + +00:02:09.340 --> 00:02:09.840 +I never check it. So I... + +00:02:12.720 --> 00:02:13.220 +[Speaker 0]: I forgot. + +00:02:15.360 --> 00:02:15.820 +[Speaker 2]: My maintainer told me once and then So, + +00:02:17.540 --> 00:02:17.900 +whole large, does Leia have a package + +00:02:19.800 --> 00:02:20.300 +manager? We do have a package manager, + +00:02:21.900 --> 00:02:22.400 +funnily enough. We use the QuickLisp + +00:02:26.200 --> 00:02:26.700 +infrastructure to get packages, + +00:02:29.580 --> 00:02:30.080 +so it's very easy to install packages. + +00:02:33.340 --> 00:02:33.840 +So basically, we don't have a package manager + +00:02:35.740 --> 00:02:36.240 +as in Emacs, half a packet.l. + +00:02:39.140 --> 00:02:39.400 +We're using the same common list + +00:02:41.180 --> 00:02:41.460 +infrastructure to provide the different + +00:02:45.560 --> 00:02:46.060 +packages. We also have a talk with the + +00:02:47.360 --> 00:02:47.620 +Ultralisp, which is like a, + +00:02:48.640 --> 00:02:48.900 +you know, QuickLisp is like, + +00:02:50.020 --> 00:02:50.520 +you can think quickly of Melpa. + +00:02:52.540 --> 00:02:53.040 +Ultralisp is like a fast Melpa, + +00:02:54.440 --> 00:02:54.900 +very fast Melpa, that every, + +00:02:58.460 --> 00:02:58.660 +I think every day you can get a package from + +00:03:01.720 --> 00:03:01.880 +them. And We have a tag system that you can + +00:03:02.920 --> 00:03:03.420 +submit a package and get a tag, + +00:03:08.180 --> 00:03:08.360 +and Theory can download those packages with + +00:03:13.140 --> 00:03:13.640 +the lem tag. So the thing is, + +00:03:17.040 --> 00:03:17.440 +it's not yet, it doesn't have a user + +00:03:18.400 --> 00:03:18.900 +interface to install packages. + +00:03:22.020 --> 00:03:22.520 +Still, it's 2 external packages. + +00:03:25.520 --> 00:03:25.920 +For now, imagine this is like the early + +00:03:27.560 --> 00:03:27.960 +Emacs, right? Everything is going to the core + +00:03:29.040 --> 00:03:29.540 +for now, because we need that functionality. + +00:03:32.360 --> 00:03:32.680 +In the future, we probably will split it up + +00:03:37.120 --> 00:03:37.620 +way more. But let me first answer a question + +00:03:42.440 --> 00:03:42.740 +in the other part. How large is the LEN + +00:03:44.440 --> 00:03:44.720 +community? Hope it's a chance of survival + +00:03:47.360 --> 00:03:47.860 +long term. So we are a very small community, + +00:03:51.260 --> 00:03:51.760 +mostly because Sasaki-san, + +00:03:54.120 --> 00:03:54.620 +the main developers of the community, + +00:03:57.160 --> 00:03:57.440 +are from Japan and some of them, + +00:03:58.620 --> 00:03:59.120 +or most of them, don't know English. + +00:04:01.640 --> 00:04:01.960 +At the beginning, LEM was a very + +00:04:05.020 --> 00:04:05.220 +Japanese-centric tooling because barrier of + +00:04:06.960 --> 00:04:07.460 +language, most of the users are from Japan. + +00:04:08.640 --> 00:04:09.140 +So different communities. + +00:04:12.040 --> 00:04:12.260 +And also, I don't know why, + +00:04:13.100 --> 00:04:13.520 +but the main maintainer, + +00:04:17.740 --> 00:04:18.079 +which is Asaki-san, very good guy and a very, + +00:04:19.079 --> 00:04:19.579 +very talented developer. + +00:04:21.779 --> 00:04:22.280 +He doesn't like to, you know, + +00:04:24.640 --> 00:04:25.020 +at first the project was all in Japanese, + +00:04:27.100 --> 00:04:27.260 +so he doesn't care if someone uses the + +00:04:28.520 --> 00:04:29.020 +project or not. He's more focused on the, + +00:04:32.080 --> 00:04:32.560 +I guess, quality of the features of it. + +00:04:35.740 --> 00:04:36.240 +So that creates a problem that doesn't really + +00:04:38.680 --> 00:04:39.000 +mind the community. So the community doesn't + +00:04:41.640 --> 00:04:41.760 +mind in a good way. It's to focus more on + +00:04:43.440 --> 00:04:43.940 +technicality rather than the user, + +00:04:46.300 --> 00:04:46.800 +which I mean, I cannot blame him. + +00:04:49.540 --> 00:04:49.700 +It's very hard work to build an Emacs and + +00:04:52.540 --> 00:04:53.040 +editor from scratch. It's not a trivial task. + +00:04:56.160 --> 00:04:56.660 +So yeah, we're a very small community. + +00:04:58.660 --> 00:04:58.940 +But I think the chance of survival is very + +00:05:01.440 --> 00:05:01.640 +good because LEM is written in ANSI Common + +00:05:04.540 --> 00:05:05.040 +Lisp, so it should be used in any... + +00:05:07.440 --> 00:05:07.940 +Well, it works in a lot of Common Lisp + +00:05:10.400 --> 00:05:10.900 +implementation. For people who don't know, + +00:05:12.180 --> 00:05:12.400 +Common Lisp is a language that was + +00:05:13.140 --> 00:05:13.640 +standardized in the 94. + +00:05:14.640 --> 00:05:14.840 +I explained that in the talk, + +00:05:15.660 --> 00:05:16.160 +but I'll say it again. + +00:05:18.080 --> 00:05:18.580 +So, if Common Lisp exists, + +00:05:21.200 --> 00:05:21.700 +in theory, LEM should also exist. + +00:05:24.340 --> 00:05:24.840 +And also if nCursor doesn't break or doesn't + +00:05:27.560 --> 00:05:28.060 +stop to exist, which is even less likely. + +00:05:30.400 --> 00:05:30.900 +So that's the main idea. + +00:05:33.460 --> 00:05:33.740 +And you can use LEM for very good Common Lisp + +00:05:36.380 --> 00:05:36.600 +development already. If Common Lisp doesn't + +00:05:39.440 --> 00:05:39.940 +change that much, it should disappear. + +00:05:42.720 --> 00:05:43.220 +We are not bound to any company or any... + +00:05:46.040 --> 00:05:46.540 +Even Sasaki-san, God forbid, + +00:05:47.720 --> 00:05:48.220 +disappears instantaneously. + +00:05:50.280 --> 00:05:50.740 +There are a few people, + +00:05:52.260 --> 00:05:52.440 +me included, that know very well the code + +00:05:54.020 --> 00:05:54.520 +base and we can continue the development. + +00:05:56.320 --> 00:05:56.720 +So it's not like 1, there's no one-man + +00:05:58.860 --> 00:05:59.360 +project. Maybe a four-man project or 5, + +00:06:04.280 --> 00:06:04.640 +but not 1. Okay, I'll answer the 1 in the + +00:06:08.100 --> 00:06:08.600 +chat, on the blue button. + +00:06:10.520 --> 00:06:10.840 +Is it best to learn Common Lisp before + +00:06:13.100 --> 00:06:13.600 +learning to use LEM? I think this is similar + +00:06:15.780 --> 00:06:16.280 +to Emacs and EmacLisp, + +00:06:18.740 --> 00:06:19.080 +right? Should you use EmacLisp before using + +00:06:20.160 --> 00:06:20.460 +Emacs? Doesn't make too much sense, + +00:06:23.360 --> 00:06:23.860 +right? You see Emacs and then you go learning + +00:06:28.620 --> 00:06:29.060 +Common Lisp. I think it's the same, + +00:06:30.800 --> 00:06:31.300 +sorry, EmacsLisp. And it's the same with LEM. + +00:06:32.800 --> 00:06:33.300 +You can start using LEM with a non-common + +00:06:37.800 --> 00:06:38.040 +Lisp, which is fine. You can use it to edit + +00:06:39.020 --> 00:06:39.520 +your things. It's like an editor. + +00:06:42.900 --> 00:06:43.040 +But like Emacs, LEM puts a lot of focus on + +00:06:46.820 --> 00:06:46.960 +extensibility. So it's very probable that you + +00:06:49.920 --> 00:06:50.420 +will learn how to write Common Lisp. + +00:06:53.440 --> 00:06:53.600 +I have to say that a lot of people that use + +00:06:56.000 --> 00:06:56.440 +LEM, well, me and most of the people, + +00:06:59.060 --> 00:06:59.440 +come from Emacs. So if you come from Emacs + +00:07:00.620 --> 00:07:01.120 +and you know a little bit of Emac Lisp, + +00:07:04.820 --> 00:07:05.320 +Common Lisp is like an uncle or cousin + +00:07:07.120 --> 00:07:07.620 +distance that shares some similarities. + +00:07:09.820 --> 00:07:10.020 +So you will... Well, it's not going to be + +00:07:12.520 --> 00:07:13.020 +that. I can show... Sorry about that. + +00:07:14.960 --> 00:07:15.460 +For example, I show that in the... + +00:07:21.780 --> 00:07:22.280 +I can show... So the... + +00:07:27.080 --> 00:07:27.540 +It's not that different from Emacs regarding + +00:07:28.940 --> 00:07:29.440 +configuration. So for example, + +00:07:31.020 --> 00:07:31.520 +this command doesn't exist on LEM. + +00:07:35.020 --> 00:07:35.520 +And Sasaki-san didn't want to copy one-to-one + +00:07:36.360 --> 00:07:36.860 +the command from Emacs, + +00:07:39.660 --> 00:07:39.860 +the airgrip, the cursor grip command of + +00:07:41.120 --> 00:07:41.620 +Emacs. And I said, okay, + +00:07:43.080 --> 00:07:43.440 +then I'm going to implement it myself. + +00:07:44.240 --> 00:07:44.740 +And it's something like this, + +00:07:47.960 --> 00:07:48.080 +which is you will do something similar to + +00:07:50.320 --> 00:07:50.500 +Emacs, right? This will be like things at + +00:07:52.280 --> 00:07:52.780 +point symbol or something like that. + +00:07:54.740 --> 00:07:55.240 +And then you have a prompt, + +00:07:59.060 --> 00:07:59.440 +very prompt for directory with Emacs would be + +00:08:01.260 --> 00:08:01.560 +something similar. And then you then launch + +00:08:02.960 --> 00:08:03.460 +grep with the command that you want. + +00:08:06.340 --> 00:08:06.780 +This is not that far from Emacs, + +00:08:10.680 --> 00:08:10.840 +this, really. If you don't know neither of + +00:08:12.740 --> 00:08:13.240 +those, you can still use LEM, + +00:08:16.560 --> 00:08:17.060 +though as with Emacs, extensibility will be, + +00:08:22.440 --> 00:08:22.760 +well, you couldn't extend it if you don't + +00:08:28.700 --> 00:08:29.100 +know combo disp. Should I answer the question + +00:08:33.280 --> 00:08:33.780 +on the etherpad writing it at the same time? + +00:08:36.580 --> 00:08:36.760 +[Speaker 1]: You're welcome to, but you don't have to. + +00:08:38.000 --> 00:08:38.500 +You can just answer here on stream, + +00:08:40.440 --> 00:08:40.940 +[Speaker 2]: on the Google button. Okay. + +00:08:43.140 --> 00:08:43.640 +Okay. Are there any Lisp machine capabilities + +00:08:45.020 --> 00:08:45.280 +you're trying to provide that GNU image + +00:08:46.920 --> 00:08:47.040 +lacks? The type objects capability in the + +00:08:47.560 --> 00:08:48.060 +editor, as an example. + +00:08:53.840 --> 00:08:54.340 +I mean, there were a few discussions about + +00:08:59.920 --> 00:09:00.060 +the Lisp machines and LEM and all the big + +00:09:03.080 --> 00:09:03.280 +projects that tries to get some capability of + +00:09:05.180 --> 00:09:05.680 +it. But we don't really... + +00:09:09.840 --> 00:09:10.340 +We try to improve the development experience + +00:09:12.800 --> 00:09:13.300 +for Common Lisp and for LEM, + +00:09:18.460 --> 00:09:18.660 +imitating a lot of things that the Lisp + +00:09:21.560 --> 00:09:22.060 +machine had. I'm going to try to do a thing + +00:09:23.400 --> 00:09:23.900 +that I don't know if it's going to work. + +00:09:26.880 --> 00:09:27.380 +So to explain this, let's see. + +00:09:35.680 --> 00:09:36.180 +I'm going to recompile them now live. + +00:09:42.040 --> 00:09:42.540 +Let's see how it works. + +00:09:47.860 --> 00:09:48.240 +And compiling the, yes, + +00:09:51.780 --> 00:09:52.280 +it doesn't work. OK. What if I do? + +00:09:53.900 --> 00:09:54.220 +No, it doesn't work. OK. + +00:09:55.280 --> 00:09:55.760 +I was trying to compile the SDL2, + +00:09:57.540 --> 00:09:58.040 +but I do have the codebase modifier. + +00:10:00.360 --> 00:10:00.860 +I should be able to compile this. + +00:10:05.640 --> 00:10:06.140 +Oh, that was really bad. + +00:10:13.320 --> 00:10:13.580 +What about example? I have the code base, + +00:10:17.220 --> 00:10:17.720 +so let me check. I'm going to do this. + +00:10:19.080 --> 00:10:19.580 +Oh, yeah, I have this modified. + +00:10:31.120 --> 00:10:31.620 +I stash this. OK. I have this modified. + +00:10:33.280 --> 00:10:33.780 +Now it should work. OK. + +00:10:42.480 --> 00:10:42.820 +Sorry. I was going to show the writing + +00:10:45.620 --> 00:10:45.900 +capabilities of it, similar to the Lisp + +00:10:47.800 --> 00:10:48.300 +machine of navigating of classes. + +00:10:52.000 --> 00:10:52.500 +So the answer of that question is, + +00:10:57.040 --> 00:10:57.180 +not really. We don't try to emulate this + +00:10:58.440 --> 00:10:58.940 +machine, nor any like of that. + +00:11:05.500 --> 00:11:06.000 +But yeah. Let me, I'm going to try to, + +00:11:07.120 --> 00:11:07.620 +okay, now I'm back at them. + +00:11:12.180 --> 00:11:12.500 +Okay. So what about using them for things + +00:11:13.260 --> 00:11:13.760 +other than common, common, + +00:11:16.160 --> 00:11:16.500 +that markets? Okay. So yes, + +00:11:18.280 --> 00:11:18.480 +we do have, so I'm going to show the code + +00:11:20.280 --> 00:11:20.780 +base a little bit. Like I said before, + +00:11:25.120 --> 00:11:25.600 +we don't have yet too much external packages + +00:11:26.500 --> 00:11:27.000 +because of the size of the community. + +00:11:30.720 --> 00:11:30.940 +I have a question. Go ahead, + +00:11:32.160 --> 00:11:32.660 +you can write it, Michael. + +00:11:37.840 --> 00:11:38.300 +Yeah. So, yes, as you can see here, + +00:11:43.900 --> 00:11:44.340 +this is almost all, or 99% of the major modes + +00:11:46.160 --> 00:11:46.620 +we have. We use the same terminology of + +00:11:47.640 --> 00:11:48.140 +SkinnyMemax in that way. + +00:11:49.120 --> 00:11:49.440 +For example, the C mode, + +00:11:51.460 --> 00:11:51.580 +if you go inside, you see that this is the + +00:11:53.600 --> 00:11:53.980 +fine major mode. So in that regard, + +00:11:54.800 --> 00:11:55.300 +it's very similar to Emacs. + +00:11:56.600 --> 00:11:57.100 +And we have something called a JIT, + +00:11:58.320 --> 00:11:58.820 +which is like a maggot. + +00:12:00.280 --> 00:12:00.780 +And you can edit files. + +00:12:02.500 --> 00:12:02.980 +You can use not only for common lists. + +00:12:06.820 --> 00:12:07.320 +In my configuration, which is written, + +00:12:11.140 --> 00:12:11.640 +I will post that later, + +00:12:15.480 --> 00:12:15.640 +but if you go to my code burg you can see my + +00:12:16.460 --> 00:12:16.960 +configuration which is, + +00:12:20.460 --> 00:12:20.640 +which I do have. So for example you can use + +00:12:22.260 --> 00:12:22.760 +it for a scheme. We have a swank server. + +00:12:24.240 --> 00:12:24.340 +This is the configuration to use it. + +00:12:25.900 --> 00:12:26.040 +You can use it for JavaScript because we have + +00:12:28.180 --> 00:12:28.680 +a native LSP client written in. + +00:12:29.540 --> 00:12:29.800 +And we have Dired. Yeah, + +00:12:33.820 --> 00:12:34.320 +this is Dired. We have Dired indeed. + +00:12:35.560 --> 00:12:35.740 +No, it's not Dired, you know. + +00:12:36.260 --> 00:12:36.760 +It's called directory. + +00:12:38.860 --> 00:12:39.360 +Sasaki-san, which is the main maintainer, + +00:12:43.100 --> 00:12:43.600 +doesn't like to copy one-to-one Emacs names, + +00:12:48.700 --> 00:12:49.200 +but we are the same. We also have projects, + +00:12:51.780 --> 00:12:52.280 +which is like projectile. + +00:12:55.120 --> 00:12:55.240 +So, you know, they're very similar but not + +00:12:56.940 --> 00:12:57.440 +the same. We also have a VI configuration, + +00:12:59.220 --> 00:12:59.380 +as you can see. I'm using the VI commands and + +00:13:00.100 --> 00:13:00.600 +stuff, and it's very good. + +00:13:03.940 --> 00:13:04.120 +I will say not as good as an evil because it + +00:13:06.680 --> 00:13:07.180 +still needs some polish, + +00:13:08.000 --> 00:13:08.500 +but it's getting there. + +00:13:13.780 --> 00:13:13.860 +So we can also program in JavaScript and a + +00:13:16.160 --> 00:13:16.660 +lot of LSP things, and Elixir, + +00:13:18.600 --> 00:13:19.100 +which was recently added by myself. + +00:13:21.580 --> 00:13:22.080 +And yeah, it's very fun to add new modes. + +00:13:27.440 --> 00:13:27.940 +OK, what else next? What about user-level + +00:13:28.440 --> 00:13:28.940 +things other than coding? + +00:13:31.720 --> 00:13:31.880 +What about using this in conjunction with + +00:13:34.340 --> 00:13:34.840 +Nix? Oh, so there's a big, + +00:13:36.980 --> 00:13:37.480 +so like I said before, + +00:13:40.080 --> 00:13:40.200 +there were like an issue that 3 main common + +00:13:40.960 --> 00:13:41.460 +list project were talking, + +00:13:46.920 --> 00:13:47.420 +some of the users. So the 3 main projects are + +00:13:49.340 --> 00:13:49.840 +LEM, probably, Nixed, and then StamWM, + +00:13:52.600 --> 00:13:53.000 +the 3 main, well, 3 big, + +00:13:55.280 --> 00:13:55.440 +common list projects that are trying to + +00:13:57.720 --> 00:13:58.040 +emulate an Emacs experience in different + +00:14:00.100 --> 00:14:00.340 +fields. 1 is Editor, the other 1 is Window + +00:14:01.720 --> 00:14:02.220 +Manager, and the 1 is the browser. + +00:14:06.560 --> 00:14:06.820 +The problem is that the design of the 3 are + +00:14:11.680 --> 00:14:11.960 +very different. So Nix is very focused on the + +00:14:14.900 --> 00:14:15.060 +browser. You can connect to Nix. + +00:14:16.720 --> 00:14:16.920 +So given that they're both a common list, + +00:14:18.940 --> 00:14:19.160 +you can connect to Nix from them and vice + +00:14:21.420 --> 00:14:21.600 +versa. And you can send commands and you can, + +00:14:22.580 --> 00:14:23.080 +so you have this kind of interoperability + +00:14:31.420 --> 00:14:31.580 +with both. But no, you cannot combine both to + +00:14:35.280 --> 00:14:35.780 +have 1 LEMNIX. That would be very sick. + +00:14:39.400 --> 00:14:39.600 +I would love it. But the effort is just too + +00:14:41.000 --> 00:14:41.280 +much. Keep in mind we are a very small + +00:14:44.960 --> 00:14:45.060 +community. The LEM, like I said, + +00:14:49.920 --> 00:14:50.140 +we are like 345 developers that write + +00:14:51.880 --> 00:14:52.380 +packages and answer questions and stuff. + +00:14:55.380 --> 00:14:55.880 +Now we need users in that way to test things. + +00:14:58.480 --> 00:14:58.820 +So what is the license of LEM? + +00:15:00.480 --> 00:15:00.980 +The license of LEM is MAT. + +00:15:02.860 --> 00:15:03.180 +We have some components of all the various + +00:15:04.480 --> 00:15:04.980 +licenses, but the main 1 is MAT. + +00:15:07.160 --> 00:15:07.660 +I didn't choose the license of it. + +00:15:11.320 --> 00:15:11.820 +I would highly prefer a more like GPL 1, + +00:15:13.500 --> 00:15:14.000 +but like I said I'm not a maintainer, + +00:15:15.860 --> 00:15:16.360 +so the license is MAT. + +00:15:19.820 --> 00:15:20.320 +This question, I realize, + +00:15:22.120 --> 00:15:22.200 +how far is LEM from being able to remove a + +00:15:26.500 --> 00:15:26.940 +list libraries? OK, that's a big question + +00:15:30.660 --> 00:15:30.920 +indeed. And Funny enough, + +00:15:31.800 --> 00:15:32.300 +2 years ago in the EmacsConf, + +00:15:34.340 --> 00:15:34.700 +I talk about this, not with LEM, + +00:15:36.340 --> 00:15:36.480 +but with Common Lisp and Emacs Lisp in + +00:15:41.880 --> 00:15:42.100 +general. So I'm not the only 1 thinking about + +00:15:44.100 --> 00:15:44.240 +this. In fact, I'm talking with someone that + +00:15:46.740 --> 00:15:46.960 +is trying to write like a Emacs Lisp + +00:15:48.120 --> 00:15:48.620 +interpreter to work with them. + +00:15:52.240 --> 00:15:52.740 +The thing is that Emaclist libraries, + +00:15:55.080 --> 00:15:55.580 +so the API is just very different. + +00:15:57.720 --> 00:15:58.220 +That's the main problem. + +00:15:58.940 --> 00:15:59.440 +That's really the problem. + +00:16:02.320 --> 00:16:02.820 +You can, so you can, let me see. + +00:16:13.380 --> 00:16:13.880 +So, you can have an Emacs list buffer of LEM. + +00:16:15.420 --> 00:16:15.920 +This is an Emacs list rebel. + +00:16:21.380 --> 00:16:21.560 +I wrote an LRSP client so you can connect to + +00:16:23.140 --> 00:16:23.560 +Emacs and send things and stuff. + +00:16:25.160 --> 00:16:25.660 +So you're friends that we share stuff. + +00:16:28.340 --> 00:16:28.840 +But having a complete Emacless implementation + +00:16:37.400 --> 00:16:37.600 +with LEM and work with both API will be a + +00:16:42.240 --> 00:16:42.600 +huge work. Very like, it's even if they share + +00:16:43.680 --> 00:16:44.180 +very similar thing, in fact, + +00:16:46.480 --> 00:16:46.980 +API in some places is very similar. + +00:16:48.540 --> 00:16:49.040 +Down the line infrastructure, + +00:16:52.220 --> 00:16:52.720 +so the code is, so it's completely different. + +00:16:56.680 --> 00:16:56.840 +It will be very hard. We do have a clone of + +00:16:58.940 --> 00:16:59.440 +maggot that works, more or less. + +00:17:01.440 --> 00:17:01.940 +Well, it does work, but maggot's just better. + +00:17:03.340 --> 00:17:03.820 +But it's getting there. + +00:17:05.020 --> 00:17:05.460 +So like I said, we're trying to, + +00:17:06.220 --> 00:17:06.720 +not to copy one-to-one, + +00:17:09.640 --> 00:17:10.140 +but to adapting each tool to LEM. + +00:17:13.260 --> 00:17:13.760 +How are LEM buffer designs similar to Emacs? + +00:17:19.700 --> 00:17:20.020 +So yeah, that would be, + +00:17:21.260 --> 00:17:21.760 +so how a blend buffer design, + +00:17:24.780 --> 00:17:25.280 +similar to Emacs. So similar in what way, + +00:17:26.319 --> 00:17:26.819 +actually with properties. + +00:17:29.180 --> 00:17:29.480 +I think that you've seen, + +00:17:31.220 --> 00:17:31.560 +so you do have like a font lock, + +00:17:32.420 --> 00:17:32.920 +different kind of properties, + +00:17:37.820 --> 00:17:38.040 +but it's not exactly how Emac does it with + +00:17:41.740 --> 00:17:42.180 +overlays and stuff. You can, + +00:17:43.080 --> 00:17:43.580 +so if you're very interested, + +00:17:45.300 --> 00:17:45.800 +I don't want to go too much deep into the, + +00:17:51.500 --> 00:17:51.720 +let me go to, I don't want to go too much + +00:17:55.380 --> 00:17:55.760 +deep into the technicality of things now, + +00:17:57.920 --> 00:17:58.080 +but you can go. So LEM is written 100% in + +00:18:00.040 --> 00:18:00.380 +Common Lisp. So if you know Common Lisp, + +00:18:03.900 --> 00:18:04.040 +you can go to buffer. You can check all the + +00:18:08.520 --> 00:18:09.020 +codes here. Always we have, + +00:18:12.780 --> 00:18:13.280 +we also have this, which is like StreamX. + +00:18:17.860 --> 00:18:18.360 +Sorry to that, I don't. + +00:18:21.900 --> 00:18:22.400 +But yeah, So you can see. + +00:18:24.440 --> 00:18:24.940 +So yeah, if you go to the code base, + +00:18:26.780 --> 00:18:27.280 +maybe some of you can check this problem. + +00:18:28.500 --> 00:18:29.000 +Well, not problem, but yeah. + +00:18:30.340 --> 00:18:30.840 +That's this Japanese comment. + +00:18:35.560 --> 00:18:36.060 +You can see here why it's very, + +00:18:38.000 --> 00:18:38.300 +you have to translate and stuff, + +00:18:39.560 --> 00:18:40.060 +which is sometimes a little bit annoying. + +00:18:44.540 --> 00:18:45.040 +But yeah, some of them are in English. + +00:18:47.020 --> 00:18:47.440 +So this play is not the same. + +00:18:48.800 --> 00:18:49.200 +So if you're interested, + +00:18:51.200 --> 00:18:51.400 +you can go to the buffer and check it out for + +00:18:53.480 --> 00:18:53.600 +yourself. But I think it uses the overlay in + +00:18:58.620 --> 00:18:58.900 +a different way. So the implementation is + +00:19:04.800 --> 00:19:05.020 +different that way. Oh, + +00:19:10.875 --> 00:19:11.375 +[Speaker 0]: This module. Oh, this is very low. + +00:19:12.560 --> 00:19:13.060 +[Speaker 2]: this is fairly low. What other things or + +00:19:15.559 --> 00:19:15.600 +experiences that I can show you? + +00:19:15.920 --> 00:19:16.420 +Just like you show you. + +00:19:18.120 --> 00:19:18.620 +Any marks? + +00:19:32.860 --> 00:19:33.360 +Okay, very interesting question. + +00:19:34.000 --> 00:19:34.500 +What are the things... + +00:19:37.460 --> 00:19:37.960 +So that's interesting. + +00:19:42.720 --> 00:19:43.220 +Let me see. So forgive me, + +00:19:49.660 --> 00:19:49.760 +you answered this. I talked briefly in the + +00:19:53.560 --> 00:19:53.780 +talk about this, but basically I like + +00:19:55.840 --> 00:19:56.340 +Komaldisp, I have the mascot here. + +00:19:58.040 --> 00:19:58.540 +[Speaker 3]: a very + +00:20:04.740 --> 00:20:04.840 +[Speaker 2]: It's Italian thing. I like Common Lisp and I + +00:20:08.640 --> 00:20:08.800 +think GmagLisp is a very good friend of + +00:20:10.240 --> 00:20:10.520 +Common Lisp in the way that Serious Software + +00:20:11.840 --> 00:20:12.340 +Analysis is a very good uncle. + +00:20:18.800 --> 00:20:19.300 +Let me answer first the 1. + +00:20:24.140 --> 00:20:24.620 +So I like to extend it in Common Lisp. + +00:20:25.640 --> 00:20:26.140 +I like the Common Lisp libraries. + +00:20:30.100 --> 00:20:30.360 +And I think them have a better design in + +00:20:31.220 --> 00:20:31.720 +terms of its 1 language, + +00:20:33.480 --> 00:20:33.980 +which I think is a nice strength. + +00:20:36.580 --> 00:20:36.660 +Like, 1 of the things that put me off when I + +00:20:38.680 --> 00:20:39.020 +was using Emacs, I love to extend the editor + +00:20:40.600 --> 00:20:41.100 +and to go inside and stuff. + +00:20:43.360 --> 00:20:43.520 +And 1 of the things that I'm not a big fan of + +00:20:44.820 --> 00:20:45.020 +C. If you're a fan of C, + +00:20:47.040 --> 00:20:47.240 +you will be very pleasant with finding C + +00:20:50.440 --> 00:20:50.660 +stuff, but I don't. So when I'm trying to + +00:20:52.340 --> 00:20:52.840 +hack an Emacs and go inside the things, + +00:20:54.140 --> 00:20:54.640 +I will control C code. + +00:20:56.200 --> 00:20:56.660 +That's not that interactive as the Emaclist + +00:20:59.340 --> 00:20:59.840 +1, and that would be like a fuzzball for me. + +00:21:03.740 --> 00:21:04.080 +I was always dreaming about that stuff, + +00:21:05.320 --> 00:21:05.820 +having like everything in 1 language. + +00:21:08.000 --> 00:21:08.160 +The thing that LEM does to me is like it + +00:21:12.100 --> 00:21:12.560 +allows me to extend the editor to modify + +00:21:14.160 --> 00:21:14.660 +also, to modify in Common Lisp. + +00:21:17.660 --> 00:21:18.160 +Also, I like the language and technology. + +00:21:19.600 --> 00:21:19.900 +It's a bold thing, right? + +00:21:21.480 --> 00:21:21.980 +It's a world language that I love, + +00:21:23.740 --> 00:21:24.240 +and Emacs that I love. + +00:21:25.380 --> 00:21:25.880 +Emacs, I'm a big fan of, + +00:21:27.160 --> 00:21:27.520 +or a user of GNU Emacs. + +00:21:29.380 --> 00:21:29.880 +And LEM is like Emacs plus Common Lisp, + +00:21:30.600 --> 00:21:30.900 +but with a different design. + +00:21:32.360 --> 00:21:32.860 +I don't want to, It's not a clone. + +00:21:37.800 --> 00:21:38.040 +I want to get this very clear that LEM is not + +00:21:40.760 --> 00:21:41.140 +a clone of Emacs. The sign is very different + +00:21:43.180 --> 00:21:43.500 +in a lot of ways. But it's very inspired, + +00:21:44.380 --> 00:21:44.880 +and that cannot be denied. + +00:21:48.280 --> 00:21:48.780 +[Speaker 1]: I can jump in for a second. + +00:21:51.120 --> 00:21:51.360 +I think we're like 15 minutes into the lunch + +00:21:52.660 --> 00:21:53.040 +break, but you're welcome to continue + +00:21:55.600 --> 00:21:55.760 +answering questions. But if anyone on the + +00:21:57.500 --> 00:21:58.000 +stream or folks want to go grab lunch, + +00:21:59.760 --> 00:21:59.860 +feel free to do that. I'm probably going to + +00:22:01.880 --> 00:22:02.040 +do that as well. But yeah, + +00:22:03.760 --> 00:22:03.920 +we can either continue keeping this on the + +00:22:06.180 --> 00:22:06.440 +stream, or if people would like to come join + +00:22:08.600 --> 00:22:09.100 +here on BigBlueButton and talk to Fermin, + +00:22:11.040 --> 00:22:11.540 +like folks have already done that, + +00:22:12.440 --> 00:22:12.940 +yeah, you're welcome to. + +00:22:14.620 --> 00:22:15.120 +[Speaker 2]: Yeah, go ahead. No problem. + +00:22:16.500 --> 00:22:17.000 +Thank you. Thank you, Vitaliy. + +00:22:25.160 --> 00:22:25.280 +Cheers. Cheers. So finishing the answer to + +00:22:30.080 --> 00:22:30.380 +the question, I think LEM does tries to fix + +00:22:31.880 --> 00:22:32.380 +some Emacs problems, can we fix problems + +00:22:35.200 --> 00:22:35.700 +regarding the internal API, + +00:22:37.200 --> 00:22:37.480 +which makes sense, right? + +00:22:39.060 --> 00:22:39.560 +Emacs have like 40 years, + +00:22:42.280 --> 00:22:42.780 +which is a lot. And yeah, + +00:22:44.760 --> 00:22:45.060 +which is, that's what makes me happy. + +00:22:47.480 --> 00:22:47.720 +I use both now. I use Maggis and Emacs for + +00:22:50.200 --> 00:22:50.460 +some languages and then I use LEM for Common + +00:22:51.100 --> 00:22:51.600 +Lisp and other languages. + +00:22:55.240 --> 00:22:55.740 +You can also use LEM for EmacLisp, + +00:22:59.760 --> 00:22:59.960 +which makes LEM the second best editor for + +00:23:02.360 --> 00:23:02.860 +EmacLisp. It was a funny thing to do. + +00:23:05.980 --> 00:23:06.100 +OK, so do you think LEM will continue to have + +00:23:06.760 --> 00:23:07.260 +a lot of Japanese documentation? + +00:23:11.720 --> 00:23:12.180 +So there's not that many Japanese + +00:23:12.780 --> 00:23:13.280 +documentation, really. + +00:23:18.280 --> 00:23:18.480 +So there's a few comments here and there, + +00:23:20.800 --> 00:23:20.920 +but it's not full. We have a web page with a + +00:23:22.020 --> 00:23:22.520 +lot of documentation in English. + +00:23:25.380 --> 00:23:25.880 +So you can take a look at that. + +00:23:29.080 --> 00:23:29.580 +But we do have to improve the documentation + +00:23:30.260 --> 00:23:30.760 +and translate it to English. + +00:23:32.220 --> 00:23:32.440 +Sasaki-san is up to it, + +00:23:35.460 --> 00:23:35.960 +but he just doesn't feel that comfortable + +00:23:36.600 --> 00:23:37.100 +translating it himself. + +00:23:38.680 --> 00:23:39.180 +So yeah. + +00:23:42.720 --> 00:23:43.220 +[Speaker 3]: So, this is Peter on BigBlueWem. + +00:23:49.620 --> 00:23:50.120 +Yeah, it's neat that Wem even exists, + +00:23:55.520 --> 00:23:55.940 +because there's always chatter on the Emacs + +00:23:58.980 --> 00:23:59.280 +mailing list to rewrite Emacs and some other + +00:24:03.920 --> 00:24:04.120 +language. And to see that it's already to see + +00:24:05.320 --> 00:24:05.820 +that I mean, you have an implementation + +00:24:08.360 --> 00:24:08.560 +sitting there and, and the thing I was + +00:24:10.600 --> 00:24:10.960 +wondering while I was listening in on the, + +00:24:14.060 --> 00:24:14.460 +on the Q and A was do you have Dured? + +00:24:15.400 --> 00:24:15.700 +Do you have Maggot? And some, + +00:24:17.100 --> 00:24:17.600 +somebody else wrote that question into, + +00:24:20.460 --> 00:24:20.640 +into Etherpad. But I was happy to see that + +00:24:22.800 --> 00:24:23.000 +you have Dured or something like it + +00:24:24.960 --> 00:24:25.440 +implemented. Because I think that's like the, + +00:24:27.040 --> 00:24:27.180 +for me, that's the most important thing in + +00:24:30.800 --> 00:24:31.000 +Emacs because that gets me around in my + +00:24:35.200 --> 00:24:35.380 +[Speaker 2]: BRODINKOVICH Yeah, for me too. + +00:24:35.740 --> 00:24:36.240 +For me too. + +00:24:37.100 --> 00:24:37.260 +[Speaker 0]: Go ahead. + +00:24:37.740 --> 00:24:37.940 +[Speaker 3]: system. VICTOR Sorry. Yeah, + +00:24:39.680 --> 00:24:40.160 +so I may try it out sometime, + +00:24:42.040 --> 00:24:42.540 +but probably won't be for like 3 or 6 months, + +00:24:45.060 --> 00:24:45.240 +because there's always a backlog of other + +00:24:46.560 --> 00:24:47.060 +things to try out. + +00:24:49.800 --> 00:24:50.300 +[Speaker 4]: I'm the 1 who wrote that question. + +00:24:54.020 --> 00:24:54.520 +And do you use, I think you have bookmarks + +00:24:55.380 --> 00:24:55.800 +and registers, I imagine, + +00:24:55.800 --> 00:24:56.300 +right? + +00:24:59.700 --> 00:25:00.060 +[Speaker 2]: I think you have. I never tried bookmarks + +00:25:01.220 --> 00:25:01.400 +because I don't use it that much. + +00:25:02.560 --> 00:25:03.060 +But I think you have something like that. + +00:25:05.420 --> 00:25:05.840 +I mean, I don't. There's a few features that + +00:25:07.360 --> 00:25:07.540 +I don't know about them because I don't use + +00:25:08.680 --> 00:25:08.980 +it much. Some features, + +00:25:11.580 --> 00:25:11.840 +I mean. But yeah, I think you have. + +00:25:13.100 --> 00:25:13.380 +Let me check. We can check, + +00:25:16.620 --> 00:25:17.120 +probably. Things in extensions, + +00:25:23.140 --> 00:25:23.480 +just directory. VNXT. Directory mode. + +00:25:28.950 --> 00:25:29.450 +So there is. So this is the Tyrant's friend. + +00:25:31.780 --> 00:25:32.230 +I won't say clone. Very inspired. + +00:25:36.580 --> 00:25:36.900 +[Speaker 4]: What about like on the note-taking front, + +00:25:38.440 --> 00:25:38.940 +like org mode, + +00:25:41.040 --> 00:25:41.380 +[Speaker 2]: You know. note... Yes, + +00:25:50.440 --> 00:25:50.940 +so... EMMS... Yes, so someone did some MMS. + +00:25:58.380 --> 00:25:58.620 +So not MMS, not much. So package for LEM that + +00:26:00.060 --> 00:26:00.400 +is now in a pull request, + +00:26:03.800 --> 00:26:04.300 +I think. But yeah, no. + +00:26:06.800 --> 00:26:07.300 +The thing is I don't use R mode that much. + +00:26:11.980 --> 00:26:12.480 +We don't have a heavy R mode user to provide + +00:26:15.020 --> 00:26:15.300 +some major mode and stuff. + +00:26:18.160 --> 00:26:18.600 +So we don't have that implemented yet. + +00:26:20.580 --> 00:26:20.900 +The thing is, my plans for, + +00:26:22.360 --> 00:26:22.860 +I do have plans for our mode. + +00:26:24.020 --> 00:26:24.520 +They're a little bit evil, + +00:26:26.200 --> 00:26:26.700 +but there's plans for it. + +00:26:27.800 --> 00:26:28.040 +So I'm planning to use, + +00:26:30.000 --> 00:26:30.060 +so rewriting our mode is a big task that I + +00:26:34.200 --> 00:26:34.700 +don't want to do. So I'm going to use Emacs + +00:26:39.020 --> 00:26:39.520 +for our mode in 2.11. I wrote a recipe, + +00:26:45.060 --> 00:26:45.380 +no, a remote procedural RPC that I'm using + +00:26:46.860 --> 00:26:47.360 +for the Red Bull and stuff. + +00:26:51.000 --> 00:26:51.200 +And I'm planning to have an Emacs Puppet to + +00:26:54.720 --> 00:26:55.220 +provide me the functionality for Org Mode. + +00:26:59.380 --> 00:26:59.760 +[Speaker 4]: I know for me, when I write notes, + +00:27:01.640 --> 00:27:01.940 +I like to note more than Org Roam just + +00:27:06.340 --> 00:27:06.840 +because I feel Org Mode is great and all, + +00:27:08.920 --> 00:27:09.060 +but if all my notes are in it, + +00:27:10.260 --> 00:27:10.760 +I kind of feel trapped by it. + +00:27:14.460 --> 00:27:14.960 +I did the talk journaling in KOutline, + +00:27:17.800 --> 00:27:18.040 +and I like that package better for some + +00:27:21.040 --> 00:27:21.260 +things and it's like if I want to put like + +00:27:24.280 --> 00:27:24.780 +the tags on PDF file names and so it's like + +00:27:28.940 --> 00:27:29.100 +Yeah, it's great and all but it's also Is + +00:27:31.560 --> 00:27:31.740 +that part of the motivation of wanting to use + +00:27:34.620 --> 00:27:35.120 +lamb is so you feel less entrapped by emacs + +00:27:38.445 --> 00:27:38.840 +No, I will say I don't no. + +00:27:40.620 --> 00:27:41.120 +[Speaker 2]: No, no. I was very happy trapping to Emacs. + +00:27:47.100 --> 00:27:47.560 +To be fair. The thing is I don't use Hormel + +00:27:48.600 --> 00:27:49.100 +that much. That's just the reality. + +00:27:52.120 --> 00:27:52.580 +Org Mode for me is a very good markup + +00:27:54.660 --> 00:27:54.810 +language, but not that much really. + +00:27:56.920 --> 00:27:57.420 +I know that Org Mode has a lot of people and + +00:27:58.740 --> 00:27:59.060 +it's used by a lot of people. + +00:28:00.060 --> 00:28:00.560 +And there's very interesting packages. + +00:28:03.700 --> 00:28:04.200 +[Speaker 4]: What about org mode versus markdown versus + +00:28:05.800 --> 00:28:06.300 +plain text versus latex then? + +00:28:08.480 --> 00:28:08.860 +[Speaker 2]: I like org mode because of the Emacs + +00:28:10.380 --> 00:28:10.880 +functionality. I think if you take that away, + +00:28:15.600 --> 00:28:16.100 +you plain or mode versus Markdown, + +00:28:17.720 --> 00:28:18.080 +I don't think there's that much difference, + +00:28:19.960 --> 00:28:20.460 +if you take the Emacs functionality away. + +00:28:24.560 --> 00:28:24.880 +I like the + +00:28:27.260 --> 00:28:27.760 +[Speaker 4]: Yeah. Emacs syntax more than Markdown. + +00:28:29.640 --> 00:28:29.900 +Like, for instance, you have the double + +00:28:31.720 --> 00:28:31.960 +square brackets, which is simpler for me to + +00:28:32.500 --> 00:28:33.000 +look at, but. + +00:28:35.820 --> 00:28:36.060 +[Speaker 2]: Yeah, I guess it's a matter of, + +00:28:38.400 --> 00:28:38.640 +I mean, we don't have yet a major mode of R + +00:28:39.800 --> 00:28:40.300 +mode, which will be quite trivial. + +00:28:42.660 --> 00:28:43.160 +Well, you know, a simple syntax highlights, + +00:28:46.040 --> 00:28:46.540 +you know, R mode in LEM, + +00:28:52.460 --> 00:28:52.960 +because no 1 wrote it. + +00:28:55.320 --> 00:28:55.640 +I mean, that's the way with this project, + +00:29:00.060 --> 00:29:00.360 +right? If you need people to be motivated to + +00:29:04.120 --> 00:29:04.620 +do that. And with LEM, + +00:29:06.540 --> 00:29:07.040 +someone asked about the Japanese. + +00:29:11.320 --> 00:29:11.820 +I think they're interested about that. + +00:29:15.040 --> 00:29:15.420 +LEM does have a thing, + +00:29:16.030 --> 00:29:16.095 +[Speaker 0]: If the it would be good. + +00:29:16.800 --> 00:29:17.160 +[Speaker 4]: I'd be able to do more, + +00:29:18.000 --> 00:29:18.500 +but that's what I + +00:29:19.370 --> 00:29:19.870 +[Speaker 0]: was doing. + +00:29:22.420 --> 00:29:22.820 +[Speaker 2]: they think True. So, for example, + +00:29:24.240 --> 00:29:24.740 +we're using another big fan of... + +00:29:27.840 --> 00:29:28.080 +I mean, I know that the main people that may + +00:29:30.280 --> 00:29:30.780 +use in the future LEM are EMACLIS people. + +00:29:33.080 --> 00:29:33.580 +A lot of them. It's very similar. + +00:29:37.540 --> 00:29:37.940 +And Sasaki-san and the LEM community mainly + +00:29:43.260 --> 00:29:43.760 +uses Discord for chat and stuff. + +00:29:46.980 --> 00:29:47.480 +I mean, we do have matrix, + +00:29:48.540 --> 00:29:48.640 +and I should connect to it, + +00:29:54.960 --> 00:29:55.320 +by the way. But we mainly use Discord, + +00:29:58.080 --> 00:29:58.580 +which I don't think is a good thing. + +00:30:01.900 --> 00:30:02.300 +I mean, to have the main communication + +00:30:05.020 --> 00:30:05.520 +channels, Discord. Because, + +00:30:09.020 --> 00:30:09.520 +well, it's Discord. It's a closed source + +00:30:13.180 --> 00:30:13.440 +application that is easy for some people, + +00:30:14.340 --> 00:30:14.840 +but for some people it's a tailbreak. + +00:30:17.040 --> 00:30:17.080 +[Speaker 0]: are in + +00:30:17.580 --> 00:30:18.080 +[Speaker 2]: Especially people that the Emacs community + +00:30:20.080 --> 00:30:20.580 +that very like free software. + +00:30:22.800 --> 00:30:23.300 +[Speaker 4]: The only good thing about Molesley is it's + +00:30:26.000 --> 00:30:26.380 +popular, but as soon as you break out of that + +00:30:28.380 --> 00:30:28.520 +mold, all of a sudden it becomes a lot + +00:30:30.400 --> 00:30:30.900 +harder. For instance, they don't have... + +00:30:33.820 --> 00:30:34.320 +All the third-party clients are unofficial + +00:30:37.340 --> 00:30:37.500 +and according to their terms of service they + +00:30:40.380 --> 00:30:40.600 +can just can you. Which is not a nice + +00:30:44.020 --> 00:30:44.180 +position to be in if you're trying to use it + +00:30:47.200 --> 00:30:47.700 +and you wanted to be a moderator using some + +00:30:50.600 --> 00:30:51.100 +side tools that weren't Discord. + +00:30:55.320 --> 00:30:55.560 +[Speaker 2]: I agree 100% and in fact I'm not a big fan, + +00:30:56.400 --> 00:30:56.900 +I don't like Discord. + +00:31:03.860 --> 00:31:04.360 +[Speaker 5]: You mentioned the RPC you did between Emacs + +00:31:06.200 --> 00:31:06.700 +and the LEM. Do you have it published + +00:31:06.720 --> 00:31:07.220 +somewhere? + +00:31:13.520 --> 00:31:14.020 +[Speaker 2]: Yes, it's in the LEM project. + +00:31:15.820 --> 00:31:16.320 +I'll copy that in the chat. + +00:31:19.000 --> 00:31:19.340 +[Speaker 5]: Okay, because I'm always interested in how + +00:31:21.560 --> 00:31:22.060 +you do like the communication with other + +00:31:24.020 --> 00:31:24.320 +programs with Emacs because that's + +00:31:24.320 --> 00:31:24.820 +interesting. + +00:31:30.140 --> 00:31:30.640 +[Speaker 2]: I'm only using the porthole package, + +00:31:32.460 --> 00:31:32.960 +I'm not writing it from scratch, + +00:31:34.340 --> 00:31:34.840 +not that much as a developer. + +00:31:37.540 --> 00:31:37.960 +[Speaker 5]: So I don't know this package. + +00:31:39.140 --> 00:31:39.640 +Maybe that's the thing I can learn. + +00:31:40.840 --> 00:31:41.140 +[Speaker 2]: Oh yeah, probably if you, + +00:31:42.360 --> 00:31:42.740 +yeah. Yeah. If you want to, + +00:31:43.860 --> 00:31:44.360 +so I didn't see this 1, + +00:31:46.420 --> 00:31:46.920 +this package for the RSP, + +00:31:48.620 --> 00:31:49.120 +which make is monthly automatically. + +00:31:53.200 --> 00:31:53.600 +[Speaker 5]: And how do you do, how do you plan to + +00:31:59.180 --> 00:31:59.440 +integrate Org Mode? Because Org Mode needs to + +00:31:59.760 --> 00:32:00.260 +work on. + +00:32:03.340 --> 00:32:03.540 +[Speaker 2]: This way? Yes, so I'm planning to have like a + +00:32:08.260 --> 00:32:08.760 +Emacs puppet and to have like a clone buffer + +00:32:11.320 --> 00:32:11.820 +from the buffer that you do in LEM and then + +00:32:16.880 --> 00:32:17.380 +the command sent into the Emacs hidden buffer + +00:32:19.820 --> 00:32:20.140 +and then the changes go back to LEM to change + +00:32:22.660 --> 00:32:23.160 +the buffer of LEM. That's my idea. + +00:32:24.960 --> 00:32:25.460 +[Speaker 5]: Okay, that's all. It's interesting. + +00:32:28.320 --> 00:32:28.540 +Would be interesting to see what comes from + +00:32:28.540 --> 00:32:29.040 +it. + +00:32:32.280 --> 00:32:32.780 +[Speaker 2]: It's a bit, it's a hackish 100%. + +00:32:35.200 --> 00:32:35.320 +It's not, you have to duplicate the + +00:32:36.020 --> 00:32:36.520 +information and stuff, + +00:32:38.940 --> 00:32:39.140 +which is, oh, by the way, + +00:32:40.320 --> 00:32:40.820 +I'm going to pass the Lemington, + +00:32:43.380 --> 00:32:43.880 +which is the name of the RSP clone. + +00:32:45.980 --> 00:32:46.480 +Sorry, the integration with Emacs, + +00:32:48.900 --> 00:32:49.400 +which is LEM with a mustache. + +00:32:54.400 --> 00:32:54.600 +[Speaker 4]: They had good news where it would do the same + +00:32:56.360 --> 00:32:56.860 +thing, where it would open up a slave Emacs, + +00:33:00.020 --> 00:33:00.520 +because it was such a performance hog for + +00:33:02.140 --> 00:33:02.640 +retrieving all the emails. + +00:33:06.940 --> 00:33:07.360 +[Speaker 2]: No. I mean, Emacs have a server, + +00:33:08.559 --> 00:33:08.860 +right? I can, in fact, + +00:33:11.200 --> 00:33:11.700 +I'm using that for, I'm already puppeting. + +00:33:13.340 --> 00:33:13.620 +Well, not puppeting. I'm already using + +00:33:15.700 --> 00:33:16.200 +Maggots. So I have this. + +00:33:17.400 --> 00:33:17.900 +Actually, let me copy. + +00:33:25.600 --> 00:33:25.920 +I have this, which is usually a little bit, + +00:33:28.080 --> 00:33:28.420 +I'm launching the Emacs daemon and then I'm + +00:33:31.500 --> 00:33:31.740 +launching Leviton. And then this is the kill + +00:33:32.300 --> 00:33:32.700 +and this is the status, + +00:33:33.440 --> 00:33:33.940 +which is basically saying, + +00:33:36.680 --> 00:33:37.180 +run this and this is this, + +00:33:42.040 --> 00:33:42.540 +which is run maggot in this file. + +00:33:43.940 --> 00:33:44.340 +If you put it side by side, + +00:33:48.680 --> 00:33:48.800 +you will check instantly that this is the + +00:33:50.900 --> 00:33:51.400 +buffer directory, LEM home, + +00:33:54.020 --> 00:33:54.520 +and then the current file. + +00:33:58.860 --> 00:33:59.360 +Because I'm launching it with the file. + +00:34:03.940 --> 00:34:04.240 +So buffer directory, which is the directory + +00:34:09.239 --> 00:34:09.739 +of the buffer. So I'm already using maggot as + +00:34:13.600 --> 00:34:14.080 +a tool outside of LEM, + +00:34:14.960 --> 00:34:15.060 +because I really like maggot. + +00:34:16.920 --> 00:34:17.420 +And this is very easy to check. + +00:34:22.719 --> 00:34:23.219 +Launch Emacs daemon. Okay. + +00:34:28.580 --> 00:34:29.080 +And then I go to local projects. + +00:34:31.719 --> 00:34:32.219 +Let's go to another 1 that is not LEM. + +00:34:37.199 --> 00:34:37.400 +[Speaker 4]: You actually have weird ideas like running it + +00:34:39.639 --> 00:34:39.860 +in daemon mode so you don't ever have to + +00:34:40.840 --> 00:34:41.340 +restart it or the images, + +00:34:43.100 --> 00:34:43.600 +I guess, that LEM has. + +00:34:46.800 --> 00:34:47.300 +[Speaker 2]: LEM does not have this kind of, + +00:34:53.719 --> 00:34:54.060 +I will call it, it doesn't have like a demon + +00:34:56.280 --> 00:34:56.780 +mode, so you have control separately, + +00:34:58.860 --> 00:34:59.360 +but keep in mind that LEM, + +00:35:01.260 --> 00:35:01.680 +it's a common list program. + +00:35:03.340 --> 00:35:03.840 +So if you use slime or Sly, + +00:35:10.080 --> 00:35:10.580 +you can easily connect to them to hack on it. + +00:35:12.380 --> 00:35:12.880 +[Speaker 4]: ever use that functionality, + +00:35:14.060 --> 00:35:14.560 +like using it from another computer? + +00:35:16.400 --> 00:35:16.900 +[Speaker 2]: Do you Another computer, + +00:35:17.600 --> 00:35:18.100 +I think the same computer, + +00:35:21.460 --> 00:35:21.620 +or maybe Sage, but yeah, + +00:35:21.820 --> 00:35:22.320 +it's very... + +00:35:24.520 --> 00:35:25.020 +[Speaker 4]: Or from like your window, + +00:35:26.640 --> 00:35:27.140 +if you were using the window... + +00:35:28.260 --> 00:35:28.580 +I can't remember the name of the window + +00:35:30.100 --> 00:35:30.600 +manager. Or if you were using... + +00:35:36.460 --> 00:35:36.960 +What? Yeah, yeah. Or using like stump, + +00:35:40.680 --> 00:35:40.760 +calling it from like stump WM or how often do + +00:35:41.500 --> 00:35:42.000 +you use that REPL? + +00:35:43.740 --> 00:35:43.940 +[Speaker 2]: SPCL? No. ThumbWM? I use it quite a lot. + +00:35:44.700 --> 00:35:45.200 +I connect to a museum, + +00:35:49.400 --> 00:35:49.760 +some WM right now, and I use LEM to connect + +00:35:52.240 --> 00:35:52.740 +to it, but I was using Emacs before. + +00:35:55.800 --> 00:35:55.960 +And you can use Sly or Slime to connect to + +00:35:58.260 --> 00:35:58.520 +LEM. So the thing that is in Common List + +00:36:00.900 --> 00:36:01.400 +makes it this kind of already out-of-the-box + +00:36:04.000 --> 00:36:04.280 +connectivity between different... + +00:36:06.960 --> 00:36:07.460 +[Speaker 4]: How many window managers have you used? + +00:36:11.120 --> 00:36:11.400 +I've used that before. + +00:36:13.440 --> 00:36:13.780 +I've also used, like right now I'm using + +00:36:14.720 --> 00:36:15.220 +Sway. I've used Xmonad, + +00:36:16.260 --> 00:36:16.760 +DWM. + +00:36:23.040 --> 00:36:23.540 +[Speaker 2]: This is awesome. What is the other 1? + +00:36:25.680 --> 00:36:26.180 +I can't remember the name. + +00:36:27.900 --> 00:36:28.380 +But it was like a few years ago. + +00:36:30.800 --> 00:36:31.020 +I've been doing some DWM for like the last + +00:36:36.260 --> 00:36:36.760 +[Speaker 4]: I remember that. Go ahead. + +00:36:37.740 --> 00:36:38.240 +[Speaker 2]: year, I think. Or 3. know, + +00:36:41.940 --> 00:36:42.440 +it's that I was... I don't know. + +00:36:43.440 --> 00:36:43.520 +[Speaker 0]: I don't a couple + +00:36:44.040 --> 00:36:44.540 +[Speaker 2]: I'd like to have of days of my... + +00:36:48.280 --> 00:36:48.400 +[Speaker 4]: I remember that that window manager seemed to + +00:36:53.300 --> 00:36:53.600 +have some unique ideas that weren't + +00:36:56.280 --> 00:36:56.780 +necessarily available on like EWM and XMLNAD. + +00:37:02.540 --> 00:37:03.040 +[Speaker 2]: So SoundLM, it's an interesting project. + +00:37:05.140 --> 00:37:05.460 +But for example, I'll change... + +00:37:06.720 --> 00:37:07.080 +So I don't have in this computer, + +00:37:08.240 --> 00:37:08.680 +but in my other computer, + +00:37:13.840 --> 00:37:14.320 +I change the mod line or bar, + +00:37:18.220 --> 00:37:18.720 +top bar, whatever, because the ThunderLVM + +00:37:21.500 --> 00:37:22.000 +doesn't only update it when you click, + +00:37:25.280 --> 00:37:25.680 +or you do some events or happen 1 minute. + +00:37:27.560 --> 00:37:27.980 +So you can see here, this is not changing + +00:37:28.320 --> 00:37:28.820 +until I click. + +00:37:33.500 --> 00:37:33.720 +[Speaker 0]: That's it. + +00:37:34.360 --> 00:37:34.600 +[Speaker 3]: AUDIENCE 1 Matthew, sorry. + +00:37:36.160 --> 00:37:36.660 +I have a quick question for Matthew. + +00:37:43.520 --> 00:37:43.640 +So is your talk going to be posted or did you + +00:37:47.420 --> 00:37:47.920 +[Speaker 4]: Go ahead. I gave them a recording. + +00:37:50.140 --> 00:37:50.640 +My talk was the K outline for journaling + +00:37:53.080 --> 00:37:53.240 +[Speaker 3]: give it live? right right it was I woke up + +00:37:54.020 --> 00:37:54.520 +too late for it Sorry, + +00:37:58.420 --> 00:37:58.920 +so I came in and I just saw Bob Weiner + +00:38:03.240 --> 00:38:03.340 +answering questions So is your talk going to + +00:38:06.560 --> 00:38:07.060 +be on the page for your talk? + +00:38:07.740 --> 00:38:07.960 +I don't + +00:38:08.560 --> 00:38:09.060 +[Speaker 0]: see it there. + +00:38:11.940 --> 00:38:12.380 +[Speaker 4]: I could give you a link to it, + +00:38:17.480 --> 00:38:17.640 +because I had, I hosted it on Mega to give it + +00:38:18.840 --> 00:38:19.020 +to them, because when I emailed it, + +00:38:22.080 --> 00:38:22.200 +[Speaker 3]: Oh, okay. Is it + +00:38:22.360 --> 00:38:22.840 +[Speaker 4]: it didn't work. on a monkey? + +00:38:23.600 --> 00:38:24.100 +Download and watch it. + +00:38:29.440 --> 00:38:29.920 +I'm probably going to post it on YouTube + +00:38:33.600 --> 00:38:33.760 +later. I, I had my face record with it, + +00:38:36.020 --> 00:38:36.520 +but I never got it edited together in time + +00:38:40.320 --> 00:38:40.640 +[Speaker 3]: Okay, if you could if you can put the link + +00:38:43.140 --> 00:38:43.340 +onto the onto the ether pad or something or + +00:38:46.000 --> 00:38:46.160 +onto the wiki then then I can find it and + +00:38:49.920 --> 00:38:50.140 +check it out. All right, + +00:38:53.040 --> 00:38:53.480 +thanks. Sorry to interrupt your time, + +00:38:56.300 --> 00:38:56.440 +Fermin, but I figure we're heavily into the + +00:38:57.260 --> 00:38:57.760 +break anyways. FERMIN GENZIERIA-CHAPMANI + +00:39:00.920 --> 00:39:01.160 +[Speaker 2]: No problem. I'm in an EMAX conference talking + +00:39:02.860 --> 00:39:03.040 +about all that I mean I'm already doing + +00:39:04.280 --> 00:39:04.780 +blasphemy so I + +00:39:24.600 --> 00:39:24.800 +think that's oh yeah notes so the thing is + +00:39:26.640 --> 00:39:27.140 +then as my point of view, + +00:39:28.860 --> 00:39:29.360 +and the point of view probably of Sasaki-san, + +00:39:30.240 --> 00:39:30.740 +just a moment, I think, + +00:39:34.960 --> 00:39:35.220 +is very focused on an IDE more than a + +00:39:40.580 --> 00:39:41.080 +node-taking editor. More like an integrated + +00:39:41.540 --> 00:39:42.040 +development environment. + +00:39:45.040 --> 00:39:45.540 +So node is like a second thing. + +00:39:51.500 --> 00:39:52.000 +So not exactly the main focus. + +00:39:54.440 --> 00:39:54.780 +And I know that Emacs does have a very strong + +00:39:58.440 --> 00:39:58.940 +community of Ormode users that use Emacs for + +00:40:00.140 --> 00:40:00.244 +Ormode, which is the killer feature, + +00:40:01.080 --> 00:40:01.360 +1 of I'll do a feature. + +00:40:04.456 --> 00:40:04.956 +I'll do a feature of Emacs. + +00:40:09.160 --> 00:40:09.660 +So I'm not the maintainer of porthole. + +00:40:20.220 --> 00:40:20.580 +I'm sorry. I did add it to so I don't + +00:40:22.700 --> 00:40:23.040 +maintain the remote. I'm sorry, + +00:40:27.400 --> 00:40:27.840 +I'll pothole the USB. I'm only using it on + +00:40:31.120 --> 00:40:31.620 +the Lamington. I cannot change anything. + +00:40:39.520 --> 00:40:39.760 +[Speaker 4]: What are some interesting things you have + +00:40:40.760 --> 00:40:41.260 +with your window manager? + +00:40:43.780 --> 00:40:44.280 +I do have elsewhere. + +00:40:49.400 --> 00:40:49.600 +[Speaker 2]: I can connect to it and hack it from my + +00:40:53.040 --> 00:40:53.540 +editor, which I think is really fun. + +00:40:56.820 --> 00:40:57.220 +The way I can write, so I wrote a few + +00:40:58.500 --> 00:40:59.000 +packages for Soundallium. + +00:41:06.740 --> 00:41:07.240 +So 1 of them is Proton, + +00:41:10.360 --> 00:41:10.860 +which basically launches like a... + +00:41:18.480 --> 00:41:18.900 +So Proton is like this wine thing that Valve + +00:41:22.000 --> 00:41:22.500 +[Speaker 4]: Yeah, I'm a user. + +00:41:24.140 --> 00:41:24.640 +[Speaker 2]: did. OK, so this basically, + +00:41:26.480 --> 00:41:26.980 +you have like a list of, + +00:41:32.280 --> 00:41:32.540 +let me check. No, we're just, + +00:41:38.780 --> 00:41:39.020 +sorry. This, So these all games are bought by + +00:41:41.280 --> 00:41:41.780 +me. They're not pirates in any way. + +00:41:45.800 --> 00:41:46.300 +I can use this to to launch it. + +00:41:50.700 --> 00:41:51.200 +[Speaker 4]: Was that Dmenu or was that StumpWM menu? + +00:41:54.800 --> 00:41:55.240 +[Speaker 2]: This is Dmenu. So I have, + +00:42:02.300 --> 00:42:02.560 +I also contribute the Dmenu integration into + +00:42:05.820 --> 00:42:06.320 +StumwM. So I use Dmenu. + +00:42:07.480 --> 00:42:07.980 +So like this, right? + +00:42:13.300 --> 00:42:13.800 +[Speaker 4]: Yeah that's pretty cool. + +00:42:15.720 --> 00:42:15.940 +You don't know how nice those things are + +00:42:16.880 --> 00:42:17.380 +until you start using those. + +00:42:21.280 --> 00:42:21.780 +[Speaker 2]: The menu is very interesting and very... + +00:42:24.060 --> 00:42:24.560 +Also I was using RoFi, + +00:42:25.680 --> 00:42:26.000 +but... + +00:42:29.100 --> 00:42:29.540 +[Speaker 4]: I was also more... The other thing I was more + +00:42:31.240 --> 00:42:31.740 +mentioning is that also, + +00:42:32.860 --> 00:42:33.340 +being able to use D-Menu, + +00:42:34.800 --> 00:42:35.300 +but being able to just have keyboard + +00:42:38.680 --> 00:42:39.180 +oriented? Everything fuzzy search narrowed + +00:42:45.420 --> 00:42:45.480 +and No tabs no status bars like all of a + +00:42:47.160 --> 00:42:47.600 +sudden your mental model on how your computer + +00:42:51.420 --> 00:42:51.560 +operates goes through the roof and a lot of + +00:42:57.900 --> 00:42:58.400 +Emacs users Know what that is like Especially + +00:43:01.240 --> 00:43:01.740 +In conjunction with a window manager? + +00:43:06.740 --> 00:43:07.200 +[Speaker 2]: Yeah, I think so. I remember when I was... + +00:43:11.320 --> 00:43:11.820 +So for me, I tried the Emacs window manager, + +00:43:16.840 --> 00:43:17.340 +but it wasn't for me. Having a single thread + +00:43:18.460 --> 00:43:18.960 +window manager is scary. + +00:43:22.500 --> 00:43:22.840 +And also games and some stuff wasn't working + +00:43:25.040 --> 00:43:25.240 +correctly, which it makes sense in some + +00:43:27.340 --> 00:43:27.840 +regards, using Emacs for window manager. + +00:43:30.660 --> 00:43:31.160 +Oh + +00:43:34.480 --> 00:43:34.980 +[Speaker 4]: I've used it before I found that it wasn't as + +00:43:39.240 --> 00:43:39.740 +like it. It's not as bad in practice because + +00:43:43.020 --> 00:43:43.260 +The paper cuts you don't like to hit them + +00:43:45.800 --> 00:43:46.000 +every day So you make sure So you make sure + +00:43:48.080 --> 00:43:48.400 +your Emacs config is a lot nicer and doesn't + +00:43:51.040 --> 00:43:51.300 +have those slowdowns. Or you avoid those + +00:43:54.440 --> 00:43:54.780 +things. It forces you to make your Emacs + +00:43:59.440 --> 00:43:59.940 +config a lot more robust to speed. + +00:44:02.040 --> 00:44:02.300 +[Speaker 2]: Yeah, yeah. That's true, + +00:44:04.200 --> 00:44:04.440 +yeah. The thing, yeah, + +00:44:05.600 --> 00:44:06.020 +but still, I don't know, + +00:44:08.680 --> 00:44:09.060 +[Speaker 4]: You'll still get the paper cuts, + +00:44:09.060 --> 00:44:09.560 +but... + +00:44:12.360 --> 00:44:12.660 +[Speaker 2]: like... Yeah, and my experience was not + +00:44:16.500 --> 00:44:16.880 +great. I'm not a person, + +00:44:17.860 --> 00:44:18.360 +like, I don't want to have... + +00:44:19.960 --> 00:44:20.460 +Not with LEM or Emacs. + +00:44:22.660 --> 00:44:23.160 +I like to have different programs. + +00:44:25.840 --> 00:44:26.120 +I don't want to like, I never was in like + +00:44:28.040 --> 00:44:28.540 +Emacs or you know, only Emacs. + +00:44:30.480 --> 00:44:30.800 +I really love Emacs, GNU Emacs, + +00:44:33.920 --> 00:44:34.140 +but only Emacs? No, no, + +00:44:35.300 --> 00:44:35.540 +I like my browser, I like my, + +00:44:37.500 --> 00:44:38.000 +you know, my Windows Manager, + +00:44:41.280 --> 00:44:41.780 +my, you know, I wasn't Emacs only. + +00:44:45.520 --> 00:44:46.000 +Emacs is my OS. Some people are, + +00:44:48.600 --> 00:44:49.100 +which is good. Different kind of a... + +00:44:51.600 --> 00:44:52.100 +I have to say that I come from Vim, + +00:44:57.340 --> 00:44:57.720 +like a long time ago. But I come from Vim, + +00:44:58.660 --> 00:44:58.980 +so I'm using Evil Mode. + +00:45:00.280 --> 00:45:00.780 +And I maybe have this kind of a... + +00:45:05.700 --> 00:45:06.200 +Yeah. So regarding Summoner.vm, + +00:45:10.080 --> 00:45:10.580 +it's... I like it because it's common Lisp, + +00:45:13.940 --> 00:45:14.440 +but it don't have some, + +00:45:18.120 --> 00:45:18.620 +this, I removed this. So I'm using another + +00:45:21.040 --> 00:45:21.340 +model line because the model line is not + +00:45:24.440 --> 00:45:24.720 +great. Everything else is a little bit weird + +00:45:28.940 --> 00:45:29.440 +because you have frames similar to Emacs. + +00:45:33.560 --> 00:45:34.060 +You have a frame. You have this window, + +00:45:35.600 --> 00:45:36.100 +and then there's no nothing here. + +00:45:37.700 --> 00:45:38.100 +[Speaker 4]: Yeah, I've used it before. + +00:45:39.720 --> 00:45:40.220 +That was definitely weird. + +00:45:41.680 --> 00:45:42.180 +It's also nice to be able to just... + +00:45:43.660 --> 00:45:44.160 +Can't you put multiple windows? + +00:45:46.100 --> 00:45:46.600 +Can't you duplicate windows? + +00:45:48.040 --> 00:45:48.540 +Show the same window in 2 frames? + +00:45:48.560 --> 00:45:49.060 +NIGEL + +00:45:51.020 --> 00:45:51.520 +[Speaker 2]: GANSZELA-WALSH Never tried that. + +00:45:54.400 --> 00:45:54.900 +Never occurred to me that. + +00:45:57.840 --> 00:45:58.020 +I don't know. Never tried that, + +00:46:01.480 --> 00:46:01.980 +to be honest. Let me check. + +00:46:07.280 --> 00:46:07.780 +No idea. Item? I think so. + +00:46:10.080 --> 00:46:10.320 +Because when you try to, + +00:46:11.520 --> 00:46:11.980 +at least not in an easy way. + +00:46:13.940 --> 00:46:14.260 +When you try to, so if I try to put a window + +00:46:16.020 --> 00:46:16.520 +here, let me move it so it, + +00:46:20.060 --> 00:46:20.540 +and if I try to like, so it's, + +00:46:21.680 --> 00:46:21.890 +yeah, no other window. + +00:46:24.100 --> 00:46:24.360 +[Speaker 4]: So can you open the, what is that, + +00:46:25.080 --> 00:46:25.440 +discord or your browser? + +00:46:26.840 --> 00:46:27.340 +Could you open that in both your frames? + +00:46:34.620 --> 00:46:35.120 +[Speaker 2]: I can I Side by side, but not the same + +00:46:37.740 --> 00:46:37.920 +[Speaker 0]: I mean I do I can I can have I know + +00:46:38.400 --> 00:46:38.600 +[Speaker 4]: can't your frames? 2 browsers you can do that + +00:46:42.600 --> 00:46:43.100 +[Speaker 2]: browser I never occurred to me that, + +00:46:46.300 --> 00:46:46.800 +[Speaker 4]: in DWM? You can't do that in XMLNet, + +00:46:48.560 --> 00:46:49.060 +at least I don't know what configuration + +00:46:50.820 --> 00:46:51.020 +you'd have to do to get to be able to do that + +00:46:51.140 --> 00:46:51.640 +in XMONAD. + +00:46:54.060 --> 00:46:54.560 +[Speaker 2]: wow. Interesting. Maybe you can. + +00:46:57.700 --> 00:46:58.200 +I never tried. Maybe you can? + +00:47:03.240 --> 00:47:03.640 +No idea. The interesting thing that I never + +00:47:05.860 --> 00:47:06.360 +use is that floating windows. + +00:47:09.520 --> 00:47:09.960 +Never use floating windows, + +00:47:13.480 --> 00:47:13.780 +but normal windows. You know, + +00:47:17.780 --> 00:47:18.160 +not. And SoundWM does have a weird support + +00:47:24.720 --> 00:47:25.220 +for it. Now it works. But I don't like it. + +00:47:26.680 --> 00:47:27.180 +For me, it was a little bit rough, + +00:47:29.480 --> 00:47:29.980 +the use of floating windows in SoundWM. + +00:47:32.480 --> 00:47:32.980 +I think they're way better now. + +00:47:36.580 --> 00:47:37.080 +I think, but yeah, I don't use it so... + +00:47:40.600 --> 00:47:41.100 +But there is. + +00:47:43.520 --> 00:47:43.940 +[Speaker 4]: You know, for me with the, + +00:47:45.060 --> 00:47:45.480 +like, Emacs doing everything, + +00:47:46.880 --> 00:47:47.380 +it's like, you got like Emacs, + +00:47:50.320 --> 00:47:50.740 +you got shell, and then you got the gooey + +00:47:56.520 --> 00:47:56.760 +Wild West. Yeah. Like, + +00:47:58.940 --> 00:47:59.440 +with Emacs, I know, I'll generally get, + +00:48:01.280 --> 00:48:01.780 +oh, this is going to be configured in? + +00:48:04.160 --> 00:48:04.660 +It's either gonna be shell script, + +00:48:06.180 --> 00:48:06.340 +Python or Emacs. Oh wait, + +00:48:07.000 --> 00:48:07.500 +no, it's gonna be Emacs. + +00:48:09.680 --> 00:48:10.180 +Variable's gonna be written in SecQ, + +00:48:10.380 --> 00:48:10.880 +period. + +00:48:16.640 --> 00:48:17.140 +[Speaker 2]: Well, I don't use too much scripting, + +00:48:18.260 --> 00:48:18.540 +but I'd like to, for example, + +00:48:21.540 --> 00:48:22.040 +I had to do a, so the automatic installer + +00:48:26.000 --> 00:48:26.500 +for, for Debian base, Debian stuff for Linux + +00:48:30.340 --> 00:48:30.840 +for, for LEM. I was thinking of doing in bash + +00:48:32.520 --> 00:48:33.020 +and I say, I don't want to do it in Bash. + +00:48:35.380 --> 00:48:35.880 +So I just did it in SVC and Commodisp, + +00:48:37.660 --> 00:48:38.100 +which does have like a scripting feature. + +00:48:40.920 --> 00:48:41.040 +You can put a script and it will create your + +00:48:41.160 --> 00:48:41.660 +own script. + +00:48:45.860 --> 00:48:46.280 +[Speaker 4]: 1 of the main people behind Next, + +00:48:50.760 --> 00:48:50.880 +he did a talk on using Common Lisp as a + +00:48:51.720 --> 00:48:52.220 +replacement for a shell. + +00:48:58.700 --> 00:48:59.200 +[Speaker 2]: Yes, it was... I know him. + +00:49:00.680 --> 00:49:01.180 +I know that he exists. + +00:49:04.600 --> 00:49:04.900 +Next, I think it's a main maintainer of Nix, + +00:49:09.140 --> 00:49:09.620 +[Speaker 4]: Yeah, although his website's kind of, + +00:49:10.380 --> 00:49:10.880 +I think he took it down. + +00:49:12.280 --> 00:49:12.780 +[Speaker 2]: Ambrevar. Yeah, I think he, + +00:49:14.480 --> 00:49:14.980 +yeah, he took it down. + +00:49:17.360 --> 00:49:17.680 +[Speaker 4]: So if you want to, you can look at it in Time + +00:49:17.680 --> 00:49:18.180 +Machine. + +00:49:23.940 --> 00:49:24.440 +[Speaker 2]: Yeah, I do have that article in my bookmarks, + +00:49:26.740 --> 00:49:27.240 +I think, somewhere. I remember reading that. + +00:49:30.360 --> 00:49:30.840 +So also, I would like to keep separated + +00:49:32.880 --> 00:49:33.380 +things in that way to have shell and then + +00:49:37.940 --> 00:49:38.440 +Emacs or LEM. Like for Emacs I use Viter. + +00:49:40.760 --> 00:49:41.260 +I don't like that it has different, + +00:49:41.760 --> 00:49:42.260 +you know. + +00:49:44.900 --> 00:49:45.060 +[Speaker 4]: On the same time though, + +00:49:46.960 --> 00:49:47.120 +I also don't like my terminal not to be able + +00:49:52.340 --> 00:49:52.600 +to click URLs and I like I like my terminal + +00:49:54.560 --> 00:49:55.060 +to have history and you know to scroll + +00:49:58.040 --> 00:49:58.200 +position copy paste You can do some of that + +00:50:00.020 --> 00:50:00.160 +stuff, but you know how that stuff go on the + +00:50:01.960 --> 00:50:02.080 +killer ring I kind of view it as like an + +00:50:02.800 --> 00:50:03.300 +alternative to shell. + +00:50:06.940 --> 00:50:07.080 +[Speaker 2]: Fair enough, but I think when some for my + +00:50:08.720 --> 00:50:09.220 +terminal, I only use it for navigate, + +00:50:11.280 --> 00:50:11.780 +remove stuff, so basic stuff. + +00:50:14.280 --> 00:50:14.640 +When I have to like, I don't know, + +00:50:17.640 --> 00:50:18.140 +edit something, just open the... + +00:50:22.120 --> 00:50:22.400 +[Speaker 4]: I like to use completion and narrowing to + +00:50:24.480 --> 00:50:24.720 +find my files. I kind of wish I could do that + +00:50:26.320 --> 00:50:26.600 +[Speaker 0]: on the shell or like if you use + +00:50:27.400 --> 00:50:27.640 +[Speaker 4]: more D-Menu to do that. + +00:50:28.440 --> 00:50:28.760 +That would be, I'm sure, + +00:50:28.760 --> 00:50:29.260 +nicer. + +00:50:38.140 --> 00:50:38.240 +[Speaker 2]: There's a lot of tools for terminals to do + +00:50:39.800 --> 00:50:39.880 +that, right? But you have to configure all of + +00:50:41.580 --> 00:50:41.780 +them. Beam users are very aware of those + +00:50:46.980 --> 00:50:47.300 +tools. You know, having very good fuzzy + +00:50:49.240 --> 00:50:49.440 +finding of files and then all by the + +00:50:53.680 --> 00:50:54.100 +terminal. I do have a friend who is a user of + +00:50:56.820 --> 00:50:57.320 +the Forbidden Editor, he's good, + +00:51:01.900 --> 00:51:02.400 +that does have a lot of small, + +00:51:09.480 --> 00:51:09.980 +like fuzzy finding, and so complete commands, + +00:51:12.240 --> 00:51:12.740 +and call those images in the terminal, + +00:51:14.300 --> 00:51:14.800 +all sorts of crazy stuff. + +00:51:16.120 --> 00:51:16.620 +That I think are not overkill, + +00:51:20.380 --> 00:51:20.560 +but I mean, if you want to use it, + +00:51:29.540 --> 00:51:30.040 +go ahead. So yeah. The thing is that, + +00:51:32.360 --> 00:51:32.860 +So trickling back a little bit to LEM, + +00:51:35.600 --> 00:51:35.860 +I think an interesting thought that I have + +00:51:37.280 --> 00:51:37.780 +about LEM and I can do Emacs. + +00:51:40.680 --> 00:51:41.180 +Not now, because LEM is a very small, + +00:51:43.740 --> 00:51:44.240 +like literally people, + +00:51:46.000 --> 00:51:46.500 +at least developers and users, + +00:51:50.280 --> 00:51:50.780 +I don't know, maybe 10 less. + +00:51:56.780 --> 00:51:57.280 +But people may think, split the community, + +00:51:58.740 --> 00:51:58.900 +right? That's the main thing that should come + +00:51:59.960 --> 00:52:00.460 +to my mind, split the community, + +00:52:01.840 --> 00:52:02.140 +maybe you, because that's true. + +00:52:04.000 --> 00:52:04.280 +I mean, I'm not developing that much in Nui + +00:52:06.260 --> 00:52:06.760 +MacLisp because I'm developing them. + +00:52:12.080 --> 00:52:12.580 +That's not that I'm a force that you might + +00:52:13.360 --> 00:52:13.860 +think exists or anything, + +00:52:17.220 --> 00:52:17.400 +but you know, you're splitting a very small + +00:52:21.600 --> 00:52:21.760 +community. Not that LEM wants to do that or + +00:52:24.160 --> 00:52:24.360 +anything, or will be able to in any way, + +00:52:25.280 --> 00:52:25.780 +but you know what I mean. + +00:52:32.360 --> 00:52:32.780 +I thought about that, And I think it's an + +00:52:40.600 --> 00:52:40.800 +interesting concern. But that concern also + +00:52:42.180 --> 00:52:42.680 +stops innovation in some way. + +00:52:46.960 --> 00:52:47.460 +[Speaker 4]: I think you can, if you look at the example + +00:52:50.200 --> 00:52:50.680 +of how many EMAX talks are related to + +00:52:54.760 --> 00:52:54.960 +knowledge management and not all and like for + +00:52:57.840 --> 00:52:58.100 +instance denote and Orgrim don't really work + +00:53:01.740 --> 00:53:01.880 +together all that well they split the + +00:53:03.740 --> 00:53:03.960 +community so to say I don't think they make + +00:53:04.720 --> 00:53:05.220 +it weaker at all, though. + +00:53:08.560 --> 00:53:08.800 +I think you were saying competition is good, + +00:53:10.000 --> 00:53:10.500 +but yeah, competition is good. + +00:53:12.100 --> 00:53:12.360 +[Speaker 2]: Yeah, I agree on that. + +00:53:13.280 --> 00:53:13.780 +I want to put it in the... + +00:53:15.400 --> 00:53:15.900 +But, you know, I'm doing the devil's advocate + +00:53:18.252 --> 00:53:18.271 +[Speaker 0]: something, that's... The developer gates in + +00:53:18.308 --> 00:53:18.327 +this regard. Like + +00:53:18.327 --> 00:53:18.346 +[Speaker 2]: in this regard. If someone wants to say if + +00:53:19.280 --> 00:53:19.780 +someone wants to like say something that + +00:53:22.920 --> 00:53:23.160 +maybe, you know, because some people still + +00:53:30.800 --> 00:53:30.940 +remember the Emacs versus X Emacs thing in + +00:53:34.860 --> 00:53:35.360 +the past, you know, that the split of the and + +00:53:38.100 --> 00:53:38.240 +That was good in some way but also bad in + +00:53:39.800 --> 00:53:39.960 +others like the compatibility was a little + +00:53:42.560 --> 00:53:43.040 +bit of a hell You know at the end Emacs + +00:53:46.160 --> 00:53:46.440 +failed, no Emacs But at that time it wasn't + +00:53:50.140 --> 00:53:50.500 +that clear and some people like it wasn't + +00:53:53.200 --> 00:53:53.360 +there. And I can understand that kind of a + +00:53:53.360 --> 00:53:53.860 +feeling. + +00:53:58.820 --> 00:53:59.040 +[Speaker 4]: Well sometimes the steps forward you end up + +00:54:02.640 --> 00:54:02.760 +going Like you're on a hill and you want to + +00:54:05.820 --> 00:54:06.000 +[Speaker 0]: the way the path to get up to + +00:54:06.440 --> 00:54:06.720 +[Speaker 4]: get to a higher hill, but that higher hill + +00:54:10.920 --> 00:54:11.280 +goes down and up. It doesn't mean that even + +00:54:12.240 --> 00:54:12.600 +if you know you're going down, + +00:54:13.840 --> 00:54:14.340 +it doesn't mean that it was a mistake. + +00:54:19.740 --> 00:54:20.020 +[Speaker 2]: Okay, fair enough. And also another + +00:54:22.120 --> 00:54:22.360 +interesting thing that I want to envision in + +00:54:25.520 --> 00:54:25.720 +the future, if I have time or someone wants + +00:54:28.400 --> 00:54:28.740 +to help me with, is I want them to have + +00:54:30.240 --> 00:54:30.740 +different language for extension, + +00:54:32.560 --> 00:54:33.060 +different Lisp for extension, + +00:54:36.340 --> 00:54:36.840 +not only common Lisp, but Scheme closure. + +00:54:39.680 --> 00:54:40.080 +And maybe not EmacLisp probably, + +00:54:46.500 --> 00:54:47.000 +[Speaker 4]: that what Guile Emacs is trying to do? + +00:54:47.860 --> 00:54:48.080 +[Speaker 2]: but yeah. And funny enough- Isn't Guile Emacs + +00:54:50.060 --> 00:54:50.560 +tried to add Guile support to, + +00:54:52.040 --> 00:54:52.540 +but Guile is not scheme. + +00:54:53.560 --> 00:54:53.800 +Well, it's kind of scheme, + +00:54:54.440 --> 00:54:54.940 +but it's not all schemes, + +00:54:58.580 --> 00:54:58.780 +which is, you know, and it was just to + +00:55:02.540 --> 00:55:03.040 +replace EmacLisp with Gile. + +00:55:06.940 --> 00:55:07.260 +You have 2 both. It was similar in that way, + +00:55:12.100 --> 00:55:12.340 +but the thing is, Common Lisp does have a lot + +00:55:12.900 --> 00:55:13.220 +of interesting things. + +00:55:16.120 --> 00:55:16.620 +So someone wrote a closure in Common Lisp. + +00:55:20.640 --> 00:55:21.140 +Which is called Cloture. + +00:55:29.720 --> 00:55:29.860 +Someone wrote, well it's on the way but it's + +00:55:35.440 --> 00:55:35.740 +getting there, a standard scheme in Common + +00:55:39.440 --> 00:55:39.940 +Lisp. So to add support to LEM, + +00:55:44.440 --> 00:55:44.940 +will be as easy as import package, + +00:55:46.360 --> 00:55:46.860 +and you have, And if that language, + +00:55:49.640 --> 00:55:50.060 +which usually does, supports very well + +00:55:51.740 --> 00:55:51.900 +interaction between the host language and the + +00:55:52.920 --> 00:55:53.420 +language that tries to provide, + +00:55:57.040 --> 00:55:57.180 +you will mostly automatically have new + +00:55:58.060 --> 00:55:58.560 +language for the editor. + +00:56:05.640 --> 00:56:06.100 +[Speaker 4]: I think the more interesting hanging fruit + +00:56:09.280 --> 00:56:09.780 +would be like using Next to scrape websites, + +00:56:12.500 --> 00:56:13.000 +download CSV bank statements, + +00:56:15.940 --> 00:56:16.440 +integrating with like password managers and + +00:56:27.880 --> 00:56:28.180 +or using... yeah you could still do with + +00:56:30.120 --> 00:56:30.620 +[Speaker 2]: But isn't that more like next thing oh yeah + +00:56:31.460 --> 00:56:31.580 +yeah I + +00:56:32.400 --> 00:56:32.520 +[Speaker 4]: common list though mean what's your your + +00:56:34.760 --> 00:56:35.260 +other options would be Selenium, + +00:56:41.200 --> 00:56:41.580 +JavaScript, Next already gives you the REPL + +00:56:47.940 --> 00:56:48.300 +for that. Or when you had that Ambryvar talk, + +00:56:50.060 --> 00:56:50.220 +when he, I don't know if you watched it, + +00:56:52.920 --> 00:56:53.420 +but when you use a shell and a command takes + +00:56:56.060 --> 00:56:56.200 +takes a while It just automatically takes you + +00:56:58.440 --> 00:56:58.580 +back into your shell and says I'll just let + +00:57:00.520 --> 00:57:00.800 +this run in the background or being able to + +00:57:02.760 --> 00:57:03.260 +more easily run commands in parallel. + +00:57:13.620 --> 00:57:13.880 +[Speaker 2]: But that's not like Nix stuff, + +00:57:18.740 --> 00:57:19.140 +[Speaker 4]: The Ambrivar, the shell 1, + +00:57:21.540 --> 00:57:21.900 +[Speaker 2]: right? Not like? When he did it, + +00:57:23.380 --> 00:57:23.580 +he. Because 1 + +00:57:25.340 --> 00:57:25.440 +[Speaker 4]: wasn't. of the things He did in that when he + +00:57:30.040 --> 00:57:30.160 +was using the repl in place of the shell is 1 + +00:57:31.240 --> 00:57:31.740 +of the things in there was if, + +00:57:33.720 --> 00:57:34.120 +let's say you were compiling a program, + +00:57:36.820 --> 00:57:37.040 +that takes a while. If it took longer than + +00:57:40.240 --> 00:57:40.440 +like 3 seconds or something along those + +00:57:42.560 --> 00:57:42.740 +lines, it would kick you back into the shell + +00:57:44.260 --> 00:57:44.660 +and say, oh, we're waiting for this program + +00:57:48.160 --> 00:57:48.380 +[Speaker 2]: Oh, interesting. And + +00:57:48.840 --> 00:57:49.340 +[Speaker 4]: to run, to finish. then you could, + +00:57:51.200 --> 00:57:51.600 +and then it had back reference support. + +00:57:55.260 --> 00:57:55.520 +So you could say, Oh, app search for this + +00:57:58.480 --> 00:57:58.820 +program. And then with the, + +00:58:00.780 --> 00:58:01.220 +with the shell, I, when I want to search, + +00:58:04.460 --> 00:58:04.640 +I'll then grep through that list to narrow it + +00:58:06.900 --> 00:58:07.180 +down even further, but I do a whole new + +00:58:08.400 --> 00:58:08.900 +search. It just says, oh, + +00:58:10.600 --> 00:58:11.100 +just grep through what I already searched. + +00:58:14.180 --> 00:58:14.680 +Just grep through the results of the command + +00:58:15.940 --> 00:58:16.440 +that's 3 commands ago. + +00:58:17.980 --> 00:58:18.180 +[Speaker 2]: Interesting. So it + +00:58:23.880 --> 00:58:24.380 +[Speaker 4]: runs instantly. Or look for my build errors + +00:58:25.840 --> 00:58:26.340 +in my compilation output, + +00:58:29.700 --> 00:58:30.060 +[Speaker 0]: rather than trying to build it again grepping + +00:58:30.360 --> 00:58:30.860 +for the errors. + +00:58:33.640 --> 00:58:34.120 +[Speaker 2]: I was checking, so where's that project? + +00:58:36.420 --> 00:58:36.920 +I was looking for it. You know, + +00:58:44.540 --> 00:58:45.040 +the... Yeah, I want to check the, + +00:58:48.000 --> 00:58:48.500 +[Speaker 4]: There was a talk. I also had a webpage. + +00:58:55.080 --> 00:58:55.580 +[Speaker 2]: you know... This red bull? + +00:58:58.260 --> 00:58:58.760 +No, this is not what I meant. + +00:59:34.174 --> 00:59:34.674 +[Speaker 0]: What is it? What is it? + +00:59:47.664 --> 00:59:48.164 +I cannot find the... I was trying to find + +00:59:54.180 --> 00:59:54.680 +[Speaker 2]: the repo for... It's C-L-E-S-H, + +00:59:59.640 --> 00:59:59.840 +like a unit shell for interface with for + +01:00:02.080 --> 01:00:02.580 +common Lisp? Is that the thing? + +01:00:09.000 --> 01:00:09.160 +[Speaker 0]: I don't know. I'm + +01:00:12.260 --> 01:00:12.760 +[Speaker 4]: trying to find the link to his old, + +01:00:16.560 --> 01:00:17.060 +no longer website. Website. + +01:00:21.500 --> 01:00:22.000 +[Speaker 2]: Skip. Technical issues. + +01:00:23.400 --> 01:00:23.900 +Maybe this 1. + +01:00:35.820 --> 01:00:36.320 +I cannot find it. + +01:00:37.800 --> 01:00:38.300 +[Speaker 4]: I got it. + +01:00:51.140 --> 01:00:51.640 +[Speaker 0]: Go to that link. Okay. + +01:01:02.020 --> 01:01:02.220 +[Speaker 4]: There's also a FOSDM target associated with + +01:01:02.380 --> 01:01:02.880 +it too. + +01:01:07.600 --> 01:01:08.100 +[Speaker 2]: Oh yeah, interesting. Clash and CH. + +01:01:13.520 --> 01:01:14.020 +CH. Oh, I was looking at the clesh. + +01:01:18.640 --> 01:01:19.140 +Clish, so the, let's check for it. + +01:01:23.560 --> 01:01:23.860 +The other 1 is shell and camel. + +01:01:24.120 --> 01:01:24.620 +This 1. + +01:01:37.505 --> 01:01:38.005 +[Speaker 0]: Interesting. Oops. Close Oops. + +01:01:40.900 --> 01:01:41.400 +[Speaker 2]: Oh, it's a GNU project. + +01:01:44.660 --> 01:01:45.160 +Oh, interesting. + +01:01:51.400 --> 01:01:51.680 +[Speaker 4]: The other thing that was interesting there is + +01:01:52.760 --> 01:01:53.260 +you use those disk images, + +01:02:00.140 --> 01:02:00.520 +LISP images, to have some of your common LISP + +01:02:05.920 --> 01:02:06.100 +utilities or programming libraries that you + +01:02:07.660 --> 01:02:08.040 +utilize in tandem with your REPL. + +01:02:13.700 --> 01:02:14.200 +So you can easily pull up a more featureful + +01:02:18.160 --> 01:02:18.400 +or a REPL that has more tools in it than by + +01:02:18.400 --> 01:02:18.900 +default. + +01:02:21.740 --> 01:02:22.240 +[Speaker 2]: Interesting. So yeah, that's, + +01:02:24.380 --> 01:02:24.880 +yeah, I mean, that will be, + +01:02:26.800 --> 01:02:27.100 +it will be fairly, no, + +01:02:28.700 --> 01:02:29.200 +no, easy. Well, easy, but not, + +01:02:33.080 --> 01:02:33.580 +But this can be integrated into LEM probably. + +01:02:36.060 --> 01:02:36.200 +Very, you know, not that easy because you + +01:02:38.520 --> 01:02:39.020 +have to change the few things. + +01:02:43.780 --> 01:02:44.280 +But this can be, you know. + +01:02:47.100 --> 01:02:47.600 +[Speaker 4]: Well, as example, he just... + +01:02:49.360 --> 01:02:49.860 +Well, 1 of the things that was in the talk, + +01:02:51.080 --> 01:02:51.300 +1 of the main ideas was, + +01:02:56.160 --> 01:02:56.380 +let's just, rather than trying to make the + +01:02:57.600 --> 01:02:58.040 +shell closer to a REPL, + +01:03:00.780 --> 01:03:01.280 +let's make a REPL closer to a shell, + +01:03:03.380 --> 01:03:03.760 +make it to where we can easily run Linux + +01:03:07.280 --> 01:03:07.420 +programs in it, and then use the rest of the + +01:03:10.120 --> 01:03:10.620 +REPL goodness, make it to where parentheses + +01:03:12.080 --> 01:03:12.580 +are easy to use, like paraedit, + +01:03:20.920 --> 01:03:21.420 +And then all of a sudden you have a nicer + +01:03:24.320 --> 01:03:24.640 +shell. Not really shell, + +01:03:24.640 --> 01:03:25.140 +but. + +01:03:30.020 --> 01:03:30.520 +[Speaker 2]: Oh, this is huge. + +01:03:33.520 --> 01:03:33.960 +[Speaker 6]: Hi, folks. Sorry for the interruption. + +01:03:35.200 --> 01:03:35.700 +It's Leo from the general track. + +01:03:39.380 --> 01:03:39.600 +We are about to go back live on the + +01:03:41.880 --> 01:03:42.040 +development track, so you can continue the + +01:03:43.080 --> 01:03:43.480 +discussion. You know, we are recording + +01:03:45.200 --> 01:03:45.360 +everything and you seem to be having a great + +01:03:47.520 --> 01:03:47.840 +amount of fun to issue the need for lunch, + +01:03:49.080 --> 01:03:49.580 +at least for the people in the US. + +01:03:51.160 --> 01:03:51.360 +I just want to let you know, + +01:03:53.680 --> 01:03:53.860 +in 2 minutes' time, we will be moving back to + +01:03:54.840 --> 01:03:55.340 +the rest of the talk for the afternoon, + +01:03:56.840 --> 01:03:57.040 +but feel free to stay in a room and keep + +01:03:57.760 --> 01:03:58.260 +discussing. All right? + +01:04:01.160 --> 01:04:01.660 +[Speaker 2]: Thank you. All right. + +01:04:03.640 --> 01:04:03.940 +[Speaker 6]: It might be a little brutal in 2 minutes, + +01:04:07.920 --> 01:04:08.240 +so if you have your watch synchronized at 7 + +01:04:09.080 --> 01:04:09.520 +sharps, so in 2 minutes, + +01:04:10.040 --> 01:04:10.540 +it'll cut off. + +01:04:19.600 --> 01:04:20.100 +[Speaker 2]: Okay. Bye-bye. Bye. Oh my. + +01:04:23.860 --> 01:04:24.360 +Yeah. Interesting stuff indeed. + +01:04:29.380 --> 01:04:29.540 +[Speaker 4]: to listen to it after you're done with the + +01:04:32.380 --> 01:04:32.540 +[Speaker 0]: I guess you have Have you + +01:04:33.480 --> 01:04:33.980 +[Speaker 4]: comp. ever listened to that talk before? + +01:04:38.320 --> 01:04:38.800 +The 1 that's in that webpage, + +01:04:39.380 --> 01:04:39.880 +the FOSDEM 1. + +01:04:40.840 --> 01:04:41.340 +[Speaker 2]: Which 1? Sorry? 0 yeah, + +01:04:44.480 --> 01:04:44.980 +I in fact saw him live in the FOSDEM 2020. + +01:04:50.053 --> 01:04:50.091 +[Speaker 0]: So I a little bit. 2020. + +01:04:50.166 --> 01:04:50.204 +So we him + +01:04:51.760 --> 01:04:51.980 +[Speaker 2]: talked with him a little bit The first time + +01:04:55.760 --> 01:04:56.260 +is here in well here in Europe here in + +01:05:01.320 --> 01:05:01.440 +Brussels like 3 hours away or 2 hours away in + +01:05:02.320 --> 01:05:02.820 +plane from where I am. + +01:05:05.320 --> 01:05:05.800 +[Speaker 0]: 1 of the things that's kind of interesting + +01:05:06.900 --> 01:05:07.040 +with, you have some of + +01:05:09.060 --> 01:05:09.160 +[Speaker 4]: the people who come from Europe to the US and + +01:05:11.820 --> 01:05:11.980 +they're like, oh, I want to visit all the + +01:05:13.780 --> 01:05:14.060 +corners of the US in a couple of days. + +01:05:17.920 --> 01:05:18.420 +And it's like, No, US is the size of Europe. + +01:05:19.740 --> 01:05:19.960 +[Speaker 0]: The + +01:05:21.160 --> 01:05:21.660 +[Speaker 4]: states are the size of their countries. + +01:05:23.140 --> 01:05:23.400 +You don't... + +01:05:27.100 --> 01:05:27.600 +[Speaker 2]: I know. I know. It's very... + +01:05:30.660 --> 01:05:31.080 +It's huge. And it's like 6 hours different + +01:05:32.280 --> 01:05:32.780 +from coast to coast, something like that. + +01:05:38.000 --> 01:05:38.240 +[Speaker 4]: Yeah, and that's driving as fast as you can + +01:05:39.960 --> 01:05:40.140 +on the freeway, on the best roads that you + +01:05:41.160 --> 01:05:41.660 +possibly can, not taking... + +01:05:45.700 --> 01:05:46.200 +[Speaker 2]: Yeah, that would be... + +01:05:53.400 --> 01:05:53.900 +So the thing that I try to do also with LEM + +01:05:57.880 --> 01:05:58.140 +is to move my workflow from LEM to Emax, + +01:06:01.620 --> 01:06:02.120 +so for Emax to LEM, use it more. + +01:06:07.080 --> 01:06:07.580 +And I hope to, we still have a long way to go + +01:06:08.440 --> 01:06:08.940 +in terms of usability, + +01:06:10.600 --> 01:06:11.100 +in terms of other things, + +01:06:12.640 --> 01:06:13.140 +because we need more power. + +01:06:18.420 --> 01:06:18.620 +So This is also my attempt to do some + +01:06:20.320 --> 01:06:20.820 +publicity to the Blend project itself, + +01:06:23.100 --> 01:06:23.600 +to need to add more users, + +01:06:26.200 --> 01:06:26.700 +to be willing to try and to fail trying, + +01:06:29.640 --> 01:06:30.140 +because we still have some rough edges. + +01:06:38.320 --> 01:06:38.820 +Yeah, just trying to do that, + +01:06:41.720 --> 01:06:42.220 +which is, and I apologize to the Emaclist + +01:06:43.580 --> 01:06:43.740 +community, which I'm part of, + +01:06:44.660 --> 01:06:45.140 +but I don't want to like, + +01:06:47.020 --> 01:06:47.520 +disencourage the use of getting Emacs anyway. + +01:06:48.960 --> 01:06:49.460 +I think both are awesome. + +01:06:51.300 --> 01:06:51.800 +I want to anyone to get a real impression. + +01:06:57.040 --> 01:06:57.100 +[Speaker 0]: What do + +01:06:57.740 --> 01:06:58.240 +[Speaker 2]: you think? PlasmaStrike, + +01:07:01.560 --> 01:07:02.060 +you have a very powerful name. + +01:07:07.580 --> 01:07:07.840 +[Speaker 4]: I don't think that's something to worry + +01:07:09.660 --> 01:07:10.160 +about. I don't personally, + +01:07:15.380 --> 01:07:15.760 +but I'm going to watch the EMMS talk. + +01:07:17.360 --> 01:07:17.560 +That's something that I don't really use too + +01:07:20.800 --> 01:07:21.220 +much on my Emacs config. + +01:07:22.600 --> 01:07:23.100 +So I'm going to let you go. + +01:07:24.440 --> 01:07:24.720 +[Speaker 2]: OK, yeah, I'm going to go. + +01:07:26.320 --> 01:07:26.760 +I'm going to maybe watch the garbage + +01:07:27.800 --> 01:07:28.300 +collector talk, which is interesting. + +01:07:32.540 --> 01:07:33.040 +So thank you all very much. + +01:07:35.860 --> 01:07:36.080 +I'm gonna go. Thanks for the questions and + +01:07:40.811 --> 01:07:41.288 +all that. I think I hope I answered correctly + +01:07:47.040 --> 01:07:47.540 +[Speaker 4]: is part of the value of being part of this is + +01:07:50.580 --> 01:07:50.740 +[Speaker 2]: all of them. Yeah, I figure this that's a way + +01:07:52.540 --> 01:07:53.040 +[Speaker 4]: conversations. So of saying thank you for + +01:07:54.480 --> 01:07:54.980 +people sharing interesting talks. + +01:07:57.780 --> 01:07:57.940 +[Speaker 2]: Indeed. Thank you all very much for going to + +01:08:02.380 --> 01:08:02.880 +the Emacs conf and to watch me. + +01:08:06.440 --> 01:08:06.940 +So thank you all very much. + +01:08:09.360 --> 01:08:09.860 +I'm going to go do that. + +01:08:10.640 --> 01:08:10.890 +[Speaker 0]: See you. diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt new file mode 100644 index 00000000..875539c5 --- /dev/null +++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt @@ -0,0 +1,35 @@ +WEBVTT + + +00:00:00.000 --> 00:00:16.999 +Introduction + +00:00:17.000 --> 00:01:26.639 +Why Lisp matters + +00:01:26.640 --> 00:02:54.840 +Why Emacs Lisp was chosen + +00:02:54.841 --> 00:03:38.580 +Other "Emacsen" + +00:03:38.581 --> 00:06:39.119 +Why not Common Lisp? + +00:06:39.120 --> 00:08:30.079 +Common Lisp is still not dead or is always dead + +00:08:30.080 --> 00:08:58.259 +Lem is a nice Emacsen implementation + +00:08:58.260 --> 00:10:31.079 +Why not just use GNU Emacs? + +00:10:31.080 --> 00:14:03.079 +Why Lem + +00:14:03.080 --> 00:15:49.599 +Similarities and differences + +00:15:49.600 --> 00:18:27.560 +Demo diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt new file mode 100644 index 00000000..b078c281 --- /dev/null +++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt @@ -0,0 +1,1079 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:03.199 +Hello, my name is Fermin. + +00:00:03.200 --> 00:00:06.959 +Today, I'm going to talk about the Emacsen family, + +00:00:06.960 --> 00:00:11.159 +the design of an Emacs, and the importance of Lisp. + +00:00:11.160 --> 00:00:13.519 +So we're going to talk about Lisp. + +00:00:13.520 --> 00:00:16.999 +I want to start from the end. + +NOTE Why Lisp matters + +00:00:17.000 --> 00:00:19.039 +The first question I want to ask is + +00:00:19.040 --> 00:00:21.399 +why I think Lisp matters. + +00:00:21.400 --> 00:00:22.879 +When I'm talking about Lisp here, + +00:00:22.880 --> 00:00:27.559 +I'm talking about the idea of Lisp, + +00:00:27.560 --> 00:00:30.119 +so the family of languages that are Lisp. + +00:00:30.120 --> 00:00:34.719 +But given that there's no formal specification of Lisp, + +00:00:34.720 --> 00:00:40.599 +so the opinion might vary. I will expect that Lisp, + +00:00:40.600 --> 00:00:44.439 +most of the Lisp have these kind of features. + +00:00:44.440 --> 00:00:46.239 +The first one is homoiconic: + +00:00:46.240 --> 00:00:49.799 +the code is data, basically. + +00:00:49.800 --> 00:00:52.559 +They also have a REPL: read-eval-print loop. + +00:00:52.560 --> 00:00:57.759 +That is very powerful and can help in development. + +00:00:57.760 --> 00:01:00.359 +Also, I think a good Lisp + +00:01:00.360 --> 00:01:03.319 +should have a powerful macro system. + +00:01:03.320 --> 00:01:05.759 +I'm good with compile-time macros, + +00:01:05.760 --> 00:01:07.599 +but read-time is also interesting. + +00:01:07.600 --> 00:01:10.279 +There's a lot of Lisp that you can choose. + +00:01:10.280 --> 00:01:11.999 +There's the main three ones, of course, + +00:01:12.000 --> 00:01:13.839 +with Scheme, Common Lisp, and Clojure. + +00:01:13.840 --> 00:01:19.674 +Scheme by Guile, Common Lisp by Common Lisp, + +00:01:19.675 --> 00:01:26.639 +and Clojure by Clojure or ClojureScript. + +NOTE Why Emacs Lisp was chosen + +00:01:26.640 --> 00:01:28.079 +So let's talk about Emacs Lisp. + +00:01:28.080 --> 00:01:29.679 +I didn't mention Emacs Lisp. + +00:01:29.680 --> 00:01:32.519 +I'm going to talk about why Emacs Lisp + +00:01:32.520 --> 00:01:35.599 +was chosen for an Emacs editor. + +00:01:35.600 --> 00:01:39.159 +We're going to explore this kind of design of the Emacs. + +00:01:39.160 --> 00:01:42.279 +And Emacs Lisp is the main language of it. Why? + +00:01:42.280 --> 00:01:44.959 +Given that there were a few alternatives at the time, + +00:01:44.960 --> 00:01:48.159 +why Emacs Lisp was chosen? + +00:01:48.160 --> 00:01:51.919 +So RMS, Richard Stallman, needed a Lisp, + +00:01:51.920 --> 00:01:54.279 +and there wasn't one available at the time. + +00:01:54.280 --> 00:01:57.039 +Keep in mind, this was the early 80s. + +00:01:57.040 --> 00:02:03.240 +Stallman was writing at that point the GCC, I think, + +00:02:03.241 --> 00:02:07.974 +and he was writing the core components + +00:02:07.975 --> 00:02:10.440 +of what is going to become GNU. + +00:02:10.441 --> 00:02:15.499 +He needed an editor. He wanted Lisp. He wanted Emacs. + +00:02:15.500 --> 00:02:20.280 +So he wrote Emacs Lisp. So at that time, + +00:02:20.281 --> 00:02:24.599 +the functionality was more important than "perfection." + +00:02:24.600 --> 00:02:26.639 +What I mean [by] "perfection" is: we programmers + +00:02:26.640 --> 00:02:33.359 +sometimes like to make everything good + +00:02:33.360 --> 00:02:36.479 +or very, very good when sometimes, indeed, + +00:02:36.480 --> 00:02:39.119 +it's more important that it works + +00:02:39.120 --> 00:02:42.919 +to do the task that it should. + +00:02:42.920 --> 00:02:44.199 +And it's not a bad language. + +00:02:44.200 --> 00:02:50.239 +It's not that bad. At that time, it was mostly nice. + +00:02:50.240 --> 00:02:54.840 +Today, it's good enough, I think. + +NOTE Other "Emacsen" + +00:02:54.841 --> 00:02:59.460 +He wasn't the first one, the GNU Emacs, + +00:02:59.461 --> 00:03:02.540 +nor the only one, of course. + +00:03:02.541 --> 00:03:06.439 +There were others: Hemlock, Zmacs, and Climacs... + +00:03:06.440 --> 00:03:08.980 +Two of them, I think, were written in Common Lisp, + +00:03:08.981 --> 00:03:14.479 +and Zmacs was written in a Lisp from a Lisp machine, + +00:03:14.480 --> 00:03:16.639 +so it was an implementation of Emacs. + +00:03:16.640 --> 00:03:19.039 +Not GNU Emacs, but the original idea + +00:03:19.040 --> 00:03:22.079 +of Emacs for a Lisp machine. + +00:03:22.080 --> 00:03:23.759 +So Hemlock was written in Common Lisp, + +00:03:23.760 --> 00:03:26.079 +but it's no longer used and no longer developed, + +00:03:26.080 --> 00:03:28.999 +as far as I know. And Climacs, it was developed, + +00:03:29.000 --> 00:03:31.519 +but it was abandoned, I think. + +00:03:31.520 --> 00:03:33.639 +So three of them failed for different reasons. + +00:03:33.640 --> 00:03:37.879 +Zmacs was because of the Lisp machine market crash, + +00:03:37.880 --> 00:03:38.580 +and yeah, it also failed. + +NOTE Why not Common Lisp? + +00:03:38.581 --> 00:03:44.039 +So Emacs got alone. And in the 90s, interesting to explore, + +00:03:44.040 --> 00:03:46.479 +some people suggest that why + +00:03:46.480 --> 00:03:49.679 +now that we have a standard Lisp, right, + +00:03:49.680 --> 00:03:52.559 +because Common Lisp was standardized in '94, + +00:03:52.560 --> 00:03:56.719 +why don't we change Emacs Lisp to Common Lisp? + +00:03:56.720 --> 00:03:58.999 +These are the other reasons I think are important, + +00:03:59.000 --> 00:04:01.159 +because that's why Stallman didn't choose Common Lisp. + +00:04:01.160 --> 00:04:02.039 +But I think the main one + +00:04:02.040 --> 00:04:03.759 +that I didn't write here + +00:04:03.760 --> 00:04:09.039 +is that Stallman wasn't a big fan of Common Lisp, + +00:04:09.040 --> 00:04:12.679 +and he was at the time the main developer + +00:04:12.680 --> 00:04:14.040 +and maintainer, of course, for Emacs. + +00:04:14.041 --> 00:04:16.439 +So he chose not to move to Common Lisp. + +00:04:16.440 --> 00:04:18.479 +But other reasons may be why... + +00:04:18.480 --> 00:04:22.919 +Because he had a late and painful standardization. + +00:04:22.920 --> 00:04:28.039 +Keep in mind, the first book that Guy Steele wrote + +00:04:28.040 --> 00:04:32.239 +was in 1984. The standardization finished in 19-- + +00:04:32.240 --> 00:04:38.279 +sorry, in 1984 was the first book + +00:04:38.280 --> 00:04:44.420 +and the standardization finished in 1994. + +00:04:44.421 --> 00:04:48.119 +So, like, 10 years of difference from one to the other. + +00:04:48.120 --> 00:04:51.879 +10 years of a lot of talk, a lot of money, + +00:04:51.880 --> 00:04:56.399 +and a lot of pain probably. + +00:04:56.400 --> 00:04:59.199 +The Lisp usage declined in the 90s + +00:04:59.200 --> 00:05:00.959 +due to the AI winter. + +00:05:00.960 --> 00:05:03.359 +We all know about the Lisp machine market crash. + +00:05:03.360 --> 00:05:08.839 +And the failure of commercial Lisp machine was + +00:05:08.840 --> 00:05:12.239 +inevitable at that point. + +00:05:12.240 --> 00:05:17.160 +So all the potential Emacs friends died. + +00:05:17.161 --> 00:05:21.279 +And also a lot of Emacs Lisp was already available. + +00:05:21.280 --> 00:05:24.559 +Emacs was already an amateur utility. + +00:05:24.560 --> 00:05:29.959 +Unix won the war of the operating system, as we know, + +00:05:29.960 --> 00:05:33.839 +and Emacs Lisp was available in Unix, + +00:05:33.840 --> 00:05:36.919 +or in GNU/Linux, as we know, + +00:05:36.920 --> 00:05:40.479 +which is the most successful implementation of Unix. + +00:05:40.480 --> 00:05:44.207 +Sorry, BSD. Okay. + +00:05:44.208 --> 00:05:48.399 +So Emacs won by being the "better" alternative. + +00:05:48.400 --> 00:05:49.999 +I'm quoting "better" here because + +00:05:50.000 --> 00:05:53.699 +I think Emacs does have a better design + +00:05:53.700 --> 00:05:56.959 +and, well, it was the one that survived, right? + +00:05:56.960 --> 00:06:00.039 +Which is the more important thing for a software or, + +00:06:00.040 --> 00:06:05.159 +you know... So Emacs won by being free, + +00:06:05.160 --> 00:06:08.399 +also in price, which I think the Lisp machine wasn't. + +00:06:08.400 --> 00:06:11.519 +So that was also very good. It was included. + +00:06:11.520 --> 00:06:14.559 +It had, and it still has, of course, + +00:06:14.560 --> 00:06:15.879 +a nice collection of packages + +00:06:15.880 --> 00:06:20.679 +that improve the standard functionality. + +00:06:20.680 --> 00:06:23.479 +It was easy to extend because of the nature of Lisp. + +00:06:23.480 --> 00:06:26.039 +And it has a very good integration with GNU/Linux, + +00:06:26.040 --> 00:06:29.399 +of course. It was created to write it. + +00:06:29.400 --> 00:06:31.079 +It makes sense that it's very good + +00:06:31.080 --> 00:06:39.119 +for a system administration perspective. + +NOTE Common Lisp is still not dead or is always dead + +00:06:39.120 --> 00:06:43.319 +But I think Common Lisp is not dead yet. + +00:06:43.320 --> 00:06:45.719 +Or some people say that it's always dead, + +00:06:45.720 --> 00:06:48.399 +so you cannot kill the something that is always dead. + +00:06:48.400 --> 00:06:50.719 +So I don't always code in C, + +00:06:50.720 --> 00:06:54.199 +but when I do, it's Lisp. I'm not a big fan of C + +00:06:54.200 --> 00:06:58.599 +for a lot of things, but yeah. + +00:06:58.600 --> 00:07:02.439 +Why I think Common Lisp is still relevant + +00:07:02.440 --> 00:07:05.399 +and can be used for all kind of application, + +00:07:05.400 --> 00:07:09.279 +both commercially and non-commercially. + +00:07:09.280 --> 00:07:11.839 +The first one is the main implementation + +00:07:11.840 --> 00:07:16.799 +of Common Lisp, which is called SBCL, which is awesome. + +00:07:16.800 --> 00:07:19.399 +It's fast. It's a very good extension. + +00:07:19.400 --> 00:07:21.639 +Basically, it's the reference one today. + +00:07:21.640 --> 00:07:25.559 +The namespaces of common Lisp, + +00:07:25.560 --> 00:07:26.879 +I really like the implementation. + +00:07:26.880 --> 00:07:28.719 +Some people don't like it. It's a matter of taste. + +00:07:28.720 --> 00:07:29.639 +But I think it's really good. + +00:07:29.640 --> 00:07:32.919 +I have a timeless standard. So it was standardized + +00:07:32.920 --> 00:07:35.979 +in the 90s, as I said. + +00:07:35.980 --> 00:07:38.880 +And it doesn't really need a new standard. + +00:07:38.881 --> 00:07:44.119 +Some people say it does need, but I don't think so. + +00:07:44.120 --> 00:07:45.999 +Also it does have macro readers, + +00:07:46.000 --> 00:07:49.159 +which I think is a very nice feature of Common Lisp + +00:07:49.160 --> 00:07:51.239 +that other Lisp doesn't seem to have, + +00:07:51.240 --> 00:07:56.719 +or a lot of them don't: in my mind, Emacs Lisp and Clojure. + +00:07:56.720 --> 00:07:58.199 +Also, it's image-based development, + +00:07:58.200 --> 00:08:00.399 +which is also quite unique to Common Lisp. + +00:08:00.400 --> 00:08:04.359 +I don't know all the Lisp that does have this. + +00:08:04.360 --> 00:08:05.359 +Basically, you develop a REPL + +00:08:05.360 --> 00:08:10.159 +and then you dump the entire REPL into an image. + +00:08:10.160 --> 00:08:12.079 +Java would be like a core dump. + +00:08:12.080 --> 00:08:14.159 +And you create an executable. + +00:08:14.160 --> 00:08:17.159 +Which at the time, I guess in the 90s, + +00:08:17.160 --> 00:08:18.199 +was a huge one, right? + +00:08:18.200 --> 00:08:20.679 +Because you have the entire language, and the REPL, + +00:08:20.680 --> 00:08:23.799 +and the code. But today are like 20 MB, + +00:08:23.800 --> 00:08:26.599 +which in today's standard is nothing. + +00:08:26.600 --> 00:08:30.079 +There's pictures in your phone larger than 20 MB. + +NOTE Lem is a nice Emacsen implementation + +00:08:30.080 --> 00:08:39.239 +So there's a new Emacs in town--well, Emacs, not Emacs, + +00:08:39.240 --> 00:08:43.439 +Which is Lem. I think it's a very good Emacs implementation. + +00:08:43.440 --> 00:08:46.679 +What I mean by "Emacs" here is not a clone of GNU Emacs, + +00:08:46.680 --> 00:08:51.559 +but an Emacs-inspired editor with similar characteristics, + +00:08:51.560 --> 00:08:53.519 +and written in a Lisp, + +00:08:53.520 --> 00:08:58.259 +which is why I said that Lisp was very important. + +NOTE Why not just use GNU Emacs? + +00:08:58.260 --> 00:09:01.559 +So first, I'm going to address the elephant in the room, + +00:09:01.560 --> 00:09:05.039 +and the question that maybe most + +00:09:05.040 --> 00:09:06.159 +of you are now thinking. + +00:09:06.160 --> 00:09:12.919 +Why not just use GNU Emacs? It's the project. + +00:09:12.920 --> 00:09:15.759 +It's the main one, right? Why choose another one? + +00:09:15.760 --> 00:09:18.199 +So Lem is relatively new, 2018. + +00:09:18.200 --> 00:09:20.199 +And it can explore different ideas. + +00:09:20.200 --> 00:09:21.679 +It was developed by Sasaki-san. + +00:09:21.680 --> 00:09:26.719 +Basically, it was mostly a one-month project, + +00:09:26.720 --> 00:09:31.940 +but we are getting there. I'm not the maintainer. + +00:09:31.941 --> 00:09:36.959 +I'm a developer of Lem. So given that it's + +00:09:36.960 --> 00:09:39.239 +relatively new, it can explore different ideas. + +00:09:39.240 --> 00:09:43.519 +You're not bound to a community or backwards compatibility. + +00:09:43.520 --> 00:09:45.439 +You can explore different ideas, + +00:09:45.440 --> 00:09:46.199 +and I think that's always nice. + +00:09:46.200 --> 00:09:49.839 +Having multiple options creates competition, + +00:09:49.840 --> 00:09:52.639 +which benefits the community. So Emacs and Vim, + +00:09:52.640 --> 00:09:54.839 +the competition between the two + +00:09:54.840 --> 00:09:59.119 +always create nice packages like evil or, you know... + +00:09:59.120 --> 00:10:03.719 +It's really good to have some kind of a competition, + +00:10:03.720 --> 00:10:06.159 +healthy competition. + +00:10:06.160 --> 00:10:08.199 +And it doesn't share any code base with GNU Emacs. + +00:10:08.200 --> 00:10:12.879 +I want to clarify this because some people think that + +00:10:12.880 --> 00:10:16.119 +Lem is kind of a, you know, Spacemacs or Doom. + +00:10:16.120 --> 00:10:19.959 +No, it doesn't share any code. + +00:10:19.960 --> 00:10:27.759 +It has zero Emacs. So that's it. + +00:10:27.760 --> 00:10:29.199 +Getting this out of the way. + +00:10:29.200 --> 00:10:31.079 +Why I think Lem is interesting. + +NOTE Why Lem + +00:10:31.080 --> 00:10:32.359 +I'm going to show why Lem. + +00:10:32.360 --> 00:10:37.759 +Why? You can try Lem, and maybe you like it. + +00:10:37.760 --> 00:10:41.319 +First thing, these are the features + +00:10:41.320 --> 00:10:42.799 +that I really like from it. + +00:10:42.800 --> 00:10:45.574 +Can be different from person to person, + +00:10:45.575 --> 00:10:48.279 +but I think these are the main ideas + +00:10:48.280 --> 00:10:49.999 +it brings to the table and are really interesting. + +00:10:50.000 --> 00:10:53.119 +I want to say that Lem is not a research project. + +00:10:53.120 --> 00:10:55.719 +It's not like some people did that + +00:10:55.720 --> 00:10:57.239 +and it's still in development. No, no. + +00:10:57.240 --> 00:11:00.039 +This is a usable product that can be used + +00:11:00.040 --> 00:11:02.039 +to [do] day-to-day programming + +00:11:02.040 --> 00:11:04.559 +in a very good experience. + +00:11:04.560 --> 00:11:06.279 +This is not like--I want to clarify this + +00:11:06.280 --> 00:11:08.719 +because some people bring some exploratory projects. + +00:11:08.720 --> 00:11:10.799 +This is not that one. This is finished. + +00:11:10.800 --> 00:11:14.719 +Well, finished in the way that you can use it. + +00:11:14.720 --> 00:11:17.799 +It's not, you know, have everything in place. + +00:11:17.800 --> 00:11:20.639 +So let's continue. + +00:11:20.640 --> 00:11:22.159 +It's written 100% in Common Lisp. + +00:11:22.160 --> 00:11:23.839 +I say this because Emacs is not + +00:11:23.840 --> 00:11:26.279 +100% in Emacs Lisp. + +00:11:26.280 --> 00:11:28.359 +You have to modify the C code, + +00:11:28.360 --> 00:11:31.839 +I think, well, if you... You don't have to, + +00:11:31.840 --> 00:11:33.999 +but if you want to change the internals, you do. + +00:11:34.000 --> 00:11:38.879 +I think that given that Lem does not care + +00:11:38.880 --> 00:11:41.199 +about the implementation of the language itself-- + +00:11:41.200 --> 00:11:44.039 +so for example, Lem doesn't have to deal with + +00:11:44.040 --> 00:11:48.199 +how Common Lisp works, it just used the language, right? + +00:11:48.200 --> 00:11:50.799 +It's on top of the language. + +00:11:50.800 --> 00:11:53.879 +You can say that. Emacs Lisp is Emacs and Emacs Lisp, + +00:11:53.880 --> 00:11:56.079 +so you have to, you have both in the same place, + +00:11:56.080 --> 00:12:00.319 +which is, well, it's a double-edged sword, right? + +00:12:00.320 --> 00:12:03.319 +Then you have the both--similar to Emacs-- + +00:12:03.320 --> 00:12:05.639 +you have ncurses and SDL2 frontends. + +00:12:05.640 --> 00:12:08.719 +One is terminal-based and the other is graphical + +00:12:08.720 --> 00:12:10.399 +using the SDL2 library, + +00:12:10.400 --> 00:12:13.759 +which you can do a lot of crazy things. + +00:12:13.760 --> 00:12:16.159 +Of course, it's meant to program games and stuff, + +00:12:16.160 --> 00:12:19.679 +but Lem uses, and it works fairly well. + +00:12:19.680 --> 00:12:21.879 +You can program games if you want. + +00:12:21.880 --> 00:12:27.559 +Not that you need to or anything, but we have Tetris. + +00:12:27.560 --> 00:12:28.999 +So there's that. + +00:12:29.000 --> 00:12:31.719 +Also, separate front-end interface. + +00:12:31.720 --> 00:12:34.159 +So like I said, you have two, but you can create more. + +00:12:34.160 --> 00:12:36.439 +In the past, had an electron one, + +00:12:36.440 --> 00:12:41.319 +but it got abandoned for obvious reasons, I think. Sorry. + +00:12:41.320 --> 00:12:45.839 +This idea is taken from Neovim that had a lot of frontends. + +00:12:45.840 --> 00:12:48.119 +In fact, we don't have that many, + +00:12:48.120 --> 00:12:49.639 +but not that many people we have two. + +00:12:49.640 --> 00:12:51.674 +That works fairly well. + +00:12:51.675 --> 00:12:56.679 +We have superb development experience thanks to SLIME. + +00:12:56.680 --> 00:13:01.319 +So we have Micro, + +00:13:01.320 --> 00:13:04.039 +which is a SLIME version for Lem, basically. + +00:13:04.040 --> 00:13:08.999 +SLIME is awesome and Micro is also awesome. + +00:13:09.000 --> 00:13:12.319 +We have a very strong development experience + +00:13:12.320 --> 00:13:15.399 +that we don't have for a Lisp, + +00:13:15.400 --> 00:13:17.399 +which I think is very important. + +00:13:17.400 --> 00:13:20.319 +If you want someone to develop packages or to use your tool, + +00:13:20.320 --> 00:13:22.719 +your Emacs at least, + +00:13:22.720 --> 00:13:28.759 +you need to have a very good development experience, + +00:13:28.760 --> 00:13:34.039 +which enhance the extensions for the editor. + +00:13:34.040 --> 00:13:36.719 +So we have also Vim-like integration. + +00:13:36.720 --> 00:13:39.399 +This for me was mostly mandatory + +00:13:39.400 --> 00:13:44.439 +because I'm an evil-mode user, and I think it's really good. + +00:13:44.440 --> 00:13:49.479 +Because evil-mode is very good and the VMode, + +00:13:49.480 --> 00:13:51.719 +which it's called, even though it's more like Vim mode, + +00:13:51.720 --> 00:13:54.159 +it's called VMode. It's written by + +00:13:54.160 --> 00:13:59.159 +Fukamachi-san and it's really good. + +00:13:59.160 --> 00:14:01.959 +So yeah, that's the thing that I think Lem brings to + +00:14:01.960 --> 00:14:03.079 +the table and that's really interesting. + +NOTE Similarities and differences + +00:14:03.080 --> 00:14:10.519 +So I'm going to do a small demo of Lem, a Emacs example. + +00:14:10.520 --> 00:14:11.679 +First, the similarities, + +00:14:11.680 --> 00:14:14.119 +the nomenclature is very similar: modes, buffers, + +00:14:14.120 --> 00:14:17.439 +commands... The commands are very similar in nature. + +00:14:17.440 --> 00:14:20.039 +It was written with GNU Emacs in mind + +00:14:20.040 --> 00:14:24.359 +to mimic a lot of things. + +00:14:24.360 --> 00:14:29.079 +I think GNU Emacs is the best Emacs implementation + +00:14:29.080 --> 00:14:33.719 +in that way. So why not just take what is working, right? + +00:14:33.720 --> 00:14:35.599 +I have similar command, + +00:14:35.600 --> 00:14:39.399 +but flexible to add other default ones. + +00:14:39.400 --> 00:14:42.399 +It's not like Emacs that you have Emacs commands. + +00:14:42.400 --> 00:14:45.159 +Lem has Emacs command by default, + +00:14:45.160 --> 00:14:47.759 +but you can easily change that + +00:14:47.760 --> 00:14:49.919 +with other default ones, right? + +00:14:49.920 --> 00:14:52.159 +It's like, you can think of it like a major mode, right? + +00:14:52.160 --> 00:14:54.439 +Well, more like a global mode, + +00:14:54.440 --> 00:14:57.960 +sorry. That's a global mode of Emacs commands, + +00:14:57.961 --> 00:14:59.360 +or something like that. + +00:14:59.361 --> 00:15:01.519 +In general, the feeling is really close. + +00:15:01.520 --> 00:15:05.919 +So you will tell that it's really close to how both work, + +00:15:05.920 --> 00:15:07.839 +similar commands, and that shows. + +00:15:07.840 --> 00:15:12.359 +Differences, Common Lisp is not Emacs Lisp, + +00:15:12.360 --> 00:15:13.919 +it's similar in the surface. + +00:15:13.920 --> 00:15:16.279 +So it uses `defun`, you know, have parentheses + +00:15:16.280 --> 00:15:18.719 +and yada, yada, but it's not the same language, really, + +00:15:18.720 --> 00:15:20.839 +and sometimes you will find + +00:15:20.840 --> 00:15:22.639 +that the differences are substantial. + +00:15:23.260 --> 00:15:24.859 +The internals are completely different, + +00:15:24.860 --> 00:15:27.479 +of course, nothing, well, completely. + +00:15:27.480 --> 00:15:29.719 +They have a buffer implementation and other things, + +00:15:29.720 --> 00:15:32.359 +but in general, yeah, aside from that, + +00:15:32.360 --> 00:15:34.079 +it's completely different. + +00:15:34.080 --> 00:15:36.199 +And it's true that GNU Emacs + +00:15:36.200 --> 00:15:37.479 +has a better documentation tutorial. + +00:15:37.480 --> 00:15:39.719 +So GNU Emacs for me, I think it's + +00:15:39.720 --> 00:15:41.759 +one of the best-documented software ever. + +00:15:41.760 --> 00:15:49.599 +We're trying to go there, but we're still not there. + +NOTE Demo + +00:15:49.600 --> 00:15:54.079 +Let's do the demo. So to open Lem, you compile it, + +00:15:54.080 --> 00:15:55.759 +and then you have it available, + +00:15:55.760 --> 00:15:57.719 +and you open Lem. As you can see, + +00:15:57.720 --> 00:16:00.839 +we have the temporary buffer. On the top left is the mode-- + +00:16:00.840 --> 00:16:03.279 +not mode, + +00:16:03.280 --> 00:16:07.239 +the beam, insert, normal, visual. This is the V mode, right? + +00:16:07.240 --> 00:16:10.279 +In the top right corner, we have fundamental, + +00:16:10.280 --> 00:16:11.599 +which is the major mode, then paredit, + +00:16:11.600 --> 00:16:15.079 +which is like the minor mode, but you know, + +00:16:15.080 --> 00:16:16.079 +this is like the paredit for Emacs. + +00:16:16.080 --> 00:16:19.199 +In the top left buffer, + +00:16:19.200 --> 00:16:22.479 +you have the current buffer. + +00:16:22.480 --> 00:16:26.479 +So let's open the... Emacs, we all know how to do this. + +00:16:26.480 --> 00:16:29.319 +This is a command, like explore this command, + +00:16:29.320 --> 00:16:31.479 +like `open-init-file`. This opens the init file, + +00:16:31.480 --> 00:16:34.319 +which is in this directory, in `~/.lem/init.lisp`. + +00:16:34.320 --> 00:16:38.239 +As you can see, this is very similar, right? + +00:16:38.240 --> 00:16:40.279 +You define a command, which is not interactive, + +00:16:40.280 --> 00:16:42.959 +and then you get the buffer, right? + +00:16:42.960 --> 00:16:44.919 +This is a... So my personal command... + +00:16:44.920 --> 00:16:48.879 +Let's go to the one that I just opened. Init file, right? + +00:16:48.880 --> 00:16:52.159 +So this is a command that I did, + +00:16:52.160 --> 00:16:53.439 +which is `find-file`. + +00:16:53.440 --> 00:16:56.599 +This is very similar to [??], but just `find-file`. + +00:16:56.600 --> 00:16:58.399 +As you can see, very similar. + +00:16:58.400 --> 00:17:01.759 +This is the way that you program in Lem. + +00:17:01.760 --> 00:17:04.839 +This is the major mode, which is Lisp, + +00:17:04.840 --> 00:17:06.959 +that we're seeing at the top, right? + +00:17:06.960 --> 00:17:10.479 +And we can connect if we `slime-self-connect`. + +00:17:10.480 --> 00:17:14.119 +This is the prompt. This is the REPL. + +00:17:14.120 --> 00:17:17.959 +So if we... Keep in mind that this is Common Lisp, + +00:17:17.960 --> 00:17:20.439 +so this has different things. + +00:17:20.440 --> 00:17:22.719 +So we have to go to the Lem package, + +00:17:22.720 --> 00:17:26.199 +which is very important. This has namespaces, right? + +00:17:26.200 --> 00:17:29.039 +It's not the same. And we can say, okay, + +00:17:29.040 --> 00:17:32.319 +`current-buffer`. We get the buffer. + +00:17:32.320 --> 00:17:35.199 +We can explore everything that is in it, right? + +00:17:35.200 --> 00:17:38.559 +We have all this stuff. This is... If you're familiar + +00:17:38.560 --> 00:17:41.159 +with SLIME or Sly, this is it. + +00:17:41.160 --> 00:17:46.279 +It's just that we can say, buffer, I think it's `buffer-name`. + +00:17:46.280 --> 00:17:49.159 +Yes. And we can take this, + +00:17:49.160 --> 00:17:50.799 +and then we'll give you the name. + +00:17:50.800 --> 00:17:54.359 +So as you can see, the development experience + +00:17:54.360 --> 00:17:57.639 +is really powerful. We can also `lisp-scratch`, + +00:17:57.640 --> 00:18:00.679 +which transform... basically apply + +00:18:00.680 --> 00:18:02.639 +the major mode of Lisp to the temporary buffer. + +00:18:02.640 --> 00:18:06.719 +This is very similar to Emacs. + +00:18:06.720 --> 00:18:11.999 +Let's go back to the theme. I think that's it. + +00:18:12.000 --> 00:18:13.879 +Thank you all very much for listening to me. + +00:18:13.880 --> 00:18:15.239 +I think I point out + +00:18:15.240 --> 00:18:16.999 +the Emacsen family is really interesting. + +00:18:17.000 --> 00:18:19.279 +Lisp is really good, and GNU Emacs is really good, + +00:18:19.280 --> 00:18:21.199 +and I think Lem is also pretty awesome. + +00:18:21.200 --> 00:18:23.119 +So thank you all very much. + +00:18:23.120 --> 00:18:27.560 +I'll be answering the question now. And happy hacking. diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt new file mode 100644 index 00000000..ad378f78 --- /dev/null +++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt @@ -0,0 +1,1829 @@ +WEBVTT + + +00:00:06.140 --> 00:00:06.640 +[Speaker 0]: And I think we are live. + +00:00:07.580 --> 00:00:08.080 +Hi, Yanny, how are you doing? + +00:00:10.460 --> 00:00:10.760 +[Speaker 1]: Excellent, excellent. Doing very well, + +00:00:10.960 --> 00:00:11.460 +thank you. + +00:00:13.980 --> 00:00:14.480 +[Speaker 0]: So that was a wonderful presentation. + +00:00:17.440 --> 00:00:17.940 +I first want to commend you on your ability + +00:00:22.040 --> 00:00:22.200 +to both do the how the user encounters the + +00:00:24.960 --> 00:00:25.460 +MMS, how the developer might be interested + +00:00:28.680 --> 00:00:28.920 +about how it works, and I feel like you've + +00:00:30.720 --> 00:00:31.200 +done a wonderful job of talking to absolutely + +00:00:31.800 --> 00:00:32.200 +everyone in our audience, + +00:00:32.840 --> 00:00:33.120 +whatever their skill level. + +00:00:34.120 --> 00:00:34.620 +So thank you so much for this. + +00:00:37.800 --> 00:00:38.300 +[Speaker 1]: Yeah, that of course runs the risk of being, + +00:00:41.580 --> 00:00:41.940 +you know, good for some, + +00:00:42.980 --> 00:00:43.480 +but excellent for none. + +00:00:46.960 --> 00:00:47.280 +But hopefully the result is that people can + +00:00:48.380 --> 00:00:48.880 +get something out of it. + +00:00:51.820 --> 00:00:52.080 +I think it's very important to make sure that + +00:00:55.680 --> 00:00:55.900 +everyone feels that they have access to + +00:00:57.239 --> 00:00:57.739 +Emacs, they have access to EMMS, + +00:01:00.640 --> 00:01:01.140 +that they can do this in whatever capacity + +00:01:02.800 --> 00:01:03.300 +they want. It's for everyone. + +00:01:05.440 --> 00:01:05.940 +I really believe that. + +00:01:09.440 --> 00:01:09.720 +[Speaker 0]: Yeah, and I understand this risk about having + +00:01:10.680 --> 00:01:11.180 +a talk that is kind of a jack-of-all-trades, + +00:01:14.440 --> 00:01:14.940 +but frankly you've done a wonderful job of + +00:01:16.560 --> 00:01:17.060 +making it interesting for everyone, + +00:01:19.540 --> 00:01:19.900 +because also I think the parts worked really + +00:01:21.820 --> 00:01:22.000 +well, and people always had something to look + +00:01:24.240 --> 00:01:24.479 +forward in terms of their expertise of what + +00:01:25.360 --> 00:01:25.680 +particularly spoke to them. + +00:01:27.560 --> 00:01:27.720 +So thank you again. What I'm going to do, + +00:01:29.440 --> 00:01:29.940 +we have about 14 minutes of Q&A, + +00:01:30.760 --> 00:01:31.080 +So I'll invite people, + +00:01:33.400 --> 00:01:33.520 +as I usually do, to add their questions in + +00:01:35.320 --> 00:01:35.760 +the other pad that you can find on the talks + +00:01:38.560 --> 00:01:38.760 +or on IRC. You can also join us in the + +00:01:40.200 --> 00:01:40.320 +discussion. I will make sure this time to + +00:01:42.180 --> 00:01:42.680 +ping Sasha to open the Q&A. + +00:01:44.680 --> 00:01:45.180 +Can you open, I-V-E-M-M-S. + +00:01:48.700 --> 00:01:49.200 +All right, and in the meantime, + +00:01:50.940 --> 00:01:51.040 +whilst we wait for people to join us in the + +00:01:52.360 --> 00:01:52.540 +room, I will start reading some of the + +00:01:53.960 --> 00:01:54.460 +questions off the pad. + +00:01:57.180 --> 00:01:57.520 +So we had the first question about the music + +00:01:58.780 --> 00:01:59.280 +that we played during the launch break, + +00:02:01.320 --> 00:02:01.560 +and It's 1 of our dear friends, + +00:02:05.200 --> 00:02:05.700 +Shoshin Ganshangroh, a free album, + +00:02:09.360 --> 00:02:09.720 +Basement Dazed. I've put the link in the pad + +00:02:12.520 --> 00:02:12.660 +and we've been using Shoshin's music for the + +00:02:13.420 --> 00:02:13.920 +last 3 years, I think, + +00:02:15.060 --> 00:02:15.560 +and everyone, people are so excited. + +00:02:17.220 --> 00:02:17.360 +Some people say, why is it so noisy in the + +00:02:18.480 --> 00:02:18.800 +background? But it's just because there's 1 + +00:02:20.940 --> 00:02:21.420 +part of the different tracks that sounds like + +00:02:24.280 --> 00:02:24.520 +static and it always gets people. + +00:02:25.900 --> 00:02:26.040 +We should probably do something about this, + +00:02:27.520 --> 00:02:28.020 +but frankly it makes me laugh every time. + +00:02:30.460 --> 00:02:30.920 +Starting with the first actual question, + +00:02:32.640 --> 00:02:33.140 +well actually it's a bit of a meme question, + +00:02:34.340 --> 00:02:34.640 +for the next Emacs Con, + +00:02:37.280 --> 00:02:37.440 +could we have an eMMS playlist to follow the + +00:02:37.760 --> 00:02:38.260 +talks along? + +00:02:43.940 --> 00:02:44.060 +[Speaker 1]: Oh that sounds like an excellent idea but I + +00:02:46.560 --> 00:02:46.720 +guess I'm wondering what they mean exactly by + +00:02:48.960 --> 00:02:49.280 +that. Is that a shareable playlist that we + +00:02:54.560 --> 00:02:54.720 +can pass along and just have people go to a + +00:02:56.320 --> 00:02:56.600 +URL and just be able to play that? + +00:02:58.620 --> 00:02:59.060 +I think that's an excellent idea. + +00:03:00.660 --> 00:03:01.160 +It should be a relatively low bandwidth + +00:03:01.780 --> 00:03:02.280 +process. + +00:03:06.580 --> 00:03:06.740 +[Speaker 0]: And it's typically the type of stuff that is + +00:03:10.840 --> 00:03:11.000 +right of our alley. I'm thinking about the + +00:03:15.480 --> 00:03:15.980 +ICS file that we produce for all the events + +00:03:17.020 --> 00:03:17.320 +that are related to Emacs. + +00:03:18.820 --> 00:03:19.240 +You know the workshop that happened in Paris + +00:03:22.360 --> 00:03:22.500 +or in New York, LA? Sasha compiles a list of + +00:03:23.560 --> 00:03:23.920 +all the events and when they happen, + +00:03:25.360 --> 00:03:25.760 +and then we provide this to everyone. + +00:03:27.040 --> 00:03:27.160 +And we can do very much the same with + +00:03:29.380 --> 00:03:29.580 +EmacsConf. You could have a playlist for + +00:03:31.980 --> 00:03:32.420 +EmacsConf 2023, where you get all the talks + +00:03:34.760 --> 00:03:34.900 +and perhaps also the Q&A sessions so that you + +00:03:36.780 --> 00:03:36.960 +can relieve the 16 hours of content that + +00:03:37.800 --> 00:03:38.200 +we're producing. That'd be great, + +00:03:39.240 --> 00:03:39.740 +that's a great idea I think. + +00:03:43.660 --> 00:03:44.160 +[Speaker 1]: Absolutely, and if there are any limitations + +00:03:48.060 --> 00:03:48.420 +in the Emacs playlist structure that things + +00:03:49.640 --> 00:03:50.140 +are missing in the playlist structure, + +00:03:53.040 --> 00:03:53.480 +then it would be a great impetus to implement + +00:03:55.080 --> 00:03:55.520 +those and extend the playlist structure. + +00:03:57.380 --> 00:03:57.860 +Because after all, it's Lisp, + +00:04:01.360 --> 00:04:01.620 +it really is data and functions all mixed + +00:04:03.160 --> 00:04:03.580 +together, so we can do that. + +00:04:06.180 --> 00:04:06.360 +It would be very interesting to dive into it + +00:04:07.000 --> 00:04:07.420 +and see what's missing. + +00:04:10.020 --> 00:04:10.240 +That would be even more informative than what + +00:04:10.680 --> 00:04:11.180 +it can do. + +00:04:14.900 --> 00:04:15.060 +[Speaker 0]: Great. All right, moving on to the next + +00:04:17.000 --> 00:04:17.480 +question. I like to use music and audiobooks + +00:04:18.279 --> 00:04:18.740 +in very different ways. + +00:04:21.440 --> 00:04:21.600 +With music, I like shuffling by artists and + +00:04:23.300 --> 00:04:23.800 +with audiobooks, I want to read sequentially + +00:04:27.260 --> 00:04:27.380 +and pick the same playlist over a couple of + +00:04:29.240 --> 00:04:29.540 +days or weeks. Do you have any tips for using + +00:04:30.860 --> 00:04:31.360 +these 2 opposing media's workflow? + +00:04:38.520 --> 00:04:38.940 +[Speaker 1]: Yes, so I have similar situations where I + +00:04:43.920 --> 00:04:44.420 +have very long endurance races that I watch, + +00:04:47.160 --> 00:04:47.440 +which I do all my media consumption is done + +00:04:50.720 --> 00:04:51.220 +via EMMS. I also listened to music. + +00:04:54.020 --> 00:04:54.520 +And so there's also a middle in between. + +00:04:57.980 --> 00:04:58.480 +There's 1 end in which you have popular + +00:05:01.560 --> 00:05:02.020 +music. These are standalone songs that are + +00:05:04.860 --> 00:05:05.080 +typically 3 to 4 minute long and they are + +00:05:07.900 --> 00:05:08.400 +best consumed in a random you know order + +00:05:09.780 --> 00:05:10.280 +because they are designed around, + +00:05:12.080 --> 00:05:12.580 +you know, a commercial radio distribution. + +00:05:15.140 --> 00:05:15.580 +I guess I'm dating myself by saying radio, + +00:05:17.120 --> 00:05:17.620 +but you know all the that. + +00:05:20.940 --> 00:05:21.440 +In the middle there are longer works like + +00:05:26.100 --> 00:05:26.600 +musicals and classical where these are units + +00:05:30.200 --> 00:05:30.360 +where they might be very long but you would + +00:05:33.160 --> 00:05:33.420 +have several tracks that you do want to have + +00:05:35.600 --> 00:05:35.800 +1 after the other, and you want to be able to + +00:05:38.360 --> 00:05:38.860 +stop and go to the next track. + +00:05:40.760 --> 00:05:41.260 +And then at the very, very other end, + +00:05:44.020 --> 00:05:44.520 +you have extremely long format, + +00:05:46.360 --> 00:05:46.860 +which is included in a single file, + +00:05:47.920 --> 00:05:48.420 +such as an audio book, + +00:05:51.400 --> 00:05:51.900 +a movie, a tutorial that you're watching, + +00:05:54.100 --> 00:05:54.320 +or in my case, you know, + +00:05:56.580 --> 00:05:57.040 +a 24 hour, the 24 hours of Le Mans, + +00:05:58.040 --> 00:05:58.440 +just the 24 hour race, + +00:06:01.120 --> 00:06:01.620 +which, you know, that's 1 heck of a file. + +00:06:07.380 --> 00:06:07.660 +So that is 1 of the reasons eMMS has a number + +00:06:10.160 --> 00:06:10.640 +of elements such as the meta playlist mode + +00:06:11.260 --> 00:06:11.760 +and multiple playlists. + +00:06:16.160 --> 00:06:16.480 +So I would say that they would open a number + +00:06:19.540 --> 00:06:19.680 +of playlists in eMMS, generate a number of + +00:06:26.040 --> 00:06:26.540 +playlists that have each class of media. + +00:06:28.940 --> 00:06:29.320 +So the shorter form songs, + +00:06:33.580 --> 00:06:34.080 +the more pop songs you have in 1 playlist + +00:06:35.920 --> 00:06:36.140 +where you can sort, shuffle it, + +00:06:37.800 --> 00:06:38.300 +you know, save it, do whatever you want. + +00:06:41.980 --> 00:06:42.360 +Then a separate playlist for the long form + +00:06:44.340 --> 00:06:44.840 +stuff. Sometimes that playlist will have even + +00:06:48.960 --> 00:06:49.460 +only 1 file in it if it's long enough, + +00:06:52.120 --> 00:06:52.300 +then have a key combination which takes you + +00:06:55.280 --> 00:06:55.780 +directly to 1 playlist or the other, + +00:06:57.340 --> 00:06:57.840 +and within the long-form playlist, + +00:07:01.980 --> 00:07:02.480 +looking at the bookmarking function of EMMS, + +00:07:06.560 --> 00:07:06.660 +which is designed around being able to save a + +00:07:10.080 --> 00:07:10.580 +particular stopping point or multiple + +00:07:12.240 --> 00:07:12.540 +stopping points, bookmarks in the audio, + +00:07:15.300 --> 00:07:15.800 +and being able to jump back into that audio. + +00:07:18.600 --> 00:07:19.100 +The point to remember about the bookmarking + +00:07:23.720 --> 00:07:24.220 +feature is that sometimes it really depends + +00:07:25.960 --> 00:07:26.460 +on you have to have the right back end. + +00:07:28.900 --> 00:07:29.400 +Not all back ends with replaying, + +00:07:33.120 --> 00:07:33.220 +not all types of media work well with a + +00:07:36.200 --> 00:07:36.660 +bookmarking function, and bug reports + +00:07:38.960 --> 00:07:39.460 +welcome. But also there are other backends + +00:07:44.820 --> 00:07:45.140 +such as MPV where you can configure it that + +00:07:49.860 --> 00:07:50.360 +when you quit playing the song or the media + +00:07:55.080 --> 00:07:55.580 +with, you know, cue internally. + +00:07:58.140 --> 00:07:58.640 +So sometimes the back end has to continue + +00:08:04.400 --> 00:08:04.700 +playing that song. That's what I do in order + +00:08:07.560 --> 00:08:08.060 +to, on 1 hand, switch over to a... + +00:08:09.620 --> 00:08:10.000 +I want to hear... I'm coding, + +00:08:10.800 --> 00:08:11.240 +I want to hear some music, + +00:08:12.860 --> 00:08:13.360 +I go to my playlist of short songs, + +00:08:16.280 --> 00:08:16.560 +then I'm sitting back and I want to watch a + +00:08:20.340 --> 00:08:20.540 +long form something from where I left off and + +00:08:22.420 --> 00:08:22.740 +there I go to the other playlist and use + +00:08:26.140 --> 00:08:26.380 +bookmarks or the features of the back end + +00:08:26.780 --> 00:08:27.280 +that I'm using. + +00:08:31.200 --> 00:08:31.700 +[Speaker 0]: Okay, thank you for the answer. + +00:08:34.440 --> 00:08:34.679 +We have about 7 minutes and we have more + +00:08:35.280 --> 00:08:35.780 +questions, so that's great. + +00:08:37.440 --> 00:08:37.940 +Moving on to the next 1. + +00:08:40.080 --> 00:08:40.240 +Is there a way to search a music selection by + +00:08:42.080 --> 00:08:42.240 +lyrics? Assuming those lyrics are in the + +00:08:43.580 --> 00:08:44.080 +metadata or are available elsewhere, + +00:08:46.300 --> 00:08:46.400 +it would be neat to call songs up from the + +00:08:48.660 --> 00:08:49.160 +lyrics to the song. Perhaps is this + +00:08:50.860 --> 00:08:51.360 +implemented so that you can all aliases, + +00:08:54.560 --> 00:08:54.720 +so they can use aliases for the song that you + +00:08:56.640 --> 00:08:57.100 +like, defining those aliases or shortcuts + +00:08:58.200 --> 00:08:58.680 +either inside or outside eMMS? + +00:08:59.760 --> 00:09:00.060 +Okay, so I think you've got 2 questions. + +00:09:01.500 --> 00:09:02.000 +First about the lyrics and then the aliases. + +00:09:08.360 --> 00:09:08.560 +[Speaker 1]: Yeah, so it's effectively not possible to do + +00:09:10.880 --> 00:09:11.120 +right now. There's a sense in which it is, + +00:09:14.820 --> 00:09:15.020 +but not really. What actually needs to + +00:09:18.840 --> 00:09:19.320 +happen? The problem is that the caching + +00:09:21.780 --> 00:09:22.280 +system is extremely naive. + +00:09:24.800 --> 00:09:24.960 +It's just really a hash that's written to + +00:09:30.560 --> 00:09:31.060 +disk. And maybe now with SQLite integration + +00:09:35.200 --> 00:09:35.380 +or other or just the fact that computers have + +00:09:39.220 --> 00:09:39.440 +a lot more speed and space than they used to + +00:09:43.340 --> 00:09:43.580 +have, we need to expand the cache to be a lot + +00:09:47.020 --> 00:09:47.520 +more greedy and a lot more flexible so that + +00:09:52.580 --> 00:09:52.860 +we can store things such as lyrics in as part + +00:09:56.000 --> 00:09:56.200 +of the metadata. There's no reason not to do + +00:10:02.220 --> 00:10:02.440 +that. Unless your collection would have to be + +00:10:06.560 --> 00:10:07.060 +truly enormous in order to slow things down. + +00:10:09.860 --> 00:10:10.200 +We wouldn't even need to compress the lyrics + +00:10:11.320 --> 00:10:11.820 +in order to store them like that. + +00:10:15.920 --> 00:10:16.120 +But that is a goal. So our rewrite of the + +00:10:17.840 --> 00:10:18.340 +cache is currently in progress, + +00:10:21.680 --> 00:10:21.940 +and the goal is to have a system where you + +00:10:24.920 --> 00:10:25.420 +can put any related information, + +00:10:30.060 --> 00:10:30.220 +including lyrics, and map that to a + +00:10:31.400 --> 00:10:31.900 +particular piece of the media, + +00:10:36.900 --> 00:10:37.060 +be it a URL or a... So you could have in a + +00:10:40.080 --> 00:10:40.240 +sense, you could have a URL to a lecture and + +00:10:44.440 --> 00:10:44.800 +the metadata associated would be some text, + +00:10:47.600 --> 00:10:48.100 +some notes or something else like that. + +00:10:51.140 --> 00:10:51.380 +[Speaker 0]: Right, so that was about the lyrics. + +00:10:53.040 --> 00:10:53.260 +I'm not sure how it answers the question + +00:10:54.560 --> 00:10:54.960 +about the aliases. I mean you can still + +00:10:56.380 --> 00:10:56.880 +filter what you've mentioned about the cache. + +00:10:59.240 --> 00:10:59.440 +I think it's... Do we consider the aliases to + +00:11:01.120 --> 00:11:01.620 +be anything within the metadata? + +00:11:08.040 --> 00:11:08.540 +[Speaker 1]: No, you're right. That is a separate + +00:11:12.380 --> 00:11:12.540 +question. I don't have a great answer for + +00:11:12.980 --> 00:11:13.480 +that right now. + +00:11:16.280 --> 00:11:16.500 +[Speaker 0]: Okay, great. Well, we'll put a pin on this + +00:11:17.440 --> 00:11:17.940 +and we can return to it. + +00:11:19.690 --> 00:11:19.840 +You can return to it at a later stage. + +00:11:21.880 --> 00:11:22.080 +Yeah. All right, moving on to the next + +00:11:22.800 --> 00:11:23.160 +question, then. I'll just, + +00:11:25.180 --> 00:11:25.680 +we'll put a pin on this. + +00:11:26.420 --> 00:11:26.920 +All right, next question. + +00:11:29.020 --> 00:11:29.220 +Are there plans for managing metadata with + +00:11:30.040 --> 00:11:30.540 +online resource backends, + +00:11:32.020 --> 00:11:32.440 +i.e. Discogs or music brains? + +00:11:34.360 --> 00:11:34.540 +What about something like Beats and Emacs or + +00:11:34.920 --> 00:11:35.420 +part of the EMMS? + +00:11:40.520 --> 00:11:40.640 +[Speaker 1]: Yeah, so that's an active discussion on the + +00:11:42.140 --> 00:11:42.640 +mailing list right now. + +00:11:47.340 --> 00:11:47.840 +We don't want to replicate what Beats does + +00:11:49.680 --> 00:11:50.180 +very, very well in eMMS. + +00:11:53.860 --> 00:11:54.360 +We don't want a clunky interface with Beats. + +00:11:57.440 --> 00:11:57.940 +We do want some kind of, + +00:12:00.100 --> 00:12:00.300 +and so it's hard to tell exactly where to + +00:12:03.160 --> 00:12:03.460 +draw that line. So the big answer is yes, + +00:12:04.960 --> 00:12:05.460 +absolutely, there is a plan to do that. + +00:12:09.760 --> 00:12:10.000 +The details become complicated because for 1 + +00:12:15.900 --> 00:12:16.200 +thing, the backend, the database that + +00:12:18.140 --> 00:12:18.640 +MusicBrain uses, AcoustID, + +00:12:21.500 --> 00:12:21.820 +I don't remember if AcoustID is the binary or + +00:12:25.680 --> 00:12:25.960 +the database, but that's actually for + +00:12:27.500 --> 00:12:28.000 +non-commercial use only. + +00:12:31.320 --> 00:12:31.500 +So not only do you need to compile a piece of + +00:12:35.280 --> 00:12:35.760 +software on your computer as a shim, + +00:12:37.540 --> 00:12:37.680 +which is what you need to do in order to set + +00:12:39.180 --> 00:12:39.680 +up beats to do fingerprinting. + +00:12:44.720 --> 00:12:45.220 +But it also crosses this line between + +00:12:47.660 --> 00:12:47.900 +completely free software to completely free + +00:12:49.400 --> 00:12:49.900 +software interfacing with a non-commercial + +00:12:56.000 --> 00:12:56.420 +only service. So a lot of the discussion + +00:12:58.660 --> 00:12:59.160 +that's going on now is what is the contour? + +00:13:02.160 --> 00:13:02.660 +Where would be where we would be effective + +00:13:08.720 --> 00:13:09.220 +for EMMS to do management and where not? + +00:13:11.600 --> 00:13:12.100 +For 1 thing, I would love to be able to... + +00:13:13.980 --> 00:13:14.100 +1 thing that we definitely would love to be + +00:13:18.340 --> 00:13:18.540 +able to do is when you hit E on a file and + +00:13:21.540 --> 00:13:22.040 +you get all the metadata to be able to then + +00:13:23.000 --> 00:13:23.200 +give a command to say, + +00:13:25.320 --> 00:13:25.520 +hey, play to music brains and see if you can + +00:13:26.200 --> 00:13:26.700 +improve that metadata. + +00:13:29.020 --> 00:13:29.520 +Do you have better metadata, + +00:13:33.400 --> 00:13:33.680 +more complete metadata to complete that? + +00:13:35.840 --> 00:13:36.340 +That is definitely in the pipeline. + +00:13:40.900 --> 00:13:41.400 +How best to do it, that's a discussion. + +00:13:45.460 --> 00:13:45.840 +[Speaker 0]: Okay, Yoni, we have about 2 minutes until we + +00:13:46.960 --> 00:13:47.460 +need to go to the next talk. + +00:13:52.960 --> 00:13:53.080 +Okay, I'll risk it. 1 more question and a + +00:13:53.800 --> 00:13:54.300 +short answer if you can. + +00:13:57.440 --> 00:13:57.860 +Have the developers considered using Emacs + +00:13:59.060 --> 00:13:59.560 +customized functionality to persistently + +00:14:01.720 --> 00:14:02.120 +store settings when using eMMS setup discover + +00:14:02.120 --> 00:14:02.620 +players? + +00:14:08.000 --> 00:14:08.460 +[Speaker 1]: Yes, absolutely. That's another active place, + +00:14:11.840 --> 00:14:12.340 +especially with the discover players. + +00:14:14.440 --> 00:14:14.940 +How to do it exactly without annoying people + +00:14:17.840 --> 00:14:18.340 +and clobbering their own settings, + +00:14:20.360 --> 00:14:20.680 +we just need to be very careful about that. + +00:14:23.040 --> 00:14:23.540 +Yes, that's in the coming releases. + +00:14:26.520 --> 00:14:26.940 +[Speaker 0]: All right, well, Younif, + +00:14:27.900 --> 00:14:28.400 +thank you so much for your time. + +00:14:29.440 --> 00:14:29.640 +Feel free to stay in the room. + +00:14:30.920 --> 00:14:31.240 +I see that some people have started joining + +00:14:33.720 --> 00:14:34.220 +on BBB. If you have more questions, + +00:14:36.780 --> 00:14:37.020 +feel free to unmute yourself and ask them + +00:14:39.520 --> 00:14:39.900 +live. Younid, I could ask you also to perhaps + +00:14:41.600 --> 00:14:41.760 +answer the question. I've put the link to the + +00:14:43.980 --> 00:14:44.480 +pad in the BBB chat, so if you look at the... + +00:14:47.220 --> 00:14:47.640 +Here, I think, we're not mirrored on BBB. + +00:14:49.080 --> 00:14:49.280 +If you look at the left you should be able to + +00:14:51.500 --> 00:14:51.580 +see the chat and the questions and if you + +00:14:52.720 --> 00:14:52.840 +could just answer the last question that + +00:14:55.440 --> 00:14:55.640 +would be great. For us on the general track + +00:14:57.980 --> 00:14:58.180 +we will be moving to the next talk and + +00:14:59.700 --> 00:14:59.820 +Yannick do you have any last thing to say in + +00:15:02.720 --> 00:15:02.900 +[Speaker 1]: Thank everyone who put together the + +00:15:04.320 --> 00:15:04.820 +conference and thank you to everyone who + +00:15:06.680 --> 00:15:07.180 +helps with the EMMS. + +00:15:08.160 --> 00:15:08.440 +[Speaker 0]: 10 seconds? All right, + +00:15:09.160 --> 00:15:09.440 +well, thank you so much, + +00:15:10.940 --> 00:15:11.440 +Yoni. We'll probably see you later. + +00:15:17.720 --> 00:15:17.860 +Bye-bye. Wonderful. And I think we are off + +00:15:18.620 --> 00:15:18.760 +air. Thank you so much, + +00:15:20.800 --> 00:15:20.920 +Juni. I need to step out and go take care of + +00:15:23.260 --> 00:15:23.760 +[Speaker 1]: Okay, wonderful. Thank you very much. + +00:15:24.080 --> 00:15:24.520 +[Speaker 0]: the next talk. Bye-bye. + +00:15:25.520 --> 00:15:25.760 +And just to, I forgot to mention, + +00:15:27.160 --> 00:15:27.260 +but you can still talk here and everything is + +00:15:28.320 --> 00:15:28.620 +still being recorded. So, + +00:15:28.880 --> 00:15:28.940 +I'll see you later. + +00:15:32.320 --> 00:15:32.820 +[Speaker 2]: Excellent. Bye-bye. Bye. + +00:15:35.600 --> 00:15:36.100 +[Speaker 3]: Oh, hello. + +00:15:40.600 --> 00:15:41.100 +[Speaker 1]: Wait, you're still, I cannot hear you yet. + +00:15:42.900 --> 00:15:43.080 +[Speaker 4]: You are currently the only person in this + +00:15:43.080 --> 00:15:43.580 +conference. + +00:16:12.600 --> 00:16:12.780 +[Speaker 2]: Okay. + +00:16:18.120 --> 00:16:18.400 +[Speaker 3]: Can you hear me now? I just wanted to say hi + +00:16:19.840 --> 00:16:20.320 +and thank you. My name's Grant. + +00:16:23.740 --> 00:16:24.220 +I've, you helped me contribute to EMMS maybe + +00:16:26.820 --> 00:16:26.980 +2 or 3 years ago. I was trying to do the + +00:16:28.480 --> 00:16:28.980 +[Speaker 2]: So, + +00:16:29.340 --> 00:16:29.840 +[Speaker 3]: track tag stuff. yeah. + +00:16:32.148 --> 00:16:32.571 +So I just wanted to say thank you. + +00:16:35.400 --> 00:16:35.680 +[Speaker 1]: Thank you for continuing and going through + +00:16:38.560 --> 00:16:38.680 +that entire process. I know that 1 of the + +00:16:40.380 --> 00:16:40.520 +things that happens is that people want to + +00:16:43.940 --> 00:16:44.440 +contribute, but it's not as slick as GitHub + +00:16:46.080 --> 00:16:46.580 +and stuff like that, especially with the + +00:16:53.400 --> 00:16:53.900 +copper assignment. And objectively, + +00:16:56.920 --> 00:16:57.420 +it's not that. It's just harder than what + +00:16:58.680 --> 00:16:59.180 +they imagine it might be. + +00:17:01.500 --> 00:17:01.680 +[Speaker 3]: Yeah. Well, I appreciate it. + +00:17:03.340 --> 00:17:03.440 +I think you're doing a wonderful job as a + +00:17:07.200 --> 00:17:07.660 +maintainer. I still hang out on the list and + +00:17:09.380 --> 00:17:09.880 +enjoy listening in on the discussions. + +00:17:09.960 --> 00:17:10.460 +So. + +00:17:14.240 --> 00:17:14.626 +[Speaker 2]: Yeah. But that's it. I think that's it. + +00:17:16.700 --> 00:17:17.200 +I think that's it. And I think that's it. + +00:17:17.640 --> 00:17:17.890 +And I think that's it. + +00:17:23.339 --> 00:17:23.660 +I appreciate it. And I'll leave you to all of + +00:17:27.781 --> 00:17:27.811 +you to go on from being a product. + +00:17:28.088 --> 00:17:28.118 +And that she valued to all of us long term + +00:17:28.180 --> 00:17:28.680 +being a project. + +00:17:31.460 --> 00:17:31.960 +[Speaker 1]: If you're not super duper active, + +00:17:33.420 --> 00:17:33.720 +being there long term, + +00:17:37.360 --> 00:17:37.860 +people tend to find it easier trying to + +00:17:40.840 --> 00:17:41.060 +continue contributing to the project if + +00:17:42.360 --> 00:17:42.620 +there's a consistency there, + +00:17:43.520 --> 00:17:44.020 +if there isn't a churn, + +00:17:47.720 --> 00:17:48.160 +if there is a kind of a core group. + +00:17:52.440 --> 00:17:52.940 +I guess it's like, you think it's constant. + +00:17:58.280 --> 00:17:58.780 +Eliezer Etzke and RMS, + +00:18:00.420 --> 00:18:00.920 +whatever on the next mailing list, + +00:18:03.040 --> 00:18:03.540 +You know, okay, there are certain people that + +00:18:05.600 --> 00:18:05.800 +I think so. So thank you for that. + +00:18:06.340 --> 00:18:06.840 +That's very important. + +00:18:07.540 --> 00:18:08.040 +That helps. + +00:18:12.560 --> 00:18:12.940 +[Speaker 3]: Yeah, I'm, I feel like when I started using + +00:18:14.180 --> 00:18:14.540 +EMMS several years ago, + +00:18:16.500 --> 00:18:16.820 +it's, it's improved a lot since then. + +00:18:19.540 --> 00:18:20.040 +And I notice your focus on helping new users + +00:18:22.540 --> 00:18:22.800 +get started quickly. And I think the talk + +00:18:23.840 --> 00:18:24.160 +today will help with that too. + +00:18:24.160 --> 00:18:24.660 +So + +00:18:32.380 --> 00:18:32.700 +[Speaker 1]: yeah, I want to put you know, + +00:18:33.860 --> 00:18:34.360 +the, especially the TLDR, + +00:18:37.500 --> 00:18:37.640 +like how to start it on the link that to the + +00:18:44.080 --> 00:18:44.380 +website, find somehow that we can get on to + +00:18:52.900 --> 00:18:53.400 +prepare for that. And this together. + +00:18:54.700 --> 00:18:55.200 +Now, question for you, + +00:18:58.260 --> 00:18:58.620 +Where would you like to see EMMS go? + +00:18:59.440 --> 00:18:59.820 +Where do you see it landing? + +00:19:02.780 --> 00:19:02.900 +What do you feel like this is what this is + +00:19:04.540 --> 00:19:05.040 +we're sorely missing these things? + +00:19:09.740 --> 00:19:10.240 +[Speaker 3]: I don't know. I mean, I picked it up, + +00:19:13.540 --> 00:19:13.940 +because I both use it to play my music + +00:19:17.100 --> 00:19:17.320 +collection, but also, like I record my own + +00:19:20.140 --> 00:19:20.320 +music. And I wanted to be able to edit my + +00:19:23.500 --> 00:19:24.000 +metadata in Emacs, because editing metadata + +00:19:29.100 --> 00:19:29.220 +elsewhere sucks. And so that's kind of why I + +00:19:30.280 --> 00:19:30.560 +got involved with that. + +00:19:33.440 --> 00:19:33.940 +And I was like, being able to edit metadata, + +00:19:37.580 --> 00:19:37.900 +especially for content that maybe you're + +00:19:41.760 --> 00:19:42.180 +creating or because I have a bunch of files + +00:19:44.340 --> 00:19:44.700 +of just unlabeled stuff I've recorded on, + +00:19:45.340 --> 00:19:45.780 +you know, different quarters, + +00:19:47.440 --> 00:19:47.520 +things like that. So that's kind of where I + +00:19:50.320 --> 00:19:50.740 +was focusing on it. It's the only media tool + +00:19:52.540 --> 00:19:52.720 +that lets me do that, you know, + +00:19:54.520 --> 00:19:54.940 +I can play the music back and have quick + +00:19:58.260 --> 00:19:58.380 +editing. So I know there was a couple of + +00:20:00.860 --> 00:20:01.120 +things we had talked about in terms of maybe + +00:20:03.260 --> 00:20:03.480 +improving kind of the user interface for the + +00:20:05.440 --> 00:20:05.940 +tag editor, things like that. + +00:20:09.300 --> 00:20:09.600 +So I don't have any grand visions for where + +00:20:15.660 --> 00:20:15.800 +EMMS should go. I know pretty much all the + +00:20:16.920 --> 00:20:17.420 +things I've heard about it already. + +00:20:20.200 --> 00:20:20.700 +You can hook up to GNU FM, + +00:20:21.940 --> 00:20:22.440 +the Scrabbling Service, + +00:20:23.200 --> 00:20:23.700 +and all that kind of stuff. + +00:20:26.920 --> 00:20:27.180 +I don't really feel like it's missing much, + +00:20:29.020 --> 00:20:29.280 +especially being able to choose the back + +00:20:31.880 --> 00:20:32.320 +ends. I guess, if anything, + +00:20:34.960 --> 00:20:35.220 +it's the interface. How can it be even more + +00:20:38.160 --> 00:20:38.660 +intuitive for users? And I think that, + +00:20:41.500 --> 00:20:41.820 +you know, we need more people playing around + +00:20:43.380 --> 00:20:43.880 +with it, I guess. Yeah. + +00:20:46.220 --> 00:20:46.420 +[Speaker 2]: I think a really good + +00:20:47.520 --> 00:20:47.800 +[Speaker 1]: Well, yeah. example of that is, + +00:20:49.240 --> 00:20:49.600 +because I'm sure there are lots of people + +00:20:50.440 --> 00:20:50.740 +playing around with it, + +00:20:51.460 --> 00:20:51.960 +arriving at a conclusion, + +00:20:53.860 --> 00:20:54.360 +keeping it to themselves and moving on. + +00:20:59.160 --> 00:20:59.300 +Yeah. Which, and I know that a lot of bits of + +00:21:01.820 --> 00:21:02.160 +software put a send a bug report feature in + +00:21:04.660 --> 00:21:05.020 +and stuff like that and no 1 uses those + +00:21:07.600 --> 00:21:08.000 +either. So that's the frictional cost. + +00:21:10.440 --> 00:21:10.940 +I think the context switch for people between + +00:21:16.120 --> 00:21:16.360 +this doesn't work to actually formulating in + +00:21:17.840 --> 00:21:18.340 +words what didn't work, + +00:21:21.380 --> 00:21:21.600 +that is a very expensive context which most + +00:21:24.800 --> 00:21:24.980 +people will not do. And we're poorer for + +00:21:32.220 --> 00:21:32.660 +that. So, I think that when we integrate + +00:21:34.740 --> 00:21:35.240 +music brains and other things like that into. + +00:21:37.460 --> 00:21:37.960 +Now, of course, music brains will probably, + +00:21:41.200 --> 00:21:41.380 +it would be very funny if you pull up your + +00:21:43.480 --> 00:21:43.660 +stuff, right? Something that you wrote and + +00:21:46.080 --> 00:21:46.280 +you say, hey, music brains match this and + +00:21:48.600 --> 00:21:49.000 +it's not there, then it'll probably suggest + +00:21:51.720 --> 00:21:52.220 +[Speaker 3]: Yeah, I've heard that. + +00:21:52.660 --> 00:21:52.940 +[Speaker 1]: some wild things. Yeah, + +00:21:58.260 --> 00:21:58.400 +because there are, there was a system I was + +00:22:02.060 --> 00:22:02.220 +looking at its code for researching stuff for + +00:22:04.480 --> 00:22:04.700 +EMS And I'm trying to remember what it's + +00:22:05.720 --> 00:22:06.040 +named. It begins with a J, + +00:22:07.160 --> 00:22:07.660 +it's this media player, + +00:22:13.780 --> 00:22:13.940 +free floss media player that it's like a + +00:22:17.020 --> 00:22:17.520 +media server that can cast to a television + +00:22:20.940 --> 00:22:21.220 +and stuff like that. And I asked it to + +00:22:24.280 --> 00:22:24.780 +automatically label things and the results + +00:22:28.180 --> 00:22:28.380 +were horrible. It thought that half of my + +00:22:32.960 --> 00:22:33.400 +songs were movies. It thought that JPEGs were + +00:22:35.800 --> 00:22:36.220 +songs. It just, it did some, + +00:22:40.520 --> 00:22:41.020 +it did incredibly, it's not a solved problem, + +00:22:44.660 --> 00:22:45.160 +I think. So the, what I'm thinking with + +00:22:49.340 --> 00:22:49.540 +MusicBrainz and those services is that you + +00:22:51.840 --> 00:22:52.240 +hit a button and you have you get another + +00:22:57.040 --> 00:22:57.240 +pane with a suggestion and you either and you + +00:22:59.060 --> 00:22:59.240 +can copy through you can say okay copy this + +00:23:01.560 --> 00:23:01.760 +and this in this field over or reject the + +00:23:03.960 --> 00:23:04.460 +suggestion and maybe get another 1. + +00:23:04.940 --> 00:23:05.280 +So, + +00:23:07.360 --> 00:23:07.660 +[Speaker 3]: Yeah, I like that a lot. + +00:23:09.160 --> 00:23:09.480 +That's more like a diff, + +00:23:11.280 --> 00:23:11.640 +right? Like you get the diff between the 2 + +00:23:13.540 --> 00:23:14.040 +and you can apply which changes you like. + +00:23:15.580 --> 00:23:16.080 +Yeah. Was it Jellyfin? + +00:23:18.220 --> 00:23:18.720 +Is that... Jellyfin? Yeah, + +00:23:19.460 --> 00:23:19.960 +[Speaker 1]: Jellyfin, yes. + +00:23:22.340 --> 00:23:22.840 +[Speaker 3]: Yeah, And when that happened, + +00:23:24.960 --> 00:23:25.460 +did it clobber all your metadata? + +00:23:27.440 --> 00:23:27.940 +Or does it just label stuff? + +00:23:28.860 --> 00:23:29.360 +[Speaker 2]: No, it... + +00:23:38.240 --> 00:23:38.740 +[Speaker 1]: Escalate things somewhere inside it and to + +00:23:49.020 --> 00:23:49.340 +looking for really, not allow me to do very + +00:23:54.640 --> 00:23:55.080 +easily. So I was, so, you know, + +00:23:56.660 --> 00:23:56.960 +on 1 hand, it makes me feel, + +00:23:58.980 --> 00:23:59.120 +oh, we're not the only ones dealing with + +00:24:00.680 --> 00:24:00.840 +this. We're not the only ones struggling with + +00:24:01.440 --> 00:24:01.800 +this. On the other hand, + +00:24:05.660 --> 00:24:05.820 +it would be nice if that's a paragon that we + +00:24:08.460 --> 00:24:08.680 +can look to and say, this is a wonderful way + +00:24:11.320 --> 00:24:11.540 +of doing it. Let's incorporate as much of + +00:24:15.180 --> 00:24:15.520 +[Speaker 3]: Yeah, it's a tricky problem, + +00:24:18.220 --> 00:24:18.620 +especially if you're modifying people's media + +00:24:19.780 --> 00:24:20.280 +files you know so + +00:24:23.040 --> 00:24:23.420 +[Speaker 1]: that as we can. yeah I'm also very convinced + +00:24:31.560 --> 00:24:32.060 +that so I'm not a mainframe for MMS because + +00:24:35.020 --> 00:24:35.520 +I'm old and curmudgeonly essentially in my, + +00:24:37.660 --> 00:24:37.900 +in the way they do it. + +00:24:40.080 --> 00:24:40.520 +And honestly, I rarely ever, + +00:24:42.780 --> 00:24:43.180 +I use the MMS browser when I need to debug + +00:24:44.240 --> 00:24:44.660 +the MS browser. I don't, + +00:24:48.740 --> 00:24:49.240 +I use very simple commands and I even rarely + +00:24:50.440 --> 00:24:50.940 +look at the playlists. + +00:24:53.940 --> 00:24:54.220 +That was 1 of the things because when I got + +00:24:56.680 --> 00:24:57.100 +into MMS originally when my eyesight started + +00:24:59.640 --> 00:25:00.140 +going so I had to rely less and less on GUI + +00:25:02.800 --> 00:25:03.300 +interfaces. So that was, + +00:25:06.340 --> 00:25:06.840 +so to this day that's how I use EMMS. + +00:25:08.560 --> 00:25:09.060 +[Speaker 3]: Yeah, it's interesting. + +00:25:13.260 --> 00:25:13.760 +I remember running into a browser bug because + +00:25:15.480 --> 00:25:15.980 +I think just my age, like, + +00:25:18.120 --> 00:25:18.340 +I want to be able to tab through and like + +00:25:20.060 --> 00:25:20.560 +that was a huge that that changed recently + +00:25:22.640 --> 00:25:22.800 +right where you tab and it unfolds in the + +00:25:27.620 --> 00:25:27.980 +browser but yeah I realized that people use + +00:25:30.600 --> 00:25:31.100 +emms in so many different ways just like any + +00:25:36.020 --> 00:25:36.220 +piece of emacs there's there's many ways to + +00:25:39.960 --> 00:25:40.440 +do it but appreciate your time I'm gonna + +00:25:41.880 --> 00:25:42.260 +actually put together this Christmas tree + +00:25:43.400 --> 00:25:43.900 +[Speaker 0]: So. Wonderful. + +00:25:45.260 --> 00:25:45.660 +[Speaker 3]: behind me. Yeah, just wanted to say hi, + +00:25:50.900 --> 00:25:51.400 +meet you in person. But yeah. + +00:25:54.340 --> 00:25:54.840 +[Speaker 1]: Yeah, excellent. I appreciate it a lot and we + +00:25:55.080 --> 00:25:55.580 +generate + +00:25:59.960 --> 00:26:00.260 +[Speaker 2]: some interesting questions. + +00:26:00.780 --> 00:26:01.280 +Yeah, thank you. + +00:26:03.760 --> 00:26:03.960 +[Speaker 4]: You are currently the only person in this + +00:26:03.960 --> 00:26:04.460 +conference. + +00:26:13.480 --> 00:26:13.980 +[Speaker 1]: I'm going to have a look at the questions + +00:26:14.060 --> 00:26:14.560 +here. + +00:26:29.440 --> 00:26:29.940 +Let's see. Let's see. So there is, + +00:26:32.900 --> 00:26:33.260 +okay. There's a question here. + +00:26:34.540 --> 00:26:34.680 +I like what you said about balancing the + +00:26:36.140 --> 00:26:36.380 +concern for software freedom with the worry + +00:26:38.360 --> 00:26:38.560 +that this might alienate the package user. + +00:26:39.960 --> 00:26:40.120 +I wonder if you have advice for other + +00:26:41.720 --> 00:26:41.820 +maintainers how to communicate this sort of + +00:26:43.660 --> 00:26:44.120 +thing diplomatically? Yes, + +00:26:45.660 --> 00:26:46.160 +when you have to deny implementing a feature + +00:26:48.480 --> 00:26:48.980 +for a freedom reason. This in fact happens + +00:26:56.140 --> 00:26:56.320 +all the time. A recent example of this was a + +00:26:58.380 --> 00:26:58.580 +YouTube download, right, + +00:26:59.540 --> 00:27:00.040 +the YouTube download feature. + +00:27:04.040 --> 00:27:04.540 +At the time, okay, so stepping back, + +00:27:07.440 --> 00:27:07.940 +the request was to have a YouTube download + +00:27:11.940 --> 00:27:12.440 +feature integrated strongly into eMMS so that + +00:27:16.260 --> 00:27:16.640 +you put in a YouTube URL and you can download + +00:27:17.640 --> 00:27:18.140 +the video and play it. + +00:27:22.080 --> 00:27:22.280 +And the question isn't really whether you can + +00:27:24.660 --> 00:27:25.120 +chain YouTube Downloader or 1 of those things + +00:27:26.600 --> 00:27:27.100 +into your EMMS configuration. + +00:27:28.140 --> 00:27:28.520 +You can do whatever you want. + +00:27:30.840 --> 00:27:31.340 +But the question is, does EMMS actually + +00:27:33.340 --> 00:27:33.740 +integrate with it really, + +00:27:35.740 --> 00:27:36.040 +really strongly to the extent where it tells + +00:27:37.800 --> 00:27:38.140 +you oh you don't need to download install + +00:27:40.320 --> 00:27:40.820 +please go ahead and install that or whatever + +00:27:43.740 --> 00:27:44.180 +and at the time we checked it we found out + +00:27:45.800 --> 00:27:46.120 +that you know the version that we were + +00:27:49.280 --> 00:27:49.780 +looking at of the YouTube download or YTDLP + +00:27:51.720 --> 00:27:52.220 +or whatever it was called, + +00:27:56.200 --> 00:27:56.580 +actually downloaded a good amount of + +00:27:59.200 --> 00:27:59.540 +proprietary JavaScript onto your machine and + +00:28:02.300 --> 00:28:02.480 +ran it, just as if you were going on to the + +00:28:06.560 --> 00:28:06.880 +YouTube page, which is not for me to tell + +00:28:09.980 --> 00:28:10.480 +people not to do if they want to do that, + +00:28:16.240 --> 00:28:16.460 +but it's absolutely for me not to cause to + +00:28:18.540 --> 00:28:19.040 +happen on the user's machine without them. + +00:28:21.480 --> 00:28:21.660 +1 of the last thing that I want to do in the + +00:28:25.980 --> 00:28:26.180 +world is have a user inside Emacs press a + +00:28:29.760 --> 00:28:30.160 +button and have proprietary software get + +00:28:32.300 --> 00:28:32.540 +downloaded behind their back and run on their + +00:28:38.240 --> 00:28:38.420 +machine that would be disastrous so we had to + +00:28:41.380 --> 00:28:41.600 +say no we had to say that's I'm sorry that's + +00:28:47.060 --> 00:28:47.380 +beyond the pale and in fact in doing so some + +00:28:51.100 --> 00:28:51.420 +people who were using this system said, + +00:28:53.900 --> 00:28:54.400 +actually I had no idea it was doing this + +00:28:56.660 --> 00:28:57.040 +behind my back. I thought it was just magic. + +00:28:58.860 --> 00:28:59.360 +I thought it was a YouTube video without any + +00:29:01.580 --> 00:29:01.780 +freedom issues. I'm going to look into it or + +00:29:03.120 --> 00:29:03.620 +I'm going to stop using it. + +00:29:11.180 --> 00:29:11.680 +So my advice would be Stand firm and just be + +00:29:15.040 --> 00:29:15.380 +Not not preachy. Don't tell people what they + +00:29:19.580 --> 00:29:19.960 +need to do be very clear about what you stand + +00:29:21.900 --> 00:29:22.400 +for and what the project stands for, + +00:29:28.660 --> 00:29:28.940 +and so they very clearly know where you + +00:29:30.460 --> 00:29:30.960 +stand. And I think that people actually + +00:29:36.540 --> 00:29:37.040 +appreciate that more than a political answer, + +00:29:43.540 --> 00:29:44.040 +right? That has been my experience. + +00:29:49.800 --> 00:29:50.000 +Now, excuse me, taking into account that 1 or + +00:29:52.200 --> 00:29:52.700 +2 people will tell you, + +00:29:54.960 --> 00:29:55.440 +this is terrible. I'm leaving. + +00:30:00.550 --> 00:30:00.625 +[Speaker 2]: If you do this, + +00:30:01.460 --> 00:30:01.620 +[Speaker 1]: This is useless. you're free software or + +00:30:03.400 --> 00:30:03.900 +whatever, and just leave. + +00:30:05.860 --> 00:30:06.360 +But some people are ornery. + +00:30:09.360 --> 00:30:09.620 +That's not necessarily something bad that you + +00:30:11.680 --> 00:30:12.180 +did. But that has happened. + +00:30:14.200 --> 00:30:14.700 +There are multiple stories. + +00:30:16.840 --> 00:30:17.080 +Because the MMS is so old, + +00:30:20.080 --> 00:30:20.580 +there are multiple points in which non-free + +00:30:23.940 --> 00:30:24.140 +software intersected with the EMS because of + +00:30:28.580 --> 00:30:28.820 +multimedia and we had to go the other + +00:30:33.300 --> 00:30:33.800 +direction and so far it has served EMS well + +00:30:38.240 --> 00:30:38.740 +like the project has died as a result. + +00:30:39.800 --> 00:30:40.200 +Of course, can't prove a negative, + +00:30:42.040 --> 00:30:42.540 +don't know where we would be if we had taken, + +00:30:44.760 --> 00:30:44.860 +gone down that route. I'm pretty sure we + +00:30:46.100 --> 00:30:46.600 +would need a new ELPA, + +00:30:50.860 --> 00:30:51.360 +and I think being so clearly integrated with + +00:30:55.040 --> 00:30:55.540 +emacs is a huge benefit to eMMS because it's + +00:30:57.660 --> 00:30:58.160 +it allows people to install it very easily. + +00:31:08.760 --> 00:31:09.020 +And those are all the questions that I can + +00:31:09.020 --> 00:31:09.520 +see. + +00:31:15.060 --> 00:31:15.560 +[Speaker 2]: You diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt new file mode 100644 index 00000000..f183a115 --- /dev/null +++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt @@ -0,0 +1,80 @@ +WEBVTT + + +00:00:00.000 --> 00:01:03.319 +Introduction + +00:01:03.320 --> 00:01:21.319 +The structure of this talk + +00:01:21.320 --> 00:08:04.239 +Introduction to Emms: The practical part + +00:08:04.240 --> 00:11:01.199 +The modeline + +00:11:01.200 --> 00:11:29.859 +Meta-playlist mode + +00:11:29.860 --> 00:13:19.919 +The browser + +00:13:19.920 --> 00:16:23.819 +How Emms works: The technical part + +00:16:23.820 --> 00:16:36.439 +The Emms core + +00:16:36.440 --> 00:17:18.459 +Tracks + +00:17:18.460 --> 00:18:22.079 +Playlist + +00:18:22.080 --> 00:19:22.159 +Sources + +00:19:22.160 --> 00:20:20.519 +Players + +00:20:20.520 --> 00:21:36.659 +Info + +00:21:36.660 --> 00:22:51.619 +The cache + +00:22:51.620 --> 00:23:31.559 +Healthy back and forth: mpv, mpd, and GNU.FM + +00:23:31.560 --> 00:24:47.469 +MPV + +00:24:47.470 --> 00:26:07.439 +MPD + +00:26:07.440 --> 00:27:12.559 +GNU FM and Libre FM + +00:27:12.560 --> 00:28:52.589 +How we work: Emms development + +00:28:52.590 --> 00:29:06.079 +The Rime Of The Ancient Maintainer + +00:29:06.080 --> 00:31:24.079 +The life and times of an Emms patch + +00:31:24.080 --> 00:32:23.399 +Let It Go: The release process + +00:32:23.400 --> 00:34:44.848 +It Is Not In Our Stars, But In Ourselves: Future directions + +00:34:44.849 --> 00:36:05.979 +Development policies: Interface language + +00:36:05.980 --> 00:38:12.369 +Development policies: Freedom + +00:38:12.370 --> 00:38:38.040 +Acknowledgements diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt new file mode 100644 index 00000000..ecbed3fb --- /dev/null +++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt @@ -0,0 +1,2048 @@ +WEBVTT captioned by yoni, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:05.399 +The Sound of Emacs, Emms, The Emacs Multimedia System. + +00:00:05.400 --> 00:00:09.159 +Hi, I'm Yoni Rabkin and I'll be talking about Emms; + +00:00:09.160 --> 00:00:11.519 +the Emacs Multimedia System. + +00:00:11.520 --> 00:00:14.559 +What is Emms? + +00:00:14.560 --> 00:00:18.119 +Emms displays and plays media from within Emacs + +00:00:18.120 --> 00:00:20.519 +using a variety of external players + +00:00:20.520 --> 00:00:23.539 +and from different media sources. + +00:00:23.540 --> 00:00:26.679 +Emms can run as a minimalistic player + +00:00:26.680 --> 00:00:28.559 +which is controlled with no more than + +00:00:28.560 --> 00:00:31.119 +a handful of simple M-x commands, + +00:00:31.120 --> 00:00:36.059 +or as a fully-fledged interactive media browser and player. + +00:00:36.060 --> 00:00:40.639 +Emms can display album art, play streaming audio, + +00:00:40.640 --> 00:00:43.439 +tag music files, search for lyrics, + +00:00:43.440 --> 00:00:46.679 +provide MPD connectivity, control the volume, + +00:00:46.680 --> 00:00:49.619 +and more. Much more. + +00:00:49.620 --> 00:00:53.879 +The Emms project acts like Emacs in microcosm. + +00:00:53.880 --> 00:00:56.559 +It slowly but surely grows bigger + +00:00:56.560 --> 00:00:58.479 +and gets ever more features. + +00:00:58.480 --> 00:01:03.319 +Perhaps Emms will one day even have a text editor. + +NOTE The structure of this talk + +00:01:03.320 --> 00:01:05.599 +The structure of this talk: + +00:01:05.600 --> 00:01:08.159 +We'll start with an introduction to Emms. + +00:01:08.160 --> 00:01:10.559 +This is the practical part. + +00:01:10.560 --> 00:01:15.879 +Then, a bit about how Emms works. That's the technical part. + +00:01:15.880 --> 00:01:21.319 +Finally, how we work. All about Emms development. + +NOTE Introduction to Emms: The practical part + +00:01:21.320 --> 00:01:25.020 +Introduction to Emms: The practical part: + +00:01:25.021 --> 00:01:28.679 +I want this talk to be of immediate use to people, + +00:01:28.680 --> 00:01:33.519 +so I'm going to present a quick TL;DR of the Emms manual + +00:01:33.520 --> 00:01:36.399 +concerning installation and use. + +00:01:36.400 --> 00:01:38.439 +By the end of this part you should be able to + +00:01:38.440 --> 00:01:45.279 +install, configure, and use Emms in a variety of ways. + +00:01:45.280 --> 00:01:48.119 +Where can I get Emms? + +00:01:48.120 --> 00:01:54.319 +Emms is distributed primarily via GNU ELPA. + +00:01:54.320 --> 00:02:02.079 +So it's really only a M-x list-packages away at any moment. + +00:02:02.080 --> 00:02:07.719 +There's also a website hosted at gnu.org. + +00:02:07.720 --> 00:02:11.019 +Among other things on the website, you'll find + +00:02:11.020 --> 00:02:21.279 +a copy of the friendly, robust, and up-to-date user manual. + +00:02:21.280 --> 00:02:25.919 +Installing Emms has become progressively easier over time + +00:02:25.920 --> 00:02:28.719 +and will continue to get easier. + +00:02:28.720 --> 00:02:32.559 +In the bad old days, it required downloading a tarball + +00:02:32.560 --> 00:02:35.059 +and compiling a C language shim + +00:02:35.060 --> 00:02:38.919 +to enable reading metadata from media files. + +00:02:38.920 --> 00:02:43.359 +But those days are long gone, and installing Emms is now + +00:02:43.360 --> 00:02:47.039 +as easy as invoking M-x list-packages, + +00:02:47.040 --> 00:02:51.839 +installing the Emms package, and placing as few as + +00:02:51.840 --> 00:02:57.719 +2 or 3 lines of configuration in your Emacs initialization. + +00:02:57.720 --> 00:03:02.839 +So after the package is installed via ELPA, + +00:03:02.840 --> 00:03:08.439 +you can add these few lines. + +00:03:08.440 --> 00:03:12.359 +`emms-all` will make available all of the stable features + +00:03:12.360 --> 00:03:15.739 +which are shipped with Emms. + +00:03:15.740 --> 00:03:20.839 +The `emms-player-list` variable is a list of players + +00:03:20.840 --> 00:03:25.599 +like MPV, MPlayer, VLC, etc. + +00:03:25.600 --> 00:03:29.399 +Emms will call and control these external players + +00:03:29.400 --> 00:03:31.999 +to play your media. + +00:03:32.000 --> 00:03:36.659 +The variable `emms-info-functions` is a list of ways + +00:03:36.660 --> 00:03:40.959 +for Emms to read the metadata in your media files + +00:03:40.960 --> 00:03:45.279 +so that Emms can display song title, artist name, + +00:03:45.280 --> 00:03:49.479 +year of production, etc. + +00:03:49.480 --> 00:03:55.199 +The `emms-info-native` feature in the setup example + +00:03:55.200 --> 00:03:58.159 +is the built-in metadata reader + +00:03:58.160 --> 00:04:01.799 +written entirely in Emacs Lisp. + +00:04:01.800 --> 00:04:04.239 +But there are also other backends + +00:04:04.240 --> 00:04:07.719 +which can call external programs for info + +00:04:07.720 --> 00:04:14.719 +such as TinyTag, the TagLib library, exiftool, and so on. + +00:04:14.720 --> 00:04:17.559 +You can then old-school restart your Emacs + +00:04:17.560 --> 00:04:22.799 +or simply evaluate the above couple of lines to get going. + +00:04:22.800 --> 00:04:26.279 +Now that we have Emms installed and configured, + +00:04:26.280 --> 00:04:29.239 +we should load some media for player. + +00:04:29.240 --> 00:04:32.719 +There are multiple ways to load media into Emms for playing. + +00:04:32.720 --> 00:04:36.279 +They can be directories with local files, + +00:04:36.280 --> 00:04:38.519 +synchronized from a remote instance of + +00:04:38.520 --> 00:04:44.719 +a music player daemon, PLS or M3U playlists, + +00:04:44.720 --> 00:04:47.439 +a list of URLs for streaming, + +00:04:47.440 --> 00:04:51.119 +or even Emms' own native playlist format + +00:04:51.120 --> 00:04:57.199 +which is unsurprisingly a just serialized Emacs Lisp. + +00:04:57.200 --> 00:05:00.199 +No matter how you add tracks to Emms, + +00:05:00.200 --> 00:05:03.879 +you'll end up with a playlist. + +00:05:03.880 --> 00:05:08.959 +A fundamental strength of Emms is that each playlist + +00:05:08.960 --> 00:05:13.479 +is a regular Emacs buffer and the track listing therein + +00:05:13.480 --> 00:05:17.859 +is nothing more than text lines with property overlays. + +00:05:17.860 --> 00:05:21.359 +This means that you can navigate, search, copy, + +00:05:21.360 --> 00:05:24.879 +and edit an Emms playlist buffer + +00:05:24.880 --> 00:05:28.679 +just as you would any Emacs buffer. + +00:05:28.680 --> 00:05:31.319 +If you want to reorganize the tracks in the playlist, + +00:05:31.320 --> 00:05:33.959 +then you can simply kill yank the tracks + +00:05:33.960 --> 00:05:36.759 +just as you would any buffer with lines of text, + +00:05:36.760 --> 00:05:42.959 +and the same can be done between multiple playlist buffers. + +00:05:42.960 --> 00:05:46.119 +One of the most straightforward ways to add media + +00:05:46.120 --> 00:05:51.939 +is to invoke a command like `M-x emms-add-directory-tree`. + +00:05:51.940 --> 00:05:55.679 +You can point it to the top of a set of directories + +00:05:55.680 --> 00:06:00.279 +with playable files for Emms to traverse. + +00:06:00.280 --> 00:06:05.199 +Another rather convenient method is to mark files in Dired + +00:06:05.200 --> 00:06:09.679 +and to invoke `emms-add-dired`. + +00:06:09.680 --> 00:06:11.679 +I definitely use this one a lot. + +00:06:11.680 --> 00:06:16.119 +The Emms playlist mode binds + +00:06:16.120 --> 00:06:19.879 +a number of useful keys and commands. + +00:06:19.880 --> 00:06:23.959 +It's highly recommended that you either + +00:06:23.960 --> 00:06:25.959 +read the friendly manual + +00:06:25.960 --> 00:06:32.319 +or hit "C-h m" in a playlist buffer to discover them. + +00:06:32.320 --> 00:06:35.959 +Now we have a playlist buffer with a number of tracks, + +00:06:35.960 --> 00:06:40.819 +so the next step is going to be playback. + +00:06:40.820 --> 00:06:44.399 +Emms can be used as a minimalistic player + +00:06:44.400 --> 00:06:48.319 +with nothing more than a handful of commands. + +00:06:48.320 --> 00:06:51.359 +Once there is a current Emms playlist, + +00:06:51.360 --> 00:06:57.559 +invoking emms-start will begin playing the current track. + +00:06:57.560 --> 00:07:00.039 +Now of course in a new playlist + +00:07:00.040 --> 00:07:02.579 +that would be the first track. + +00:07:02.580 --> 00:07:07.199 +Now emms-next, emms-pause, and emms-stop + +00:07:07.200 --> 00:07:11.259 +do exactly what you think they do. + +00:07:11.260 --> 00:07:13.199 +To visit the current playlist, + +00:07:13.200 --> 00:07:17.639 +you can invoke M-x emms-playlist-mode-go, + +00:07:17.640 --> 00:07:22.699 +which is a long command I personally bind to "M-f12". + +00:07:22.700 --> 00:07:25.319 +You'll be taken to the current playlist buffer. + +00:07:25.320 --> 00:07:29.239 +While you can have multiple playlist buffers, + +00:07:29.240 --> 00:07:35.779 +only one is current for the purposes of playback commands. + +00:07:35.780 --> 00:07:38.119 +The playlist buffer has keys bound + +00:07:38.120 --> 00:07:39.919 +to control the media being played. + +00:07:39.920 --> 00:07:44.199 +`emms-seek-forward` and `emms-seek-backwards` allow you + +00:07:44.200 --> 00:07:49.039 +to scrub along the media being played. + +00:07:49.040 --> 00:07:51.719 +Which commands are available is a function of + +00:07:51.720 --> 00:07:54.199 +the player backend being employed. + +00:07:54.200 --> 00:07:56.599 +The simplest of players may have nothing more + +00:07:56.600 --> 00:07:59.559 +than the ability to play, stop, and seek, + +00:07:59.560 --> 00:08:04.239 +but others may implement a plethora of commands. + +NOTE The modeline + +00:08:04.240 --> 00:08:08.879 +The Modeline: Emms will by default display + +00:08:08.880 --> 00:08:11.839 +the name of the currently playing track in the mode line + +00:08:11.840 --> 00:08:14.999 +with information such as playing time. + +00:08:15.000 --> 00:08:15.559 +The mode line format is controlled + +00:08:15.560 --> 00:08:20.639 +via the `emms-mode-line-format` variable + +00:08:20.640 --> 00:08:27.139 +and the `emms-mode-line-playlist-current` function. + +00:08:27.140 --> 00:08:31.039 +Metadata and the cache. + +00:08:31.040 --> 00:08:34.799 +It would be sufficient for emms to simply list + +00:08:34.800 --> 00:08:38.619 +the file names or urls of each piece of media, + +00:08:38.620 --> 00:08:40.999 +but unless you name your music and media + +00:08:41.000 --> 00:08:43.939 +with obsessive consistency and precision, + +00:08:43.940 --> 00:08:46.679 +not that there is anything wrong with that + +00:08:46.680 --> 00:08:50.859 +then the resulting list will be a bit of an eyesore. + +00:08:50.860 --> 00:08:54.119 +Moreover, there are a lot of other useful metadata + +00:08:54.120 --> 00:08:58.619 +in the media files, including cool stuff like album art. + +00:08:58.620 --> 00:09:01.919 +So instead of just files, Emms will try + +00:09:01.920 --> 00:09:04.399 +to extract metadata from each track + +00:09:04.400 --> 00:09:08.219 +and display a nicely-formatted track listing. + +00:09:08.220 --> 00:09:10.799 +The format can be controlled by customizing + +00:09:10.800 --> 00:09:15.459 +the variable `emms-track-description-function`. + +00:09:15.460 --> 00:09:19.639 +Emms uses so-called info methods to extract + +00:09:19.640 --> 00:09:22.439 +the metadata from each file. + +00:09:22.440 --> 00:09:25.679 +`emms-info-native`, which I mentioned before, + +00:09:25.680 --> 00:09:30.359 +is the built-in metadata reader written in Emacs Lisp. + +00:09:30.360 --> 00:09:37.659 +It provides support for Ogg Vorbis, Ogg Opus, FLAC, and MP3. + +00:09:37.660 --> 00:09:40.359 +However, if you have media in other formats, + +00:09:40.360 --> 00:09:42.439 +you can also add info methods + +00:09:42.440 --> 00:09:45.239 +to the `emms-info-functions` list, + +00:09:45.240 --> 00:09:48.699 +which call external programs such as exiftool, + +00:09:48.700 --> 00:09:55.419 +the LibTag library, tiny-tag, etc. to read file metadata. + +00:09:55.420 --> 00:09:58.199 +Since reading metadata takes time + +00:09:58.200 --> 00:10:01.339 +and that metadata doesn't change very often, + +00:10:01.340 --> 00:10:04.079 +Emms builds a cache as it extracts + +00:10:04.080 --> 00:10:06.859 +the information from each file. + +00:10:06.860 --> 00:10:09.879 +The first time loading of thousands of tracks + +00:10:09.880 --> 00:10:13.259 +into the emms cache may take a while, + +00:10:13.260 --> 00:10:16.999 +but as is the nature of caching, subsequent loads + +00:10:17.000 --> 00:10:20.059 +will be nearly instantaneous. + +00:10:20.060 --> 00:10:22.719 +To ease loading huge media collections, + +00:10:22.720 --> 00:10:26.519 +emms also can populate the cache asynchronously, + +00:10:26.520 --> 00:10:30.519 +so that your emacs isn't locked up in the interim. + +00:10:30.520 --> 00:10:33.779 +Let's talk about streams and URLs. + +00:10:33.780 --> 00:10:37.619 +Not all playlist entries need to be associated with files. + +00:10:37.620 --> 00:10:39.839 +It's possible to add streaming playlists + +00:10:39.840 --> 00:10:42.639 +and URLs to any playlist. + +00:10:42.640 --> 00:10:46.119 +Emms also comes with a built-in eclectic list + +00:10:46.120 --> 00:10:50.039 +of streaming audio stations to get you started. + +00:10:50.040 --> 00:10:52.639 +Any playlist entry can be a URL, + +00:10:52.640 --> 00:10:56.719 +and that URL will be passed on to the media player backend, + +00:10:56.720 --> 00:11:01.199 +which can play it, if any. + +NOTE Meta-playlist mode + +00:11:01.200 --> 00:11:03.679 +Meta-playlist mode: + +00:11:03.680 --> 00:11:08.299 +Emms also has meta-playlist mode + +00:11:08.300 --> 00:11:11.959 +to help manage multiple playlists. + +00:11:11.960 --> 00:11:13.879 +When you invoke meta-playlist mode, + +00:11:13.880 --> 00:11:16.959 +you will see a listing of all of the current Emms playlists, + +00:11:16.960 --> 00:11:21.999 +and this mode binds a handful of useful keybindings + +00:11:22.000 --> 00:11:29.859 +to help manage those playlists. + +NOTE The browser + +00:11:29.860 --> 00:11:31.759 +The Browser: + +00:11:31.760 --> 00:11:35.439 +Music doesn't always lend itself to being viewed + +00:11:35.440 --> 00:11:38.199 +as a series of discrete files. + +00:11:38.200 --> 00:11:41.559 +While there may be a good taxonomy of music + +00:11:41.560 --> 00:11:45.459 +that can be reflected using directories and filenames, + +00:11:45.460 --> 00:11:49.099 +there are other aspects which cannot. + +00:11:49.100 --> 00:11:51.599 +This is especially true when you consider that + +00:11:51.600 --> 00:11:55.299 +unlike many computer file taxonomies, + +00:11:55.300 --> 00:11:56.719 +music files may contain + +00:11:56.720 --> 00:11:58.759 +a lot of self-descriptive information + +00:11:58.760 --> 00:12:00.619 +in the form of metadata, + +00:12:00.620 --> 00:12:04.279 +such as the year a work was published, the composer, + +00:12:04.280 --> 00:12:07.519 +the performing artist, etc. + +00:12:07.520 --> 00:12:11.079 +Therefore, it makes sense for Emms to enable + +00:12:11.080 --> 00:12:13.199 +a different view into a media collection + +00:12:13.200 --> 00:12:17.059 +which is based on the cached metadata. + +00:12:17.060 --> 00:12:19.839 +The browser interface binds a host of keys + +00:12:19.840 --> 00:12:22.079 +to help navigate the tree structure + +00:12:22.080 --> 00:12:24.539 +of the metadata information. + +00:12:24.540 --> 00:12:25.839 +Since browser display + +00:12:25.840 --> 00:12:28.279 +is not predicated upon directory structure, + +00:12:28.280 --> 00:12:32.939 +you can invoke functions such as `emms-browse-by-album`, + +00:12:32.940 --> 00:12:35.639 +or `emms-browse-by-artist`, etc. + +00:12:35.640 --> 00:12:42.179 +to view the collection in different ways. + +00:12:42.180 --> 00:12:43.759 +Emms can do a lot more, + +00:12:43.760 --> 00:12:46.319 +but covering it all would take too much time. + +00:12:47.020 --> 00:12:50.239 +I do recommend opening the fine Emms manual + +00:12:50.240 --> 00:12:52.319 +and getting to know some additional features + +00:12:52.320 --> 00:12:54.999 +such as sorting tracks in playlists, + +00:12:55.000 --> 00:12:57.199 +sorting and filtering in the browser, + +00:12:57.200 --> 00:12:59.079 +editing track information, + +00:12:59.080 --> 00:13:01.919 +deriving a new playlist from an existing playlist, + +00:13:01.920 --> 00:13:07.039 +the music player daemon, lyrics display, volume control, + +00:13:07.040 --> 00:13:13.359 +bookmarks, GNU FM, and Dbus/Mpris support. + +00:13:13.360 --> 00:13:19.919 +I hope this was a useful introduction to Emms. + +NOTE How Emms works: The technical part + +00:13:19.920 --> 00:13:23.219 +How Emms Works: The technical part: + +00:13:23.220 --> 00:13:26.819 +This part is an overview of how Emms works. + +00:13:26.820 --> 00:13:29.759 +By the end of this, you should be familiar enough + +00:13:29.760 --> 00:13:34.739 +with Emms internals to hack on it. Hint hint. + +00:13:34.740 --> 00:13:37.679 +A short history of Emms + +00:13:37.680 --> 00:13:42.939 +Emms is 20 years old as of the time of writing. + +00:13:42.940 --> 00:13:45.399 +Old enough to drink in many countries. + +00:13:45.400 --> 00:13:48.879 +This means it was developed back in 2003 + +00:13:48.880 --> 00:13:53.439 +for emacs 21.2 or thereabouts. + +00:13:53.440 --> 00:13:56.279 +As developers, we don't go around looking to + +00:13:56.280 --> 00:13:58.839 +replace code just because it's old. + +00:13:58.840 --> 00:14:01.839 +On the other hand, some parts were inadequate + +00:14:01.840 --> 00:14:04.919 +or just didn't age gracefully. + +00:14:04.920 --> 00:14:10.359 +And we have been partially or completely rewriting those. + +00:14:10.360 --> 00:14:13.719 +I became the maintainer of Emms about a decade ago, + +00:14:13.720 --> 00:14:16.099 +but I didn't start the project. + +00:14:16.100 --> 00:14:21.019 +Jorgen Schäfer started the project. + +00:14:21.020 --> 00:14:22.519 +I reached out to Jorgen + +00:14:22.520 --> 00:14:25.619 +and he kindly shared some of his recollections. + +00:14:25.620 --> 00:14:28.199 +Jorgen states that Emms was born back + +00:14:28.200 --> 00:14:31.279 +when the music format wars raged. + +00:14:31.280 --> 00:14:38.699 +MP3 was the standard, but overshadowed with patent issues. + +00:14:38.700 --> 00:14:42.479 +In fact, Technicolor and Fraunhofer IIS + +00:14:42.480 --> 00:14:45.559 +only stopped licensing their patents for MP3 + +00:14:45.560 --> 00:14:49.359 +as recently as April of 2017. + +00:14:49.360 --> 00:14:53.539 +Jorgen said that, and I quote, + +00:14:53.540 --> 00:14:56.079 +"I needed a tool that was player agnostic + +00:14:56.080 --> 00:14:59.439 +and that could deal with a large collection of music files. + +00:14:59.440 --> 00:15:02.799 +And I did not want any of the GUI music players + +00:15:02.800 --> 00:15:04.039 +that existed back then. + +00:15:04.040 --> 00:15:07.519 +Primarily, actually, because I did not want + +00:15:07.520 --> 00:15:11.399 +to be switching windows to skip to the next song. + +00:15:11.400 --> 00:15:12.879 +If I remember correctly, + +00:15:12.880 --> 00:15:16.279 +I had just a shell script before that. + +00:15:16.280 --> 00:15:20.159 +But I figured I lived in Emacs, so why not write a tool + +00:15:20.160 --> 00:15:23.039 +that I can control my music from Emacs + +00:15:23.040 --> 00:15:27.759 +without ever having to leave Emacs?" Unquote. + +00:15:27.760 --> 00:15:32.119 +We can see that Jorgen's motivations were of the best kind, + +00:15:32.120 --> 00:15:35.319 +to stay in Emacs. + +00:15:35.320 --> 00:15:40.679 +Emms, an architecture of sensible abstractions. + +00:15:40.680 --> 00:15:44.039 +Emms can be divided into a number of parts. + +00:15:44.040 --> 00:15:48.119 +The core, tracks, playlists, sources, players, + +00:15:48.120 --> 00:15:51.759 +info, cache, and ancillary. + +00:15:51.760 --> 00:15:53.679 +Now David J. Wheeler once said + +00:15:53.680 --> 00:15:55.999 +that all problems in computer science + +00:15:56.000 --> 00:15:59.799 +can be solved by another level of indirection, + +00:15:59.800 --> 00:16:01.639 +except of course for the problem + +00:16:01.640 --> 00:16:04.419 +of too many layers of indirection. + +00:16:04.420 --> 00:16:06.999 +Emms core has survived this long + +00:16:07.000 --> 00:16:11.619 +because it makes sensible and flexible coding abstractions. + +00:16:11.620 --> 00:16:15.499 +Keep this in mind as we explore the implementation. + +00:16:15.500 --> 00:16:18.879 +This following part of the talk will also be invaluable + +00:16:18.880 --> 00:16:21.559 +if you want to hack on Emacs. + +00:16:21.560 --> 00:16:23.819 +Another hint. + +NOTE The Emms core + +00:16:23.820 --> 00:16:25.359 +The Emms core. + +00:16:25.360 --> 00:16:29.079 +The core defines tracks, playlists, + +00:16:29.080 --> 00:16:31.759 +a way to start and stop playback, + +00:16:31.760 --> 00:16:36.439 +as well as ways to proceed to the next track. + +NOTE Tracks + +00:16:36.440 --> 00:16:38.459 +Tracks: + +00:16:38.460 --> 00:16:44.779 +Emms tracks consist of a list whose CAR is the symbol track, + +00:16:44.780 --> 00:16:47.079 +and CADR is an alist starting with + +00:16:47.080 --> 00:16:50.639 +the association of `type'. + +00:16:50.640 --> 00:16:56.739 +Type can be something like file, streamlist, URL, etc. + +00:16:56.740 --> 00:17:00.079 +A track of classical music from Bach's Art of Fugue + +00:17:00.080 --> 00:17:04.379 +may look something like this. + +00:17:04.380 --> 00:17:07.599 +While a track may contain many associations, + +00:17:07.600 --> 00:17:11.079 +the number of associations remains a small constant + +00:17:11.080 --> 00:17:14.199 +from the perspective of computational steps required + +00:17:14.200 --> 00:17:18.459 +to find any particular association. + +NOTE Playlist + +00:17:18.460 --> 00:17:20.619 +Playlist: + +00:17:20.620 --> 00:17:23.479 +An Emms playlist consists of an Emacs buffer + +00:17:23.480 --> 00:17:26.459 +with a buffer-local non-nil variable, + +00:17:26.460 --> 00:17:29.819 +`emms-playlist-buffer-p`. + +00:17:29.820 --> 00:17:33.719 +The buffer can contain anything, any amount or type of text, + +00:17:33.720 --> 00:17:35.959 +or anything else. + +00:17:35.960 --> 00:17:40.499 +Emms tracks are stored in text properties within the buffer, + +00:17:40.500 --> 00:17:46.399 +with the unimaginatively named text property `emms-track`. + +00:17:46.400 --> 00:17:49.239 +For Emms, to go to the next track consists of + +00:17:49.240 --> 00:17:52.839 +nothing more than looking for the next text property change + +00:17:52.840 --> 00:17:57.179 +containing `emms-track`, wherever that is. + +00:17:57.180 --> 00:18:00.239 +That means that there is a healthy decoupling between + +00:18:00.540 --> 00:18:03.839 +the visual representation of a playlist + +00:18:03.840 --> 00:18:08.259 +and its contents as far as Emms is concerned. + +00:18:08.260 --> 00:18:11.599 +This decoupling allows Emms playlist buffers + +00:18:11.600 --> 00:18:15.319 +to look like anything as long as that anything consists of + +00:18:15.320 --> 00:18:22.079 +one or more `emms-track` text properties. + +NOTE Sources + +00:18:22.080 --> 00:18:23.579 +Sources: + +00:18:23.580 --> 00:18:25.839 +A source is how you tell Emms: + +00:18:25.840 --> 00:18:29.779 +"Go and get those things and turn them into tracks." + +00:18:29.780 --> 00:18:34.479 +More specifically, an Emms source is a function called in + +00:18:34.480 --> 00:18:37.259 +a playlist buffer in order to add tracks. + +00:18:37.260 --> 00:18:40.199 +And even more specifically, a source is really + +00:18:40.200 --> 00:18:42.679 +a family of related functions + +00:18:42.680 --> 00:18:47.679 +defined by the macro `define-emms-source`. + +00:18:47.680 --> 00:18:49.959 +A straightforward example + +00:18:49.960 --> 00:18:52.959 +is the function `emms-add-directory`, + +00:18:52.960 --> 00:18:55.879 +which adds an entire directory of files + +00:18:55.880 --> 00:18:57.439 +to the current playlist. + +00:18:57.440 --> 00:19:02.319 +It accepts, or interactively queries for, a directory + +00:19:02.320 --> 00:19:06.119 +and iterates over each file in that directory, + +00:19:06.120 --> 00:19:10.759 +adding them as tracks to the playlist buffer as it goes. + +00:19:10.760 --> 00:19:15.039 +Emms comes with sources for files, directories, URLs, + +00:19:15.040 --> 00:19:17.319 +playlists of various formats, + +00:19:17.320 --> 00:19:22.159 +files from dired mode, and etc. + +NOTE Players + +00:19:22.160 --> 00:19:24.879 +Players: + +00:19:24.880 --> 00:19:28.959 +An Emms player is, at its simplest, a data structure + +00:19:28.960 --> 00:19:30.839 +with three functions. + +00:19:30.840 --> 00:19:34.519 +One to start playing, one to stop, + +00:19:34.520 --> 00:19:38.179 +and one which returns true if the player knows + +00:19:38.180 --> 00:19:41.279 +how to play a given track. + +00:19:41.280 --> 00:19:44.759 +However, if your player also knows how to pause, resume, + +00:19:44.760 --> 00:19:48.279 +seek, etc, then additional functions can be added + +00:19:48.280 --> 00:19:51.319 +to the player data structure. + +00:19:51.320 --> 00:19:55.399 +This is abstract enough to be able to, for example, + +00:19:55.400 --> 00:19:58.839 +define a simple player for images with the help of + +00:19:58.840 --> 00:20:04.579 +the `define-emms-simple-player` macro. + +00:20:04.580 --> 00:20:09.559 +The above will define a player called `emms-player-display`, + +00:20:09.560 --> 00:20:12.959 +which would call ImageMagick's `display` command + +00:20:12.960 --> 00:20:15.639 +on each file in our playlist + +00:20:15.640 --> 00:20:20.519 +with the image file extension we listed. + +NOTE Info + +00:20:20.520 --> 00:20:23.059 +Info: + +00:20:23.060 --> 00:20:28.019 +As previously described, Emms comes with info methods, + +00:20:28.020 --> 00:20:29.639 +which are functions to add + +00:20:29.640 --> 00:20:32.339 +descriptive information to tracks. + +00:20:32.340 --> 00:20:34.639 +Emms is set up so that + +00:20:34.640 --> 00:20:37.719 +the hook `emms-track-initialize-functions` is called + +00:20:37.720 --> 00:20:41.639 +when a track is created, and that ends up calling + +00:20:41.640 --> 00:20:46.279 +the info methods listed in the `emms-info-functions` list. + +00:20:46.280 --> 00:20:51.199 +These will modify the track data structure to add metadata. + +00:20:51.200 --> 00:20:54.319 +One of the coolest recent features of Emms + +00:20:54.320 --> 00:20:58.699 +is `emms-info-native`, written by Petteri Hintsanen; + +00:20:58.700 --> 00:21:01.325 +again, sorry for the pronunciation. + +00:21:01.326 --> 00:21:06.519 +`emms-info-native` is a purely Emacs Lisp implementation + +00:21:06.520 --> 00:21:11.439 +which reads Ogg Vorbis, Ogg Opus, FLAC, and MP3 files + +00:21:11.440 --> 00:21:14.679 +and parses out the metadata. + +00:21:14.680 --> 00:21:17.519 +This is in comparison with other info readers + +00:21:17.520 --> 00:21:20.559 +which Emms supports, which all involve calling out + +00:21:20.560 --> 00:21:25.619 +to external processes and parsing the values returned. + +00:21:25.620 --> 00:21:29.319 +`emms-info-native` works by unpacking and examining + +00:21:29.320 --> 00:21:32.039 +the binary data in the media file headers + +00:21:32.040 --> 00:21:36.659 +and parsing the data layout specifications. + +NOTE The cache + +00:21:36.660 --> 00:21:38.879 +The Cache: + +00:21:38.880 --> 00:21:43.279 +The Emms cache is a mapping between a full path name + +00:21:43.280 --> 00:21:45.719 +and its associated information. + +00:21:45.720 --> 00:21:48.199 +Once information is extracted from a file + +00:21:48.200 --> 00:21:50.759 +using an info method, that information is then + +00:21:50.760 --> 00:21:53.979 +associated with that file in the cache. + +00:21:53.980 --> 00:21:57.159 +One thing to bear in mind is that the caching system + +00:21:57.160 --> 00:21:58.359 +was originally written back + +00:21:58.360 --> 00:22:00.759 +when slow spinning disks were common. + +00:22:00.760 --> 00:22:07.519 +A 32GB SSD drive cost close to $700 in 2006, + +00:22:07.520 --> 00:22:10.279 +which is the equivalent of about $1,000 + +00:22:10.280 --> 00:22:12.439 +at the time of writing. + +00:22:12.440 --> 00:22:15.259 +But despite the speed of modern drives, + +00:22:15.260 --> 00:22:17.439 +the caching system is still worth using + +00:22:17.440 --> 00:22:19.679 +for larger music collections. + +00:22:19.680 --> 00:22:22.439 +The caching system is also a prerequisite + +00:22:22.440 --> 00:22:26.599 +for being able to use the Emms browser. + +00:22:26.600 --> 00:22:30.379 +The cache implementation is relatively naive. + +00:22:30.380 --> 00:22:33.199 +For instance, moving a file will invalidate + +00:22:33.200 --> 00:22:35.799 +that cache entry for that file + +00:22:35.800 --> 00:22:37.579 +and will require a refresh. + +00:22:37.580 --> 00:22:40.599 +However, relatively little work has been done + +00:22:40.600 --> 00:22:42.779 +to the cache implementation over the years + +00:22:42.780 --> 00:22:44.999 +since it has proven to be good enough + +00:22:45.000 --> 00:22:47.059 +for the majority of situations. + +00:22:47.060 --> 00:22:51.619 +Which is to say, nobody complained. + +NOTE Healthy back and forth: mpv, mpd, and GNU.FM + +00:22:51.620 --> 00:22:56.239 +Healthy back and forth. MPV, MPD, GNU.FM + +00:22:56.240 --> 00:23:00.119 +Process communication with a simple media player + +00:23:00.120 --> 00:23:01.759 +can be as straightforward + +00:23:01.760 --> 00:23:03.799 +as starting an asynchronous process + +00:23:03.800 --> 00:23:05.799 +and waiting for that process to complete + +00:23:05.800 --> 00:23:07.919 +in order to move to the next track. + +00:23:08.620 --> 00:23:10.879 +This is how the example above + +00:23:10.880 --> 00:23:13.359 +with ImageMagick's display binary worked. + +00:23:13.760 --> 00:23:17.439 +However, Emms also handles asynchronous + +00:23:17.440 --> 00:23:20.299 +two-way communication with processes. + +00:23:20.300 --> 00:23:23.959 +A simple example of this would be sending strings + +00:23:23.960 --> 00:23:31.559 +to a running process such as the pause command to VLC. + +NOTE MPV + +00:23:31.560 --> 00:23:33.379 +MPV: + +00:23:33.380 --> 00:23:37.039 +MPV is a popular media player forked + +00:23:37.040 --> 00:23:39.899 +in a roundabout way from mplayer. + +00:23:39.900 --> 00:23:42.079 +One of its most notable features is + +00:23:42.080 --> 00:23:46.599 +support for a robust client API. + +00:23:46.600 --> 00:23:52.959 +Mike Kazantsev has been working since 2018 + +00:23:52.960 --> 00:23:58.349 +to develop the excellent `emms-player-mpv.el'. + +00:23:58.350 --> 00:24:01.999 +It can communicate with a long running MPV process + +00:24:02.000 --> 00:24:07.179 +via Unix sockets or IP sockets. + +00:24:07.180 --> 00:24:11.169 +This allows for MPV to do things + +00:24:11.170 --> 00:24:14.889 +like update ICY metadata for streaming audio. + +00:24:14.890 --> 00:24:17.639 +So that, for example, when a song changes + +00:24:17.640 --> 00:24:22.049 +while you're listening to a streaming audio via Emms, + +00:24:22.050 --> 00:24:24.679 +the song title displayed in the mode line + +00:24:24.680 --> 00:24:28.329 +and track listing can update as well. + +00:24:28.330 --> 00:24:30.399 +This means that deep inside the code + +00:24:30.400 --> 00:24:35.629 +there is an Emacs `make-network-process` call. + +00:24:35.630 --> 00:24:37.919 +The fact that Mike has put this together + +00:24:37.920 --> 00:24:42.639 +in fewer than 1,000 lines of legible Emacs Lisp + +00:24:42.640 --> 00:24:47.469 +is a testament to some serious coding ability. + +NOTE MPD + +00:24:47.470 --> 00:24:49.609 +MPD: + +00:24:49.610 --> 00:24:52.399 +Similar to MPV but potentially + +00:24:52.400 --> 00:24:54.119 +on a completely different machine + +00:24:54.120 --> 00:24:58.459 +is Emms support for the Music Player Daemon. + +00:24:58.460 --> 00:25:01.519 +Music Player Daemon or MPD is a media player + +00:25:01.520 --> 00:25:03.959 +with an explicit client-server design + +00:25:03.960 --> 00:25:09.949 +and communicates with Emms via a network process. + +00:25:09.950 --> 00:25:16.089 +Unfortunately, MPD support has never been all that great. + +00:25:16.090 --> 00:25:20.469 +But this isn't the emms developers fault! + +00:25:20.470 --> 00:25:25.599 +Because unlike every other media player + +00:25:25.600 --> 00:25:29.729 +that Emms interfaces with MPD is designed around + +00:25:29.730 --> 00:25:31.929 +its own internal playlist database. + +00:25:31.930 --> 00:25:35.269 +This is a surprising design decision + +00:25:35.270 --> 00:25:37.649 +on the MPD developers' part + +00:25:37.650 --> 00:25:41.749 +since it goes against the client-server mindset. + +00:25:41.750 --> 00:25:45.959 +A consequence is that we end up having to try and coordinate + +00:25:45.960 --> 00:25:51.399 +and harmonize the MPD playlist with the Emms playlist. + +00:25:51.400 --> 00:25:56.689 +I can foresee writing a completely new MPD mode for Emms + +00:25:56.690 --> 00:26:01.509 +which is designed to be a true pure MPD client. + +00:26:01.510 --> 00:26:05.339 +Unless of course someone volunteers to beat me to it. + +00:26:05.340 --> 00:26:07.439 +Hint hint. + +NOTE GNU FM and Libre FM + +00:26:07.440 --> 00:26:10.959 +GNU FM and Libre FM: + +00:26:10.960 --> 00:26:13.639 +Libre FM is a music community which allows you + +00:26:13.640 --> 00:26:17.449 +to share your listening habits with other users of the site. + +00:26:17.450 --> 00:26:21.269 +A kind of online listening party. + +00:26:21.270 --> 00:26:25.649 +In the case of `emms-librefm-scrobber.el` + +00:26:25.650 --> 00:26:28.639 +we use Emacs' `url-retrieve` function + +00:26:28.640 --> 00:26:32.449 +to asynchronously send to a URL + +00:26:32.450 --> 00:26:40.049 +and then fire a callback function to process the response. + +00:26:40.050 --> 00:26:42.679 +This represents numerous challenges + +00:26:42.680 --> 00:26:45.089 +to implement within Emacs. + +00:26:45.090 --> 00:26:47.399 +The primary issue being that Emacs itself + +00:26:47.400 --> 00:26:50.099 +is pretty weak at doing anything + +00:26:50.100 --> 00:26:54.219 +truly and really asynchronously. + +00:26:54.220 --> 00:26:56.399 +I can say with confident sarcasm + +00:26:56.400 --> 00:26:59.529 +and with tongue firmly planted in cheek + +00:26:59.530 --> 00:27:02.879 +that it is almost as if the original designers + +00:27:02.880 --> 00:27:05.839 +of Emacs didn't foresee their text editor + +00:27:05.840 --> 00:27:07.039 +needing to play music + +00:27:07.040 --> 00:27:09.819 +while interacting with a remote network server. + +00:27:09.820 --> 00:27:12.559 +How myopic! + +NOTE How we work: Emms development + +00:27:12.560 --> 00:27:15.699 +How we work: Emms development: + +00:27:15.700 --> 00:27:19.619 +This part is an overview of how Emms is developed. + +00:27:19.620 --> 00:27:23.899 +By the end of this part you should be able to understand + +00:27:23.900 --> 00:27:28.719 +how we hacked this project, and how you can too. + +00:27:28.720 --> 00:27:29.949 +Where it's at. + +00:27:29.950 --> 00:27:32.369 +How to find our forge. + +00:27:32.370 --> 00:27:36.499 +Emms has been hosted at the FSF's forge, Savannah, + +00:27:36.500 --> 00:27:39.839 +since around 2003. + +00:27:39.840 --> 00:27:46.229 +Emms is distributed via GNU ELPA and integrated into Emacs. + +00:27:46.230 --> 00:27:49.799 +Before ELPA it was distributed as a tarball + +00:27:49.800 --> 00:27:55.139 +via ftp.gnu.org but that stopped back in 2020. + +00:27:55.140 --> 00:27:58.719 +I was initially resistant to ELPA but around the time + +00:27:58.720 --> 00:28:03.849 +when the thousandth person asked me why Emms isn't on ELPA, + +00:28:03.850 --> 00:28:07.209 +I realized that it had to happen. + +00:28:07.210 --> 00:28:10.599 +Emms can also be found in other places + +00:28:10.600 --> 00:28:16.079 +such as Melpa or GitHub but we, the developers of Emms, + +00:28:16.080 --> 00:28:17.999 +have nothing to do with that + +00:28:18.000 --> 00:28:21.759 +and we don't monitor those channels. + +00:28:21.760 --> 00:28:26.299 +If you want the source straight from, well, the source, + +00:28:26.300 --> 00:28:30.369 +then go to the Savannah Git repository. + +00:28:30.370 --> 00:28:34.989 +Look who's talking: Where development discussion happens. + +00:28:34.990 --> 00:28:37.999 +If you want to talk to us, discussions all happen + +00:28:38.000 --> 00:28:41.429 +on emms-help@gnu.org. + +00:28:41.430 --> 00:28:45.559 +We used to use emms-patches@gnu.org + +00:28:45.560 --> 00:28:48.279 +but didn't feel like the volume of incoming patches + +00:28:48.280 --> 00:28:52.589 +justified a separate mailing list. + +NOTE The Rime Of The Ancient Maintainer + +00:28:52.590 --> 00:28:55.719 +The Rime Of The Ancient Maintainer: + +00:28:55.720 --> 00:28:57.479 +There are a number of activities + +00:28:57.480 --> 00:29:00.099 +particular to being a maintainer. + +00:29:00.100 --> 00:29:03.389 +These are all part of a project's lifecycle. + +00:29:03.390 --> 00:29:06.079 +Let's review some of them. + +NOTE The life and times of an Emms patch + +00:29:06.080 --> 00:29:09.999 +The life and times of an Emms patch: + +00:29:10.000 --> 00:29:13.239 +A maintainer needs to be able to accept, critique, + +00:29:13.240 --> 00:29:17.559 +and integrate patches from contributors and developers. + +00:29:17.560 --> 00:29:20.559 +This means, among other things, that the maintainer + +00:29:20.560 --> 00:29:24.469 +needs to keep on top of copyright issues. + +00:29:24.470 --> 00:29:29.359 +Before being able to add Emms to GNU/ELPA, + +00:29:29.360 --> 00:29:31.879 +we had to make sure that the copyright situation + +00:29:31.880 --> 00:29:33.849 +was in order. + +00:29:33.850 --> 00:29:37.519 +This long process required reaching out to people + +00:29:37.520 --> 00:29:39.959 +and having them assign the copyright + +00:29:39.960 --> 00:29:42.509 +for their work to the FSF, + +00:29:42.510 --> 00:29:45.199 +or even removing their code entirely + +00:29:45.200 --> 00:29:47.969 +if they couldn't be reached. + +00:29:47.970 --> 00:29:50.629 +The experience left me with the conviction + +00:29:50.630 --> 00:29:52.399 +that the easiest way to fix + +00:29:52.400 --> 00:29:54.519 +the copyright situation of your package + +00:29:54.520 --> 00:30:00.639 +is to ensure that it never gets broken in the first place. + +00:30:00.640 --> 00:30:04.439 +Often a person will write in to the emms-help mailing list, + +00:30:04.440 --> 00:30:08.029 +or perhaps raise an issue on IRC. + +00:30:08.030 --> 00:30:11.679 +If it's a bug report or feature request, we'll discuss it, + +00:30:11.680 --> 00:30:14.159 +and when it's fixed, we'll ask the reporter + +00:30:14.160 --> 00:30:17.639 +to test the result and provide feedback. + +00:30:17.640 --> 00:30:22.039 +If it's a patch, then we'll typically go one of three ways. + +00:30:22.040 --> 00:30:24.799 +A trivial patch, such as fixing a typo + +00:30:24.800 --> 00:30:27.279 +or corrections on a single line of code, + +00:30:27.280 --> 00:30:32.039 +will simply be applied by one of the developers. + +00:30:32.040 --> 00:30:34.519 +A non-trivial, but one-time patch, + +00:30:34.520 --> 00:30:37.989 +will have to be cleared from a copyright perspective. + +00:30:37.990 --> 00:30:42.419 +This means assigning copyright for the changes to the FSF. + +00:30:42.420 --> 00:30:46.319 +Once that's cleared, then the patch will be applied. + +00:30:46.320 --> 00:30:49.879 +Finally, if it's a non-trivial patch, + +00:30:49.880 --> 00:30:52.079 +which looks like it would be the start + +00:30:52.080 --> 00:30:56.009 +of a long-term development work (my favorite), + +00:30:56.010 --> 00:30:57.879 +then after copyright is cleared, + +00:30:57.880 --> 00:31:00.799 +that person will be offered to be added + +00:31:00.800 --> 00:31:05.019 +to the members with Git repo access on Savannah. + +00:31:05.020 --> 00:31:08.199 +From there, we usually use a dedicated branch + +00:31:08.200 --> 00:31:09.639 +to do all the playing around + +00:31:09.640 --> 00:31:13.629 +before merging it with the main Git repo. + +00:31:13.630 --> 00:31:16.879 +If you have ever sent a patch, feature request, + +00:31:16.880 --> 00:31:24.079 +or bug report into Emms (small or large), we thank you. + +NOTE Let It Go: The release process + +00:31:24.080 --> 00:31:27.789 +Let It Go, The Release Process: + +00:31:27.790 --> 00:31:31.609 +The maintainer is responsible for the release process. + +00:31:31.610 --> 00:31:35.129 +I found that a consistent schedule works well, + +00:31:35.130 --> 00:31:39.379 +which is not to say that we have to release on schedule, + +00:31:39.380 --> 00:31:42.759 +but that aiming for a consistent release schedule + +00:31:42.760 --> 00:31:46.049 +provides structure and a goal. + +00:31:46.050 --> 00:31:50.159 +The main Git branch in the repository is stable + +00:31:50.160 --> 00:31:53.239 +and more often than not of release quality. + +00:31:53.240 --> 00:31:56.649 +Releases are done about every three months. + +00:31:56.650 --> 00:31:58.999 +And with such a stable main branch, + +00:31:59.000 --> 00:32:02.319 +the process of releasing often involves little more + +00:32:02.320 --> 00:32:05.059 +than writing a NEWS entry. + +00:32:05.060 --> 00:32:08.439 +As a consequence, new and wonderful features + +00:32:08.440 --> 00:32:11.439 +which aren't quite ready for prime time + +00:32:11.440 --> 00:32:13.499 +when a release comes around, + +00:32:13.500 --> 00:32:18.199 +will remain safely in their branch on the Git repo + +00:32:18.200 --> 00:32:23.399 +until after the ELPA release. + +NOTE It Is Not In Our Stars, But In Ourselves: Future directions + +00:32:23.400 --> 00:32:29.629 +It Is Not In Our Stars, But In Ourselves; Future Directions: + +00:32:29.630 --> 00:32:34.899 +One aspect of Emms that needs to improve is ease of setup. + +00:32:34.900 --> 00:32:37.719 +Now that might surprise you, since at the time of writing, + +00:32:37.720 --> 00:32:40.069 +it's already pretty easy. + +00:32:40.070 --> 00:32:43.879 +But my ideal is that the user would need to do + +00:32:43.880 --> 00:32:46.839 +nothing at all after installation. + +00:32:46.840 --> 00:32:49.359 +And with that, as a goal in mind, + +00:32:49.360 --> 00:32:52.749 +there is more work to be done. + +00:32:52.750 --> 00:32:55.499 +We are working on a player discovery feature. + +00:32:55.500 --> 00:32:57.039 +The idea is simple. + +00:32:57.040 --> 00:33:00.079 +The code looks for binaries of popular media players + +00:33:00.080 --> 00:33:01.639 +on the user's machine, + +00:33:01.640 --> 00:33:04.519 +and for each one found, it asks the user + +00:33:04.520 --> 00:33:07.519 +if they want the associated Emms player backend + +00:33:07.520 --> 00:33:09.809 +to be configured. + +00:33:09.810 --> 00:33:12.589 +In effect, this code is already working, + +00:33:12.590 --> 00:33:16.289 +but currently an undocumented, unofficial feature. + +00:33:16.290 --> 00:33:17.719 +You can try it for yourself with + +00:33:17.720 --> 00:33:21.079 +`emms-setup-discover-players`. + +00:33:21.080 --> 00:33:22.969 +So what's the holdup? + +00:33:22.970 --> 00:33:26.039 +`emms-setup-discover-players` currently configures + +00:33:26.040 --> 00:33:27.839 +the `emms-player-list` variable, + +00:33:27.840 --> 00:33:29.899 +but doesn't write it to disk. + +00:33:29.900 --> 00:33:31.679 +And that means that the configuration + +00:33:31.680 --> 00:33:35.039 +isn't preserved between Emacs sessions. + +00:33:35.040 --> 00:33:36.899 +The question then becomes, + +00:33:36.900 --> 00:33:40.309 +what is the best way to preserve this setting? + +00:33:40.310 --> 00:33:42.599 +I personally don't like anything + +00:33:42.600 --> 00:33:46.199 +to edit my .emacs except me, + +00:33:46.200 --> 00:33:49.279 +and I wouldn't do that to anyone else. + +00:33:49.280 --> 00:33:55.959 +Now we already write state to the .emacs.d/emms/ directory, + +00:33:55.960 --> 00:33:58.359 +but that would require care not to + +00:33:58.360 --> 00:34:01.909 +clobber a user's existing setup. + +00:34:01.910 --> 00:34:04.719 +Having the user set up their system in one place, + +00:34:04.720 --> 00:34:08.839 +such as a .emacs or a .emmsrc, + +00:34:08.840 --> 00:34:11.419 +while saving state to a different place + +00:34:11.420 --> 00:34:14.209 +is asking for confusion. + +00:34:14.210 --> 00:34:16.719 +This is a good example which I bring up + +00:34:16.720 --> 00:34:18.399 +of where a maintainer needs to + +00:34:18.400 --> 00:34:21.308 +solicit opinions from developers, + +00:34:21.309 --> 00:34:23.899 +both the Emacs developers, + +00:34:23.900 --> 00:34:28.169 +asking them where packages should save state, + +00:34:28.170 --> 00:34:33.169 +and the Emms developers, and also users. + +00:34:33.170 --> 00:34:35.439 +Then, the maintainer needs to + +00:34:35.440 --> 00:34:38.019 +carefully choose a path forward. + +00:34:38.020 --> 00:34:41.559 +It is typical of the kind of issue you have to have in mind + +00:34:41.560 --> 00:34:44.848 +when you're maintaining a package. + +NOTE Development policies: Interface language + +00:34:44.849 --> 00:34:49.159 +Development Policies: Interface Language. + +00:34:49.160 --> 00:34:52.359 +A maintainer of an interactive program such as Emms + +00:34:52.360 --> 00:34:55.359 +needs to think about user interaction. + +00:34:55.360 --> 00:34:58.399 +Emms doesn't use key bindings which are familiar + +00:34:58.400 --> 00:35:02.719 +to people who are used to GUI media players, + +00:35:02.720 --> 00:35:06.559 +and that can, and has, caused friction. + +00:35:06.560 --> 00:35:09.959 +Some new users are confused when they press the spacebar + +00:35:09.960 --> 00:35:12.529 +on an entry in the Emms browser, + +00:35:12.530 --> 00:35:15.459 +only to find that nothing starts playing. + +00:35:15.460 --> 00:35:18.679 +Indeed, all that does is to expand the browser tree + +00:35:18.680 --> 00:35:20.469 +at that point. + +00:35:20.470 --> 00:35:22.999 +Then they might press RET on the same entry, + +00:35:23.000 --> 00:35:28.259 +and be further frustrated at the continuing silence. + +00:35:28.260 --> 00:35:33.399 +Since what return does is just to add that entry at point + +00:35:33.400 --> 00:35:36.169 +to the current playlist. + +00:35:36.170 --> 00:35:37.759 +The discussion then arises + +00:35:37.760 --> 00:35:41.819 +about how Emms should handle that situation. + +00:35:41.820 --> 00:35:45.559 +On one hand, we want to make it as easy as possible + +00:35:45.560 --> 00:35:48.819 +for new users to learn Emms, + +00:35:48.820 --> 00:35:52.759 +and adopt a do-what-I-mean interface approach. + +00:35:52.760 --> 00:35:56.749 +On the other hand, this is an Emacs project. + +00:35:56.750 --> 00:35:59.439 +It isn't a stand-alone GUI media player, + +00:35:59.440 --> 00:36:01.399 +and should integrate into Emacs, + +00:36:01.400 --> 00:36:05.979 +and serve Emacs users first and foremost. + +NOTE Development policies: Freedom + +00:36:05.980 --> 00:36:10.289 +Development policies: Freedom. + +00:36:10.290 --> 00:36:14.999 +Another maintainer job is to think of Emms' posture + +00:36:15.000 --> 00:36:17.379 +in regards to software freedom. + +00:36:17.380 --> 00:36:19.729 +Here are a few examples. + +00:36:19.730 --> 00:36:23.759 +Back with MP3 was still a patent encumbered format, + +00:36:23.760 --> 00:36:26.080 +we pushed hard for Vorbis everywhere + +00:36:26.081 --> 00:36:29.639 +along with the PlayOgg campaign. + +00:36:29.640 --> 00:36:32.699 +A then popular music streaming service, + +00:36:32.700 --> 00:36:34.929 +which will remain unnamed, + +00:36:34.930 --> 00:36:38.619 +changed their stance towards third-party applications, + +00:36:38.620 --> 00:36:43.129 +and required individual API keys which could not be shared. + +00:36:43.130 --> 00:36:45.399 +We stood firm, said "no", + +00:36:45.400 --> 00:36:48.669 +and removed support for that service. + +00:36:48.670 --> 00:36:51.359 +A recent suggestion to add support for YouTube + +00:36:51.360 --> 00:36:53.889 +was also nixed, + +00:36:53.890 --> 00:36:55.679 +because the particular backend + +00:36:55.680 --> 00:36:58.959 +was found to download and run proprietary javascript + +00:36:58.960 --> 00:37:01.849 +on the user's machine. + +00:37:01.850 --> 00:37:05.399 +Saying no to potentially useful or wanted features + +00:37:05.400 --> 00:37:07.919 +because it involves non-free software + +00:37:07.920 --> 00:37:13.489 +is often an unpopular decision and can alienate people. + +00:37:13.490 --> 00:37:15.559 +A maintainer needs to think carefully + +00:37:15.560 --> 00:37:17.399 +about each of these decisions, + +00:37:17.400 --> 00:37:21.919 +as they are rarely straightforward and one-sided. + +00:37:21.920 --> 00:37:25.839 +And as you see above, they also change over time + +00:37:25.840 --> 00:37:30.299 +and need to be re-evaluated. + +00:37:30.300 --> 00:37:32.999 +One of the most useful things a maintainer can do + +00:37:33.000 --> 00:37:35.519 +is to coordinate the development effort + +00:37:35.520 --> 00:37:39.229 +and help new people join the project. + +00:37:39.230 --> 00:37:41.839 +In light of that, if you want to work on a project + +00:37:41.840 --> 00:37:44.059 +which has a bit of everything, + +00:37:44.060 --> 00:37:47.809 +you could do worse than hacking on Emms. + +00:37:47.810 --> 00:37:49.719 +There is inter-process communication, + +00:37:49.720 --> 00:37:52.479 +displaying graphics, parsing binary files, + +00:37:52.480 --> 00:37:56.529 +caching, asynchronous processes, user interface design. + +00:37:56.530 --> 00:37:59.599 +We also are a project that insists on + +00:37:59.600 --> 00:38:02.959 +keeping a well-written and up-to-date manual. + +00:38:02.960 --> 00:38:06.759 +If you can write English or hack Emacs Lisp at all, + +00:38:06.760 --> 00:38:09.939 +chances are that there is something you can do for Emms. + +00:38:09.940 --> 00:38:12.369 +Just saying. + +NOTE Acknowledgements + +00:38:12.370 --> 00:38:14.189 +Acknowledgements: + +00:38:14.190 --> 00:38:18.079 +I'd like to express my deep gratitude for all of the people + +00:38:18.080 --> 00:38:19.559 +who have hacked on Emms + +00:38:19.560 --> 00:38:23.169 +during my time as a maintainer and before it. + +00:38:23.170 --> 00:38:25.759 +It is often the case that I'm just the person + +00:38:25.760 --> 00:38:28.559 +holding the rudder and steering the ship, + +00:38:28.560 --> 00:38:30.039 +with all of these developers + +00:38:30.040 --> 00:38:33.179 +rowing furiously to provide the power + +00:38:33.180 --> 00:38:36.369 +which actually moves the ship forward. + +00:38:36.370 --> 00:38:38.040 +Thank you to all. diff --git a/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt new file mode 100644 index 00000000..01b7ca18 --- /dev/null +++ b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt @@ -0,0 +1,20 @@ +WEBVTT + + +00:00:04.880 --> 00:00:35.989 +Introduction + +00:00:35.989 --> 00:03:35.809 +The wonders of C-x C-e + +00:03:35.809 --> 00:04:51.143 +An overview of REPL Driven Development + +00:04:51.143 --> 00:07:28.029 +REPL Driven Development with Java + +00:07:28.029 --> 00:07:59.669 +Bring your own Read Protocol + +00:07:59.669 --> 00:09:37.029 +Use Case: RDD & Job Interviews diff --git a/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt new file mode 100644 index 00000000..a0242577 --- /dev/null +++ b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt @@ -0,0 +1,607 @@ +WEBVTT captioned by bhavin192 + +NOTE Introduction + +00:00:04.880 --> 00:00:10.000 +Hello, and welcome to EmacsConf 2023! + +00:00:10.001 --> 00:00:12.109 +My name is Musa Al-hassy, + +00:00:12.109 --> 00:00:15.549 +and I will be talking about "REPL-driven development." + +00:00:15.549 --> 00:00:18.269 +I like programming languages so much. + +00:00:18.269 --> 00:00:20.269 +I want to use them all over the place. + +00:00:20.269 --> 00:00:23.069 +I got a PhD in the topic. + +00:00:23.069 --> 00:00:25.349 +So let's just dive in. + +00:00:25.349 --> 00:00:27.949 +This is a lightning talk, + +00:00:27.949 --> 00:00:31.309 +so the details will be available in the repository. + +00:00:31.309 --> 00:00:33.469 +Links to longer videos and GIFs + +00:00:33.469 --> 00:00:35.989 +for those who are interested. + +NOTE The wonders of C-x C-e + +00:00:35.989 --> 00:00:37.309 +So the wonderful thing about Emacs + +00:00:37.309 --> 00:00:40.589 +is that you can execute Lisp anywhere. + +00:00:40.589 --> 00:00:42.829 +For example, I can go to this piece of Lisp, + +00:00:42.829 --> 00:00:45.576 +press Ctrl-x Ctrl-e (`C-x C-e`) + +00:00:45.576 --> 00:00:47.549 +and get a little pop-up. + +00:00:47.549 --> 00:00:49.669 +Alright, so here I pressed `C-x C-e` + +00:00:49.669 --> 00:00:51.389 +and this is what it ran. + +00:00:51.389 --> 00:00:52.776 +And what this package gives you + +00:00:52.776 --> 00:00:54.509 +is the same ability + +00:00:54.509 --> 00:00:56.909 +for any language of your choosing. + +00:00:56.909 --> 00:00:59.229 +So for example, here is some Java, + +00:00:59.229 --> 00:01:02.469 +and I bound it to Ctrl-x, Ctrl-j (`C-x C-j`). + +00:01:02.469 --> 00:01:07.149 +So I say `C-x C-j`, and this runs some code, + +00:01:07.149 --> 00:01:13.709 +and over here I get a little pop-up. + +00:01:13.709 --> 00:01:15.069 +The wonderful thing about + +00:01:15.069 --> 00:01:16.829 +being able to run code from anywhere + +00:01:16.829 --> 00:01:19.029 +is that you can keep it in normal text files + +00:01:19.029 --> 00:01:20.629 +or any kind of file you like. + +00:01:20.629 --> 00:01:23.669 +For example, you can have hyperlinks, + +00:01:23.669 --> 00:01:25.109 +as it were…, like this one. + +00:01:25.109 --> 00:01:28.549 +`C-x C-e`, and now we can see this down here. + +00:01:28.549 --> 00:01:30.789 +Learn about it. + +00:01:30.789 --> 00:01:34.189 +But being able to run other languages besides Emacs + +00:01:34.189 --> 00:01:36.149 +lets us do some interesting things. + +00:01:36.149 --> 00:01:39.589 +For example, in the middle of a JavaScript program, + +00:01:39.589 --> 00:01:43.429 +you might write a line like this. `C-x C-n`. + +00:01:43.429 --> 00:01:45.229 +And that says down here + +00:01:45.229 --> 00:01:47.269 +`javascript-eval` in the mode line, + +00:01:47.269 --> 00:01:49.643 +and so this just checks that some endpoint + +00:01:49.643 --> 00:01:51.189 +is working as intended. + +00:01:51.189 --> 00:01:52.749 +So you don't need to use an external tool + +00:01:52.749 --> 00:01:53.589 +to check endpoints. + +00:01:53.589 --> 00:01:57.469 +You can just use Emacs in your favorite language. + +00:01:57.469 --> 00:01:59.629 +You know, you can keep your spirit up. + +00:01:59.629 --> 00:02:03.709 +So, `C-x C-a` runs `applescript-eval`. + +00:02:03.709 --> 00:02:06.376 +[Computer]: You can do it, buddy. + +00:02:06.376 --> 00:02:13.269 +[Musa]: Maybe you heard that in the background? + +00:02:13.269 --> 00:02:15.389 +The cool thing is, your code immediately takes form. + +00:02:15.389 --> 00:02:18.469 +Right away, you see it doing things, you know, + +00:02:18.469 --> 00:02:20.349 +altering your environment. + +00:02:20.349 --> 00:02:24.429 +For example, this is JavaScript, + +00:02:24.429 --> 00:02:28.349 +and JavaScript here is gonna change Emacs for us. + +00:02:28.349 --> 00:02:32.109 +So `C-x C-n`. And you can see down here + +00:02:32.109 --> 00:02:34.669 +`javascript-eval` was invoked. + +00:02:34.669 --> 00:02:38.789 +It returned true, and this line of JavaScript + +00:02:38.789 --> 00:02:41.709 +altered our Emacs. So that's really nice. + +00:02:41.709 --> 00:02:43.749 +So you don't need to use just Emacs Lisp if you like. + +00:02:43.749 --> 00:02:46.149 +You can use other systems. + +00:02:46.149 --> 00:02:50.069 +As you saw, the output is shown in overlays. + +00:02:50.069 --> 00:02:52.869 +So here's, for example, `C-x C-p` to run + +00:02:52.869 --> 00:02:54.109 +some Python code. + +00:02:54.109 --> 00:02:55.476 +Notice it blinked in red + +00:02:55.476 --> 00:02:56.869 +because I thought red was nice. + +00:02:56.869 --> 00:02:58.389 +You can configure as you like. + +00:02:58.389 --> 00:02:59.409 +And if you hover over it, + +00:02:59.409 --> 00:03:01.869 +you can see the solution there, + +00:03:01.869 --> 00:03:04.669 +and you can see it in a variety of familiar ways + +00:03:04.669 --> 00:03:08.709 +if you use `C-x C-e` regularly. + +00:03:08.709 --> 00:03:09.989 +You can insert the results. + +00:03:09.989 --> 00:03:14.269 +You can find documentation about them. + +00:03:14.269 --> 00:03:15.989 +The idea here is that + +00:03:15.989 --> 00:03:20.389 +you have this familiar Lisp workflow + +00:03:20.389 --> 00:03:24.989 +with `C-x C-e`, and this package ports it over + +00:03:24.989 --> 00:03:27.069 +to your favorite language out. + +00:03:27.069 --> 00:03:28.343 +So you can eval things, + +00:03:28.343 --> 00:03:30.789 +you can insert them, and do as you like. + +00:03:30.789 --> 00:03:35.809 +I think that's really neat. + +NOTE An overview of REPL Driven Development + +00:03:35.809 --> 00:03:37.209 +This package allows you to do + +00:03:37.209 --> 00:03:39.109 +REPL driven development. + +00:03:39.109 --> 00:03:42.309 +In that, you can use it to grow your program. + +00:03:42.309 --> 00:03:43.709 +You don't need to restart it. + +00:03:43.709 --> 00:03:45.549 +You can see changes live. + +00:03:45.549 --> 00:03:50.149 +So here's, for example, this is in a Java runtime. + +00:03:50.149 --> 00:03:52.869 +You can see some balls bouncing around. + +00:03:52.869 --> 00:03:54.509 +I don't really know which one is the second one, + +00:03:54.509 --> 00:03:57.229 +but let's increase its size. `C-x C-j`. + +00:03:57.229 --> 00:04:00.189 +And this one increased in size, + +00:04:00.189 --> 00:04:02.189 +and you can see down here I pressed `C-x C-j`. + +00:04:02.189 --> 00:04:05.549 +Let's change the color to blue, + +00:04:05.549 --> 00:04:09.309 +`C-x C-j`, the color is blue. + +00:04:09.309 --> 00:04:12.376 +So all these changes are happening live. + +00:04:12.376 --> 00:04:14.429 +Three balls isn't really a ball pit. + +00:04:14.429 --> 00:04:18.989 +Let's go to 50 balls. There you go. + +00:04:18.989 --> 00:04:21.469 +So it's nice that you can do this + +00:04:21.469 --> 00:04:23.209 +without leaving your environment, + +00:04:23.209 --> 00:04:26.189 +without building, you can rapidly modify and see. + +00:04:26.189 --> 00:04:29.776 +I think that's nice. + +00:04:29.776 --> 00:04:32.829 +Unfortunately, I'm at the halfway point, + +00:04:32.829 --> 00:04:35.309 +so I won't be able to work through + +00:04:35.309 --> 00:04:37.109 +some of these nice problems, + +00:04:37.109 --> 00:04:38.676 +but you can see the videos + +00:04:38.676 --> 00:04:41.509 +or GIFs on the associated repo. + +00:04:41.509 --> 00:04:42.709 +Likewise for this one. + +00:04:42.709 --> 00:04:43.909 +This one would have been a lot of fun, + +00:04:43.909 --> 00:04:46.509 +but unfortunately, we're running short on time. + +00:04:46.509 --> 00:04:51.143 +Apologies. + +NOTE REPL Driven Development with Java + +00:04:51.143 --> 00:04:56.209 +The neat thing here is: this package tries to + +00:04:56.209 --> 00:05:00.269 +bring the feeling of Lisp to other languages. + +00:05:00.269 --> 00:05:03.509 +So the idea of a REPL, or a Read Eval Print Loop + +00:05:03.509 --> 00:05:06.949 +is R and P are data interchange protocols. + +00:05:06.949 --> 00:05:09.869 +Unfortunately, not every language has those, + +00:05:09.869 --> 00:05:12.709 +but this package kind of encourages us to + +00:05:12.709 --> 00:05:14.643 +implement them if we don't have them. + +00:05:14.643 --> 00:05:16.909 +Let me show you an example. + +00:05:16.909 --> 00:05:20.589 +What do I mean here? + +00:05:20.589 --> 00:05:22.709 +This is a Java file. + +00:05:22.709 --> 00:05:25.189 +I've loaded this definition in. + +00:05:25.189 --> 00:05:28.543 +We can press `C-x C-j`, + +00:05:28.543 --> 00:05:30.909 +and you see it's a list of person. + +00:05:30.909 --> 00:05:33.829 +I didn't give this a name, so its name is $59. + +00:05:33.829 --> 00:05:40.829 +If I hover over it, we can see the definition again. + +00:05:40.829 --> 00:05:44.429 +So it's a person called Hamid, age 5, + +00:05:44.429 --> 00:05:46.229 +another person called Jaafar, age 6. + +00:05:46.229 --> 00:05:52.229 +This pretty printing is nice for me as a human, + +00:05:52.229 --> 00:05:56.349 +but I can't execute this. This isn't valid Java. + +00:05:56.349 --> 00:06:00.609 +So I could do `C-u C-x C-j`. + +00:06:00.609 --> 00:06:05.109 +If I have the help of a read protocol inserted. + +00:06:05.109 --> 00:06:09.469 +Sorry, `C-x C-j`. There it is. + +00:06:09.469 --> 00:06:12.549 +So look, it gives me a `new Person` + +00:06:12.549 --> 00:06:14.349 +with the construction everything. + +00:06:14.349 --> 00:06:16.549 +Now I can work with. + +00:06:16.549 --> 00:06:17.949 +Java can work with this. + +00:06:17.949 --> 00:06:21.709 +So this can be quite useful for regression testing + +00:06:21.709 --> 00:06:25.749 +or just to find out what your method spits out. + +00:06:25.749 --> 00:06:29.869 +We can do the same thing. Here's a bigger example. + +00:06:29.869 --> 00:06:32.389 +Trying to see it in the overlay is a bit cramped. + +00:06:32.389 --> 00:06:34.589 +We can say `C-u C-x C-j`. + +00:06:34.589 --> 00:06:38.669 +All right, and now we have executable code. + +00:06:38.669 --> 00:06:40.876 +Okay, this is neat. + +00:06:40.876 --> 00:06:42.389 +If you want to do something with it. + +00:06:42.389 --> 00:06:45.789 +I'm not really interested. I have four new persons. + +00:06:45.789 --> 00:06:49.309 +If I really want to look at this, + +00:06:49.309 --> 00:06:55.649 +I can say `M-x java-eval-navigate-output`, + +00:06:55.649 --> 00:07:00.829 +and now I see my output as this hierarchical tree. + +00:07:00.829 --> 00:07:03.589 +I go down, I can see what's inside these, + +00:07:03.589 --> 00:07:06.709 +what's the type of this thing, what's in there. + +00:07:06.709 --> 00:07:09.349 +All right, so that's nice. + +00:07:09.349 --> 00:07:14.189 +The idea is that we're not limited to + +00:07:14.189 --> 00:07:15.629 +just textual output. + +00:07:15.629 --> 00:07:19.589 +We can render output, + +00:07:19.589 --> 00:07:22.229 +thanks to the power of Emacs, in any way we want. + +00:07:22.229 --> 00:07:26.749 +In a browser, in a LaTeX file, in an Org mode (file), + +00:07:26.749 --> 00:07:28.029 +however we really desire. + +NOTE Bring your own Read Protocol + +00:07:28.029 --> 00:07:32.989 +And if our language doesn't have an easy protocol, + +00:07:32.989 --> 00:07:36.143 +so what I did for Java in particular was: + +00:07:36.143 --> 00:07:38.643 +you take a blob, and you use some + +00:07:38.643 --> 00:07:43.149 +parsing expression grammars, or if you really want + +00:07:43.149 --> 00:07:44.949 +regular expression pattern matching, + +00:07:44.949 --> 00:07:46.829 +and you get some property list out, + +00:07:46.829 --> 00:07:51.349 +and then you construct an executable expression + +00:07:51.349 --> 00:07:53.149 +out of that. Like this `new Person`. + +00:07:53.149 --> 00:07:56.749 +It's nice that you can do these kind of things + +00:07:56.749 --> 00:07:59.669 +and that this software encourages you to do them. + +NOTE Use Case: RDD & Job Interviews + +00:07:59.669 --> 00:08:07.549 +So one use case I actually use + +00:08:07.549 --> 00:08:10.909 +besides learning things is… + +00:08:10.909 --> 00:08:14.776 +oops oops oopsies oopsies showing you metadata + +00:08:14.776 --> 00:08:15.509 +you shouldn't be looking at. + +00:08:15.509 --> 00:08:19.409 +Don't look at my metadata. Sorry about that. + +00:08:19.409 --> 00:08:23.209 +One place I actually use this besides learning + +00:08:23.209 --> 00:08:25.029 +and trying new libraries and APIs + +00:08:25.029 --> 00:08:26.776 +and stuff like that is, + +00:08:26.776 --> 00:08:29.509 +for example, when I interviewed for jobs + +00:08:29.509 --> 00:08:33.229 +last year (I was changing jobs), + +00:08:33.229 --> 00:08:34.676 +I would share my screen, + +00:08:34.676 --> 00:08:37.869 +and if the interviewer gave me + +00:08:37.869 --> 00:08:39.949 +some inputs and outputs to play with, + +00:08:39.949 --> 00:08:41.576 +I could do essentially + +00:08:41.576 --> 00:08:42.976 +some sort of test driven development + +00:08:42.976 --> 00:08:45.149 +and constantly evaluate things + +00:08:45.149 --> 00:08:46.589 +right in front of the interviewer. + +00:08:46.589 --> 00:08:49.949 +For some design questions + +00:08:49.949 --> 00:08:53.909 +rather than sketching out my ideas in a Google Doc, + +00:08:53.909 --> 00:08:55.509 +I would share my screen and be like, + +00:08:55.509 --> 00:08:57.989 +"Hey, here's actual executable code, + +00:08:57.989 --> 00:08:59.229 +we can stub some things out + +00:08:59.229 --> 00:09:00.576 +and have some types," + +00:09:00.576 --> 00:09:03.476 +and the idea is we can still check things + +00:09:03.476 --> 00:09:05.643 +and run them right there and then, + +00:09:05.643 --> 00:09:08.143 +which I thought was quite nice, and it helps to + +00:09:08.143 --> 00:09:10.309 +clarify your thought process, I guess. + +00:09:10.309 --> 00:09:15.149 +Anyhow, so that's my time, + +00:09:15.149 --> 00:09:19.829 +I hope you've enjoyed this little package, + +00:09:19.829 --> 00:09:22.869 +and again, sorry for the rush, + +00:09:22.869 --> 00:09:24.149 +it's a lightning talk. + +00:09:24.149 --> 00:09:29.069 +Feel free to find everything on the associated repo. + +00:09:29.069 --> 00:09:34.389 +And have a wonderful December Saturday. + +00:09:34.389 --> 00:09:37.029 +Take care! Bye bye, everyone. diff --git a/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt b/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt new file mode 100644 index 00000000..5d17e1de --- /dev/null +++ b/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt @@ -0,0 +1,755 @@ +WEBVTT + + +00:00:01.880 --> 00:00:02.380 +That's how I came into this. + +00:00:10.120 --> 00:00:10.480 +Finally, the next big thing was starting + +00:00:16.100 --> 00:00:16.600 +2005, I went fully Linux and then for Mac OS, + +00:00:19.540 --> 00:00:20.040 +and I switched to vanilla self-compiled + +00:00:25.279 --> 00:00:25.779 +versions of Emacs. So what do I want to show? + +00:00:30.540 --> 00:00:30.920 +Couple of time ago in the development list + +00:00:34.540 --> 00:00:34.760 +there was a short exchange about the nil and + +00:00:38.400 --> 00:00:38.900 +the flood button, flood button button styles, + +00:00:42.480 --> 00:00:42.700 +saying that it was equivalent and they are + +00:00:45.480 --> 00:00:45.980 +not. So instead of starting a Flame Wars, + +00:00:49.220 --> 00:00:49.720 +I thought it was better to go and publicize + +00:00:54.520 --> 00:00:55.020 +the goodies you get with Flood Button. + +00:00:57.260 --> 00:00:57.440 +And this is what I'm going to be showing you + +00:01:00.140 --> 00:01:00.640 +practically. Why Flood Button? + +00:01:06.020 --> 00:01:06.500 +2005, more or less, I came across DOOM Emacs, + +00:01:07.660 --> 00:01:08.160 +which was nice. And I, + +00:01:12.180 --> 00:01:12.600 +especially I liked the DOOM mode line, + +00:01:13.740 --> 00:01:14.040 +which was, I think it is, + +00:01:15.560 --> 00:01:16.060 +it is, and it was cool at that time. + +00:01:20.280 --> 00:01:20.500 +I was using other themes and it was not that + +00:01:23.760 --> 00:01:24.020 +easy to adapt for these other themes and even + +00:01:26.080 --> 00:01:26.280 +less when you are in an environment with + +00:01:30.060 --> 00:01:30.560 +dynamic themes like mine because I tend to + +00:01:36.500 --> 00:01:36.680 +adapt the theme to the light conditions in my + +00:01:40.520 --> 00:01:40.760 +working place. So what I did at the end was + +00:01:44.540 --> 00:01:44.820 +coming up with a style for faces called flood + +00:01:49.020 --> 00:01:49.140 +button for boxes, called flood button as a + +00:01:52.640 --> 00:01:53.140 +simple way to get modern looking buttons and + +00:01:59.160 --> 00:01:59.380 +bars. So flood button is a face style for + +00:02:02.380 --> 00:02:02.740 +boxes within buttons that automatically sets + +00:02:05.240 --> 00:02:05.440 +the border color to the background of the + +00:02:08.440 --> 00:02:08.880 +face, as opposed to nil, + +00:02:10.440 --> 00:02:10.940 +which uses the foreground. + +00:02:14.380 --> 00:02:14.880 +And this produces a very doom mode line-ish + +00:02:18.400 --> 00:02:18.640 +look and feel. And if you want to know where + +00:02:21.580 --> 00:02:21.780 +I use it, basically for the mode line and I'm + +00:02:24.720 --> 00:02:25.200 +using tab line for a long time now. + +00:02:28.480 --> 00:02:28.680 +So for the mode line and for tab line to + +00:02:35.080 --> 00:02:35.280 +organize my windows. And since an image is + +00:02:37.160 --> 00:02:37.660 +worth more than a thousand words, + +00:02:40.860 --> 00:02:41.160 +I'm just going to stop this and start sharing + +00:02:44.120 --> 00:02:44.360 +a small Emacs environment I have ready for + +00:02:47.020 --> 00:02:47.220 +this talk where I'm going to show you a flat + +00:02:50.220 --> 00:02:50.720 +button in real life. So if you hold with me, + +00:02:56.100 --> 00:02:56.600 +I'm going to share a window. + +00:02:58.840 --> 00:02:59.340 +It's going to be this 1. + +00:03:01.386 --> 00:03:01.430 +Share and share. Here we are. + +00:03:01.780 --> 00:03:02.280 +And share. Here we are. + +00:03:08.040 --> 00:03:08.540 +So this is an Emacs which is recent, + +00:03:13.460 --> 00:03:13.740 +reasonably recent. Nothing especially it was + +00:03:14.900 --> 00:03:15.400 +compiled, it's Emacs 30. + +00:03:18.480 --> 00:03:18.780 +And I think what I have here is something + +00:03:19.900 --> 00:03:20.400 +that I compiled last weekend. + +00:03:24.940 --> 00:03:25.140 +I was tempted to use something compiled this + +00:03:28.080 --> 00:03:28.580 +morning, but I saw a patch by Ellie regarding + +00:03:30.640 --> 00:03:31.140 +something in the faces and I didn't want to + +00:03:34.160 --> 00:03:34.440 +live a too risky life here, + +00:03:36.220 --> 00:03:36.720 +so I'm going to use this. + +00:03:40.740 --> 00:03:41.240 +I'm not starting the ZMAC from the normal + +00:03:44.160 --> 00:03:44.660 +Emacs directory. I have my own, + +00:03:49.440 --> 00:03:49.840 +I have a special customization directory for + +00:03:51.560 --> 00:03:52.060 +Emacs, and this is this 1. + +00:03:57.760 --> 00:03:58.100 +And here what I have is basically an early + +00:04:01.880 --> 00:04:02.220 +init and an init. So the early init, + +00:04:03.680 --> 00:04:03.900 +which is quite stupid as you see, + +00:04:07.800 --> 00:04:08.300 +the only thing that it does is getting rid of + +00:04:10.640 --> 00:04:10.800 +most of the things that I'm not going to be + +00:04:12.740 --> 00:04:13.240 +using here. So I have no toolbar, + +00:04:15.700 --> 00:04:16.200 +no scroll bar, no tool tips. + +00:04:20.560 --> 00:04:20.760 +I don't like global highlighting my line art, + +00:04:21.720 --> 00:04:22.040 +so I'm not using that. + +00:04:22.800 --> 00:04:23.300 +I'm not using dialogues. + +00:04:25.560 --> 00:04:26.060 +And to start up easier, + +00:04:29.440 --> 00:04:29.940 +I don't inhibit, I don't use any startups + +00:04:34.540 --> 00:04:35.020 +screen. So just to make sure that everything + +00:04:41.360 --> 00:04:41.860 +is correct, that everything is as I want, + +00:04:44.840 --> 00:04:45.340 +just to show you my Emacs. + +00:04:49.240 --> 00:04:49.740 +As you see the Emacs 30, + +00:04:53.900 --> 00:04:54.100 +which was built on the 26th of November which + +00:04:55.520 --> 00:04:56.020 +was not very long ago. + +00:04:57.880 --> 00:04:58.380 +And now here comes the real magic. + +00:05:00.540 --> 00:05:01.040 +My init and my init file. + +00:05:04.020 --> 00:05:04.520 +Maybe I go to my init file here. + +00:05:11.880 --> 00:05:12.040 +What I have is just a variable saying that I + +00:05:15.880 --> 00:05:16.380 +want an extra 8 pixels for my mode line. + +00:05:18.240 --> 00:05:18.740 +And I have 2 functions. + +00:05:23.800 --> 00:05:24.300 +1 is modifying the mode line, + +00:05:25.920 --> 00:05:26.420 +both the active and the inactive, + +00:05:32.180 --> 00:05:32.680 +using the nil style with this line width of 8 + +00:05:36.380 --> 00:05:36.600 +pixels and to compare with it what I have + +00:05:39.140 --> 00:05:39.640 +here is another function which will customize + +00:05:42.400 --> 00:05:42.780 +the face for mode line and instead of using + +00:05:44.960 --> 00:05:45.460 +nil I'm using here flat button. + +00:05:49.440 --> 00:05:49.940 +So this is my all the magic that I need. + +00:05:53.240 --> 00:05:53.500 +I'm going to copy that and I'm going to go to + +00:05:57.340 --> 00:05:57.520 +the scratch buffer which is always the best + +00:05:58.780 --> 00:05:59.280 +way of checking these things. + +00:06:05.660 --> 00:06:06.100 +When I normally work with themes, + +00:06:09.320 --> 00:06:09.520 +what I do is if I want to further modify the + +00:06:13.620 --> 00:06:14.120 +themes, I add an advice to load a theme after + +00:06:17.800 --> 00:06:18.040 +the theme is loaded. In this first case, + +00:06:21.280 --> 00:06:21.540 +what I'm going to be doing is adding the nil + +00:06:22.680 --> 00:06:23.180 +sign so that you can see it. + +00:06:30.240 --> 00:06:30.740 +And once this is done, + +00:06:33.000 --> 00:06:33.500 +I'm going to load 1 of the Modo Soprandi + +00:06:42.600 --> 00:06:43.100 +themes, the tinted 1. Here we are. + +00:06:56.400 --> 00:06:56.900 +And as you can see, when I loaded the theme, + +00:07:01.880 --> 00:07:02.160 +what I see here is my mode line with the + +00:07:05.320 --> 00:07:05.580 +x-ray pixels using since I'm using the nil + +00:07:09.520 --> 00:07:09.720 +style it's using the background color and + +00:07:12.620 --> 00:07:13.120 +this gives you this thick black line there + +00:07:17.080 --> 00:07:17.240 +furthermore if you have the inactive line you + +00:07:20.660 --> 00:07:21.040 +see that it is grayed out so it's always + +00:07:22.800 --> 00:07:23.300 +using the foreground color. + +00:07:33.300 --> 00:07:33.480 +So now what I'm going to do is to load the + +00:07:35.200 --> 00:07:35.700 +models we have any which is the dark theme + +00:07:40.080 --> 00:07:40.400 +and this case what you see is the love deal + +00:07:43.220 --> 00:07:43.720 +the lines always using the foreground color + +00:07:49.200 --> 00:07:49.700 +use the Give you an extra 8 pixels of a white + +00:07:53.000 --> 00:07:53.500 +color here, which is not what we really want. + +00:07:58.900 --> 00:07:59.240 +At least not what I wanted to have. + +00:08:01.560 --> 00:08:02.060 +So what I'm going to do now is I'm going to + +00:08:08.940 --> 00:08:09.440 +remove this advice and add the flat style + +00:08:12.800 --> 00:08:13.260 +thing, flat style function, + +00:08:15.480 --> 00:08:15.920 +so that we're going to do the same. + +00:08:18.380 --> 00:08:18.540 +But now when I load the themes I'm going to + +00:08:20.760 --> 00:08:21.040 +have a flat button style for the mode line + +00:08:21.880 --> 00:08:22.380 +and you'll see the difference. + +00:08:29.480 --> 00:08:29.980 +So if I now load Modo Software Andy theme, + +00:08:35.380 --> 00:08:35.640 +tint it, what I get here is as you see I get + +00:08:40.520 --> 00:08:40.760 +a solid mode line which is a bit more which + +00:08:49.240 --> 00:08:49.400 +is wider than the normal mode line And if I + +00:08:53.140 --> 00:08:53.480 +go to the dark theme, I am going to see, + +00:08:55.440 --> 00:08:55.920 +you're going to see that now the theme + +00:08:59.860 --> 00:09:00.360 +changes and I have a mode line which is, + +00:09:02.700 --> 00:09:03.080 +if not the doom mode line, + +00:09:08.260 --> 00:09:08.760 +quite close to the Doom mode line. + +00:09:11.200 --> 00:09:11.700 +Where do I use this? Personally, + +00:09:15.280 --> 00:09:15.580 +I use it for the mode line and for the tab + +00:09:18.960 --> 00:09:19.460 +line, as I've said. And it gives me this + +00:09:27.040 --> 00:09:27.340 +clean themes with thicker mode line and tab + +00:09:33.620 --> 00:09:34.120 +lines which at least in my personal feeling + +00:09:40.160 --> 00:09:40.660 +look quite modern. And this will be my + +00:09:43.820 --> 00:09:44.200 +demonstration. So I'm going to stop sharing + +00:09:46.820 --> 00:09:46.960 +the screen and I'm going to try and see if + +00:09:49.400 --> 00:09:49.900 +there's anything on the on the chat. + +00:09:57.040 --> 00:09:57.360 +And I just wanted to know if there are any + +00:10:01.240 --> 00:10:01.740 +questions. Thank you Pedro. + +00:10:05.000 --> 00:10:05.180 +Yeah We are now into the Q&A portion of the + +00:10:06.420 --> 00:10:06.920 +talk. So if folks have questions, + +00:10:10.080 --> 00:10:10.240 +please post them on IRC or on the pad and + +00:10:11.040 --> 00:10:11.540 +we'll take them up here. + +00:10:25.400 --> 00:10:25.900 +Okay, I see a question here saying, + +00:10:28.520 --> 00:10:28.860 +do you plan to upstream the style into + +00:10:32.580 --> 00:10:32.900 +core-remix? It's part of core-remix since + +00:10:35.800 --> 00:10:36.300 +Emacs 29, so you have it. + +00:10:49.060 --> 00:10:49.540 +How difficult to...I mean, + +00:10:54.320 --> 00:10:54.620 +you already have the flat button style in + +00:10:57.660 --> 00:10:57.940 +Core Remax. And you've seen that the main + +00:11:00.740 --> 00:11:00.980 +thing is, if you want to have a thing like + +00:11:06.660 --> 00:11:06.940 +that, you just have to customize the face. + +00:11:10.920 --> 00:11:11.420 +I don't think it's too difficult to do. + +00:11:13.380 --> 00:11:13.880 +It's adding the style that you want. + +00:11:17.360 --> 00:11:17.860 +So if you want to see it again, + +00:11:20.860 --> 00:11:21.160 +I'm going to go and share the screen once + +00:11:23.980 --> 00:11:24.160 +again and show you the only thing that you + +00:11:31.740 --> 00:11:32.240 +really need to do. And control X 1, + +00:11:34.680 --> 00:11:35.180 +control X buffer to init. + +00:11:41.040 --> 00:11:41.320 +So this is what you would have to do to get + +00:11:48.880 --> 00:11:49.020 +your mode line or mode line inactive with a + +00:11:52.360 --> 00:11:52.660 +flat button style. So what you do is you get + +00:11:56.120 --> 00:11:56.280 +your face like this, the face that you want + +00:11:59.640 --> 00:12:00.060 +to modify. You say that you inherit from the + +00:12:02.920 --> 00:12:03.200 +original face and what you do is that you add + +00:12:06.820 --> 00:12:07.000 +a box with the line width that you want and + +00:12:08.040 --> 00:12:08.540 +the style plug button. + +00:12:10.900 --> 00:12:11.400 +I don't think it's too difficult to do. + +00:12:23.100 --> 00:12:23.600 +How much work was involved in implementing + +00:12:27.360 --> 00:12:27.780 +this style? It is not 1 of the biggest + +00:12:28.940 --> 00:12:29.440 +patches you have in Emacs. + +00:12:32.260 --> 00:12:32.640 +It was my first patch, + +00:12:34.500 --> 00:12:34.960 +so it was like 20 liners. + +00:12:40.280 --> 00:12:40.780 +It's not too much. Yes, + +00:12:44.540 --> 00:12:45.040 +I am going to go and... + +00:12:54.733 --> 00:12:54.800 +Oops. SKB and... There you are. + +00:12:58.660 --> 00:12:58.900 +And there you are. I've checked it for copy + +00:13:05.440 --> 00:13:05.580 +and paste. Of course, then what you have to + +00:13:09.440 --> 00:13:09.760 +do is to add an advice and add this thing + +00:13:16.680 --> 00:13:16.980 +after the add this code after the well after + +00:13:17.760 --> 00:13:18.260 +you've loaded the theme. + +00:13:22.420 --> 00:13:22.920 +It says, ModeLine and ModeLineInactive. + +00:13:27.400 --> 00:13:27.720 +I'm also using it for TabLine and + +00:13:29.820 --> 00:13:30.060 +TabLineInactive and all this kind of things. + +00:13:30.060 --> 00:13:30.560 +Thanks. + +00:14:00.660 --> 00:14:01.160 +Thanks. Any other questions? + +00:14:35.020 --> 00:14:35.520 +Reactions? Thank you. Thank you. + +00:15:04.160 --> 00:15:04.340 +Okay, I think we still have about 6 or 7 more + +00:15:05.840 --> 00:15:06.220 +minutes of live Q&A on stream, + +00:15:07.400 --> 00:15:07.900 +so if folks have any more questions, + +00:15:09.940 --> 00:15:10.440 +please do feel free to post them on the pad. + +00:15:30.060 --> 00:15:30.560 +Silence. Silence. Silence. + +00:16:02.280 --> 00:16:02.780 +Well, do you teach eMAX to any of your + +00:16:04.700 --> 00:16:05.200 +university students? As such, + +00:16:08.080 --> 00:16:08.580 +there's no course that we teach, + +00:16:12.800 --> 00:16:13.300 +but in tutorships and in tutoring sessions, + +00:16:15.460 --> 00:16:15.800 +when we do practical things, + +00:16:21.100 --> 00:16:21.300 +and I do a lot, I tend to use Emacs for all + +00:16:24.480 --> 00:16:24.960 +the tasks so that the students get involved + +00:16:28.220 --> 00:16:28.380 +in it. I also have a small introduction to + +00:16:29.640 --> 00:16:30.110 +Emacs that I share with my students. + +00:16:33.400 --> 00:16:33.900 +So So every year I have 2 or 3 new adepts. + +00:17:43.900 --> 00:17:44.400 +We have a question on IRC. + +00:17:46.920 --> 00:17:47.080 +Someone asking can you please show what the + +00:17:53.160 --> 00:17:53.660 +tab line looks like? Just a second. + +00:17:56.880 --> 00:17:57.380 +This would be like this. + +00:18:03.096 --> 00:18:03.193 +For that I'm going to use my regular Emacs. + +00:18:06.220 --> 00:18:06.560 +Just my my regular emacs so just let me fire + +00:18:09.220 --> 00:18:09.720 +it up. Sure. + +00:18:23.540 --> 00:18:24.040 +And + +00:18:39.760 --> 00:18:40.120 +That's my current situation with the tab + +00:18:42.660 --> 00:18:43.140 +line. I do have a couple of functions. + +00:18:44.680 --> 00:18:45.180 +So this is 1 of the things that I use. + +00:18:51.500 --> 00:18:51.600 +As you see, both the tab line here and the + +00:18:57.040 --> 00:18:57.340 +mode line change. And the other thing is I + +00:19:00.520 --> 00:19:01.020 +can, this is for some situations, + +00:19:03.600 --> 00:19:03.940 +not currently because it's just later, + +00:19:06.420 --> 00:19:06.680 +it's a bit too dark. But this is for light + +00:19:10.260 --> 00:19:10.760 +days. I have like 3 or 4 themes that I can + +00:19:15.020 --> 00:19:15.140 +switch to these are the themes that I + +00:19:18.120 --> 00:19:18.620 +normally use This is how the tab line looks. + +00:19:22.660 --> 00:19:23.160 +This is how the tab line here looks with the + +00:19:28.280 --> 00:19:28.780 +with a flat button style. + +00:19:35.640 --> 00:19:36.140 +Looks great, Thank you for sharing. + +00:19:37.200 --> 00:19:37.700 +You're welcome. + +00:19:50.720 --> 00:19:51.220 +Okay, I think we have 2 or 3 more minutes. + +00:19:53.600 --> 00:19:54.100 +So if folks, if you have any final questions + +00:19:55.480 --> 00:19:55.980 +for Pedro, please post them in. + +00:20:37.360 --> 00:20:37.860 +Okay. Okay. + +00:20:54.260 --> 00:20:54.760 +Okay. + +00:21:34.540 --> 00:21:34.700 +No further questions. Yeah, + +00:21:36.380 --> 00:21:36.880 +it seems we don't have any further questions. + +00:21:39.100 --> 00:21:39.480 +Just another audience member also thanking + +00:21:44.060 --> 00:21:44.200 +you on the chat. So with that, + +00:21:45.320 --> 00:21:45.480 +I'll say Thank you very much, + +00:21:47.080 --> 00:21:47.580 +Pedro, for your great talk and for the Q&A, + +00:21:50.220 --> 00:21:50.320 +for your work and for helping spreading the + +00:21:52.360 --> 00:21:52.860 +joy of Emacs. Okay, thanks. + +00:21:56.140 --> 00:21:56.640 +Thank you. Bye-bye. It was a nice experience + +00:21:59.200 --> 00:21:59.700 +here. Very nice tool. Cheers. + +00:22:01.640 --> 00:22:01.920 +Awesome. Take care. Bye. + +00:22:02.720 --> 00:22:03.220 +Bye. Bye. diff --git a/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt new file mode 100644 index 00000000..71a15554 --- /dev/null +++ b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt @@ -0,0 +1,1049 @@ +WEBVTT + + +00:00:01.620 --> 00:00:02.120 +[Speaker 0]: And then, hi everyone. + +00:00:03.760 --> 00:00:04.150 +Thank you for your nice talk, + +00:00:05.900 --> 00:00:06.400 +I can say it's the Emacs GC. + +00:00:09.280 --> 00:00:09.519 +We have some questions on the pad and maybe + +00:00:11.580 --> 00:00:11.820 +before I would like to ask you something to + +00:00:12.780 --> 00:00:13.280 +the last 1 you have said, + +00:00:15.200 --> 00:00:15.700 +concerning changing the GC strategy, + +00:00:18.500 --> 00:00:18.840 +that it's unlikely that it will be happening + +00:00:20.380 --> 00:00:20.740 +in the next time. Yeah. + +00:00:22.760 --> 00:00:22.940 +Is there any discussion going on or why does + +00:00:24.320 --> 00:00:24.820 +the case it's not changing the strategy? + +00:00:26.640 --> 00:00:27.140 +[Speaker 1]: It's mostly because it's difficult. + +00:00:29.439 --> 00:00:29.860 +I think, yesterday you heard from, + +00:00:33.400 --> 00:00:33.900 +1 of the dev talks that like there was 1 + +00:00:34.980 --> 00:00:35.220 +small, short comment that, + +00:00:36.780 --> 00:00:37.280 +oh yeah, it would be nice to change this + +00:00:39.059 --> 00:00:39.559 +algorithm but it's hard. + +00:00:40.760 --> 00:00:40.840 +[Speaker 0]: So I + +00:00:43.260 --> 00:00:43.700 +[Speaker 1]: mean it's hard not because the algorithm is + +00:00:45.400 --> 00:00:45.720 +that hard but because it's a very low level + +00:00:48.000 --> 00:00:48.500 +code and it must be like very carefully + +00:00:49.960 --> 00:00:50.460 +weighted. So that can be, + +00:00:53.239 --> 00:00:53.640 +it needs to be made sure that the carousel + +00:00:55.280 --> 00:00:55.780 +will work. It's all bugs. + +00:00:57.440 --> 00:00:57.600 +If you have bugs and you can see that, + +00:00:58.660 --> 00:00:59.160 +so it's nothing to work anymore. + +00:01:00.720 --> 00:01:01.200 +[Speaker 0]: So We have a lot of RAM usage. + +00:01:02.240 --> 00:01:02.740 +Yeah. Maybe sometime. + +00:01:06.180 --> 00:01:06.500 +[Speaker 1]: There was like years ago, + +00:01:09.640 --> 00:01:10.140 +there was a branch on generational DC, + +00:01:11.100 --> 00:01:11.600 +if I remember correctly, + +00:01:13.380 --> 00:01:13.880 +but they didn't go anywhere, + +00:01:14.760 --> 00:01:15.260 +unfortunately. + +00:01:18.900 --> 00:01:19.240 +[Speaker 0]: That's a pity. But let's come to the + +00:01:21.500 --> 00:01:22.000 +questions on the pad. So the first 1 is, + +00:01:24.340 --> 00:01:24.840 +are the GC duration statistics correlated + +00:01:27.340 --> 00:01:27.660 +with users? I mean, does the same user + +00:01:29.440 --> 00:01:29.940 +experience GC of various durations? + +00:01:32.900 --> 00:01:33.400 +Or Do some users experience GC of a greater + +00:01:36.680 --> 00:01:36.960 +0.26 exclusively, while others never + +00:01:40.440 --> 00:01:40.940 +experience them? So is it correlated to user + +00:01:43.780 --> 00:01:44.280 +behavior? I guess you said it in your talk. + +00:01:46.160 --> 00:01:46.660 +[Speaker 1]: Well, If you talk formally, + +00:01:49.340 --> 00:01:49.540 +then almost every user has like 1 or 2 + +00:01:51.500 --> 00:01:52.000 +occasions when GC takes more than 0.2 + +00:01:53.040 --> 00:01:53.540 +seconds, but it's like, + +00:01:56.720 --> 00:01:57.040 +maybe something else is using CPU and that's + +00:02:00.720 --> 00:02:00.920 +why, but in practice, there are users who + +00:02:04.200 --> 00:02:04.540 +don't have problem. Half of them that that's + +00:02:05.800 --> 00:02:06.300 +who that's what I looked from statistics. + +00:02:10.240 --> 00:02:10.440 +And dry users who have like really big + +00:02:12.520 --> 00:02:13.020 +problems, like 1 second GC time. + +00:02:17.280 --> 00:02:17.520 +[Speaker 0]: This is dependent on you make some comments + +00:02:19.960 --> 00:02:20.460 +on us in the talk, but could you like extract + +00:02:23.000 --> 00:02:23.200 +on if it's a package, that's a problem or we + +00:02:24.780 --> 00:02:25.280 +as a user behavior are there. + +00:02:30.720 --> 00:02:31.220 +[Speaker 1]: Usually it's something that is, + +00:02:33.760 --> 00:02:33.960 +okay. I'm sharing my screen now, + +00:02:37.580 --> 00:02:38.080 +[Speaker 0]: It's coming on, give it like 2 to 3 seconds. + +00:02:41.480 --> 00:02:41.980 +[Speaker 1]: right? Yeah. So I can just click through + +00:02:42.940 --> 00:02:43.440 +different user statistics. + +00:02:48.840 --> 00:02:49.080 +So like you can see this duration for each + +00:02:49.960 --> 00:02:50.460 +individual user basically. + +00:02:54.240 --> 00:02:54.740 +So you can see like here for example it's + +00:02:56.320 --> 00:02:56.820 +like averages around 0.25 + +00:03:00.040 --> 00:03:00.420 +seconds which is noticeable and here is like + +00:03:03.640 --> 00:03:03.960 +0.1 like someone is all over the place, + +00:03:09.560 --> 00:03:10.060 +probably some. Then like, + +00:03:11.520 --> 00:03:12.020 +what else can we see here? + +00:03:15.140 --> 00:03:15.640 +Yeah, some users like have sub 0.1, + +00:03:23.320 --> 00:03:23.560 +no problem at all. And I have seen some that + +00:03:30.180 --> 00:03:30.240 +really, really bad. I mean, + +00:03:31.880 --> 00:03:32.240 +[Speaker 0]: if it's noticeable, it's all bad. + +00:03:36.960 --> 00:03:37.460 +[Speaker 1]: So yeah. For example, here it's like 0.8 + +00:03:41.680 --> 00:03:42.040 +seconds, 0.5 seconds. I don't know how that + +00:03:48.600 --> 00:03:49.100 +guy uses ZMax. Yeah. you can see it varies. + +00:03:51.160 --> 00:03:51.660 +[Speaker 0]: So It varies quite a lot. + +00:03:52.760 --> 00:03:53.000 +[Speaker 1]: What it depends on, like, + +00:03:54.120 --> 00:03:54.620 +usually the number of packages, + +00:03:58.440 --> 00:03:58.620 +like all kinds of timers going on under the + +00:04:01.720 --> 00:04:02.220 +hood. I think I tried to list... + +00:04:12.520 --> 00:04:12.800 +I'll go through this. I briefly outlined some + +00:04:15.440 --> 00:04:15.940 +important parts. Here, + +00:04:18.480 --> 00:04:18.980 +when you have something like an org agenda, + +00:04:20.680 --> 00:04:21.180 +it will most likely trigger a lot of GCs. + +00:04:23.900 --> 00:04:24.400 +When you have a lot of timers, + +00:04:27.800 --> 00:04:27.980 +when you have something calculated on + +00:04:29.700 --> 00:04:30.200 +modline, it will be frequently triggered. + +00:04:30.900 --> 00:04:31.240 +[Speaker 0]: Well, + +00:04:34.080 --> 00:04:34.260 +[Speaker 1]: yeah. When you have so many packages and + +00:04:35.760 --> 00:04:36.260 +these packages are using a lot of memory. + +00:04:41.120 --> 00:04:41.540 +Like I remember I was surprised by this, + +00:04:44.640 --> 00:04:45.020 +package, home org that was, + +00:04:46.560 --> 00:04:47.060 +caching all the results. + +00:04:48.960 --> 00:04:49.280 +And for large org files, + +00:04:51.540 --> 00:04:51.720 +it was like several hundred megabytes of + +00:04:55.160 --> 00:04:55.660 +data. Well, it just becomes slower. + +00:04:55.900 --> 00:04:56.280 +Yeah. + +00:05:00.020 --> 00:05:00.340 +[Speaker 0]: Yeah. Maybe, maybe a short side note. + +00:05:02.600 --> 00:05:02.760 +Someone asks, what software you're using for + +00:05:03.480 --> 00:05:03.980 +flipping through the PNGs. + +00:05:06.660 --> 00:05:07.160 +Maybe you could shortly throws it in. + +00:05:08.800 --> 00:05:09.280 +[Speaker 1]: What do you mean? Here, + +00:05:11.000 --> 00:05:11.500 +[Speaker 0]: I guess it was just simply, + +00:05:13.480 --> 00:05:13.980 +[Speaker 1]: this, It's it's far. Yeah. + +00:05:16.660 --> 00:05:17.160 +So + +00:05:23.900 --> 00:05:24.400 +[Speaker 0]: yeah. So, question 1 and 2 answered. + +00:05:35.740 --> 00:05:36.040 +To 1 statement you have made, + +00:05:37.500 --> 00:05:38.000 +there was a question concerning the timings. + +00:05:41.180 --> 00:05:41.680 +So you said, okay, everything above 0.1 + +00:05:45.800 --> 00:05:46.120 +second is fine. Maybe There's a short story + +00:05:48.480 --> 00:05:48.980 +of someone who asked a question. + +00:05:50.380 --> 00:05:50.800 +[Speaker 1]: I see the question is about scrolling, + +00:05:51.820 --> 00:05:52.320 +[Speaker 0]: Yeah, exactly. + +00:05:55.580 --> 00:05:55.760 +[Speaker 1]: right? Again, there's not much you can do in + +00:05:58.620 --> 00:05:58.860 +terms of trying to adjust the GC time. + +00:06:02.320 --> 00:06:02.820 +I mean, if you make GCs less frequent, + +00:06:07.540 --> 00:06:08.000 +you increase the individual GC time. + +00:06:08.860 --> 00:06:09.280 +If you make them more frequent, + +00:06:11.280 --> 00:06:11.520 +you decrease the individual GC time, + +00:06:12.400 --> 00:06:12.740 +but then they are more frequent. + +00:06:15.920 --> 00:06:16.200 +So what is the point? I think the way to go + +00:06:19.940 --> 00:06:20.080 +here is you can rise to see the short for the + +00:06:20.740 --> 00:06:21.240 +duration of scrolling, + +00:06:22.500 --> 00:06:22.860 +like just for a comment. + +00:06:26.320 --> 00:06:26.740 +I think it's a recommendation from Emacs + +00:06:31.480 --> 00:06:31.660 +devs. So like You do something along the + +00:06:31.660 --> 00:06:32.160 +lines. + +00:06:53.480 --> 00:06:53.800 +Yeah, I'm surely doing something on my screen + +00:06:55.680 --> 00:06:56.180 +and I forgot that I'm not sharing anything. + +00:06:56.680 --> 00:06:57.180 +[Speaker 0]: Exactly. + +00:07:00.700 --> 00:07:01.200 +[Speaker 1]: Simply something like this. + +00:07:08.140 --> 00:07:08.460 +So, basically, if you have some command that + +00:07:10.920 --> 00:07:11.180 +is very important that it should run very + +00:07:13.860 --> 00:07:14.120 +quickly. You temporary increase that + +00:07:15.740 --> 00:07:16.240 +threshold, you run that comment, + +00:07:19.940 --> 00:07:20.140 +then that's all. That's probably the best. + +00:07:21.660 --> 00:07:22.000 +So basically, the best you can do is to delay + +00:07:23.760 --> 00:07:24.260 +it after the command. + +00:07:27.500 --> 00:07:27.700 +[Speaker 0]: So afterwards, it takes a lot of time to do + +00:07:36.140 --> 00:07:36.500 +its stuff. OK. The third 1 has been already + +00:07:40.520 --> 00:07:40.780 +answered, but I just want to get your + +00:07:42.780 --> 00:07:43.280 +information from it. Opinions on the GCMH + +00:07:43.940 --> 00:07:44.440 +mode. + +00:07:48.280 --> 00:07:48.640 +[Speaker 1]: Okay. Yeah, I see that problem, + +00:07:49.920 --> 00:07:50.420 +but that's more like a technical problem. + +00:07:52.360 --> 00:07:52.860 +But there's another problem there. + +00:07:57.340 --> 00:07:57.840 +Yeah, I prepared a small snippet here. + +00:08:02.160 --> 00:08:02.660 +So if you look at the GCMH mode, + +00:08:05.800 --> 00:08:06.040 +it has this concept of low threshold and high + +00:08:08.200 --> 00:08:08.560 +threshold and most of the time it's running + +00:08:14.120 --> 00:08:14.620 +high threshold and then when Emacs is idle, + +00:08:17.320 --> 00:08:17.480 +it falls back to lower threshold and then it + +00:08:19.400 --> 00:08:19.900 +does the GC while Emacs is not used. + +00:08:22.040 --> 00:08:22.360 +That's a good idea, of course. + +00:08:24.380 --> 00:08:24.880 +That's the core idea of GCMH mode. + +00:08:30.520 --> 00:08:30.720 +Unfortunately, the most annoying GC is when + +00:08:31.760 --> 00:08:32.260 +you're actively using max. + +00:08:37.120 --> 00:08:37.419 +And then you have this huge value of GC + +00:08:38.799 --> 00:08:39.299 +counter show and look at the doc stream. + +00:08:41.760 --> 00:08:42.080 +This would be sector value that makes GC + +00:08:43.980 --> 00:08:44.480 +unlikely but does not cost OSP Asian. + +00:08:46.480 --> 00:08:46.880 +So yeah, no wonder like if you don't do GC, + +00:08:49.640 --> 00:08:50.140 +your arm usage will skyrocket. + +00:08:54.360 --> 00:08:54.860 +So they don't, they cannot put it too much, + +00:08:57.720 --> 00:08:58.220 +but this is like already like, + +00:08:59.220 --> 00:08:59.720 +how much was it? + +00:09:10.800 --> 00:09:10.860 +1 gigabyte, that's the default. + +00:09:15.220 --> 00:09:15.720 +And the problem is when you have 1 gigabyte + +00:09:18.680 --> 00:09:19.000 +to garbage collect, it causes really long GC + +00:09:22.040 --> 00:09:22.480 +time. So in GC image mode, + +00:09:23.560 --> 00:09:24.060 +when you're actually using Emacs, + +00:09:28.860 --> 00:09:29.360 +really heavily, the GCs become terrible, + +00:09:34.640 --> 00:09:34.860 +terribly slow. So it may help in case you + +00:09:37.200 --> 00:09:37.540 +don't have too much problems with GC, + +00:09:39.280 --> 00:09:39.720 +but I will say that in such situation, + +00:09:41.920 --> 00:09:42.420 +you can simply increase GC cost percentage, + +00:09:44.540 --> 00:09:45.040 +as I recommend, and it should do it. + +00:09:48.480 --> 00:09:48.640 +But in case of really big problems with + +00:09:50.080 --> 00:09:50.540 +garbage collection, no, + +00:09:51.740 --> 00:09:52.240 +I don't think that will help much. + +00:09:54.800 --> 00:09:54.960 +I used it myself and it didn't help much for + +00:09:55.200 --> 00:09:55.700 +my stuff. + +00:09:59.680 --> 00:10:00.180 +[Speaker 0]: All right. The next question is concerning + +00:10:04.600 --> 00:10:04.820 +freeing up memory. Is there some way to free + +00:10:07.200 --> 00:10:07.420 +up memory such as via unload feature on + +00:10:09.960 --> 00:10:10.120 +Emacs? Often I only need a package loaded for + +00:10:12.240 --> 00:10:12.400 +a single task or short period by the + +00:10:13.320 --> 00:10:13.820 +persistent memory afterwards. + +00:10:19.780 --> 00:10:19.940 +[Speaker 1]: So the packages are usually not that much of + +00:10:22.060 --> 00:10:22.560 +a problem. I mean, the libraries, + +00:10:25.280 --> 00:10:25.780 +the problem is some extra, + +00:10:30.060 --> 00:10:30.340 +like some variable contents or some + +00:10:31.800 --> 00:10:32.300 +histories, some caches. + +00:10:35.280 --> 00:10:35.780 +That's what's eating most of the memory. + +00:10:40.240 --> 00:10:40.740 +There is a package called memory usage and + +00:10:45.440 --> 00:10:45.940 +built in MX memory report. + +00:10:50.900 --> 00:10:51.100 +They allow to see which variables take a lot + +00:10:56.000 --> 00:10:56.500 +of memory. And that way you can try to see + +00:10:58.520 --> 00:10:59.020 +which packages are actually problematic. + +00:11:03.340 --> 00:11:03.840 +So for example, I recall, + +00:11:05.640 --> 00:11:06.140 +and that was not exactly, + +00:11:09.720 --> 00:11:09.880 +I remember there was a package that was + +00:11:11.040 --> 00:11:11.260 +literally in command line, + +00:11:14.020 --> 00:11:14.240 +like prompt history. I think it was in + +00:11:17.540 --> 00:11:18.040 +command. And when you do like, + +00:11:20.440 --> 00:11:20.940 +when you save every message in your chart + +00:11:25.280 --> 00:11:25.780 +into prompt history, that can grow very fast + +00:11:29.220 --> 00:11:29.600 +and can go to several hundred megabytes just + +00:11:31.720 --> 00:11:32.020 +in that history. And that can cause major + +00:11:37.960 --> 00:11:38.360 +problems. So, yes, profiling the largest + +00:11:41.200 --> 00:11:41.600 +variables with the largest buffers that might + +00:11:42.660 --> 00:11:42.900 +give some clues. Again, + +00:11:43.740 --> 00:11:44.240 +there is no silver bullet. + +00:11:49.080 --> 00:11:49.320 +[Speaker 0]: Right. I think the last question on the + +00:11:51.000 --> 00:11:51.500 +patterns. At first, very nice presentation. + +00:11:51.620 --> 00:11:51.780 +[Speaker 1]: I can + +00:11:53.980 --> 00:11:54.480 +[Speaker 0]: also only agree with that. + +00:11:56.480 --> 00:11:56.640 +I just experienced with a threshold and + +00:11:58.200 --> 00:11:58.700 +lowered my GCE lapse from 1.1 + +00:12:01.440 --> 00:12:01.940 +to 0.06 seconds during startup. + +00:12:03.600 --> 00:12:04.100 +Interestingly, going to 10 megabytes + +00:12:06.100 --> 00:12:06.340 +increased the time. 4 megabytes was a sweet + +00:12:07.800 --> 00:12:08.300 +spot for my system. What is the recommended + +00:12:10.840 --> 00:12:11.260 +way to lower the value back to the default + +00:12:12.340 --> 00:12:12.840 +value after startup is completed? + +00:12:16.160 --> 00:12:16.660 +[Speaker 1]: I think you just use after init hook. + +00:12:23.940 --> 00:12:24.440 +[Speaker 0]: This was a relatively fast answer. + +00:12:29.180 --> 00:12:29.480 +[Speaker 1]: So basically for example Doom does this, + +00:12:31.940 --> 00:12:32.220 +it temporary writes a gcconcert hold during + +00:12:37.260 --> 00:12:37.760 +startup and yeah after init hook the code is + +00:12:39.880 --> 00:12:40.380 +like it's 1 of the commonly suggested + +00:12:43.940 --> 00:12:44.440 +approaches and is I believe it's the right 1. + +00:12:49.180 --> 00:12:49.680 +[Speaker 0]: Right. To have joined us 1 was a microphone. + +00:12:52.200 --> 00:12:52.360 +So Peter, do you have any questions that you + +00:12:55.240 --> 00:12:55.640 +want to question? And maybe as a side note, + +00:12:57.380 --> 00:12:57.740 +we only have 4 minutes left and afterwards + +00:12:59.240 --> 00:12:59.480 +this happy weekend will still be open, + +00:13:01.400 --> 00:13:01.900 +but we will switch back to the talks. + +00:13:05.380 --> 00:13:05.820 +[Speaker 2]: Yeah, no more questions on garbage + +00:13:07.640 --> 00:13:08.140 +collection, but I just wanted to thank Ihor + +00:13:10.440 --> 00:13:10.940 +for his engagement in the community. + +00:13:15.300 --> 00:13:15.480 +And especially with, I'm a co-maintainer on + +00:13:17.600 --> 00:13:18.100 +orgnotor and he's helped us a lot with + +00:13:21.680 --> 00:13:21.820 +getting us up to date with newer versions of + +00:13:22.680 --> 00:13:22.960 +org and stuff like that. + +00:13:24.680 --> 00:13:25.140 +So just wanted to thank you in person. + +00:13:25.140 --> 00:13:25.640 +[Speaker 1]: Right. + +00:13:33.540 --> 00:13:33.800 +[Speaker 0]: Maybe 1 question for me, + +00:13:35.460 --> 00:13:35.760 +you had some bit talked about memory + +00:13:40.640 --> 00:13:40.800 +fragmentation. So is there any way to or is + +00:13:42.080 --> 00:13:42.580 +it fixed by Emacs itself? + +00:13:43.740 --> 00:13:43.940 +So you have like + +00:13:46.520 --> 00:13:46.980 +[Speaker 1]: a chunk of memory fragmentation is basically + +00:13:51.420 --> 00:13:51.600 +your OS. Yeah, Emacs releases the memory and + +00:13:55.020 --> 00:13:55.200 +then OS can rearrange it depending on the + +00:13:58.320 --> 00:13:58.820 +implementation of its memory manager. + +00:14:01.520 --> 00:14:01.720 +[Speaker 0]: Okay, so the GC just releases it really and + +00:14:04.400 --> 00:14:04.900 +not so it could be that a mix is like + +00:14:07.420 --> 00:14:07.840 +[Speaker 1]: doing it. You have like memory pages, + +00:14:09.560 --> 00:14:09.760 +right? Yeah. And you see, + +00:14:12.140 --> 00:14:12.600 +can release a part of this page just like + +00:14:14.760 --> 00:14:15.060 +here and there. And depending on the exact + +00:14:17.720 --> 00:14:18.220 +situation is your arm at each moment of time, + +00:14:20.240 --> 00:14:20.640 +or as may or may not be able to arrange + +00:14:25.160 --> 00:14:25.640 +[Speaker 0]: so + +00:14:27.620 --> 00:14:27.940 +[Speaker 1]: things. So, how the exact the data you cannot + +00:14:30.160 --> 00:14:30.320 +really predict it. It really varies like you + +00:14:31.120 --> 00:14:31.480 +use Windows, you use Linux, + +00:14:33.240 --> 00:14:33.740 +you use like malloc, something else, + +00:14:36.260 --> 00:14:36.600 +but it has nothing to do with Emacs. + +00:14:38.040 --> 00:14:38.540 +It's just something you have to deal with. + +00:14:41.780 --> 00:14:41.940 +[Speaker 0]: Yeah, but my question was in the way that we + +00:14:43.460 --> 00:14:43.860 +are giving the memory back to the operating + +00:14:46.020 --> 00:14:46.440 +system, not just holding it as used and then + +00:14:49.960 --> 00:14:50.140 +to our own memory, like stuff as Emacs that + +00:14:51.680 --> 00:14:52.120 +we do not need to interact with the operating + +00:14:56.040 --> 00:14:56.540 +[Speaker 1]: Yeah. Emacs does not really hold anything. + +00:14:59.160 --> 00:14:59.580 +[Speaker 0]: system. That was the question. + +00:15:01.920 --> 00:15:02.220 +[Speaker 1]: Okay. I was really hoping it does, + +00:15:02.760 --> 00:15:03.260 +but yeah, unfortunately, + +00:15:05.640 --> 00:15:06.140 +because nothing much can be done on Emacs. + +00:15:08.800 --> 00:15:08.940 +[Speaker 0]: Okay. it's not Probably a lot faster if it's + +00:15:10.580 --> 00:15:10.800 +just holding it and when it needs more, + +00:15:12.380 --> 00:15:12.880 +then just get more from the OS. + +00:15:14.220 --> 00:15:14.620 +[Speaker 1]: There are certain caveats, + +00:15:16.720 --> 00:15:17.220 +for example, there's something called image + +00:15:20.560 --> 00:15:20.740 +cache. And because Emacs stores images in + +00:15:23.720 --> 00:15:23.800 +uncompressed format, it can occupy quite a + +00:15:25.020 --> 00:15:25.320 +lot of memory. In particular, + +00:15:26.520 --> 00:15:27.020 +when you will like view PDFs, + +00:15:30.140 --> 00:15:30.640 +like you open 10, like 20 PDFs in 1 session, + +00:15:33.460 --> 00:15:33.820 +you may have like some image cache blowing + +00:15:36.720 --> 00:15:37.220 +up, But that's not common for people. + +00:15:41.420 --> 00:15:41.920 +[Speaker 0]: So, guess we are on our time exactly. + +00:15:43.580 --> 00:15:44.080 +So in the next + +00:15:46.680 --> 00:15:47.180 +[Speaker 1]: I think I was not exactly accurate. + +00:15:49.200 --> 00:15:49.640 +This 1 command, which is, + +00:15:53.500 --> 00:15:54.000 +I think, Nemax 30, is called a malloc trim. + +00:15:57.520 --> 00:15:58.020 +A max malloc trim. It's interactive. + +00:16:04.080 --> 00:16:04.580 +So that can help to release some memory. + +00:16:08.200 --> 00:16:08.700 +I think the way it works is like forces OS to + +00:16:12.040 --> 00:16:12.540 +make use of the released memory. + +00:16:14.960 --> 00:16:15.460 +[Speaker 0]: Okay. That would be like, + +00:16:18.420 --> 00:16:18.640 +we are by the way, switch back to the next + +00:16:21.420 --> 00:16:21.680 +talk. But + +00:16:24.220 --> 00:16:24.400 +[Speaker 1]: so basically what happens here is that OS may + +00:16:27.440 --> 00:16:27.720 +not release like, even Emacs says, + +00:16:28.740 --> 00:16:29.240 +okay, this memory is free, + +00:16:30.060 --> 00:16:30.560 +depending on the implementation, + +00:16:32.760 --> 00:16:32.980 +I might think, okay, but I still hold that + +00:16:34.860 --> 00:16:35.080 +memory associated with Emacs just in case + +00:16:35.800 --> 00:16:36.180 +Emacs needs more memories, + +00:16:38.940 --> 00:16:39.180 +and I can immediately put the data there + +00:16:41.420 --> 00:16:41.920 +without like more arrangement to allocate + +00:16:45.480 --> 00:16:45.980 +more. And this analog stream basically forces + +00:16:48.740 --> 00:16:49.240 +the OS to release it, like no matter what. + +00:16:52.360 --> 00:16:52.860 +[Speaker 0]: Because most people, when they are using + +00:16:54.320 --> 00:16:54.620 +Emacs, I have the feeling they are only using + +00:16:56.160 --> 00:16:56.480 +Emacs. So it would be kind of interesting if + +00:16:57.880 --> 00:16:58.140 +you just take like, I don't know, + +00:17:00.060 --> 00:17:00.560 +2 gigabytes or something of memory and Emacs + +00:17:02.900 --> 00:17:03.160 +like does what it wants on that and the OS + +00:17:04.079 --> 00:17:04.540 +cannot really take it back. + +00:17:05.920 --> 00:17:06.040 +This was my idea when I + +00:17:08.000 --> 00:17:08.319 +[Speaker 1]: was So when you see 2 gigabytes in OS, + +00:17:10.359 --> 00:17:10.859 +it doesn't mean that OS cannot take it back. + +00:17:13.859 --> 00:17:14.359 +It may still like allocate certain portion, + +00:17:15.640 --> 00:17:16.140 +even technically free, + +00:17:20.940 --> 00:17:21.319 +but just for future. So this is where Malloc + +00:17:22.339 --> 00:17:22.579 +Dream works. It's like, + +00:17:25.319 --> 00:17:25.540 +it says, yes, OS, I really not going to hold + +00:17:26.500 --> 00:17:27.000 +this for this free memory. + +00:17:31.700 --> 00:17:31.860 +For sure. If you try this MX Malloc Gene, + +00:17:33.960 --> 00:17:34.140 +you will see like a few times to hundreds of + +00:17:35.200 --> 00:17:35.700 +megabytes of read immediately. + +00:17:38.560 --> 00:17:39.060 +[Speaker 0]: Have a look when I have the time. + +00:17:41.480 --> 00:17:41.600 +[Speaker 1]: I + +00:17:43.260 --> 00:17:43.680 +[Speaker 0]: guess if nobody has any questions, + +00:17:45.660 --> 00:17:46.160 +I guess on the pad, there was Nothing else. + +00:17:47.900 --> 00:17:48.340 +I guess we can just close it. + +00:17:49.140 --> 00:17:49.600 +Thanks for the discussion. + +00:17:50.640 --> 00:17:51.140 +Thanks for answering the questions. + +00:17:56.020 --> 00:17:56.520 +[Speaker 1]: Thank you for the great conference. + +00:17:59.340 --> 00:17:59.840 +And yeah, for your volunteer work. + +00:18:02.230 --> 00:18:02.241 +And yeah, for quietly panicking in the + +00:18:02.262 --> 00:18:02.273 +background, right? Yeah, + +00:18:02.337 --> 00:18:02.348 +I mean... You have to be quiet, + +00:18:02.560 --> 00:18:03.060 +you're panicking in the background. diff --git a/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt new file mode 100644 index 00000000..d1e2a5f6 --- /dev/null +++ b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt @@ -0,0 +1,1780 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.639 +Hello everyone, my name is Ihor Radchenko, + +00:00:04.640 --> 00:00:07.599 +and you may know me from Org Mailing List. + +00:00:07.600 --> 00:00:09.799 +However, today I'm not going to talk about Org Mode. + +00:00:09.800 --> 00:00:11.919 +Today I'm going to talk about + +00:00:11.920 --> 00:00:14.959 +Emacs performance and how it's affected + +00:00:14.960 --> 00:00:19.039 +by its memory management code. + +00:00:19.040 --> 00:00:21.639 +First, I will introduce the basic concepts + +00:00:21.640 --> 00:00:26.439 +of Emacs memory management and what garbage collection is. + +00:00:26.440 --> 00:00:30.559 +Then I will show you user statistics + +00:00:30.560 --> 00:00:34.959 +collected from volunteer users over the last half year + +00:00:34.960 --> 00:00:39.319 +and I will end with some guidelines + +00:00:39.320 --> 00:00:44.719 +on how to tweak Emacs garbage collection customizations + +00:00:44.720 --> 00:00:47.479 +to optimize Emacs performance + +00:00:47.480 --> 00:00:51.079 +and when it's necessary or not to do. + +NOTE About garbage collection in Emacs + +00:00:51.080 --> 00:00:54.519 +Let's begin. What is garbage collection? + +00:00:54.520 --> 00:00:56.519 +To understand what is garbage collection, + +00:00:56.520 --> 00:00:59.039 +we need to realize that anything you do in Emacs + +00:00:59.040 --> 00:01:02.119 +is some kind of command. Any command is most likely + +00:01:02.120 --> 00:01:05.839 +running some Elisp code. Every time you run Elisp code, + +00:01:05.840 --> 00:01:09.239 +you most likely need to locate certain memory in RAM. + +00:01:09.240 --> 00:01:12.879 +Some of this memory is retained for a long time + +00:01:12.880 --> 00:01:15.559 +and some of this memory is transient. + +00:01:15.560 --> 00:01:19.119 +Of course, Emacs has to clear this transient memory + +00:01:19.120 --> 00:01:21.439 +from time to time, to not occupy all the possible RAM + +00:01:21.440 --> 00:01:21.447 +in the computer. In this small example, + +00:01:21.448 --> 00:01:28.639 +we have one global variable + +00:01:28.640 --> 00:01:31.279 +that is assigned a value, + +00:01:31.280 --> 00:01:33.079 +but when assigning the value, + +00:01:33.080 --> 00:01:35.679 +we first allocate a temporary variable + +00:01:35.680 --> 00:01:37.119 +and then a temporary list + +00:01:37.120 --> 00:01:40.079 +and only retain some part of this list + +00:01:40.080 --> 00:01:42.079 +in this global variable. + +00:01:42.080 --> 00:01:44.799 +In terms of memory graph + +00:01:44.800 --> 00:01:50.359 +we can represent this as two variable slots, + +00:01:50.360 --> 00:01:53.159 +one transient, one permanent, + +00:01:53.160 --> 00:01:56.199 +and then a list of three cons cells, + +00:01:56.200 --> 00:02:01.959 +part of which is retained as a global variable + +00:02:01.960 --> 00:02:04.999 +but part of it which is a temporary variable symbol. + +00:02:05.000 --> 00:02:07.679 +The first term of the list is not used + +00:02:07.680 --> 00:02:09.759 +and it might be cleared at some point. + +NOTE Garbage collection in Emacs + +00:02:09.760 --> 00:02:12.239 +So that's what Emacs does. + +00:02:12.240 --> 00:02:15.919 +Every now and then, Emacs goes through all the memory + +00:02:15.920 --> 00:02:19.119 +and identifies which part of the memory are not used + +00:02:19.120 --> 00:02:23.759 +and then clear them so that it can free up the RAM. + +00:02:23.760 --> 00:02:25.919 +This process is called garbage collection + +00:02:25.920 --> 00:02:28.919 +and Emacs uses a very simple and old algorithm + +00:02:28.920 --> 00:02:30.559 +which is called Mark & Sweep. + +00:02:30.560 --> 00:02:33.759 +So doing this mark and sweep process + +00:02:33.760 --> 00:02:34.879 +is basically two stages. + +00:02:34.880 --> 00:02:40.039 +First, Emacs scans all the memory that is allocated + +00:02:40.040 --> 00:02:42.759 +and then identifies which memory is still in use + +00:02:42.760 --> 00:02:45.519 +which is linked to some variables, for example, + +00:02:45.520 --> 00:02:47.599 +and which memory is not used anymore + +00:02:47.600 --> 00:02:49.559 +even though it was allocated in the past. + +00:02:49.560 --> 00:02:52.999 +The second stage [??] whenever a memory is not, + +00:02:53.000 --> 00:02:59.319 +that is not allocated. During the process + +00:02:59.320 --> 00:03:00.759 +Emacs cannot do anything now. + +00:03:00.760 --> 00:03:04.159 +So basically, every time Emacs scans the memory, + +00:03:04.160 --> 00:03:07.199 +it freezes up and doesn't respond to anything, + +00:03:07.200 --> 00:03:10.959 +and if it takes too much time so that users can notice it, + +00:03:10.960 --> 00:03:13.399 +then of course Emacs is not responsive at all, + +00:03:13.400 --> 00:03:19.439 +and if this garbage collection is triggered too frequently, + +00:03:19.440 --> 00:03:22.399 +then it's not just not responsive every now and then. + +00:03:22.400 --> 00:03:24.679 +It's also not responsive all the time, + +00:03:24.680 --> 00:03:26.079 +almost all the time, + +00:03:26.080 --> 00:03:27.679 +so it cannot even normally type or stuff + +00:03:27.680 --> 00:03:32.439 +or do some normal commands. + +00:03:32.440 --> 00:03:36.719 +This mark and sweep algorithm is taking longer + +00:03:36.720 --> 00:03:40.199 +the more memory Emacs uses. So basically, + +00:03:40.200 --> 00:03:44.439 +the more buffers you open, the more packages you load, + +00:03:44.440 --> 00:03:48.319 +the more complex commands you run, the more memory is used, + +00:03:48.320 --> 00:03:52.279 +and basically, the longer Emacs takes + +00:03:52.280 --> 00:03:57.919 +to perform a single garbage collection. + +00:03:57.920 --> 00:04:02.279 +Of course, Emacs being Emacs + +00:04:02.280 --> 00:04:06.039 +this garbage collection can be tweaked. + +00:04:06.040 --> 00:04:08.279 +In particular users can tweak + +00:04:08.280 --> 00:04:10.639 +how frequently Emacs does garbage collection + +00:04:10.640 --> 00:04:13.879 +using two basic variables: `gc-cons-threshold` + +00:04:13.880 --> 00:04:15.519 +and `gc-cons-percentage`. + +00:04:15.520 --> 00:04:21.599 +`gc-cons-threshold` is the raw number of kilobytes + +00:04:21.600 --> 00:04:22.479 +Emacs needs to allocate + +00:04:22.480 --> 00:04:25.959 +before triggering another garbage collection, + +00:04:25.960 --> 00:04:27.799 +and the `gc-cons-percentage` is similar, + +00:04:27.800 --> 00:04:30.399 +but it's defined in terms of fraction + +00:04:30.400 --> 00:04:34.759 +of already-allocated memory. + +00:04:34.760 --> 00:04:38.239 +If you follow various Emacs forums, + +00:04:38.240 --> 00:04:41.959 +you may be familiar with people complaining about + +00:04:41.960 --> 00:04:46.479 +garbage collection. There are many many suggestions + +00:04:46.480 --> 00:04:48.039 +about what to do with it. + +00:04:48.040 --> 00:04:54.079 +Most frequently, you see `gc-cons-threshold` + +00:04:54.080 --> 00:04:56.879 +recommended to be increased, + +00:04:56.880 --> 00:05:01.439 +and a number of pre-packaged Emacs distributions + +00:05:01.440 --> 00:05:04.319 +like Doom Emacs do increase it. + +00:05:04.320 --> 00:05:07.279 +I have seen suggestions which are actually horrible + +00:05:07.280 --> 00:05:10.479 +to disable garbage collection temporarily + +00:05:10.480 --> 00:05:14.359 +or for a long time. + +00:05:14.360 --> 00:05:17.519 +Which is nice... You can see it quite frequently, + +00:05:17.520 --> 00:05:19.399 +which indicates there might be some problem. + +00:05:19.400 --> 00:05:23.959 +However, every time one user poses about this problem, + +00:05:23.960 --> 00:05:26.879 +it's just one data point and it doesn't mean + +00:05:26.880 --> 00:05:28.879 +that everyone actually suffers from it. + +00:05:28.880 --> 00:05:33.719 +It doesn't mean that everyone should do it. + +00:05:33.720 --> 00:05:35.919 +So in order to understand if this garbage collection + +00:05:35.920 --> 00:05:39.959 +is really a problem which is a common problem + +00:05:39.960 --> 00:05:44.919 +we do need some kind of statistics + +00:05:44.920 --> 00:05:46.919 +and only using the actual statistics + +00:05:46.920 --> 00:05:52.759 +we can understand if it should be recommended for everyone + +00:05:52.760 --> 00:05:54.999 +to tweak the defaults or like whether + +00:05:55.000 --> 00:05:57.159 +it should be recommended for certain users + +00:05:57.160 --> 00:05:59.479 +or maybe it should be asked Emacs devs + +00:05:59.480 --> 00:06:01.559 +to do something about the defaults. + +00:06:01.560 --> 00:06:07.959 +And what I did some time ago is exactly this. + +00:06:07.960 --> 00:06:09.959 +I tried to collect the user statistics. + +00:06:09.960 --> 00:06:14.519 +So I wrote a small package on Elp + +00:06:14.520 --> 00:06:18.159 +and some users installed this package + +00:06:18.160 --> 00:06:22.119 +and then reported back these statistics + +00:06:22.120 --> 00:06:24.279 +of the garbage collection for their particular use. + +00:06:24.280 --> 00:06:30.799 +By now we have obtained 129 user submissions + +00:06:30.800 --> 00:06:34.039 +with over 1 million GC records in there. + +00:06:34.040 --> 00:06:38.119 +So like some of these submissions + +00:06:38.120 --> 00:06:43.159 +used default GC settings without any customizations. + +00:06:43.160 --> 00:06:46.039 +Some used increased GC cost threshold + +00:06:46.040 --> 00:06:47.799 +and GC cost percentage. + +00:06:47.800 --> 00:06:53.319 +So using this data we can try to draw + +00:06:53.320 --> 00:06:56.879 +some reliable conclusions on what should be done + +00:06:56.880 --> 00:06:59.919 +and whether should anything be done about garbage collection + +00:06:59.920 --> 00:07:02.639 +on Emacs dev level or at least on user level. + +00:07:02.640 --> 00:07:05.639 +Of course we need to keep in mind + +00:07:05.640 --> 00:07:07.279 +that there's some kind of bias + +00:07:07.280 --> 00:07:08.999 +because it's more likely + +00:07:09.000 --> 00:07:11.719 +that users already have problems with GC + +00:07:11.720 --> 00:07:13.239 +or they think they have problems with GC + +00:07:13.240 --> 00:07:15.919 +will report and submit the data. + +00:07:15.920 --> 00:07:19.999 +But anyway having s statistics is much more useful + +00:07:20.000 --> 00:07:22.079 +than just having anecdotal evidences + +00:07:22.080 --> 00:07:25.519 +from one or other reddit posts. + +00:07:25.520 --> 00:07:28.759 +And just one thing I will do + +00:07:28.760 --> 00:07:30.879 +during the rest of my presentation + +00:07:30.880 --> 00:07:32.839 +is that for all the statistics + +00:07:32.840 --> 00:07:35.679 +I will normalize user data + +00:07:35.680 --> 00:07:37.879 +so that every user contributes equally. + +00:07:37.880 --> 00:07:40.279 +For example if one user submits like + +00:07:40.280 --> 00:07:43.119 +100 hours Emacs uptime statistics + +00:07:43.120 --> 00:07:46.279 +and other users submit one hour Emacs uptime + +00:07:46.280 --> 00:07:52.879 +then I will anyway make it so that they contribute equally. + +00:07:52.880 --> 00:07:56.359 +Let's start from one of the most obvious things + +00:07:56.360 --> 00:07:57.679 +we can look into is + +00:07:57.680 --> 00:08:00.599 +which is the time it takes for garbage collection + +00:08:00.600 --> 00:08:05.879 +to single garbage collection process. + +00:08:05.880 --> 00:08:11.839 +Here you see frequency distribution of GC duration + +00:08:11.840 --> 00:08:14.999 +for all the 129 users we got + +00:08:15.000 --> 00:08:22.279 +and you can see that most of the garbage collections + +00:08:22.280 --> 00:08:26.999 +are done quite quickly in less than 0.1 second + +00:08:27.000 --> 00:08:32.199 +and less than 0.1 second is usually just not noticeable. + +00:08:32.200 --> 00:08:34.519 +So even though there is garbage collection + +00:08:34.520 --> 00:08:39.639 +it will not interrupt the work in Emacs. + +00:08:39.640 --> 00:08:43.279 +However there is a fraction of users + +00:08:43.280 --> 00:08:45.279 +who experience garbage collection + +00:08:45.280 --> 00:08:48.399 +it takes like 0.2, 0.3 or even half a second + +00:08:48.400 --> 00:08:50.399 +which will be quite noticeable. + +00:08:50.400 --> 00:08:55.279 +For the purposes of this study + +00:08:55.280 --> 00:08:59.399 +I will consider that anything that is less than 0.1 second + +00:08:59.400 --> 00:09:02.639 +which is insignificant so like you will not notice it + +00:09:02.640 --> 00:09:04.159 +and it's like obviously + +00:09:04.160 --> 00:09:07.479 +all the Emacs usage will be just normal. + +00:09:07.480 --> 00:09:11.639 +But if it's more than 0.1 or 0.2 seconds + +00:09:11.640 --> 00:09:13.799 +then it will be very noticeable + +00:09:13.800 --> 00:09:16.079 +and you will see that Emacs hang for a little while + +00:09:16.080 --> 00:09:21.319 +or not so little while. In terms of numbers + +00:09:21.320 --> 00:09:26.239 +it's better to plot the statistics not as a distribution + +00:09:26.240 --> 00:09:28.199 +but as a cumulative distribution. + +00:09:28.200 --> 00:09:31.559 +So like at every point of this graph + +00:09:31.560 --> 00:09:37.159 +you'll see like for example here 0.4 seconds + +00:09:37.160 --> 00:09:42.279 +you have this percent of like almost 90% of users + +00:09:42.280 --> 00:09:49.279 +have no more than 0.4 gc duration. + +00:09:49.280 --> 00:09:53.239 +So like we can look here if we take one + +00:09:53.240 --> 00:09:56.879 +gc critical gc duration which is 0.1 second + +00:09:56.880 --> 00:10:00.279 +0.1 second and look at how many users have + +00:10:00.280 --> 00:10:02.439 +it so we have 56% which is like + +00:10:02.440 --> 00:10:09.439 +44% users have less than 0.1 second gc duration + +00:10:09.440 --> 00:10:12.839 +and the rest 56% have more than 0.1 second. + +00:10:12.840 --> 00:10:16.279 +So you can see like more than half of users + +00:10:16.280 --> 00:10:20.559 +actually have noticeable gc delay + +00:10:20.560 --> 00:10:22.999 +so the Emacs freezes for some noticeable time + +00:10:23.000 --> 00:10:27.479 +and a quarter of users actually have very noticeable + +00:10:27.480 --> 00:10:31.799 +so like Emacs freezes such that you see an actual delay + +00:10:31.800 --> 00:10:36.879 +that Emacs actually has + +00:10:36.880 --> 00:10:44.079 +which is quite significant and important point. + +00:10:44.080 --> 00:10:47.719 +But apart from the duration of each individual gc + +00:10:47.720 --> 00:10:49.839 +it is important to see how frequent it is + +00:10:49.840 --> 00:10:52.879 +because even if you do notice a delay + +00:10:52.880 --> 00:10:54.959 +even a few seconds delay + +00:10:54.960 --> 00:10:56.999 +it doesn't matter if it happens once + +00:10:57.000 --> 00:10:59.199 +during the whole Emacs session. + +00:10:59.200 --> 00:11:05.039 +So if you look into frequency distribution again here + +00:11:05.040 --> 00:11:13.639 +I plot time between subsequent garbage collections + +00:11:13.640 --> 00:11:17.959 +versus how frequent it is and we have very clear trend + +00:11:17.960 --> 00:11:21.799 +that most of the garbage collections are quite frequent + +00:11:21.800 --> 00:11:25.159 +like we talk about every few seconds a few tens of seconds. + +00:11:25.160 --> 00:11:30.039 +There's a few outliers which are at very round numbers + +00:11:30.040 --> 00:11:35.839 +like 60 seconds, 120 seconds, 300 seconds. + +00:11:35.840 --> 00:11:37.879 +These are usually timers so like + +00:11:37.880 --> 00:11:40.319 +you have something running on timer + +00:11:40.320 --> 00:11:43.599 +and then it is complex command + +00:11:43.600 --> 00:11:45.079 +and it triggers garbage collection + +00:11:45.080 --> 00:11:48.079 +but it's not the majority. + +00:11:48.080 --> 00:11:51.279 +Again to run the numbers + +00:11:51.280 --> 00:11:53.679 +it's better to look into cumulative distribution + +00:11:53.680 --> 00:11:56.039 +and see that 50% of garbage collections + +00:11:56.040 --> 00:11:58.279 +are basically less than 10 seconds apart. + +00:11:58.280 --> 00:12:02.359 +And we can combine it with previous data + +00:12:02.360 --> 00:12:07.479 +and we look into whatever garbage collection + +00:12:07.480 --> 00:12:09.959 +takes less than 10 seconds from each other + +00:12:09.960 --> 00:12:13.119 +and also takes more than say 0.1 seconds. + +00:12:13.120 --> 00:12:15.319 +So and then we see that + +00:12:15.320 --> 00:12:17.639 +one quarter of all garbage collections + +00:12:17.640 --> 00:12:21.039 +are just noticeable and also frequent + +00:12:21.040 --> 00:12:23.679 +and 9% are not like + +00:12:23.680 --> 00:12:27.199 +more than 0.2% very noticeable and also frequent. + +00:12:27.200 --> 00:12:30.079 +So basically it constitutes Emacs freezing. + +00:12:30.080 --> 00:12:33.559 +So 9% of all the garbage collection Emacs freezing. + +00:12:33.560 --> 00:12:37.319 +Of course if you remember there is a bias + +00:12:37.320 --> 00:12:40.519 +but 9% is quite significant number. + +00:12:40.520 --> 00:12:44.319 +So garbage collection can really slow down things + +00:12:44.320 --> 00:12:48.239 +not for everyone but for significant fraction of users. + +00:12:48.240 --> 00:12:52.159 +Another thing I'd like to look into + +00:12:52.160 --> 00:12:55.399 +is what I call agglomerated GCs. + +00:12:55.400 --> 00:12:57.959 +What I mean by agglomerated is + +00:12:57.960 --> 00:13:00.359 +when you have one garbage collection + +00:13:00.360 --> 00:13:02.999 +and then another garbage immediately after it. + +00:13:03.000 --> 00:13:05.559 +So in terms of numbers I took + +00:13:05.560 --> 00:13:08.719 +every subsequent garbage collection + +00:13:08.720 --> 00:13:10.399 +which is either immediately after + +00:13:10.400 --> 00:13:13.039 +or no more than one second after each. + +00:13:13.040 --> 00:13:16.159 +So from point of view of users is like + +00:13:16.160 --> 00:13:19.999 +multiple garbage collection they add up together + +00:13:20.000 --> 00:13:22.999 +into one giant garbage collection. + +00:13:23.000 --> 00:13:25.839 +And if you look into numbers + +00:13:25.840 --> 00:13:29.559 +of how many agglomerated garbage collections there are + +00:13:29.560 --> 00:13:32.119 +you can see even numbers over 100. + +00:13:32.120 --> 00:13:35.479 +So 100 garbage collection going one after another. + +00:13:35.480 --> 00:13:39.159 +Even if you think about each garbage collection + +00:13:39.160 --> 00:13:42.719 +taking 0.1 second we look into 100 of them + +00:13:42.720 --> 00:13:44.639 +it's total 10 seconds. + +00:13:44.640 --> 00:13:46.839 +It's like Emacs hanging forever + +00:13:46.840 --> 00:13:53.519 +or like a significant number is also 10. + +00:13:53.520 --> 00:13:55.999 +So again this would be very annoying to meet such thing. + +00:13:56.000 --> 00:13:57.879 +How frequently does it happen? + +00:13:57.880 --> 00:14:00.279 +Again we can plot cumulative distribution + +00:14:00.280 --> 00:14:03.879 +and we see that 20 percent like 19 percent + +00:14:03.880 --> 00:14:07.199 +of all the garbage collection are at least two together + +00:14:07.200 --> 00:14:13.679 +and 8 percent like more than 10. So like you think about oh + +00:14:13.680 --> 00:14:15.639 +each garbage collection is not taking much time + +00:14:15.640 --> 00:14:24.479 +but when you have 10 of them yeah that becomes a problem. + +00:14:24.480 --> 00:14:29.919 +Another thing is to answer a question + +00:14:29.920 --> 00:14:32.959 +that some people complain about is that + +00:14:32.960 --> 00:14:35.799 +longer you use Emacs the slower Emacs become. + +00:14:35.800 --> 00:14:43.039 +Of course it may be caused by garbage collection + +00:14:43.040 --> 00:14:48.519 +and I wanted to look into how garbage collection time + +00:14:48.520 --> 00:14:49.679 +and other statistics, + +00:14:49.680 --> 00:14:53.199 +other parameters are evolving over time. + +00:14:53.200 --> 00:14:58.559 +And what I can see here is a cumulative distribution + +00:14:58.560 --> 00:15:03.719 +of GC duration for like first 10 minutes of Emacs uptime + +00:15:03.720 --> 00:15:06.479 +first 100 minutes first 1000 minutes. + +00:15:06.480 --> 00:15:10.199 +And if you look closer then you see + +00:15:10.200 --> 00:15:14.519 +that each individual garbage collection on average + +00:15:14.520 --> 00:15:18.959 +takes longer as you use Emacs longer. + +00:15:18.960 --> 00:15:24.039 +However this longer is not much it's like maybe 10 percent + +00:15:24.040 --> 00:15:29.479 +like basically garbage collection gets like + +00:15:29.480 --> 00:15:34.719 +slow Emacs down more as you use Emacs more but not much. + +00:15:34.720 --> 00:15:38.359 +So basically if you do you see Emacs + +00:15:38.360 --> 00:15:40.639 +being slower and slower over time + +00:15:40.640 --> 00:15:43.159 +it's probably not really garbage collection + +00:15:43.160 --> 00:15:45.839 +because it doesn't change too much. + +00:15:45.840 --> 00:15:48.119 +And if you look into time + +00:15:48.120 --> 00:15:50.839 +between individual garbage collections + +00:15:50.840 --> 00:15:53.719 +and you see that the time actually increases + +00:15:53.720 --> 00:15:56.719 +as you use Emacs longer which makes sense + +00:15:56.720 --> 00:15:58.839 +because initially like first few minutes + +00:15:58.840 --> 00:16:01.479 +you have all kind of packages loading + +00:16:01.480 --> 00:16:04.239 +like all the port loading and then later + +00:16:04.240 --> 00:16:07.239 +everything is loaded and things become more stable. + +00:16:07.240 --> 00:16:12.879 +So the conclusion on this part is that + +00:16:12.880 --> 00:16:16.399 +if Emacs becomes slower in a long session + +00:16:16.400 --> 00:16:18.479 +it's probably not caused by garbage collection. + +00:16:18.480 --> 00:16:23.679 +And one word of warning of course is that + +00:16:23.680 --> 00:16:27.919 +it's all nice and all when I present the statistics + +00:16:27.920 --> 00:16:29.279 +but it's only an average + +00:16:29.280 --> 00:16:34.079 +and if you are an actual user like here is one example + +00:16:34.080 --> 00:16:37.159 +which shows a total garbage collection time + +00:16:37.160 --> 00:16:40.119 +like accumulated together over Emacs uptime + +00:16:40.120 --> 00:16:43.199 +and you see different lines + +00:16:43.200 --> 00:16:45.559 +which correspond to different sessions of one user + +00:16:45.560 --> 00:16:48.679 +and you see they are wildly different + +00:16:48.680 --> 00:16:51.439 +like one time there is almost no garbage collection + +00:16:51.440 --> 00:16:54.679 +another time you see garbage collection + +00:16:54.680 --> 00:16:56.999 +because probably Emacs is used more early + +00:16:57.000 --> 00:16:59.599 +or like different pattern of usage + +00:16:59.600 --> 00:17:03.159 +and even during a single Emacs session + +00:17:03.160 --> 00:17:04.599 +you see a different slope + +00:17:04.600 --> 00:17:06.439 +of this curve which means that + +00:17:06.440 --> 00:17:09.279 +sometimes garbage collection is infrequent + +00:17:09.280 --> 00:17:11.479 +and sometimes it's much more frequent + +00:17:11.480 --> 00:17:14.479 +so it's probably much more noticeable one time + +00:17:14.480 --> 00:17:15.639 +and less noticeable other time. + +00:17:15.640 --> 00:17:19.719 +So if you think about these statistics of course + +00:17:19.720 --> 00:17:23.359 +they only represent an average usage + +00:17:23.360 --> 00:17:26.359 +but sometimes it can get worse sometimes it can get better. + +00:17:26.360 --> 00:17:33.759 +The last parameter I'd like to talk about is + +00:17:33.760 --> 00:17:35.799 +garbage collection during Emacs init. + +00:17:35.800 --> 00:17:40.439 +Basically if you think about what happens during Emacs init + +00:17:40.440 --> 00:17:41.919 +like when Emacs just starting up + +00:17:41.920 --> 00:17:44.479 +then whatever garbage collection + +00:17:44.480 --> 00:17:46.759 +there it's one or it's several times + +00:17:46.760 --> 00:17:51.239 +it all contributes to Emacs taking longer to start. + +00:17:51.240 --> 00:17:56.559 +And again we can look into the statistic + +00:17:56.560 --> 00:18:01.159 +and see what is the total GC duration after Emacs init + +00:18:01.160 --> 00:18:06.159 +and we see that 50% of all the submissions + +00:18:06.160 --> 00:18:10.279 +garbage collection adds up more than one second + +00:18:10.280 --> 00:18:14.919 +to Emacs init time and for 20% of users + +00:18:14.920 --> 00:18:17.079 +it's extra three seconds Emacs start time + +00:18:17.080 --> 00:18:18.479 +which is very significant + +00:18:18.480 --> 00:18:21.479 +especially for people who are used to Vim + +00:18:21.480 --> 00:18:23.919 +which can start in like a fraction of a second + +00:18:23.920 --> 00:18:26.239 +and here it just does garbage collection + +00:18:26.240 --> 00:18:27.439 +because garbage collection is not + +00:18:27.440 --> 00:18:29.239 +everything Emacs does during startup + +00:18:29.240 --> 00:18:31.999 +adds up more to the load. + +00:18:32.000 --> 00:18:36.119 +Okay that's all nice and all + +00:18:36.120 --> 00:18:38.679 +but what can we do about these statistics + +00:18:38.680 --> 00:18:40.159 +can we draw any conclusions + +00:18:40.160 --> 00:18:43.239 +and the answer is of course + +00:18:43.240 --> 00:18:46.079 +like the most important conclusion here is that + +00:18:46.080 --> 00:18:49.439 +yes garbage collection can slow down Emacs + +00:18:49.440 --> 00:18:52.679 +at least for some people and what to do about it + +00:18:52.680 --> 00:18:55.319 +there are two variables which you can tweak + +00:18:55.320 --> 00:18:58.719 +it's because gcconce threshold gcconce percentage + +00:18:58.720 --> 00:19:03.159 +and having the statistics I can at least look a little bit + +00:19:03.160 --> 00:19:08.879 +into what is the effect of increasing these variables + +00:19:08.880 --> 00:19:12.439 +like most people just increase gcconce threshold + +00:19:12.440 --> 00:19:16.959 +and like all the submissions people did increase + +00:19:16.960 --> 00:19:19.919 +and doesn't make much sense to decrease it + +00:19:19.920 --> 00:19:21.079 +like to make things worse + +00:19:21.080 --> 00:19:27.639 +of course for these statistics + +00:19:27.640 --> 00:19:31.559 +the exact values of this increased thresholds + +00:19:31.560 --> 00:19:33.839 +are not always the same + +00:19:33.840 --> 00:19:36.479 +but at least we can look into some trends + +00:19:36.480 --> 00:19:44.759 +so first and obvious thing we can observe + +00:19:44.760 --> 00:19:46.759 +is when we compare + +00:19:46.760 --> 00:19:50.399 +the standard gc settings standard thresholds + +00:19:50.400 --> 00:19:53.999 +and increased thresholds for time between + +00:19:54.000 --> 00:19:57.479 +subsequent gcs and as one may expect + +00:19:57.480 --> 00:19:59.559 +if you increase the threshold + +00:19:59.560 --> 00:20:02.679 +Emacs will do garbage collection less frequently + +00:20:02.680 --> 00:20:05.279 +so the spacing between garbage collection increases + +00:20:05.280 --> 00:20:07.599 +okay the only thing is that + +00:20:07.600 --> 00:20:10.719 +if garbage collection is less frequent + +00:20:10.720 --> 00:20:14.079 +then each individual garbage collection becomes longer + +00:20:14.080 --> 00:20:18.159 +so if you think about increasing + +00:20:18.160 --> 00:20:22.239 +garbage collection thresholds be prepared + +00:20:22.240 --> 00:20:26.519 +that in each individual time Emacs freezes will take longer + +00:20:26.520 --> 00:20:31.599 +this is one caveat when we talk about + +00:20:31.600 --> 00:20:34.079 +this agglomerated gcs which are one after other + +00:20:34.080 --> 00:20:36.759 +like if you increase the threshold sufficiently + +00:20:36.760 --> 00:20:42.319 +then whatever happened that garbage collections + +00:20:42.320 --> 00:20:44.399 +were like done one after other + +00:20:44.400 --> 00:20:47.599 +we can now make it so that they are actually separated + +00:20:47.600 --> 00:20:51.559 +so like you don't see one giant freeze caused by + +00:20:51.560 --> 00:20:52.919 +like 10 gcs in a row + +00:20:52.920 --> 00:20:55.759 +instead you can make it so that they are separated + +00:20:55.760 --> 00:20:59.079 +and in statistics it's very clear + +00:20:59.080 --> 00:21:02.959 +that the number of agglomerated garbage collections + +00:21:02.960 --> 00:21:06.919 +decreases dramatically when you increase the thresholds + +00:21:06.920 --> 00:21:11.759 +it's particularly evident when we look into startup time + +00:21:11.760 --> 00:21:17.279 +if you look at gc duration during Emacs startup + +00:21:17.280 --> 00:21:19.159 +and if we look into what happens + +00:21:19.160 --> 00:21:20.879 +when you increase the thresholds + +00:21:20.880 --> 00:21:23.799 +it's very clear that Emacs startup become faster + +00:21:23.800 --> 00:21:26.279 +when you increase gc thresholds + +00:21:26.280 --> 00:21:33.359 +so that's all for actual user statistics + +00:21:33.360 --> 00:21:35.439 +and now let's try to run into + +00:21:35.440 --> 00:21:38.079 +some like actual recommendations + +00:21:38.080 --> 00:21:42.639 +on what numbers to set and before we start + +00:21:42.640 --> 00:21:44.399 +let me explain a little bit about + +00:21:44.400 --> 00:21:46.479 +the difference between these two variables + +00:21:46.480 --> 00:21:48.879 +which is gc constant threshold and gc constant percentage + +00:21:48.880 --> 00:21:52.359 +so if you think about Emacs memory + +00:21:52.360 --> 00:21:55.239 +like there's a certain memory allocated by Emacs + +00:21:55.240 --> 00:21:58.479 +and then as you run commands and turn using Emacs + +00:21:58.480 --> 00:22:00.079 +there is more memory allocated + +00:22:00.080 --> 00:22:04.639 +and Emacs decides when to do garbage collection + +00:22:04.640 --> 00:22:06.079 +according these two variables + +00:22:06.080 --> 00:22:08.759 +and actually what it does it chooses the larger one + +00:22:08.760 --> 00:22:12.119 +so say you have you are late in Emacs session + +00:22:12.120 --> 00:22:14.039 +you have a lot of Emacs memory allocated + +00:22:14.040 --> 00:22:17.119 +then you have gc constant percentage + +00:22:17.120 --> 00:22:19.919 +which is percent of the already allocated memory + +00:22:19.920 --> 00:22:25.119 +and that percent is probably going to be the largest + +00:22:25.120 --> 00:22:28.319 +because you have more memory + +00:22:28.320 --> 00:22:32.559 +and memory means that percent of it is larger + +00:22:32.560 --> 00:22:36.359 +so like you have a larger number cost + +00:22:36.360 --> 00:22:37.719 +by gc constant percentage + +00:22:37.720 --> 00:22:43.079 +so in this scenario when Emacs session is already running + +00:22:43.080 --> 00:22:45.319 +for a long time and there is a lot of memory allocated + +00:22:45.320 --> 00:22:50.119 +you have gc constant percentage + +00:22:50.120 --> 00:22:52.279 +controlling the garbage collection + +00:22:52.280 --> 00:22:54.999 +while early in Emacs there is not much memory placed + +00:22:55.000 --> 00:22:58.719 +Emacs just starting up then gc constant threshold + +00:22:58.720 --> 00:23:01.639 +is controlling how frequently garbage collection happens + +00:23:01.640 --> 00:23:04.799 +because smaller allocated memory + +00:23:04.800 --> 00:23:06.839 +means its percentage will be a small number + +00:23:06.840 --> 00:23:12.319 +so in terms of default values at least + +00:23:12.320 --> 00:23:14.239 +gc constant threshold is 800 kilobytes + +00:23:14.240 --> 00:23:18.799 +and gc constant percentage is 10 + +00:23:18.800 --> 00:23:24.159 +so gc constant percentage becomes larger than that threshold + +00:23:24.160 --> 00:23:28.919 +when you have more than eight megabytes of allocated memory + +00:23:28.920 --> 00:23:31.039 +by Emacs which is quite early + +00:23:31.040 --> 00:23:34.279 +and it will probably hold just during the startup + +00:23:34.280 --> 00:23:36.799 +and once you start using your maximum + +00:23:36.800 --> 00:23:38.919 +and once you load all the histories + +00:23:38.920 --> 00:23:42.039 +all the kinds of buffers it's probably going to take + +00:23:42.040 --> 00:23:43.959 +more than much more than eight megabytes + +00:23:43.960 --> 00:23:50.639 +so now we understand this + +00:23:50.640 --> 00:23:53.279 +we can draw certain recommendations + +00:23:53.280 --> 00:23:57.279 +about tweaking the gc thresholds + +00:23:57.280 --> 00:24:01.159 +so first of all I need to emphasize + +00:24:01.160 --> 00:24:03.639 +that any time you increase gc threshold + +00:24:03.640 --> 00:24:07.199 +an individual garbage collection time increases + +00:24:07.200 --> 00:24:08.759 +so it's not free at all + +00:24:08.760 --> 00:24:10.999 +if you don't have problems with garbage collection + +00:24:11.000 --> 00:24:13.519 +which is half of the users don't have much problem + +00:24:13.520 --> 00:24:15.079 +you don't need to tweak anything + +00:24:15.080 --> 00:24:19.359 +only when gc is frequent and slow + +00:24:19.360 --> 00:24:23.399 +when Emacs is really really present frequently + +00:24:23.400 --> 00:24:27.119 +you may consider increasing gc thresholds only + +00:24:27.120 --> 00:24:31.479 +and in particular I recommend + +00:24:31.480 --> 00:24:33.279 +increasing gc constant percentage + +00:24:33.280 --> 00:24:36.359 +because that's what mostly controls gc + +00:24:36.360 --> 00:24:40.079 +when Emacs is running for long session + +00:24:40.080 --> 00:24:43.039 +and the numbers are probably like + +00:24:43.040 --> 00:24:46.519 +yeah we can estimate the effect of these numbers + +00:24:46.520 --> 00:24:49.679 +like for example if you have a default value of 0.1 percent + +00:24:49.680 --> 00:24:52.759 +for gc constant percentage 0.1 which is 10 percent + +00:24:52.760 --> 00:24:55.039 +and then increase it twice + +00:24:55.040 --> 00:24:58.639 +obviously you get twice less frequent gcs + +00:24:58.640 --> 00:25:02.559 +but it will come at the cost of extra 10 percent gc time + +00:25:02.560 --> 00:25:05.839 +and if you increase 10 times you can think about + +00:25:05.840 --> 00:25:08.719 +10 less 10 x less frequent gcs + +00:25:08.720 --> 00:25:12.199 +but almost twice longer individual garbage collection time + +00:25:12.200 --> 00:25:16.919 +so probably you want to set the number closer to 0.1 + +00:25:16.920 --> 00:25:23.399 +another part of the users may actually + +00:25:23.400 --> 00:25:28.359 +try to optimize Emacs startup time + +00:25:28.360 --> 00:25:30.759 +which is quite frequent problem + +00:25:30.760 --> 00:25:34.919 +in this case it's probably better to increase gc constant + +00:25:34.920 --> 00:25:38.199 +but not too much so like + +00:25:38.200 --> 00:25:40.239 +first of all it makes sense to check + +00:25:40.240 --> 00:25:43.319 +whether garbage collection is a problem at all + +00:25:43.320 --> 00:25:45.999 +during startup and there are two variables + +00:25:46.000 --> 00:25:50.199 +which can show what is happening this garbage collection + +00:25:50.200 --> 00:25:53.719 +so gc done is a variable that shows + +00:25:53.720 --> 00:25:55.039 +how many garbage collection + +00:25:55.040 --> 00:26:00.159 +like what is the number of garbage collections triggered + +00:26:00.160 --> 00:26:02.599 +like when you check the value + +00:26:02.600 --> 00:26:04.039 +or right after you start Emacs + +00:26:04.040 --> 00:26:04.799 +you will see that + +00:26:04.800 --> 00:26:08.519 +number and gc elapsed variable + +00:26:08.520 --> 00:26:11.599 +which gives you a number of seconds + +00:26:11.600 --> 00:26:14.959 +which Emacs spent in doing garbage collection + +00:26:14.960 --> 00:26:16.879 +so this is probably the most important variable + +00:26:16.880 --> 00:26:20.719 +and if you see it's large then you may consider tweaking it + +00:26:20.720 --> 00:26:26.799 +for the Emacs startup we can estimate some bounds + +00:26:26.800 --> 00:26:30.039 +because in the statistics I never saw anything + +00:26:30.040 --> 00:26:32.439 +that is more than 10 seconds extra + +00:26:32.440 --> 00:26:34.439 +which even 10 seconds is probably like + +00:26:34.440 --> 00:26:39.119 +a really really hard upper bound so + +00:26:39.120 --> 00:26:44.479 +or say if you want to decrease the gc contribution + +00:26:44.480 --> 00:26:47.479 +like order of magnitude or like two orders of magnitudes + +00:26:47.480 --> 00:26:50.879 +let's say like as a really hard top estimate + +00:26:50.880 --> 00:26:55.079 +then it corresponds to 80 megabytes gc constant + +00:26:55.080 --> 00:26:58.959 +and probably much less so like + +00:26:58.960 --> 00:27:00.679 +there's no point setting it + +00:27:00.680 --> 00:27:04.159 +to a few hundred megabytes of course + +00:27:04.160 --> 00:27:08.439 +there's one caveat which is important to keep in + +00:27:08.440 --> 00:27:14.039 +mind though that increasing the gc thresholds + +00:27:14.040 --> 00:27:16.399 +is not just increasing individual gc time + +00:27:16.400 --> 00:27:20.399 +there's also an actual real impact on the RAM usage + +00:27:20.400 --> 00:27:23.839 +so like if you increase gc threshold + +00:27:23.840 --> 00:27:26.879 +it increases the RAM usage of Emacs + +00:27:26.880 --> 00:27:29.639 +and you shouldn't think that like okay + +00:27:29.640 --> 00:27:33.159 +I increased the threshold by like 100 megabytes + +00:27:33.160 --> 00:27:37.119 +then 100 megabytes extra RAM usage doesn't matter + +00:27:37.120 --> 00:27:38.679 +it's not 100 megabytes + +00:27:38.680 --> 00:27:42.319 +because less frequent garbage collection means + +00:27:42.320 --> 00:27:45.639 +it will lead to memory fragmentation + +00:27:45.640 --> 00:27:50.439 +so in practice if you increase the thresholds + +00:27:50.440 --> 00:27:52.799 +to tens or hundreds of megabytes + +00:27:52.800 --> 00:27:55.919 +we are talking about gigabytes extra RAM usage + +00:27:55.920 --> 00:27:59.719 +for me personally when I tried to play with gc thresholds + +00:27:59.720 --> 00:28:02.879 +I have seen Emacs taking two gigabytes like + +00:28:02.880 --> 00:28:05.519 +compared to several times less + +00:28:05.520 --> 00:28:09.039 +when with default settings so it's not free at all + +00:28:09.040 --> 00:28:13.639 +and only like either when you have a lot of free RAM + +00:28:13.640 --> 00:28:16.839 +and you don't care or when your Emacs is really slow + +00:28:16.840 --> 00:28:19.559 +then you may need to consider this + +00:28:19.560 --> 00:28:23.239 +tweaking these defaults so again don't tweak defaults + +00:28:23.240 --> 00:28:24.239 +if you don't really have a problem + +00:28:24.240 --> 00:28:29.839 +and of course this RAM problem is a big big deal + +00:28:29.840 --> 00:28:35.679 +for Emacs devs because from from the point of single user + +00:28:35.680 --> 00:28:38.839 +you have like normal laptop most likely like normal PC + +00:28:38.840 --> 00:28:42.079 +with a lot of RAM you don't care about these things too much + +00:28:42.080 --> 00:28:48.999 +but Emacs in general can run on like all kinds of machines + +00:28:49.000 --> 00:28:51.679 +including low-end machines with very limited RAM + +00:28:51.680 --> 00:28:55.359 +and anytime Emacs developers consider increasing + +00:28:55.360 --> 00:28:57.959 +the defaults for garbage collection + +00:28:57.960 --> 00:29:01.479 +it's like they always have to consider + +00:29:01.480 --> 00:29:02.959 +if you increase them too much + +00:29:02.960 --> 00:29:07.919 +then Emacs may just stop running on certain platforms + +00:29:07.920 --> 00:29:14.439 +so that's a very big consideration in terms + +00:29:14.440 --> 00:29:16.639 +of the global defaults for everyone + +00:29:16.640 --> 00:29:22.199 +although I have to I would say that it might be related + +00:29:22.200 --> 00:29:24.479 +to the safe to increase GCCons threshold + +00:29:24.480 --> 00:29:27.919 +because it mostly affects startup and during startup + +00:29:27.920 --> 00:29:31.279 +it's probably not the peak usage of Emacs + +00:29:31.280 --> 00:29:35.599 +and like as Emacs runs for longer + +00:29:35.600 --> 00:29:38.199 +it's probably where most of RAM will be used later + +00:29:38.200 --> 00:29:44.399 +on the other hand GCCons percentage is much more debating + +00:29:44.400 --> 00:29:46.159 +because it has pros and cons + +00:29:46.160 --> 00:29:47.719 +it will increase the RAM usage + +00:29:47.720 --> 00:29:50.999 +it will increase the individual GC time so + +00:29:51.000 --> 00:29:56.119 +if we consider changing it it's much more tricky + +00:29:56.120 --> 00:29:59.479 +and we have discussing probably measure the impact on users + +00:29:59.480 --> 00:30:05.799 +and a final note on or from the point of view + +00:30:05.800 --> 00:30:07.319 +of Emacs development is + +00:30:07.320 --> 00:30:11.039 +that this simple mark-and-sweep algorithm + +00:30:11.040 --> 00:30:14.119 +is like a very old and not the state-of-the-art algorithm + +00:30:14.120 --> 00:30:17.799 +there are variants of garbage collection + +00:30:17.800 --> 00:30:19.479 +that are like totally non-blocking + +00:30:19.480 --> 00:30:22.479 +so Emacs just doesn't have to freeze + +00:30:22.480 --> 00:30:24.279 +during the garbage collection + +00:30:24.280 --> 00:30:26.839 +or there are variants of garbage collection algorithm + +00:30:26.840 --> 00:30:30.079 +that do not scan all the memory just fraction of it + +00:30:30.080 --> 00:30:33.439 +and scan another fraction less frequently + +00:30:33.440 --> 00:30:36.999 +so there are actually ways just to change + +00:30:37.000 --> 00:30:39.799 +the garbage collection algorithm to make things much faster + +00:30:39.800 --> 00:30:44.199 +of course like just changing the numbers of variables + +00:30:44.200 --> 00:30:47.079 +like the numbers of variable values + +00:30:47.080 --> 00:30:50.079 +is much more tricky and one has to implement it + +00:30:50.080 --> 00:30:52.239 +obviously it would be nice if someone implements it + +00:30:52.240 --> 00:30:55.639 +but so far it's not happening so yeah it would be nice + +00:30:55.640 --> 00:30:59.359 +but maybe not not so quickly + +00:30:59.360 --> 00:31:02.159 +there is more chance to change the defaults here + +00:31:02.160 --> 00:31:07.479 +to conclude let me reiterate the most important points + +00:31:07.480 --> 00:31:11.919 +so from point of view of users you need to understand that + +00:31:11.920 --> 00:31:14.479 +yes garbage collection may be a problem + +00:31:14.480 --> 00:31:16.679 +but not for everyone so like + +00:31:16.680 --> 00:31:21.079 +you should only think about changing the variables + +00:31:21.080 --> 00:31:23.559 +when you really know that garbage collection + +00:31:23.560 --> 00:31:27.479 +is the problem for you so if you have slow Emacs startup + +00:31:27.480 --> 00:31:30.919 +slow Emacs startup and you know that it's caused by + +00:31:30.920 --> 00:31:32.479 +garbage collection like by + +00:31:32.480 --> 00:31:35.999 +you can check the GC elapsed variable + +00:31:36.000 --> 00:31:39.679 +then you may increase GC count threshold + +00:31:39.680 --> 00:31:42.119 +like to few tens of megabytes not more + +00:31:42.120 --> 00:31:44.479 +it doesn't make sense to increase it much more + +00:31:44.480 --> 00:31:48.239 +and if you really have major problems + +00:31:48.240 --> 00:31:49.759 +with Emacs being slaggy + +00:31:49.760 --> 00:31:52.519 +then you can increase GC count percentage + +00:31:52.520 --> 00:31:55.999 +to like 0.2 0.3 maybe + +00:31:56.000 --> 00:31:57.679 +one is probably overkill + +00:31:57.680 --> 00:32:02.759 +but do watch your Emacs ROM usage it may be really impacted + +00:32:02.760 --> 00:32:09.719 +for Emacs developers I'd like to emphasize + +00:32:09.720 --> 00:32:12.439 +that there is a real problem with garbage collection + +00:32:12.440 --> 00:32:17.959 +and nine percent of all the garbage collection + +00:32:17.960 --> 00:32:22.079 +data points we have correspond + +00:32:22.080 --> 00:32:24.959 +to really slow noticeable Emacs precision + +00:32:24.960 --> 00:32:28.039 +and really frequent less than 10 seconds + +00:32:28.040 --> 00:32:32.319 +I'd say that it's really worth + +00:32:32.320 --> 00:32:35.279 +increasing GC count threshold at least during startup + +00:32:35.280 --> 00:32:40.159 +because it really impacts the Emacs startup time + +00:32:40.160 --> 00:32:41.519 +making Emacs startup much faster + +00:32:41.520 --> 00:32:44.799 +ideally we need to reimplement + +00:32:44.800 --> 00:32:48.599 +the garbage collection algorithm of course it's not easy + +00:32:48.600 --> 00:32:50.159 +but it would be really nice + +00:32:50.160 --> 00:32:56.399 +and for GC count percentage defaults it's hard to say + +00:32:56.400 --> 00:33:00.759 +we may consider changing it but it's up to discussion + +00:33:00.760 --> 00:33:03.119 +and we probably need to be conservative here + +00:33:03.120 --> 00:33:06.039 +so we came to the end of my talk + +00:33:06.040 --> 00:33:09.319 +and this presentation + +00:33:09.320 --> 00:33:11.839 +all the data will be available publicly + +00:33:11.840 --> 00:33:17.079 +and you can reproduce all the statistic graphs if you wish + +00:33:17.080 --> 00:33:21.920 +and thank you for attention diff --git a/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt new file mode 100644 index 00000000..e6ae083a --- /dev/null +++ b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt @@ -0,0 +1,4022 @@ +WEBVTT + + +00:00:01.719 --> 00:00:02.600 +[Speaker 0]: 5 seconds. Oh, actually, + +00:00:07.279 --> 00:00:08.320 +[Speaker 1]: Sorry, I keep delaying. + +00:00:08.320 --> 00:00:09.559 +I keep forgetting that we have an + +00:00:09.559 --> 00:00:11.639 +introduction now. The introduction is flying. + +00:00:02.600 --> 00:00:18.883 +[Speaker 0]: a little more. You're going to give a + +00:00:22.260 --> 00:00:24.320 +[Speaker 1]: Well, it's about 5 seconds now. + +00:00:19.675 --> 00:00:27.560 +[Speaker 0]: 30-second, right? Just say go when you want + +00:00:29.060 --> 00:00:31.280 +[Speaker 1]: Sure. You'll hear me anyway. + +00:00:27.560 --> 00:00:32.299 +[Speaker 0]: me to go. Okay. + +00:00:33.260 --> 00:00:35.220 +[Speaker 1]: All right, I think we are live now. + +00:00:35.220 --> 00:00:36.100 +So hi again, everyone. + +00:00:36.100 --> 00:00:37.900 +I promised you we would be back in about 30 + +00:00:37.900 --> 00:00:39.940 +seconds. I lied, it was actually 1 minute, + +00:00:40.160 --> 00:00:41.760 +but we are here with Bob. + +00:00:41.760 --> 00:00:42.840 +Hi, Bob, how are you doing? + +00:00:43.380 --> 00:00:46.940 +[Speaker 0]: Hi, doing great. Glad to + +00:00:46.940 --> 00:00:50.600 +[Speaker 1]: be with you. Yeah, glad to be here, + +00:00:50.600 --> 00:00:52.580 +and so are we. We're glad to have you again + +00:00:52.580 --> 00:00:54.440 +this year. So what we're going to do, + +00:00:54.440 --> 00:00:56.140 +we're not going to waste any time right now + +00:00:56.140 --> 00:00:57.880 +with chit-chats. What we're going to do, + +00:00:57.880 --> 00:00:59.059 +we're going to move straight into your + +00:00:59.059 --> 00:01:01.120 +presentation, Bob, so that you have as much + +00:01:01.120 --> 00:01:04.239 +time as you can. I'm going to recede into the + +00:01:04.239 --> 00:01:07.440 +background. I am going to full screen your + +00:01:07.440 --> 00:01:08.979 +presentation on a stream. + +00:01:09.860 --> 00:01:11.680 +And Bob, the floor is all yours. + +00:01:12.940 --> 00:01:14.720 +[Speaker 0]: Thank you very much, Leo. + +00:01:15.040 --> 00:01:18.400 +Glad to be here. I hope everybody has an idea + +00:01:18.400 --> 00:01:22.780 +of what Hyperbole is, but it's a broad + +00:01:22.900 --> 00:01:25.880 +information management system inside Emacs + +00:01:26.400 --> 00:01:28.540 +that works in all major modes. + +00:01:28.860 --> 00:01:31.760 +It's a global minor mode that you can turn on + +00:01:31.760 --> 00:01:34.760 +and off very rapidly so that you can just get + +00:01:34.760 --> 00:01:36.160 +in and out of hyperbole. + +00:01:36.760 --> 00:01:40.940 +And it works mostly from a mini buffer menu + +00:01:41.400 --> 00:01:44.040 +that if we just hit ctrl H H we see at the + +00:01:44.040 --> 00:01:47.420 +bottom of the screen here and as you see in + +00:01:47.420 --> 00:01:48.980 +some of this text right here, + +00:01:51.040 --> 00:01:55.680 +Dee will show you a demo with all these video + +00:01:55.680 --> 00:01:57.680 +links of Hyperbole now. + +00:01:57.900 --> 00:02:01.780 +But let's just get into the top 10 reasons to + +00:02:01.780 --> 00:02:08.840 +use Hyperbole. Number 10 is a key series + +00:02:10.160 --> 00:02:12.600 +curly braces. So you just put curly braces + +00:02:12.600 --> 00:02:17.620 +around any set of key sequences that you want + +00:02:19.760 --> 00:02:22.440 +and hyperbole magically turns that into what + +00:02:22.440 --> 00:02:25.640 +we call an implicit button a hyper button and + +00:02:25.640 --> 00:02:28.580 +any kind of text that you have so if we go + +00:02:28.580 --> 00:02:35.760 +down here and we just click click here we see + +00:02:35.820 --> 00:02:40.220 +it that was a complex button that said let's + +00:02:40.400 --> 00:02:43.200 +start a shell, let's set an environment + +00:02:43.320 --> 00:02:45.140 +variable as you see the command right up + +00:02:45.140 --> 00:02:47.420 +there, and then let's do a grep over the + +00:02:47.420 --> 00:02:50.680 +hyperbole code and find all instances of a + +00:02:50.680 --> 00:02:55.360 +particular label. So if we hit made a return, + +00:02:55.400 --> 00:02:57.260 +that's called the action key. + +00:02:57.280 --> 00:02:59.340 +That's what you use throughout hyperbole when + +00:02:59.340 --> 00:03:01.900 +you just want to activate any kind of button. + +00:03:02.020 --> 00:03:06.380 +So you see it jumped to the grep output and + +00:03:06.380 --> 00:03:08.440 +this is in a shell buffer it's not in a + +00:03:08.440 --> 00:03:11.180 +compilation buffer so anywhere that you have + +00:03:11.180 --> 00:03:13.760 +this sort of thing it's also an implicit + +00:03:13.780 --> 00:03:17.040 +button and any sort of grep output or + +00:03:17.040 --> 00:03:20.780 +compiler output you can just jump to with the + +00:03:22.120 --> 00:03:23.580 +same key, made a return. + +00:03:23.960 --> 00:03:29.240 +So that's key series, the first part. + +00:03:29.440 --> 00:03:33.880 +And then just to note that you can also just + +00:03:33.880 --> 00:03:39.000 +do a, well I'll just do it here and show you + +00:03:39.000 --> 00:03:43.380 +that you can do a recursive grep with this + +00:03:43.380 --> 00:03:45.840 +hyperbole command, HYPBR grep. + +00:03:46.060 --> 00:03:49.000 +And if you're in an Emacs list buffer, + +00:03:50.860 --> 00:03:54.740 +it will only grep across the Emacs list. + +00:03:54.760 --> 00:03:58.340 +So a very handy way to just go through your + +00:03:58.340 --> 00:04:01.040 +code very rapidly and then jump to various + +00:04:01.040 --> 00:04:04.280 +points in it. So we have a lot to cover + +00:04:04.280 --> 00:04:05.800 +today, so I'm going to go through this + +00:04:05.800 --> 00:04:07.560 +rapidly. This isn't a tutorial, + +00:04:07.800 --> 00:04:10.340 +it's just to get you interested in some of + +00:04:10.340 --> 00:04:13.060 +the features, and then there's a ton of + +00:04:13.060 --> 00:04:15.920 +reference material and videos now available + +00:04:15.980 --> 00:04:18.860 +for Hyperlink. So let's go to number 9. + +00:04:20.019 --> 00:04:22.360 +Path names become implicit buttons. + +00:04:22.500 --> 00:04:24.060 +You don't even have to quote them. + +00:04:24.060 --> 00:04:26.920 +You can add environment variables or elist + +00:04:26.920 --> 00:04:29.200 +variables with the syntax right here. + +00:04:29.380 --> 00:04:32.180 +So here we have a shell script that's + +00:04:32.180 --> 00:04:33.500 +somewhere on our path. + +00:04:33.680 --> 00:04:36.380 +And notice path is an environment variable + +00:04:36.380 --> 00:04:39.140 +with many different paths within it, + +00:04:39.140 --> 00:04:42.600 +right? But Hyperbole knows that and it + +00:04:42.600 --> 00:04:44.980 +searches the path, gets the first match, + +00:04:45.600 --> 00:04:48.620 +finds it, and finds the actual shell script. + +00:04:48.660 --> 00:04:50.420 +So you can just embed that anywhere. + +00:04:50.540 --> 00:04:52.160 +Here we have a list variable, + +00:04:52.280 --> 00:04:54.360 +hyperbdur, which is the home directory for + +00:04:54.360 --> 00:04:58.120 +hyperbole, and then a markdown file, + +00:04:58.320 --> 00:05:01.680 +and a link to a direct section in the file, + +00:05:01.780 --> 00:05:05.220 +and the 5 colon 5 means go to line 5 within + +00:05:05.220 --> 00:05:07.260 +that section and column 5. + +00:05:07.380 --> 00:05:09.400 +So let's just try it. Boom, + +00:05:09.420 --> 00:05:11.500 +we're right there, and we're on another link + +00:05:11.500 --> 00:05:13.220 +that we could activate as well. + +00:05:13.420 --> 00:05:17.960 +So notice the next line is the same link but + +00:05:17.960 --> 00:05:20.280 +this is how you normally have to do it in a + +00:05:20.280 --> 00:05:23.160 +markdown file. You have to change the section + +00:05:23.160 --> 00:05:25.640 +header to have dashes but with hyperbole you + +00:05:25.640 --> 00:05:28.120 +don't have to. You can just put it exactly + +00:05:28.140 --> 00:05:29.840 +like you see it in your file. + +00:05:30.540 --> 00:05:34.660 +Here the pound syntax for sections is really + +00:05:34.660 --> 00:05:36.640 +a generic syntax in the hyperbole. + +00:05:37.360 --> 00:05:39.840 +And so it works in all different kinds of + +00:05:39.840 --> 00:05:41.500 +files, your programming files. + +00:05:42.100 --> 00:05:45.240 +Here's a shell script and we said let's just + +00:05:45.240 --> 00:05:49.120 +go to the first comment that has alias in it. + +00:05:49.120 --> 00:05:51.700 +Notice we didn't have to say the whole line, + +00:05:51.700 --> 00:05:53.160 +just the first part of it. + +00:05:53.160 --> 00:05:58.140 +And it matched to it. Here we have a link to + +00:05:58.140 --> 00:06:01.680 +our hyperbole structured outliner called the + +00:06:01.680 --> 00:06:04.660 +K Outliner. And you can see it auto-numbers + +00:06:05.080 --> 00:06:08.000 +all these cells. But in addition to just + +00:06:08.000 --> 00:06:10.640 +displaying, you can also add a pipe symbol + +00:06:10.640 --> 00:06:14.900 +near the end and use this view syntax to clip + +00:06:14.900 --> 00:06:17.500 +to 2 lines and show blank lines. + +00:06:17.500 --> 00:06:19.920 +So let's see if each node gets clipped to 2 + +00:06:19.920 --> 00:06:22.680 +lines. So you see they're all just 2 now with + +00:06:22.680 --> 00:06:25.280 +the ellipses and then we can expand them. + +00:06:25.320 --> 00:06:28.760 +So a lot of power there just with path names. + +00:06:29.380 --> 00:06:31.120 +Let's continue to number 8. + +00:06:31.120 --> 00:06:32.940 +[Speaker 1]: Can I just interrupt you just a bit? + +00:06:33.420 --> 00:06:33.920 +[Speaker 0]: Yes. + +00:06:34.740 --> 00:06:37.720 +[Speaker 1]: I think your phone, so we have your phone set + +00:06:37.720 --> 00:06:40.460 +up in case your internet misbehaves and we've + +00:06:40.640 --> 00:06:42.080 +set this up before we started, + +00:06:42.100 --> 00:06:44.380 +but I think the vibration is a little loud + +00:06:44.380 --> 00:06:46.160 +whenever it does. Can you maybe move it a + +00:06:46.160 --> 00:06:50.380 +little bit? I think so. + +00:06:50.380 --> 00:06:51.880 +It will have to vibrate again. + +00:06:47.740 --> 00:06:54.220 +[Speaker 0]: Is that okay? No, my phone... + +00:06:54.380 --> 00:06:56.880 +Okay. It shouldn't have been vibrating. + +00:06:59.480 --> 00:07:01.260 +[Speaker 1]: have been another device, + +00:07:01.280 --> 00:07:02.800 +but definitely we had vibration. + +00:07:02.800 --> 00:07:04.500 +Anyway, carry on. Sorry for the interruption. + +00:06:57.640 --> 00:07:06.920 +[Speaker 0]: It could be me. It might So number 8, + +00:07:07.800 --> 00:07:10.520 +special prefixes. There are 3 prefixes you + +00:07:10.520 --> 00:07:11.820 +can attach to path names. + +00:07:11.820 --> 00:07:13.680 +The first, if you want to load, + +00:07:13.820 --> 00:07:16.040 +instead of just finding a file, + +00:07:16.620 --> 00:07:19.460 +an ELIST file, you can actually load it. + +00:07:19.540 --> 00:07:22.060 +And so I can just hit made a return on this, + +00:07:22.200 --> 00:07:24.300 +and you see in the mini buffer, + +00:07:25.200 --> 00:07:27.100 +it loaded it as compiled e-list. + +00:07:27.240 --> 00:07:29.340 +I could put a .el on here, + +00:07:29.500 --> 00:07:33.500 +a .elc, .gz, all of that'll work, + +00:07:33.580 --> 00:07:36.420 +and just put a dash in front to load it. + +00:07:36.580 --> 00:07:38.720 +If you want to run a shell command, + +00:07:38.720 --> 00:07:41.040 +just put an exclamation mark in front of + +00:07:41.040 --> 00:07:42.540 +something and again you can have the + +00:07:42.540 --> 00:07:44.620 +environment variable. So here we're saying + +00:07:44.620 --> 00:07:47.220 +run the program date and you see, + +00:07:48.400 --> 00:07:50.040 +let's see, let's do it again. + +00:07:50.160 --> 00:07:53.240 +There we go. It ran date and you see the + +00:07:53.240 --> 00:07:55.680 +output right there. And what if you want to + +00:07:55.680 --> 00:07:58.040 +run a graphical program on your system? + +00:07:58.620 --> 00:08:01.760 +Well here, we want to open a PDF file and I'm + +00:08:01.760 --> 00:08:05.340 +just using XDG Open on Linux, + +00:08:05.660 --> 00:08:09.440 +you could use Open on Mac and you just put an + +00:08:09.440 --> 00:08:12.840 +ampersand in front and there's the Hyperbole + +00:08:14.120 --> 00:08:15.840 +manual instantly displayed. + +00:08:16.120 --> 00:08:18.620 +So lots of power there and all of that + +00:08:18.820 --> 00:08:22.360 +actually .pdf's and many other file types are + +00:08:22.360 --> 00:08:25.080 +automatically linked to various programs by + +00:08:25.080 --> 00:08:27.340 +Hyperbole. So you could just use the path + +00:08:27.340 --> 00:08:29.340 +name itself and it would probably behave the + +00:08:29.340 --> 00:08:34.440 +same way. Number 7, bookmarks on steroids. + +00:08:35.460 --> 00:08:37.419 +So Hyperbole gives you a personal button + +00:08:37.419 --> 00:08:40.340 +file, which is on the menu you see here under + +00:08:40.400 --> 00:08:42.280 +button files, and then personal. + +00:08:43.039 --> 00:08:45.360 +So here we'll just display it. + +00:08:45.480 --> 00:08:47.720 +And you can put whatever you want in here, + +00:08:47.720 --> 00:08:49.860 +these implicit buttons of any type. + +00:08:49.860 --> 00:08:52.660 +You can name them the way here and you can + +00:08:52.660 --> 00:08:55.560 +activate either the name with MetaReturn or + +00:08:55.560 --> 00:08:56.920 +the button itself. So, + +00:08:56.920 --> 00:08:59.400 +of course, if we did MetaReturn here, + +00:08:59.860 --> 00:09:03.220 +we'd just display that in a web browser. + +00:09:03.940 --> 00:09:05.520 +I'll just do a few of these. + +00:09:05.540 --> 00:09:07.200 +So here's a section of line. + +00:09:07.200 --> 00:09:08.580 +Let's just jump there. + +00:09:09.120 --> 00:09:11.400 +But these can be all sorts of different + +00:09:11.400 --> 00:09:13.140 +actions that are going on. + +00:09:13.140 --> 00:09:16.040 +And you just, whatever cross references you + +00:09:16.040 --> 00:09:17.840 +want, you put in here. + +00:09:17.840 --> 00:09:20.400 +And the neat thing is that this then becomes + +00:09:20.940 --> 00:09:23.420 +a list of what we call global buttons. + +00:09:23.620 --> 00:09:26.540 +So when I go into the menu and I go control + +00:09:26.540 --> 00:09:30.640 +HHGA to activate a global button, + +00:09:30.720 --> 00:09:33.220 +you can see that all the names from this file + +00:09:33.220 --> 00:09:36.100 +appear here. So only the name buttons appear, + +00:09:36.160 --> 00:09:40.240 +and I could like go to the hyperbole to-do + +00:09:40.240 --> 00:09:42.260 +list and things like that. + +00:09:42.500 --> 00:09:45.660 +So very, very quick access to all your + +00:09:45.660 --> 00:09:47.440 +information whenever you need it. + +00:09:47.440 --> 00:09:49.600 +And that could be an org file as well if you + +00:09:49.600 --> 00:09:53.500 +prefer that. So we just took care of that. + +00:09:53.540 --> 00:09:57.000 +Number 6, instant test case running and + +00:09:57.000 --> 00:09:59.420 +debugging. This is a fairly new feature. + +00:10:00.100 --> 00:10:02.240 +What we're seeing here is a pre-release of + +00:10:02.240 --> 00:10:04.440 +version 9, which should be out within the + +00:10:04.440 --> 00:10:07.560 +next week. But the instructions at the + +00:10:07.560 --> 00:10:10.680 +beginning of the presentation tell you how to + +00:10:10.680 --> 00:10:13.720 +get the development version of HyperBlade, + +00:10:14.040 --> 00:10:15.560 +which is right now 8.01 + +00:10:15.880 --> 00:10:19.040 +pre, but that's virtually the same as what 9 + +00:10:19.120 --> 00:10:23.060 +will be. So you can grab that as of today. + +00:10:24.140 --> 00:10:27.540 +So let's just jump to a test file. + +00:10:27.700 --> 00:10:30.300 +What you see here is called an explicit + +00:10:30.360 --> 00:10:33.020 +button. You can actually make buttons where + +00:10:33.120 --> 00:10:35.820 +similar to org, where you just see a bit of + +00:10:35.820 --> 00:10:38.500 +the button and all of the metadata is hidden. + +00:10:39.060 --> 00:10:42.040 +I can say control A J and I see all about + +00:10:42.040 --> 00:10:43.940 +that button, exactly what it's going to do + +00:10:43.940 --> 00:10:47.200 +before I activate it and even who created it + +00:10:47.200 --> 00:10:50.680 +or last modified it. Then just queue out of + +00:10:50.680 --> 00:10:52.580 +here and you're back where you were. + +00:10:52.700 --> 00:10:56.820 +So now, what this did is link us to an ERT + +00:10:56.920 --> 00:10:59.920 +test. If you write tests in Emacs, + +00:10:59.920 --> 00:11:02.060 +you probably use ERT tests. + +00:11:02.220 --> 00:11:05.220 +So if I hit made a return on here it'll just + +00:11:05.220 --> 00:11:08.520 +run the test tell me it passed great okay but + +00:11:08.520 --> 00:11:11.760 +maybe I had a problem so let me use control + +00:11:11.760 --> 00:11:17.080 +you made a return and that will e-debug the + +00:11:17.080 --> 00:11:20.080 +test instantly. So now I'll step through it + +00:11:20.080 --> 00:11:22.200 +and it says, well, let's, + +00:11:23.000 --> 00:11:25.580 +this single line actually creates that + +00:11:25.580 --> 00:11:27.800 +explicit button. You see we have an empty + +00:11:27.800 --> 00:11:29.480 +buffer here that we're in. + +00:11:29.480 --> 00:11:31.780 +Now I step through that and now there's the + +00:11:31.780 --> 00:11:34.160 +explicit button that got put in there. + +00:11:34.160 --> 00:11:36.940 +Now the next line I step through it and this + +00:11:36.940 --> 00:11:39.160 +is going to check if we have the right action + +00:11:39.160 --> 00:11:42.260 +type and it returns true so that's good and + +00:11:42.260 --> 00:11:45.220 +now we should be it should be associated with + +00:11:45.220 --> 00:11:48.680 +the temp buffer returns true good And that's + +00:11:48.680 --> 00:11:51.360 +why what you saw before is this passed. + +00:11:51.720 --> 00:11:52.760 +The whole thing passed. + +00:11:53.000 --> 00:11:54.740 +So lots of power there. + +00:11:55.080 --> 00:11:57.600 +Simple to use. You're just using your made a + +00:11:57.600 --> 00:11:59.360 +return and prefix arguments. + +00:12:00.040 --> 00:12:03.240 +It's something everybody who develops should + +00:12:03.240 --> 00:12:07.640 +have. So number, let's go on. + +00:12:07.640 --> 00:12:09.720 +I think we're making pretty good time here, + +00:12:09.720 --> 00:12:11.240 +but I turned off my timer. + +00:12:13.000 --> 00:12:15.800 +Let's go to number 5. This is a very new + +00:12:15.800 --> 00:12:17.660 +feature, which is very cool too. + +00:12:17.720 --> 00:12:20.420 +You used to have to use the mouse probably + +00:12:20.440 --> 00:12:23.880 +and you could drag across windows to go from + +00:12:23.880 --> 00:12:26.820 +a source to a referent buffer and that would + +00:12:26.820 --> 00:12:28.340 +create a hyperlink for you. + +00:12:28.340 --> 00:12:30.880 +But now we've installed it and made it even + +00:12:30.880 --> 00:12:34.140 +easier on, we've installed it on a, + +00:12:34.860 --> 00:12:36.540 +on the hyperbole menus. + +00:12:37.040 --> 00:12:40.180 +So let's just go back to our presentation + +00:12:40.680 --> 00:12:43.660 +here and say we want to link to this line + +00:12:43.660 --> 00:12:46.160 +that we're on there. And I'll just create the + +00:12:46.160 --> 00:12:48.480 +button in our scratch buffer here so it + +00:12:48.480 --> 00:12:50.660 +doesn't really mess anything up. + +00:12:50.900 --> 00:12:53.980 +So I just put my point in where I want the + +00:12:53.980 --> 00:12:56.920 +button to appear and then I put point where I + +00:12:56.920 --> 00:13:00.060 +want it to link to in the other the other + +00:13:00.060 --> 00:13:02.800 +buffer and then I just say control HH to get + +00:13:02.800 --> 00:13:05.260 +my menu, I for implicit button, + +00:13:05.380 --> 00:13:07.940 +and then L for link. Boom, + +00:13:07.960 --> 00:13:09.980 +it inserts it, right at point. + +00:13:10.680 --> 00:13:12.880 +What did it do? It knew that this was in the + +00:13:12.880 --> 00:13:15.080 +hyperbole directory and I have a variable for + +00:13:15.080 --> 00:13:17.780 +that, so that if you sent this link to your + +00:13:17.780 --> 00:13:19.180 +friend who uses Hyperbole, + +00:13:19.440 --> 00:13:21.440 +it would still work right because they have a + +00:13:21.440 --> 00:13:22.860 +different hyperbole there. + +00:13:23.100 --> 00:13:27.380 +And then I want to go directly to line 116. + +00:13:28.360 --> 00:13:30.360 +So boom, it just took me there. + +00:13:30.820 --> 00:13:33.900 +So that's it. And Hyperbole is doing all this + +00:13:33.900 --> 00:13:36.420 +for you. You just say I want a link to this + +00:13:36.420 --> 00:13:38.940 +thing and it figures out what's at point and + +00:13:38.940 --> 00:13:42.240 +it determines the right type of implicit link + +00:13:42.240 --> 00:13:45.520 +to put there. And that's the whole point is + +00:13:45.520 --> 00:13:47.320 +that you're just working like when you're + +00:13:47.320 --> 00:13:50.500 +programming or you're writing an article and + +00:13:50.500 --> 00:13:53.520 +you just hit made a return or or pull up a + +00:13:53.520 --> 00:13:57.180 +menu and hit a key binding and you're off to + +00:13:57.180 --> 00:14:02.400 +the races. So that was implicit linking We + +00:14:02.400 --> 00:14:05.260 +can also create those explicit link buttons, + +00:14:06.200 --> 00:14:07.760 +and as well as the global link, + +00:14:07.760 --> 00:14:09.580 +where we would just give it a name, + +00:14:09.580 --> 00:14:11.640 +and it would automatically put it in our + +00:14:11.640 --> 00:14:14.640 +global button file without us even having + +00:14:14.640 --> 00:14:18.380 +that on screen. So lots of power there as + +00:14:18.380 --> 00:14:19.660 +well, lots of consistency. + +00:14:21.900 --> 00:14:25.040 +Now let's take a look at the K Outliner a + +00:14:25.040 --> 00:14:28.040 +little more. I'm just going to show you 1 + +00:14:28.040 --> 00:14:29.820 +feature actually. I don't have time to show + +00:14:29.820 --> 00:14:31.580 +you the K Outliner in detail, + +00:14:31.800 --> 00:14:34.220 +but it's a really cool structured outliner + +00:14:34.280 --> 00:14:36.400 +that even if you love Org Mode, + +00:14:36.580 --> 00:14:39.280 +you should try it. And this is 1 thing that + +00:14:39.280 --> 00:14:41.060 +you can't get with Org Mode, + +00:14:41.320 --> 00:14:45.100 +is let's say Hyperlink comes with an example + +00:14:45.100 --> 00:14:48.580 +file which teaches you about the K Outliner. + +00:14:48.960 --> 00:14:50.940 +So we'll just use that right here. + +00:14:51.180 --> 00:14:53.040 +And when you're in the K Outliner, + +00:14:53.080 --> 00:14:55.820 +you can bring up and go into the K Outliner + +00:14:55.900 --> 00:14:57.540 +menu right here at the bottom. + +00:14:58.200 --> 00:15:00.360 +And there's a format menu there. + +00:15:00.360 --> 00:15:02.600 +You always take the first letter of a menu, + +00:15:02.600 --> 00:15:05.100 +the first capital letter of a menu item. + +00:15:05.240 --> 00:15:08.720 +So F for format and then D for display in + +00:15:08.720 --> 00:15:11.700 +browser. So just let's do it. + +00:15:12.740 --> 00:15:17.220 +We have with 1 button or 1 key we've produced + +00:15:17.780 --> 00:15:23.660 +the entire outline in a collapsible outline + +00:15:23.720 --> 00:15:26.260 +in HTML. So I can go here. + +00:15:27.620 --> 00:15:29.240 +I just have to use my mouse. + +00:15:29.600 --> 00:15:33.300 +So I can expand and collapse these trees live + +00:15:34.220 --> 00:15:39.520 +with very basic coding. + +00:15:39.760 --> 00:15:42.680 +We tried to keep this as simple as possible. + +00:15:42.880 --> 00:15:45.580 +But you see it maintains the structure of the + +00:15:45.580 --> 00:15:47.880 +outline and even tables. + +00:15:55.120 --> 00:15:57.620 +So all the formatting is maintained and again + +00:15:57.620 --> 00:16:00.100 +it's instant. Or you can just export it to a + +00:16:00.100 --> 00:16:01.920 +file without displaying it. + +00:16:03.900 --> 00:16:05.880 +Very efficient kinds of operations. + +00:16:06.420 --> 00:16:10.960 +So that was number 4. Number 3 is a + +00:16:10.960 --> 00:16:13.400 +subsystem, another subsystem in Hyperbole + +00:16:13.440 --> 00:16:16.080 +called Hycontrol, which is for window and + +00:16:16.080 --> 00:16:18.600 +frame management. And I just wanted to show + +00:16:18.600 --> 00:16:20.920 +you 1 thing in there. It's got a lot of + +00:16:20.920 --> 00:16:24.400 +capabilities. But I always had the problem + +00:16:24.480 --> 00:16:28.340 +that Emacs wouldn't let me scale my fonts, + +00:16:28.380 --> 00:16:30.780 +all of my faces at the same time. + +00:16:30.840 --> 00:16:33.680 +I wanted to zoom. I didn't want to increase + +00:16:33.680 --> 00:16:36.260 +the default font size and all the others stay + +00:16:36.260 --> 00:16:40.660 +the same. So let's just display our faces + +00:16:41.260 --> 00:16:45.200 +right here and then we have a choice of + +00:16:45.200 --> 00:16:47.860 +either controlling frames or windows. + +00:16:47.920 --> 00:16:50.240 +So let's start by controlling frames. + +00:16:50.460 --> 00:16:52.760 +So you get another submenu when you're in + +00:16:52.760 --> 00:16:56.020 +high control to tell you what to do here. + +00:16:56.320 --> 00:16:59.480 +And there's just lowercase z and uppercase z. + +00:16:59.480 --> 00:17:03.400 +So let's try it. So it's scaling the entire + +00:17:03.400 --> 00:17:06.020 +frame. And you can see from the list of faces + +00:17:06.260 --> 00:17:08.500 +that they're all scaling at the same time. + +00:17:08.599 --> 00:17:10.220 +And I can go back down. + +00:17:10.760 --> 00:17:13.619 +Now if I switch to window mode, + +00:17:13.619 --> 00:17:16.099 +and there's a special fast way to do that, + +00:17:16.099 --> 00:17:18.819 +just hit T to toggle. And if you look at the + +00:17:18.819 --> 00:17:21.819 +bottom menu it says frames right now now it + +00:17:21.819 --> 00:17:25.599 +says windows when I hit T so now if I do the + +00:17:25.599 --> 00:17:30.640 +same Z to increase it's just this window and + +00:17:30.640 --> 00:17:36.800 +but it's you know it's the faces in there so + +00:17:37.200 --> 00:17:40.680 +a lot of power again but I just haven't found + +00:17:40.680 --> 00:17:43.220 +anywhere else that you can get that kind of + +00:17:43.220 --> 00:17:45.820 +control over your faces very rapidly. + +00:17:45.920 --> 00:17:51.640 +So that's number 3. Now number 2, + +00:17:55.360 --> 00:17:56.780 +let's put that in there. + +00:17:58.340 --> 00:18:03.320 +So the HiROLO is the final subsystem in + +00:18:03.320 --> 00:18:06.240 +Hyperbole and this has gotten much cooler. + +00:18:06.500 --> 00:18:08.680 +So it started off as a contact management + +00:18:08.680 --> 00:18:11.540 +system, but it's really just a hierarchical + +00:18:11.880 --> 00:18:15.060 +record management system that lets you have + +00:18:15.060 --> 00:18:18.020 +as many files, directories as you want, + +00:18:18.120 --> 00:18:20.280 +and you can search across all of them without + +00:18:20.280 --> 00:18:23.240 +any external utilities necessary, + +00:18:23.960 --> 00:18:26.240 +just what's built into Emacs and Hyperlink. + +00:18:26.760 --> 00:18:29.920 +So as you can see, we've expanded it to + +00:18:29.920 --> 00:18:31.820 +handle org files, markdown, + +00:18:32.300 --> 00:18:34.620 +K outlines, Emacs outlines. + +00:18:34.780 --> 00:18:36.820 +So what I'm going to do is just say, + +00:18:36.820 --> 00:18:40.680 +I want to search using my Hyberlo file list. + +00:18:40.680 --> 00:18:43.140 +You just set that to what you wanted to + +00:18:43.140 --> 00:18:44.820 +search. But now you have all this + +00:18:44.820 --> 00:18:46.520 +flexibility. You can use environment + +00:18:46.620 --> 00:18:48.840 +variables in it. You can just specify a + +00:18:48.840 --> 00:18:51.340 +directory and it will find all those matching + +00:18:51.340 --> 00:18:53.540 +files below that directory recursively. + +00:18:55.240 --> 00:18:58.460 +You can give it the markdown file here and + +00:18:58.460 --> 00:19:01.160 +you can use file wildcards as well. + +00:19:01.160 --> 00:19:04.340 +I mean, look at this. It's got a list + +00:19:04.340 --> 00:19:06.140 +variable in it and a wildcard, + +00:19:06.540 --> 00:19:09.840 +and it's just all I'm gonna do is I change + +00:19:09.840 --> 00:19:13.380 +this from a Lisp expression to make it a + +00:19:13.380 --> 00:19:15.380 +hyper button. You just change the outer + +00:19:15.380 --> 00:19:16.920 +parens to angle brackets, + +00:19:17.120 --> 00:19:19.620 +and then it's automatically an implicit + +00:19:21.040 --> 00:19:22.840 +button that you can activate with made a + +00:19:22.840 --> 00:19:26.340 +return so just ran that and now I've set my + +00:19:26.800 --> 00:19:29.440 +file list so now let's do a search it would + +00:19:29.440 --> 00:19:34.620 +be ctrl H H roll it X R and then S for search + +00:19:34.820 --> 00:19:36.680 +But I'll just do it this way. + +00:19:37.200 --> 00:19:40.320 +And boom, it found everything that fast. + +00:19:41.060 --> 00:19:42.940 +And I can just get like, + +00:19:43.180 --> 00:19:45.520 +show the top items in there. + +00:19:45.520 --> 00:19:48.260 +So I kind of have outlining in this buffer. + +00:19:48.340 --> 00:19:51.940 +I can just move to each match that I hit. + +00:19:51.980 --> 00:19:53.680 +And notice, although everything was + +00:19:53.680 --> 00:19:55.580 +collapsed, it's expanding here. + +00:19:55.640 --> 00:19:58.540 +When I move in and out of each of the entry + +00:19:58.540 --> 00:20:02.380 +matches, it expands or collapses as I move to + +00:20:02.380 --> 00:20:06.220 +the next 1. So a lot of power there. + +00:20:06.820 --> 00:20:09.120 +What else? So just tabbing through these + +00:20:09.120 --> 00:20:11.200 +things. And you notice that it's working + +00:20:11.200 --> 00:20:13.300 +across all of these different types, + +00:20:13.340 --> 00:20:16.220 +and it's telling you which file everything + +00:20:16.360 --> 00:20:17.840 +came from right up here. + +00:20:17.840 --> 00:20:19.940 +So I could just made a return here, + +00:20:20.220 --> 00:20:23.500 +should work. Yes, revisit the file normally. + +00:20:23.800 --> 00:20:25.760 +And it just pulls it right up. + +00:20:25.920 --> 00:20:28.400 +So everything is live and hyperbole. + +00:20:28.580 --> 00:20:30.120 +You've got hyperlinks everywhere. + +00:20:31.300 --> 00:20:33.740 +Let's just get rid of that. + +00:20:34.020 --> 00:20:41.600 +Go back to our demo. So if you are fans of + +00:20:41.600 --> 00:20:46.560 +Vertico and Consult, you can now use that + +00:20:46.560 --> 00:20:49.300 +with the High Rollo. So all you have to do is + +00:20:49.300 --> 00:20:51.440 +let's just format our windows, + +00:20:51.760 --> 00:20:55.720 +and then I'll say, let's use ConsultGrep over + +00:20:55.720 --> 00:20:58.880 +the Rolodex. Now, it found all the matches + +00:20:58.940 --> 00:21:02.060 +there, and I can just move live through them + +00:21:02.220 --> 00:21:04.640 +in the buffer like you may be used to or I + +00:21:04.640 --> 00:21:08.600 +can filter back down and say using orderless + +00:21:10.240 --> 00:21:13.700 +joystick or anything that has joy in it just + +00:21:13.700 --> 00:21:17.160 +match to those lines and then I can you know + +00:21:17.160 --> 00:21:20.020 +either jump there or quit out of here. + +00:21:20.020 --> 00:21:22.080 +I'll just quit out of it right now. + +00:21:22.540 --> 00:21:25.240 +So very cool. And all of that is using + +00:21:25.240 --> 00:21:28.640 +whatever you personally set as the set of + +00:21:28.640 --> 00:21:30.560 +files and directories you want to search. + +00:21:31.380 --> 00:21:35.940 +And finally, our number 1 feature of + +00:21:35.940 --> 00:21:40.440 +Hyperbole is you can customize this to give + +00:21:40.440 --> 00:21:43.460 +you these kinds of implicit buttons, + +00:21:44.660 --> 00:21:46.080 +whatever kind you want. + +00:21:46.560 --> 00:21:49.140 +And there are 3 levels of doing this. + +00:21:49.540 --> 00:21:51.140 +The first is for non-programmers. + +00:21:51.900 --> 00:21:53.700 +You can just set a string, + +00:21:54.400 --> 00:21:57.040 +like a URL with a parameter in it. + +00:21:57.180 --> 00:21:59.440 +So the %s represents the parameter, + +00:21:59.680 --> 00:22:01.440 +and This is how you do a search on + +00:22:01.440 --> 00:22:04.060 +DuckDuckGo. So all I have to do is evaluate + +00:22:04.320 --> 00:22:07.180 +this defal for action link. + +00:22:07.800 --> 00:22:11.020 +And now I have a new implicit button type + +00:22:11.040 --> 00:22:13.380 +that I can put between angle brackets. + +00:22:13.740 --> 00:22:15.640 +And I just give it that name, + +00:22:16.020 --> 00:22:18.000 +DDG, and some parameter, + +00:22:18.280 --> 00:22:20.040 +whatever I want to search for, + +00:22:20.080 --> 00:22:23.040 +and this is a button that does that search. + +00:22:25.320 --> 00:22:28.680 +Very cool, right? So you can embed these. + +00:22:28.680 --> 00:22:31.040 +This could be a hyperlink in, + +00:22:32.140 --> 00:22:35.120 +you know, a comment in a programming file. + +00:22:35.320 --> 00:22:38.160 +Anything on the entire web that you want to + +00:22:38.160 --> 00:22:42.320 +link to, whatever kind of compact notation + +00:22:42.840 --> 00:22:44.800 +you want to give it. So that's what we're + +00:22:44.800 --> 00:22:47.140 +going to learn as we get more advanced here + +00:22:47.140 --> 00:22:49.400 +you can give it even more compact notations. + +00:22:49.840 --> 00:22:52.380 +So as you get more advanced you can say, + +00:22:52.380 --> 00:22:54.240 +well I don't like this angle bracket, + +00:22:54.240 --> 00:22:57.020 +I want to have an implicit button that uses + +00:22:57.280 --> 00:22:59.620 +these square brackets and then an angle + +00:22:59.620 --> 00:23:02.080 +bracket inside it. So then you need the + +00:23:02.080 --> 00:23:05.200 +defile for implicit link. + +00:23:06.040 --> 00:23:08.860 +This lets you specify your start and end + +00:23:08.860 --> 00:23:12.180 +delimiters for your new type and and then you + +00:23:12.180 --> 00:23:14.840 +can give it a function that you wanted to run + +00:23:15.040 --> 00:23:18.320 +and that will take the text of whatever is in + +00:23:18.320 --> 00:23:19.780 +the button, in this case, + +00:23:19.900 --> 00:23:23.760 +test release here, and feed it to the + +00:23:23.760 --> 00:23:26.080 +function that I gave here. + +00:23:26.080 --> 00:23:29.540 +So what this function does is grep over my + +00:23:29.540 --> 00:23:33.420 +git log and find any commits that include the + +00:23:33.420 --> 00:23:35.360 +term test release in it. + +00:23:35.360 --> 00:23:38.200 +So let's try it. First I have to add the + +00:23:38.200 --> 00:23:41.740 +button type and that's all it takes and it + +00:23:41.740 --> 00:23:44.800 +defined it now. So anywhere in Emacs now I + +00:23:44.800 --> 00:23:46.920 +can use this button type essentially. + +00:23:47.180 --> 00:23:48.980 +So let me try to activate it. + +00:23:49.200 --> 00:23:52.760 +Okay, and it says yeah let's save it. + +00:23:53.080 --> 00:23:55.940 +Okay so now it's running a git log command. + +00:23:56.320 --> 00:23:59.440 +It found all the commits and now of course if + +00:23:59.440 --> 00:24:02.980 +I had made a return on this commit it + +00:24:02.980 --> 00:24:05.500 +recognizes it as an implicit link, + +00:24:05.680 --> 00:24:09.300 +and if I search for what was a test release, + +00:24:09.600 --> 00:24:11.960 +there it is. So this commit had that in + +00:24:11.960 --> 00:24:14.180 +there. So all these matches, + +00:24:14.180 --> 00:24:16.280 +so I don't know how other people do this, + +00:24:16.280 --> 00:24:20.040 +but for me this makes it a lot simpler. + +00:24:21.280 --> 00:24:24.800 +So a lot of power that any programmer can + +00:24:24.800 --> 00:24:27.500 +use. And finally, if you've mastered Emacs + +00:24:27.500 --> 00:24:29.360 +Lisp, or you're starting to, + +00:24:29.440 --> 00:24:33.740 +you can look in the hib types file in + +00:24:33.740 --> 00:24:37.320 +Hyperbole and see all sorts of uses of defib, + +00:24:37.500 --> 00:24:39.440 +which is defined implicit button. + +00:24:39.660 --> 00:24:42.660 +And that's the full power of e-LISP when you + +00:24:42.660 --> 00:24:45.060 +want to define 1. So what we're going to do + +00:24:45.060 --> 00:24:46.780 +here is I wanted to know, + +00:24:47.080 --> 00:24:49.700 +given a date, what the day of the week is. + +00:24:49.900 --> 00:24:53.040 +And because the date primitives weren't quite + +00:24:53.040 --> 00:24:54.640 +written the way I might like, + +00:24:55.080 --> 00:24:57.520 +it's a little longer than some. + +00:24:57.520 --> 00:25:00.400 +But I'm just going to evaluate this list. + +00:25:00.720 --> 00:25:06.100 +And I've now defined DOW as an action type. + +00:25:06.140 --> 00:25:08.500 +Now, how do I know I'm doing that? + +00:25:08.500 --> 00:25:10.700 +So I can always say Control-H, + +00:25:11.000 --> 00:25:13.580 +capital A here to see what a button's going + +00:25:13.580 --> 00:25:15.840 +to do. And it tells me When I'm there, + +00:25:15.840 --> 00:25:18.140 +I'm at a hyperbole button, + +00:25:18.400 --> 00:25:23.440 +and the type is from category DOW. + +00:25:24.000 --> 00:25:25.120 +And what's it gonna do? + +00:25:25.120 --> 00:25:27.420 +It takes a mark, it's gonna do a message + +00:25:27.440 --> 00:25:29.880 +action. Okay, so let's try it. + +00:25:31.300 --> 00:25:32.800 +It tells me that's a date, + +00:25:32.800 --> 00:25:34.220 +and it falls on a Sunday, + +00:25:34.220 --> 00:25:35.820 +which is today. That's correct. + +00:25:36.100 --> 00:25:39.020 +So 2 days from today is a Tuesday. + +00:25:39.800 --> 00:25:43.400 +Beautiful. So we've just totally transformed + +00:25:44.840 --> 00:25:46.860 +what we can do with text. + +00:25:46.980 --> 00:25:48.900 +You notice there's no markup here. + +00:25:49.000 --> 00:25:53.440 +And this is working with all of the other + +00:25:53.440 --> 00:25:55.600 +implicit types that we have everywhere in + +00:25:55.600 --> 00:25:57.920 +Emacs. It's only going to match to this kind + +00:25:57.920 --> 00:26:00.560 +of pattern and anywhere else, + +00:26:00.720 --> 00:26:02.820 +you know, it just won't trigger that type. + +00:26:03.460 --> 00:26:06.480 +So lots of power. You just need to get + +00:26:06.480 --> 00:26:07.700 +started with Hyperbole. + +00:26:07.960 --> 00:26:10.860 +There's great documentation both inside the + +00:26:10.860 --> 00:26:12.180 +code and in the manual. + +00:26:12.520 --> 00:26:15.460 +There's a fast demo that you can start with + +00:26:15.520 --> 00:26:17.800 +and there's about 10 different videos. + +00:26:18.260 --> 00:26:21.220 +There'll be 3 presentations on hyperbole here + +00:26:21.560 --> 00:26:25.660 +at the conference, and I hope you've enjoyed + +00:26:25.760 --> 00:26:28.200 +this presentation. I'd love to answer your + +00:26:28.200 --> 00:26:31.200 +questions and get some new users for + +00:26:31.200 --> 00:26:36.040 +Hyperbole. So lastly, I'd like to thank my + +00:26:36.040 --> 00:26:38.040 +co-maintainer, Matt, who's going to speak + +00:26:38.040 --> 00:26:42.040 +later about the extensive test protocols we + +00:26:42.040 --> 00:26:45.920 +have in Hyperbole. Hyperbole works on every + +00:26:46.120 --> 00:26:47.860 +version of Emacs from 27.1 + +00:26:48.480 --> 00:26:52.600 +up, and every operating system and Windows + +00:26:52.600 --> 00:26:56.120 +system that you use. And thanks so much to + +00:26:56.120 --> 00:26:58.680 +the volunteers and the speakers at EmacsConf. + +00:26:59.200 --> 00:27:02.000 +You do a great job, and we're all really + +00:27:02.000 --> 00:27:04.400 +appreciative that you take all the time that + +00:27:04.400 --> 00:27:06.240 +you do to make this happen. + +00:27:06.540 --> 00:27:07.620 +Thank you very much. + +00:27:09.960 --> 00:27:11.400 +[Speaker 1]: And thank you so much Bob. + +00:27:11.400 --> 00:27:14.680 +So I'll let you do the gymnastics to join us + +00:27:14.680 --> 00:27:16.440 +back on BBB and put your webcam. + +00:27:17.020 --> 00:27:18.840 +In the meantime, I'll invite people, + +00:27:19.120 --> 00:27:20.740 +as Sasha told you in the introduction, + +00:27:21.060 --> 00:27:23.600 +to go put your question in the pad. + +00:27:23.600 --> 00:27:25.900 +The link is on the talks page and also on + +00:27:25.900 --> 00:27:28.220 +IRC. So take your time. + +00:27:28.320 --> 00:27:29.900 +We've already got some people who've asked + +00:27:29.900 --> 00:27:33.060 +questions. You can also start joining the + +00:27:33.060 --> 00:27:35.140 +room. Let me just ping Sasha. + +00:27:35.540 --> 00:27:38.440 +Ping to open ID HyperAmp. + +00:27:39.280 --> 00:27:41.120 +So, you'll be able to join us on + +00:27:41.120 --> 00:27:43.260 +BigBlueButton as well to go chat with Bob + +00:27:43.260 --> 00:27:45.020 +more directly. I'm not sure if people have + +00:27:45.020 --> 00:27:46.480 +joined already. Not yet. + +00:27:50.220 --> 00:27:51.060 +So, Bob, what I'll do, + +00:27:51.060 --> 00:27:52.280 +we already have 4 questions. + +00:27:52.280 --> 00:27:54.080 +I'm gonna read them to you and you can take + +00:27:54.080 --> 00:27:54.900 +your time answering them, + +00:27:54.900 --> 00:27:57.340 +but we do have about 7 minutes until we go to + +00:27:57.340 --> 00:27:59.080 +the next talk, so we need to be a little bit + +00:28:00.420 --> 00:28:00.920 +[Speaker 0]: Okay. + +00:27:59.080 --> 00:28:03.260 +[Speaker 1]: chop-chop. All right, so reading the first + +00:28:03.260 --> 00:28:05.460 +questions, and I'm also going to display them + +00:28:05.460 --> 00:28:06.920 +for the stream to see, + +00:28:07.580 --> 00:28:09.740 +do buttons keep their metadata within the + +00:28:09.740 --> 00:28:12.380 +same file? E.g., would I see it if I change + +00:28:12.380 --> 00:28:13.940 +to fundamental mode, for instance? + +00:28:15.820 --> 00:28:19.340 +[Speaker 0]: So all of the things that I was showing you, + +00:28:19.340 --> 00:28:21.300 +implicit buttons have no metadata. + +00:28:21.900 --> 00:28:23.800 +That's the great thing about them, + +00:28:23.800 --> 00:28:27.400 +is you just type them in the buffer and what + +00:28:27.400 --> 00:28:30.020 +you see is all there is to that button and + +00:28:30.020 --> 00:28:33.300 +hyperbole generates all the smarts associated + +00:28:33.320 --> 00:28:35.780 +with them. When you create an explicit + +00:28:35.940 --> 00:28:38.680 +button, which I showed you 1 or 2 examples + +00:28:38.760 --> 00:28:42.720 +of, that metadata is, there is metadata with + +00:28:42.720 --> 00:28:45.860 +that, and that is stored in a separate file + +00:28:45.860 --> 00:28:47.860 +in the same directory called .hypb. + +00:28:49.240 --> 00:28:51.500 +So it's hidden away and it doesn't affect the + +00:28:51.500 --> 00:28:53.700 +format of the buffer that it's in. + +00:28:53.940 --> 00:28:56.540 +So again, what you see is what you get. + +00:28:56.600 --> 00:28:58.740 +You just see the delimiters around the + +00:28:58.740 --> 00:29:01.140 +explicit button and that's it. + +00:29:01.840 --> 00:29:04.500 +So Hyperbole takes care of all that for you. + +00:29:04.860 --> 00:29:08.360 +However, if you embed them into like a mail + +00:29:08.360 --> 00:29:09.440 +message, which you can, + +00:29:09.440 --> 00:29:12.180 +you can mail buttons, then there is a hidden + +00:29:12.180 --> 00:29:14.760 +area at the end of the mail message that + +00:29:14.760 --> 00:29:17.120 +encodes the metadata for the explicit + +00:29:17.120 --> 00:29:17.620 +buttons. + +00:29:19.540 --> 00:29:21.640 +[Speaker 1]: Ok, great. Next question. + +00:29:21.980 --> 00:29:24.560 +Is it possible to link to a file by its ID, + +00:29:24.720 --> 00:29:27.340 +like the node, org ID or some similar unique + +00:29:27.340 --> 00:29:28.120 +string inside? + +00:29:29.380 --> 00:29:32.620 +[Speaker 0]: Yes, In fact, that's 1 of the new features in + +00:29:33.280 --> 00:29:37.800 +9. You just made a return on an ID and it + +00:29:37.800 --> 00:29:40.780 +takes you right to the org node, + +00:29:40.840 --> 00:29:44.880 +works with org Rome and org straight out of + +00:29:44.880 --> 00:29:47.900 +the box. We're looking at ways to make it + +00:29:47.900 --> 00:29:50.040 +easier to just insert those in places, + +00:29:50.040 --> 00:29:52.840 +but since you have word keys that do that + +00:29:52.840 --> 00:29:55.600 +already, you can just insert them in any + +00:29:55.600 --> 00:29:58.360 +documents and Hyperbole will recognize them. + +00:29:58.360 --> 00:30:02.620 +I think In some cases you may need to put ID + +00:30:02.680 --> 00:30:05.400 +colon in front of the ID as well. + +00:30:05.740 --> 00:30:06.920 +Generally it works. + +00:30:08.560 --> 00:30:11.560 +[Speaker 1]: Ok, great. Moving on to the next question. + +00:30:12.120 --> 00:30:13.760 +Regarding the frames example, + +00:30:14.240 --> 00:30:16.320 +any thoughts or considerations for a + +00:30:16.320 --> 00:30:19.020 +transient interface or is this something 1 + +00:30:19.020 --> 00:30:22.280 +could already toggle? Are you familiar with + +00:30:22.280 --> 00:30:23.160 +transient interface? + +00:30:23.560 --> 00:30:26.700 +[Speaker 0]: Yes, we don't use transient because we, + +00:30:26.720 --> 00:30:30.140 +you know, Hyperbole started out in 1991, + +00:30:30.520 --> 00:30:34.300 +though it's had much much work since then so + +00:30:34.300 --> 00:30:37.940 +we predate a lot of newer things in Emacs and + +00:30:37.940 --> 00:30:41.400 +then we just use them as as they Become + +00:30:41.400 --> 00:30:45.480 +useful too hyperbole We think the The mini + +00:30:45.480 --> 00:30:46.720 +buffer menu is pretty good. + +00:30:46.720 --> 00:30:48.780 +We could rewrite stuff in transient, + +00:30:48.900 --> 00:30:51.600 +but we haven't seen the need yet. + +00:30:52.760 --> 00:30:54.960 +Maybe high control, that might be a good + +00:30:54.960 --> 00:30:58.480 +candidate, because there are so many keys in + +00:30:58.480 --> 00:31:00.480 +it. So we'll think about that. + +00:31:00.480 --> 00:31:03.060 +But it would be a while before we got to it. + +00:31:04.780 --> 00:31:07.120 +[Speaker 1]: Right. Moving on to the next question. + +00:31:07.120 --> 00:31:08.760 +Sorry I got really confused because there's a + +00:31:08.760 --> 00:31:10.620 +French salut, you know, + +00:31:10.660 --> 00:31:12.940 +in the text of it. Is someone saying hi to me + +00:31:12.940 --> 00:31:14.380 +or something? All right, + +00:31:14.380 --> 00:31:16.960 +next question. Regarding multi-file search + +00:31:16.960 --> 00:31:22.080 +functionality, why not implement it within + +00:31:22.080 --> 00:31:24.920 +the existing framework of MetaX grep or + +00:31:24.920 --> 00:31:26.180 +similar built-in commands? + +00:31:26.360 --> 00:31:28.620 +Yet another search interface sounds a bit + +00:31:28.620 --> 00:31:29.120 +redundant. + +00:31:30.920 --> 00:31:34.120 +[Speaker 0]: Multi-file search, so HiRolo I guess you're + +00:31:34.120 --> 00:31:36.380 +talking about. I think what you missed there + +00:31:36.380 --> 00:31:39.440 +is that High Rollo matches to records, + +00:31:40.080 --> 00:31:42.860 +multi-line records, so it's not a + +00:31:42.860 --> 00:31:45.360 +line-oriented match, it's a record-oriented + +00:31:45.820 --> 00:31:50.760 +match. So Grep, you can say maybe give me 3 + +00:31:50.760 --> 00:31:52.960 +lines of context, but what if I have a + +00:31:52.960 --> 00:31:56.100 +20-line record? I want to see the whole + +00:31:56.100 --> 00:31:59.060 +thing. And so, it's a full-text search + +00:31:59.060 --> 00:32:03.480 +interface, which lets you have any size + +00:32:04.220 --> 00:32:07.260 +entries or nodes in the match buffer. + +00:32:07.540 --> 00:32:10.760 +So that's 1 reason. MADAX grep works with + +00:32:10.760 --> 00:32:13.260 +hyperbole. I mean, you use it if you want and + +00:32:13.260 --> 00:32:16.080 +then you can hit MADA return on grep lines. + +00:32:16.480 --> 00:32:20.140 +So we basically take everything from POSIX + +00:32:20.320 --> 00:32:24.920 +and everything in Emacs and we try to make a + +00:32:24.920 --> 00:32:26.680 +lot of it simpler to use. + +00:32:26.680 --> 00:32:28.960 +We don't take away any of the functionality, + +00:32:29.480 --> 00:32:31.040 +we just augment it. + +00:32:32.780 --> 00:32:35.200 +[Speaker 1]: Right, and I think that's the logic for a lot + +00:32:35.200 --> 00:32:36.300 +of the packages, you know, + +00:32:36.300 --> 00:32:38.440 +the philosophy is just you create your little + +00:32:38.440 --> 00:32:40.280 +bit, your little island where you do your + +00:32:40.280 --> 00:32:42.160 +stuff. And if you can resonate with other + +00:32:42.160 --> 00:32:43.280 +islands so much the better. + +00:32:43.280 --> 00:32:45.600 +And it feels like between those islands, + +00:32:45.700 --> 00:32:48.380 +you know, hyperbole is a great way to connect + +00:32:48.380 --> 00:32:49.980 +things that are just text. + +00:32:50.140 --> 00:32:51.880 +So it's always been a lovely philosophy. + +00:32:52.200 --> 00:32:53.620 +There's always been a lovely philosophy + +00:32:53.620 --> 00:32:54.360 +behind it. + +00:32:55.240 --> 00:32:58.200 +[Speaker 0]: 1 other point I'd make there is that the + +00:32:58.200 --> 00:33:01.460 +Hyrolo also contains logical search + +00:33:01.460 --> 00:33:04.940 +operators. So when I typed in that string you + +00:33:04.940 --> 00:33:07.360 +could just as well type with like Lisp + +00:33:07.360 --> 00:33:09.140 +expressions, semi Lisp expressions. + +00:33:09.480 --> 00:33:13.460 +You can say open paren and word 1, + +00:33:13.940 --> 00:33:17.240 +word 2, close paren. You know you can have or + +00:33:17.240 --> 00:33:22.360 +and XOR and not and it'll do the search and + +00:33:22.360 --> 00:33:24.260 +just retrieve the entries, + +00:33:24.720 --> 00:33:27.620 +again, multi-line entries that match all of + +00:33:27.620 --> 00:33:29.660 +the criteria that you specified there. + +00:33:29.760 --> 00:33:31.120 +So that's fairly unique, + +00:33:31.120 --> 00:33:33.320 +I think. So you basically got a full text + +00:33:33.320 --> 00:33:35.840 +search platform with logical operators, + +00:33:36.380 --> 00:33:38.580 +instantly, you know, fast moving, + +00:33:38.680 --> 00:33:42.720 +rapid keys that you can control everything + +00:33:42.720 --> 00:33:45.280 +with and it's all integrated into this larger + +00:33:45.280 --> 00:33:45.780 +framework. + +00:33:47.780 --> 00:33:49.060 +[Speaker 1]: Okay, great. Well, Bob, + +00:33:49.060 --> 00:33:50.520 +you have 2 more questions, + +00:33:50.820 --> 00:33:53.760 +but there's a big 1 about what inspired you + +00:33:53.760 --> 00:33:56.440 +to write it back. It's being hyperbole around + +00:33:56.440 --> 00:33:57.360 +the time of its birth, + +00:33:57.360 --> 00:33:59.680 +but sadly, we only have about 1 more minute. + +00:34:00.040 --> 00:34:01.320 +So what I'm going to ask you to do, + +00:34:01.320 --> 00:34:02.780 +feel free to answer the question. + +00:34:02.800 --> 00:34:05.220 +If you go on BBB, I've pasted the link to the + +00:34:05.220 --> 00:34:06.980 +other pad. I think you can see it on your + +00:34:08.420 --> 00:34:11.020 +[Speaker 0]: I have the ether pad up. + +00:34:06.980 --> 00:34:11.820 +[Speaker 1]: computer as well. Right, + +00:34:11.820 --> 00:34:13.100 +so what are we going to do? + +00:34:14.860 --> 00:34:16.679 +I'm Sorry, I'm just a little bit pressed by + +00:34:16.679 --> 00:34:18.280 +time because it's not me controlling when we + +00:34:18.280 --> 00:34:19.340 +move on to the next talk, + +00:34:19.340 --> 00:34:21.679 +as was evidenced yesterday when we got yonked + +00:34:21.719 --> 00:34:24.000 +to the next talk. So Bob, + +00:34:24.000 --> 00:34:25.679 +feel free to take all the time you want to + +00:34:25.679 --> 00:34:26.580 +answer questions. People, + +00:34:26.580 --> 00:34:28.360 +if you wanna join the Big Blue Button room, + +00:34:28.360 --> 00:34:30.239 +the links are available and open on the talk + +00:34:30.239 --> 00:34:31.960 +page. You can join and ask as many questions + +00:34:31.960 --> 00:34:33.679 +as you want to Bob. And for us, + +00:34:33.679 --> 00:34:35.560 +with a live stream, we'll be moving on to the + +00:34:35.560 --> 00:34:37.280 +next talk in about 30 seconds. + +00:34:37.280 --> 00:34:39.400 +So Bob, all that's left is for me to thank + +00:34:39.400 --> 00:34:41.580 +you for your presentation again this year and + +00:34:43.520 --> 00:34:44.560 +[Speaker 0]: Thank you, Leo. + +00:34:41.580 --> 00:34:45.820 +[Speaker 1]: for all your answers. All right. + +00:34:45.820 --> 00:34:47.699 +Bye bye, Bob. And we'll be moving on to the + +00:34:47.699 --> 00:34:49.080 +next talk in about 10 seconds. + +00:34:49.080 --> 00:34:53.800 +See you in a bit. All right, + +00:34:53.800 --> 00:34:56.139 +Bob, we are off air I think now. + +00:34:56.139 --> 00:34:57.720 +Thank you so much. I need to get moving for + +00:34:59.320 --> 00:35:02.320 +[Speaker 0]: Okay, is somebody gonna keep writing answers + +00:35:02.500 --> 00:35:04.540 +in here or I need to type them in? + +00:34:57.720 --> 00:35:06.260 +[Speaker 1]: the next talk. It's probably best now if you + +00:35:06.260 --> 00:35:09.440 +read the questions on your own and answer + +00:35:09.440 --> 00:35:11.040 +them. We'll collate everything together, + +00:35:11.040 --> 00:35:12.480 +we'd just like to have your answers. + +00:35:15.060 --> 00:35:17.180 +[Speaker 0]: I hope some people will join the BBB. + +00:35:19.000 --> 00:35:21.380 +[Speaker 1]: it in my... All right, + +00:35:21.380 --> 00:35:21.880 +bye-bye. + +00:35:17.780 --> 00:35:23.300 +[Speaker 0]: But I'll start. I'll put Bye-bye. + +00:35:24.220 --> 00:35:28.580 +So let me take a second here to see what + +00:35:28.580 --> 00:35:32.980 +questions we have. Did we cover that? + +00:35:36.240 --> 00:35:42.900 +OK. The point is why not upstream search + +00:35:42.980 --> 00:35:46.580 +interface? Could you clarify that question? + +00:35:46.840 --> 00:35:51.380 +I don't quite know what that means. + +00:35:51.380 --> 00:35:53.760 +So I'll go on to the next 1 and come back to + +00:35:53.760 --> 00:35:57.680 +that. Hyperlinks been around for a number of + +00:35:57.680 --> 00:35:59.820 +years now. What inspired you to write it back + +00:35:59.820 --> 00:36:01.500 +around the time of its birth? + +00:36:01.800 --> 00:36:03.140 +Well, that's a great question. + +00:36:04.700 --> 00:36:07.360 +It was born before the World Wide Web, + +00:36:07.360 --> 00:36:09.300 +actually. And it was right before. + +00:36:10.120 --> 00:36:13.100 +I remember we were in the midst of a version + +00:36:13.840 --> 00:36:16.300 +when the first version of the web occurred. + +00:36:16.560 --> 00:36:19.840 +And I was thinking that there was going to be + +00:36:19.840 --> 00:36:22.700 +an information explosion of unstructured + +00:36:22.960 --> 00:36:27.140 +information. And like we needed to have much + +00:36:27.140 --> 00:36:30.920 +better tools to be able to manage say like + +00:36:30.920 --> 00:36:36.740 +5,000 email messages coming in and all sorts + +00:36:36.740 --> 00:36:39.260 +of non-database-oriented information + +00:36:39.480 --> 00:36:42.020 +structures. So I said we need an advanced + +00:36:42.180 --> 00:36:46.080 +interactive hypertext system and it needs to + +00:36:46.080 --> 00:36:49.320 +work with all the general capabilities that + +00:36:49.320 --> 00:36:54.100 +we use like email and our document production + +00:36:54.240 --> 00:36:58.500 +systems. So I was doing research at the time + +00:36:58.500 --> 00:37:04.200 +at a university And I decided to work on + +00:37:04.200 --> 00:37:06.140 +something that we called personalized + +00:37:06.420 --> 00:37:07.520 +information environments. + +00:37:07.900 --> 00:37:10.120 +And there's a paper about this out there if + +00:37:10.120 --> 00:37:12.040 +you want to dig it out on the web. + +00:37:12.900 --> 00:37:15.360 +So Pies, as they were called, + +00:37:16.320 --> 00:37:20.040 +was an architecture which would have a bunch + +00:37:20.040 --> 00:37:24.100 +of managers, like Hyperbole was 1 of the + +00:37:24.100 --> 00:37:25.820 +managers, the hypertext manager, + +00:37:26.520 --> 00:37:29.440 +and then a bunch of point tools that would + +00:37:29.440 --> 00:37:30.720 +leverage the managers, + +00:37:30.800 --> 00:37:33.580 +like an email reader would be a point tool + +00:37:33.680 --> 00:37:36.140 +that would leverage the hypertext manager. + +00:37:36.780 --> 00:37:39.480 +And so the first, I did in fact write + +00:37:39.480 --> 00:37:40.520 +something called PyMail, + +00:37:41.460 --> 00:37:43.840 +which was very much Gmail-like, + +00:37:44.660 --> 00:37:47.640 +before Gmail. And so inside, + +00:37:48.100 --> 00:37:51.300 +and I did a, it was like our mail in a way, + +00:37:51.680 --> 00:37:54.020 +but inside your our mail summaries, + +00:37:54.100 --> 00:37:57.180 +for example, you could have explicit buttons + +00:37:57.180 --> 00:38:01.120 +embedded and that were drawn from the subject + +00:38:01.120 --> 00:38:02.300 +of your email message, + +00:38:02.400 --> 00:38:06.180 +and they'd work just like the regular button. + +00:38:06.300 --> 00:38:07.540 +So it was very flexible, + +00:38:07.700 --> 00:38:11.660 +and it had rule-based processing and things. + +00:38:11.820 --> 00:38:13.520 +So Hyperbole came out of that, + +00:38:13.520 --> 00:38:15.040 +and it's come a long way, + +00:38:15.200 --> 00:38:20.360 +but it's still a very useful core hypertext + +00:38:20.480 --> 00:38:22.040 +system, hypermedia system, + +00:38:22.040 --> 00:38:26.580 +I should say. Are you familiar with the + +00:38:26.580 --> 00:38:28.780 +Embark package? I am a bit. + +00:38:28.820 --> 00:38:30.520 +I've just started using it. + +00:38:30.520 --> 00:38:31.900 +I think there's some overlapping + +00:38:32.040 --> 00:38:34.200 +functionality with hyperbole. + +00:38:34.340 --> 00:38:39.360 +Yes, we've found that people over time have + +00:38:39.360 --> 00:38:41.600 +enjoyed hyperbole and have started + +00:38:41.600 --> 00:38:43.940 +replicating some of its features, + +00:38:43.940 --> 00:38:45.880 +you know, small amounts of the features. + +00:38:47.680 --> 00:38:51.340 +I talked to, I hope I don't miss his name, + +00:38:51.340 --> 00:38:56.000 +but O'Adam who writes that once in a while we + +00:38:56.000 --> 00:38:59.480 +dialogue and I think Embark is great, + +00:38:59.480 --> 00:39:04.500 +you know, I'll give him some pointers too and + +00:39:04.500 --> 00:39:08.040 +he thinks that Embark and hyperbole are quite + +00:39:08.040 --> 00:39:10.740 +compatible too, just like organ hyperbole. + +00:39:11.120 --> 00:39:13.080 +So that's how we like to keep it. + +00:39:14.540 --> 00:39:18.160 +Some people prefer just a small package of + +00:39:18.160 --> 00:39:21.100 +mBARC, and it does different things than what + +00:39:21.100 --> 00:39:23.800 +Hyperbole does. So I think you use all of + +00:39:23.800 --> 00:39:27.540 +these tools together, and they can work very + +00:39:27.540 --> 00:39:33.960 +well together. Any other questions? + +00:39:34.280 --> 00:39:38.300 +Anybody still here? If not, + +00:39:38.440 --> 00:39:41.180 +probably people are off to another talk. + +00:39:41.940 --> 00:39:47.160 +So thank you very much And again look for + +00:39:47.160 --> 00:39:51.840 +Hyperbole version 9 in the next week. + +00:39:53.740 --> 00:39:56.880 +Thanks very much. Bye. + +00:40:00.620 --> 00:40:07.120 +Should I leave BBB? Oh Alpha Papa's here. + +00:40:07.120 --> 00:40:16.040 +Hey. Good to see you. Alright, + +00:40:16.040 --> 00:40:22.740 +well... Well, I'll stay for another minute, + +00:40:22.820 --> 00:40:27.280 +but I think I'm going to go off video 2 and + +00:40:27.280 --> 00:40:29.780 +start listening to another talk. + +00:40:30.660 --> 00:40:31.480 +Thanks, everyone. Thanks everyone. + +00:40:56.040 --> 00:40:56.960 +Yes, I can hear you. Yes, + +00:40:58.860 --> 00:41:00.060 +[Speaker 1]: Have you been answering questions? + +00:40:56.960 --> 00:41:03.700 +[Speaker 0]: I can hear you. finished answering the + +00:41:03.700 --> 00:41:05.200 +questions. We're all done. + +00:41:00.060 --> 00:41:07.360 +[Speaker 1]: I Okay, cool. Well, what I'm going to do, + +00:41:07.360 --> 00:41:09.140 +I'm going to close the room unless you want + +00:41:09.140 --> 00:41:10.140 +to go a little longer, + +00:41:10.140 --> 00:41:11.880 +because this talk that we're playing right + +00:41:11.880 --> 00:41:13.940 +now is finishing really quick and we don't + +00:41:13.940 --> 00:41:15.140 +have a Q&A afterwards. + +00:41:15.300 --> 00:41:19.040 +So, do you want to stay on air or something? + +00:41:19.440 --> 00:41:21.680 +[Speaker 0]: Yeah, if you let people know to come back, + +00:41:21.680 --> 00:41:23.320 +because someone went to go hear that + +00:41:23.320 --> 00:41:24.900 +presentation, I can stay. + +00:41:25.920 --> 00:41:27.880 +[Speaker 1]: Sure, I'll make an announcement then. + +00:41:27.880 --> 00:41:29.680 +And you can stay, we'll just put on BBB. + +00:41:29.680 --> 00:41:31.840 +You can stay muted until people join, + +00:41:31.840 --> 00:41:33.840 +but this way it opens up menus for people to + +00:41:33.840 --> 00:41:36.060 +join and if no 1 shows up in 5 minutes we'll + +00:41:36.060 --> 00:41:38.080 +all go on break. Does that sound okay? + +00:41:38.680 --> 00:41:40.020 +[Speaker 0]: Great, thank you. + +00:41:40.520 --> 00:41:44.340 +[Speaker 1]: Cool, I'll go back to the management in the + +00:41:44.340 --> 00:41:45.660 +background and I'll let you know. + +00:43:25.760 --> 00:43:27.540 +Okay, Bob, I've won the stream. + +00:43:27.660 --> 00:43:28.940 +We are joining it now. + +00:43:28.940 --> 00:43:30.380 +We've got about 5 seconds. + +00:43:41.940 --> 00:43:43.580 +And I think we are back. + +00:43:49.240 --> 00:43:51.300 +so we are gone, Bob, please. + +00:43:45.340 --> 00:43:53.260 +[Speaker 0]: Hi. So, yeah, I was going to say, + +00:43:54.100 --> 00:43:57.160 +can we see if anybody comes back in the room? + +00:43:57.160 --> 00:43:58.120 +How do you tell? + +00:44:01.380 --> 00:44:03.740 +[Speaker 1]: You should be able to show on the left, + +00:44:03.740 --> 00:44:04.920 +you've got on BbBlueButton, + +00:44:04.920 --> 00:44:06.380 +you've got a button, I'm showing it on the + +00:44:06.380 --> 00:44:08.440 +screen, but you've got a little button that + +00:44:08.440 --> 00:44:10.420 +allows you to show the people joining. + +00:44:10.840 --> 00:44:15.380 +So, hello everyone. Let's see if you had more + +00:44:15.380 --> 00:44:17.080 +question on your pad that we could be taking + +00:44:17.080 --> 00:44:19.040 +in the meantime, just give me a second to + +00:44:19.040 --> 00:44:19.240 +find + +00:44:19.240 --> 00:44:23.500 +[Speaker 0]: your pad. Here we go, an error occurred. + +00:44:31.820 --> 00:44:33.220 +[Speaker 1]: All right, it's loading up. + +00:44:25.680 --> 00:44:37.840 +[Speaker 0]: Okay. Wow. Feels like there's an AI writing + +00:44:37.960 --> 00:44:39.760 +this stuff on the pad. + +00:44:41.120 --> 00:44:44.740 +Has it? Is this the last pad? + +00:44:45.600 --> 00:44:47.080 +Oh no, this is a different 1, + +00:44:49.840 --> 00:44:51.520 +[Speaker 1]: Which question are you looking at now? + +00:44:47.080 --> 00:44:53.820 +[Speaker 0]: sorry. It was a different pad, + +00:44:55.840 --> 00:44:56.460 +[Speaker 1]: Oh right. + +00:44:53.820 --> 00:44:57.109 +[Speaker 0]: that was the problem. Okay, + +00:44:57.260 --> 00:44:59.540 +here we go. Okay, I'm back. + +00:45:00.540 --> 00:45:01.860 +So, yeah, it looks like... + +00:45:02.260 --> 00:45:03.980 +Is anybody back? Send, + +00:45:04.120 --> 00:45:07.180 +if you're here, send a chat message. + +00:45:08.520 --> 00:45:10.020 +[Speaker 1]: Yeah, because it's been something. + +00:45:10.640 --> 00:45:14.240 +You have, apparently, whenever we leave those + +00:45:14.320 --> 00:45:18.220 +BBB chat room open, the moment we go off air, + +00:45:18.260 --> 00:45:20.280 +people start joining and asking a lot of very + +00:45:20.280 --> 00:45:22.200 +interesting questions and you know that's all + +00:45:22.200 --> 00:45:24.280 +well and good, we'll be able to put them on + +00:45:24.280 --> 00:45:26.280 +the page later on. But it'd be great if you + +00:45:26.280 --> 00:45:28.260 +could also have those discussions when we are + +00:45:28.260 --> 00:45:30.140 +live because a lot of people would benefit + +00:45:30.140 --> 00:45:32.120 +from the brilliance that goes on in this + +00:45:32.120 --> 00:45:34.740 +room. So please don't be shy, + +00:45:37.340 --> 00:45:39.900 +[Speaker 0]: So we're on the general stream now? + +00:45:34.740 --> 00:45:41.780 +[Speaker 1]: join and talk. Yep, we are back on the + +00:45:41.780 --> 00:45:46.080 +general stream. We have about until 10 of the + +00:45:46.080 --> 00:45:48.180 +next hour, which is 19 minutes. + +00:45:48.760 --> 00:45:52.540 +[Speaker 0]: Just- Why don't you and I talk? + +00:45:52.540 --> 00:45:56.180 +So have you ever tried hyperbole, + +00:45:56.400 --> 00:45:56.900 +Leo? + +00:45:58.180 --> 00:46:00.220 +[Speaker 1]: I have never, but You know, + +00:46:00.220 --> 00:46:03.380 +it feels like every year when you present + +00:46:03.380 --> 00:46:05.140 +something, it feels like I already know so + +00:46:05.140 --> 00:46:07.580 +much. Because of the buttons, + +00:46:08.040 --> 00:46:10.080 +it feels like it's also something that we've + +00:46:10.080 --> 00:46:12.440 +reinvented many times in Emacs. + +00:46:12.440 --> 00:46:13.940 +It's like conversion to evolution, + +00:46:14.020 --> 00:46:16.540 +except you're the 1 who started ahead of + +00:46:16.540 --> 00:46:17.420 +everyone else. + +00:46:17.860 --> 00:46:19.700 +[Speaker 0]: Well, that's a good point because, + +00:46:19.940 --> 00:46:23.200 +you know, we have, Emacs itself has push + +00:46:23.200 --> 00:46:25.520 +buttons, which you see like in the help + +00:46:25.520 --> 00:46:27.540 +buffers. And those used to, + +00:46:27.540 --> 00:46:29.840 +we didn't really do anything with those, + +00:46:30.040 --> 00:46:32.780 +but now we've subsumed them as implicit + +00:46:32.800 --> 00:46:35.340 +buttons as well. So you're made a return, + +00:46:35.580 --> 00:46:38.500 +we'll work on those anywhere too. + +00:46:38.740 --> 00:46:41.820 +So, we're trying to get, + +00:46:42.260 --> 00:46:45.920 +you use 1 key, right? To control every type + +00:46:45.920 --> 00:46:47.080 +of button that you have. + +00:46:47.080 --> 00:46:48.420 +It works on org links, + +00:46:48.560 --> 00:46:51.800 +org buttons anywhere, or URLs. + +00:46:53.240 --> 00:46:54.440 +Because it's so simple. + +00:46:54.520 --> 00:46:58.820 +All you need is like 5 to 10 lines of code to + +00:46:58.820 --> 00:47:02.760 +map. You map the pattern that represents a + +00:47:02.760 --> 00:47:05.080 +concept, right? And then you can create an + +00:47:05.080 --> 00:47:07.720 +infinite number of those buttons from that + +00:47:07.720 --> 00:47:09.520 +type. That's what's really cool about + +00:47:09.520 --> 00:47:13.060 +Hyperbole, is say I have a 500 page document + +00:47:13.280 --> 00:47:15.600 +and it uses a really weird format for + +00:47:15.600 --> 00:47:17.060 +cross-referencing, right? + +00:47:17.220 --> 00:47:22.320 +I write my 3 lines of pattern match to work + +00:47:22.320 --> 00:47:24.200 +with that. And then everywhere throughout + +00:47:24.200 --> 00:47:25.960 +that document and the hundreds of other + +00:47:25.960 --> 00:47:27.680 +documents that will be created with that + +00:47:27.680 --> 00:47:30.900 +format, they're all live buttons instantly. + +00:47:31.280 --> 00:47:33.240 +Nothing changed about the document. + +00:47:34.220 --> 00:47:35.500 +That's really cool. You know, + +00:47:35.500 --> 00:47:37.860 +word mode, we have global word buttons, + +00:47:37.940 --> 00:47:42.040 +but mostly it has to be embedded within an + +00:47:42.040 --> 00:47:44.760 +org file, right? And follow that syntax. + +00:47:45.580 --> 00:47:51.900 +With hyperbole, it's like we can adapt as the + +00:47:51.900 --> 00:47:55.300 +world adapts around us to whatever formats + +00:47:55.320 --> 00:47:56.940 +people want to use that day. + +00:47:56.940 --> 00:47:59.380 +And you can even change things to look the + +00:47:59.380 --> 00:48:02.200 +way you want, right, and have your own + +00:48:02.440 --> 00:48:04.860 +cross-references. There's something built + +00:48:04.860 --> 00:48:07.560 +into Hyperbole that's not really active, + +00:48:08.220 --> 00:48:13.120 +which was sort of along the Zettelkasten way. + +00:48:13.780 --> 00:48:15.440 +We wrote this a long time ago. + +00:48:15.440 --> 00:48:16.960 +It's called hib-doc.el, + +00:48:19.120 --> 00:48:22.200 +and it's a card catalog notion. + +00:48:22.200 --> 00:48:25.820 +So it uses the high rollo in the background + +00:48:26.160 --> 00:48:30.180 +but it lets you create these forms that are + +00:48:30.180 --> 00:48:32.800 +cards that you fill out with whatever kind of + +00:48:32.800 --> 00:48:35.360 +data you want and then it gives you the full + +00:48:35.360 --> 00:48:38.520 +text searching across the cards and each card + +00:48:38.520 --> 00:48:41.760 +has a unique ID that you can reference + +00:48:41.820 --> 00:48:45.240 +similar to org IDs but these are human + +00:48:45.240 --> 00:48:49.860 +readable and human typable and so you can you + +00:48:49.860 --> 00:48:52.940 +can just have a cross-reference to any doc ID + +00:48:52.960 --> 00:48:56.100 +and essentially create what Engelbart used to + +00:48:56.100 --> 00:49:00.520 +call a journal, which is all these IDs on + +00:49:00.520 --> 00:49:03.220 +documents that point you directly to the + +00:49:03.220 --> 00:49:05.640 +document archive so that you could have like + +00:49:05.640 --> 00:49:10.020 +your internal publishing system and you know + +00:49:10.020 --> 00:49:12.940 +it's very simple to do and it's just 1 module + +00:49:13.420 --> 00:49:14.660 +added on to Hyperbole. + +00:49:15.920 --> 00:49:19.140 +[Speaker 1]: Yeah it's especially interesting for me you + +00:49:19.140 --> 00:49:21.140 +know because coming back to the side of + +00:49:21.140 --> 00:49:23.400 +convergent evolutions it's funny because the + +00:49:23.400 --> 00:49:24.880 +parameters are a little different. + +00:49:24.920 --> 00:49:26.260 +For us with org buttons, + +00:49:26.260 --> 00:49:29.340 +we're very happy. A lot of the stuff during + +00:49:29.340 --> 00:49:31.360 +EmacsConf is run with org mode, + +00:49:31.360 --> 00:49:34.340 +like we have Elisp going everywhere to + +00:49:34.540 --> 00:49:37.320 +compile a lot of org properties, + +00:49:38.080 --> 00:49:39.640 +like speaker information, + +00:49:39.660 --> 00:49:41.480 +for instance, how long the talk is, + +00:49:41.480 --> 00:49:42.800 +the title, and all this. + +00:49:42.800 --> 00:49:44.760 +We have all of this in an org file, + +00:49:44.760 --> 00:49:46.020 +which we use as a database, + +00:49:46.220 --> 00:49:47.800 +but then we can do so much stuff. + +00:49:47.800 --> 00:49:50.740 +We can send email and we can update the + +00:49:50.740 --> 00:49:52.200 +schedule. By the way, if you're interested in + +00:49:52.200 --> 00:49:54.280 +this, we'll have a talk on the DevTrack in + +00:49:54.280 --> 00:49:56.640 +the afternoon today that Sacha did and it's + +00:49:56.640 --> 00:49:58.140 +wonderful. I'm just teasing it. + +00:49:58.140 --> 00:49:59.040 +[Speaker 0]: Oh, that's great. + +00:50:00.060 --> 00:50:01.140 +[Speaker 1]: But coming back to Hyperbole, + +00:50:01.640 --> 00:50:04.000 +for you, it feels like the parameters were + +00:50:04.000 --> 00:50:06.560 +slightly different because the feeling was, + +00:50:06.560 --> 00:50:09.020 +I just want a tunnel that can work between + +00:50:09.020 --> 00:50:10.440 +any type of files. Now, + +00:50:10.440 --> 00:50:11.740 +it's all well and good. + +00:50:11.740 --> 00:50:14.540 +Org-Rome, D-Note, and all the stuff like + +00:50:14.540 --> 00:50:16.860 +this, they create bidirectional links. + +00:50:17.080 --> 00:50:19.540 +But it's only between org-mode files. + +00:50:19.840 --> 00:50:22.040 +Whereas what you're achieving with Hyperbole, + +00:50:22.260 --> 00:50:24.720 +and you've done it much earlier than everyone + +00:50:24.720 --> 00:50:27.420 +else, is that you have this concept + +00:50:27.660 --> 00:50:29.440 +regardless of the type of file that you're + +00:50:29.440 --> 00:50:32.520 +using. And I find this to be beautiful. + +00:50:32.900 --> 00:50:35.280 +Like 5 years ago, whenever you were talking + +00:50:35.280 --> 00:50:37.280 +about hyperbole, I did not have a concrete + +00:50:37.280 --> 00:50:38.540 +idea of what was happening. + +00:50:38.640 --> 00:50:40.360 +But ever since I've gone through the journey + +00:50:40.360 --> 00:50:42.380 +of really understanding what the El Caster + +00:50:42.380 --> 00:50:45.000 +method were about, it feels like you were + +00:50:45.720 --> 00:50:46.980 +foreigners in the topic. + +00:50:46.980 --> 00:50:48.540 +Obviously, you've mentioned the mother of all + +00:50:48.540 --> 00:50:50.240 +demos by Edward Engelbart, + +00:50:50.740 --> 00:50:54.100 +but those ideas are not novel, + +00:50:54.340 --> 00:50:56.820 +but it feels like only now are they starting + +00:50:56.820 --> 00:50:58.520 +to be appropriated by people, + +00:50:58.520 --> 00:50:59.800 +especially in free software, + +00:50:59.800 --> 00:51:01.200 +and it's really good to see. + +00:51:01.280 --> 00:51:02.440 +I'm really excited to, + +00:51:02.440 --> 00:51:04.600 +well, have my small part to play in this. + +00:51:04.600 --> 00:51:06.980 +And I'm also excited to be able to chat with + +00:51:06.980 --> 00:51:10.140 +you and people like Bastien and other people + +00:51:10.240 --> 00:51:11.400 +about all those topics. + +00:51:12.340 --> 00:51:13.780 +[Speaker 0]: Yeah, I think, you know, + +00:51:13.940 --> 00:51:16.640 +it's fun that we can laugh now about when + +00:51:16.640 --> 00:51:20.020 +people say people are still using Emacs, + +00:51:20.020 --> 00:51:22.800 +you know, is because they're not used, + +00:51:22.800 --> 00:51:24.160 +certain people aren't using it. + +00:51:24.160 --> 00:51:26.880 +They have no idea of how far it's come and + +00:51:26.880 --> 00:51:28.720 +how powerful it is. And, + +00:51:28.780 --> 00:51:31.520 +you know, we're leveraging Elisp heavily, + +00:51:31.560 --> 00:51:33.940 +obviously, but if you look at the definition + +00:51:34.300 --> 00:51:37.800 +of our types, they look exactly like DIP + +00:51:37.800 --> 00:51:41.180 +funds in ELisp. And we've been able to do + +00:51:41.180 --> 00:51:42.780 +that because of Lisp macros. + +00:51:43.860 --> 00:51:46.400 +You know, we so we basically have our own + +00:51:46.400 --> 00:51:48.300 +domain specific language there, + +00:51:48.420 --> 00:51:51.240 +but there's almost nothing to learn because + +00:51:51.340 --> 00:51:53.460 +it's just like what you know from UList. + +00:51:54.200 --> 00:51:57.120 +So again, you know, taking the concept and + +00:51:57.120 --> 00:51:59.700 +leveraging it, abstracting it and leveraging + +00:51:59.760 --> 00:52:02.980 +it multiple times gives you a lot of power. + +00:52:03.660 --> 00:52:06.060 +And people, you know, somebody said the other + +00:52:06.060 --> 00:52:07.500 +day, and I said, finally, + +00:52:07.760 --> 00:52:10.360 +this quote happened. He said, + +00:52:11.000 --> 00:52:15.060 +there's so many things that I do with + +00:52:15.060 --> 00:52:17.200 +hyperbole every day that I forget that I'm + +00:52:17.200 --> 00:52:21.440 +using hyperbole. Because it's just so + +00:52:21.440 --> 00:52:23.580 +embedded in this guy's workflow. + +00:52:23.680 --> 00:52:25.440 +And that's really how I use it. + +00:52:25.440 --> 00:52:27.380 +You know, there are features in there, + +00:52:27.440 --> 00:52:29.060 +can't use everything, right? + +00:52:29.060 --> 00:52:31.860 +So there are features that I don't use, + +00:52:32.040 --> 00:52:35.580 +but I use a lot of things and it's all like + +00:52:35.580 --> 00:52:37.580 +muscle memory, just like the keyboard, + +00:52:38.200 --> 00:52:39.740 +the Emacs key bindings. + +00:52:39.960 --> 00:52:42.180 +So it's very exciting to get to that level. + +00:52:42.180 --> 00:52:44.320 +And now, you know, we haven't started with + +00:52:44.320 --> 00:52:46.940 +the chatbots or any of the AI integration, + +00:52:47.300 --> 00:52:49.480 +but I'm starting to think about that a little + +00:52:49.480 --> 00:52:53.480 +bit and how we'll interface to that world and + +00:52:53.480 --> 00:52:55.320 +I think it's going to be very exciting. + +00:52:56.040 --> 00:52:58.340 +[Speaker 1]: Yeah, likewise and I think it harks back to + +00:52:58.340 --> 00:53:00.660 +what we were talking about before when we + +00:53:00.660 --> 00:53:03.700 +mentioned Hyperbole being a package inside of + +00:53:03.700 --> 00:53:05.300 +an ecosystem that is Emacs. + +00:53:05.860 --> 00:53:08.040 +But it's not because something is well + +00:53:08.040 --> 00:53:10.560 +circumscribed in terms of feature set that it + +00:53:10.560 --> 00:53:12.880 +does not influence everything around it. + +00:53:12.880 --> 00:53:15.060 +Like Hyperbole can be used with something + +00:53:15.060 --> 00:53:18.080 +completely at the opposite end of what it was + +00:53:18.080 --> 00:53:21.380 +intended for, just because it provides a good + +00:53:21.380 --> 00:53:23.860 +set of tools that can be used wherever else + +00:53:23.860 --> 00:53:26.100 +you want in Emacs. And it's the same thing + +00:53:26.100 --> 00:53:27.980 +with Org Mode, it's the same thing with many, + +00:53:27.980 --> 00:53:29.280 +many different things. + +00:53:29.440 --> 00:53:32.820 +And it feels like integrating AIs, + +00:53:33.400 --> 00:53:36.920 +or generative AIs, into Emacs would provide + +00:53:39.620 --> 00:53:42.340 +such a tool that could apply to any kind of + +00:53:42.340 --> 00:53:45.060 +other major mode or any kind of other use. + +00:53:45.060 --> 00:53:46.640 +So I'm also excited to see this. + +00:53:46.640 --> 00:53:50.280 +It feels like we are sitting at the brink of + +00:53:50.280 --> 00:53:52.580 +a revolution. I'm not going to say the acne + +00:53:52.580 --> 00:53:54.440 +stuff, but it definitely feels like right + +00:53:54.440 --> 00:53:57.560 +now, by trying to see what we can do with AI, + +00:53:57.560 --> 00:53:59.380 +it's definitely going to change the way not + +00:53:59.380 --> 00:54:01.560 +only we program, but also the way we take + +00:54:01.560 --> 00:54:03.160 +notes and the way we design stuff, + +00:54:03.160 --> 00:54:05.220 +arcing back to what John Wigley said + +00:54:05.220 --> 00:54:08.660 +yesterday about his draft program on macOS. + +00:54:09.800 --> 00:54:10.940 +Bob, if you don't mind, + +00:54:11.040 --> 00:54:13.100 +I see people typing questions and I also see + +00:54:13.100 --> 00:54:14.820 +people joining on people buttons, + +00:54:14.820 --> 00:54:16.920 +so I'm going to read you the 2 questions that + +00:54:16.920 --> 00:54:18.260 +have been added. Is that okay? + +00:54:19.200 --> 00:54:20.580 +[Speaker 0]: Great, go for it. + +00:54:21.240 --> 00:54:23.140 +[Speaker 1]: Cool, so first question. + +00:54:23.320 --> 00:54:25.240 +Wow, what you're describing now, + +00:54:25.240 --> 00:54:27.520 +and that's when you were talking about the + +00:54:27.520 --> 00:54:31.840 +bi-directional links and especially the last + +00:54:31.840 --> 00:54:33.080 +question in its entirety, + +00:54:33.540 --> 00:54:35.440 +What you're describing now reminds me a lot + +00:54:35.440 --> 00:54:37.440 +about HyperCard that I grew up on. + +00:54:37.440 --> 00:54:39.220 +Do you know if Hyperbole inspired Bill + +00:54:39.220 --> 00:54:41.040 +Atkinson or if you were inspired by + +00:54:41.040 --> 00:54:43.040 +HyperCard? Or were there just a lot of + +00:54:43.040 --> 00:54:44.860 +thoughts about hyper-contextuality around + +00:54:44.860 --> 00:54:45.520 +that time? + +00:54:46.780 --> 00:54:50.100 +[Speaker 0]: Alright, well this is another interesting + +00:54:50.320 --> 00:54:52.360 +anecdote. I don't know if it's true or not, + +00:54:52.360 --> 00:54:57.880 +but I think HyperCard predated our stuff. + +00:54:57.880 --> 00:55:00.480 +It was right around the same time when + +00:55:00.480 --> 00:55:02.420 +Hyperbole was starting out. + +00:55:02.540 --> 00:55:05.100 +But when I was doing the Pi research, + +00:55:06.040 --> 00:55:08.800 +I worked at, when I left school, + +00:55:08.800 --> 00:55:11.280 +I worked at Motorola, and we did a lot of + +00:55:11.280 --> 00:55:13.040 +work with Apple back then. + +00:55:13.180 --> 00:55:15.480 +And somebody came back and he said, + +00:55:15.480 --> 00:55:18.000 +you know, the people over there have seen + +00:55:19.120 --> 00:55:21.940 +your Pi research and they really liked it a + +00:55:21.940 --> 00:55:26.020 +lot. And so they were leveraging that when + +00:55:26.020 --> 00:55:28.440 +they decided to create the division that they + +00:55:28.440 --> 00:55:33.280 +called Apple Pi, which was the originator of + +00:55:33.280 --> 00:55:36.500 +the Newton which eventually led to the + +00:55:36.500 --> 00:55:40.960 +iPhone. So it all kind of is interconnected + +00:55:41.360 --> 00:55:44.380 +just like the impact that free software has + +00:55:44.380 --> 00:55:47.240 +had around the world. So you never know where + +00:55:47.240 --> 00:55:49.840 +your stuff is gonna go or end up. + +00:55:51.180 --> 00:55:53.400 +[Speaker 1]: Right. All right, moving on to the next + +00:55:53.400 --> 00:55:55.840 +question. Is it possible to only use 1 + +00:55:55.840 --> 00:55:57.740 +feature of hyperbole without the others, + +00:55:57.740 --> 00:56:00.580 +i.e. Using only the implicit explicit buttons + +00:56:00.580 --> 00:56:03.580 +without I control I roller or without having + +00:56:03.580 --> 00:56:05.920 +to rewrite part of the code in hyperbole in + +00:56:05.920 --> 00:56:08.040 +order to be able to load a smaller hyperbole. + +00:56:08.200 --> 00:56:09.140 +Does it make sense? + +00:56:10.260 --> 00:56:12.640 +[Speaker 0]: Yes we get asked this all the time. + +00:56:12.900 --> 00:56:16.560 +So you can use any little bit that you want + +00:56:16.560 --> 00:56:19.620 +anywhere right you can even just call code + +00:56:19.940 --> 00:56:23.660 +from Hyperbole. I mean you don't use + +00:56:23.680 --> 00:56:25.080 +everything in Emacs, right? + +00:56:25.080 --> 00:56:27.740 +But you still install Emacs on your machine. + +00:56:28.180 --> 00:56:30.080 +It's exactly the same thing. + +00:56:30.860 --> 00:56:33.280 +Those libraries don't take up any memory, + +00:56:33.280 --> 00:56:36.380 +they take up a little disk space and it's so + +00:56:36.380 --> 00:56:38.520 +trivial compared to the amount of disk we + +00:56:38.520 --> 00:56:41.780 +have today. So a lot of things are not loaded + +00:56:41.920 --> 00:56:43.760 +unless you activate them. + +00:56:45.040 --> 00:56:48.940 +And so I know that you do have to build all + +00:56:48.940 --> 00:56:51.360 +those things. So maybe that's what bothers + +00:56:51.360 --> 00:56:56.060 +people. It takes 2 minutes if you're using, + +00:56:56.320 --> 00:56:58.400 +it depends how fast your computer is. + +00:56:58.400 --> 00:57:01.160 +But you build it once on install like every + +00:57:01.160 --> 00:57:04.600 +other package. And it used to be that there + +00:57:04.600 --> 00:57:06.620 +would be a lot of warnings just because of + +00:57:06.620 --> 00:57:09.020 +the way we wrote the code and we didn't + +00:57:09.020 --> 00:57:11.120 +really have to deal with some of those + +00:57:11.120 --> 00:57:13.080 +warnings. But with this new release, + +00:57:13.080 --> 00:57:15.120 +we've gotten rid of almost all of them, + +00:57:15.200 --> 00:57:19.800 +including the native compiler messages. + +00:57:20.020 --> 00:57:22.620 +So it should be a very clean install now, + +00:57:22.900 --> 00:57:26.620 +and just use 1 part at a time. + +00:57:26.880 --> 00:57:29.820 +But the other parts are there in case you + +00:57:29.820 --> 00:57:32.080 +make a link to something and you use a + +00:57:32.080 --> 00:57:34.600 +facility just like I was showing as I went + +00:57:34.600 --> 00:57:36.360 +across subsystems today. + +00:57:36.600 --> 00:57:38.000 +It may take you a year, + +00:57:38.000 --> 00:57:40.120 +but then all of a sudden you find the use + +00:57:40.120 --> 00:57:42.340 +case for Hyrule and you say, + +00:57:42.340 --> 00:57:44.040 +oh, I'm glad I have it there. + +00:57:44.440 --> 00:57:47.540 +And yes, some of these things could be split + +00:57:47.540 --> 00:57:49.540 +into sub packages like you do in the org + +00:57:49.540 --> 00:57:52.500 +ecosystem. But given our limited resources on + +00:57:52.500 --> 00:57:56.400 +the team, we find having them all in 1 gives + +00:57:56.400 --> 00:57:59.040 +us a higher level of quality and lets us + +00:57:59.040 --> 00:58:02.840 +deliver a better integrated system for your + +00:58:02.840 --> 00:58:03.340 +use. + +00:58:04.740 --> 00:58:06.300 +[Speaker 1]: Yeah, exactly. And I think, + +00:58:06.300 --> 00:58:09.120 +you know, it's, it's not a monolith. + +00:58:10.080 --> 00:58:12.540 +I mean, it's usually easier, + +00:58:12.540 --> 00:58:14.620 +easy, more easy, more easy. + +00:58:14.620 --> 00:58:16.500 +Sorry, I was right on the first try. + +00:58:16.560 --> 00:58:20.580 +It's usually easier to maintain a monolith + +00:58:20.860 --> 00:58:23.140 +that contains many bits of functionality like + +00:58:23.140 --> 00:58:25.280 +org. You have plenty of people using org + +00:58:25.280 --> 00:58:27.180 +mode, not using org-agenda, + +00:58:27.340 --> 00:58:29.142 +for instance, or you've got plenty of people + +00:58:29.142 --> 00:58:31.560 +using org-mode and barely using Babel because + +00:58:31.560 --> 00:58:34.740 +it doesn't really translate to their use. + +00:58:35.460 --> 00:58:37.720 +And I feel like I very much agree with you. + +00:58:37.720 --> 00:58:39.520 +It's okay to install a package and only use + +00:58:39.520 --> 00:58:40.420 +some of the functions. + +00:58:40.600 --> 00:58:43.580 +I was reminded, as you were discussing this, + +00:58:43.580 --> 00:58:45.140 +of the consults package, + +00:58:45.380 --> 00:58:46.920 +which is part of the VertiCo, + +00:58:48.220 --> 00:58:51.060 +mbark and marginalia and all this. + +00:58:51.340 --> 00:58:54.960 +Consult, it replaces a lot of the Emacs + +00:58:54.960 --> 00:58:56.980 +built-in commands like for finding your + +00:58:56.980 --> 00:58:59.900 +buffers or finding text inside of your + +00:58:59.900 --> 00:59:03.960 +buffer. It's great. And you do not need to + +00:59:04.120 --> 00:59:06.300 +completely move to consult as you get + +00:59:06.300 --> 00:59:09.080 +started. You can start colonizing 1 step at a + +00:59:09.080 --> 00:59:11.540 +time the function that you usually use. + +00:59:12.620 --> 00:59:15.580 +And I highly recommend to people to not let + +00:59:15.580 --> 00:59:18.560 +the size of a project deter them from trying + +00:59:18.560 --> 00:59:20.580 +it out because, again, + +00:59:20.980 --> 00:59:22.800 +in Emacs, everything is horizontal. + +00:59:23.100 --> 00:59:28.180 +If somehow you want to use something that was + +00:59:28.180 --> 00:59:29.640 +not intended primarily for this, + +00:59:29.640 --> 00:59:32.220 +or if you only want to use 10% of a package, + +00:59:32.300 --> 00:59:35.500 +well, do it. An example that I have for me is + +00:59:35.500 --> 00:59:39.840 +that Lispy is the minor mode that I use for + +00:59:39.840 --> 00:59:42.380 +editing Elisp documents, + +00:59:42.740 --> 00:59:45.380 +and it's great. Elisp provides similar + +00:59:45.380 --> 00:59:46.260 +functions to ParaEdit, + +00:59:46.260 --> 00:59:47.720 +which might be a little more popular, + +00:59:47.780 --> 00:59:50.320 +which allows you to have modal editing when + +00:59:50.320 --> 00:59:52.840 +you are on specific parts of a file, + +00:59:52.840 --> 00:59:55.080 +like the opening parenthesis or the closing + +00:59:55.080 --> 00:59:56.480 +parenthesis. It's great, + +00:59:56.480 --> 00:59:58.320 +it provides modal editing for those modes, + +00:59:58.320 --> 01:00:01.340 +but I certainly do not know everything, + +01:00:02.220 --> 01:00:04.240 +every modal command associated to it. + +01:00:04.240 --> 01:00:06.180 +I just use the 1 that makes the most sense to + +01:00:06.180 --> 01:00:08.200 +me. So feel free to explore. + +01:00:11.040 --> 01:00:13.680 +[Speaker 0]: I'll just say we get this so much. + +01:00:13.740 --> 01:00:16.520 +It's not that large. I mean there's a fair + +01:00:16.520 --> 01:00:19.680 +number of files but it's just like 1 major + +01:00:19.680 --> 01:00:22.340 +directory and then the KOutliner directory. + +01:00:24.080 --> 01:00:25.560 +And when you look at these things, + +01:00:25.560 --> 01:00:27.140 +you install web applications, + +01:00:27.440 --> 01:00:30.420 +everything else, just when you download the + +01:00:30.420 --> 01:00:31.820 +source code, it's much, + +01:00:31.820 --> 01:00:34.040 +much smaller than any of that. + +01:00:34.140 --> 01:00:37.360 +So I don't know why people you know accept + +01:00:37.360 --> 01:00:39.660 +that it's larger than your typical package. + +01:00:39.960 --> 01:00:41.900 +Why there's really an issue there. + +01:00:43.080 --> 01:00:45.080 +[Speaker 1]: I think it's because people tend to assume + +01:00:46.240 --> 01:00:48.480 +that a paradigm like the 1 you're describing, + +01:00:48.480 --> 01:00:51.560 +which seems to be changing the way you use + +01:00:51.560 --> 01:00:53.480 +Emacs in a way because you're no longer + +01:00:53.480 --> 01:00:56.000 +thinking of as buffers as separate entities, + +01:00:56.000 --> 01:00:57.980 +you can tunnel between them. + +01:00:57.980 --> 01:01:00.180 +You know, it feels like a huge paradigm shift + +01:01:00.180 --> 01:01:02.300 +and you assume that the code behind it is + +01:01:02.300 --> 01:01:04.080 +going to be humongous as well, + +01:01:04.080 --> 01:01:05.380 +but it's usually not the case. + +01:01:05.380 --> 01:01:07.640 +It's just that the idea is very pure at the + +01:01:07.640 --> 01:01:10.060 +start, and the paradigm shift that it allows + +01:01:10.320 --> 01:01:14.120 +is also magnificent. But at the end of the + +01:01:14.120 --> 01:01:16.200 +day, the code is fairly simple, + +01:01:16.320 --> 01:01:18.360 +because it does 1 thing and it does it well. + +01:01:19.780 --> 01:01:21.180 +[Speaker 0]: 1 thing I noticed too, + +01:01:21.180 --> 01:01:23.760 +I mean I'm a big believer in turnkey kind of + +01:01:23.760 --> 01:01:27.180 +systems. In fact a long time ago when I built + +01:01:27.180 --> 01:01:31.160 +an IDE on Emacs called InfoDoc that was + +01:01:31.160 --> 01:01:32.480 +delivered pre-compiled. + +01:01:33.760 --> 01:01:35.980 +So it's like you download it like every other + +01:01:35.980 --> 01:01:39.480 +app and you run it. And so I think + +01:01:39.480 --> 01:01:42.480 +eliminating all the friction that occurs, + +01:01:42.740 --> 01:01:46.360 +and you know, I just got going recently with + +01:01:46.380 --> 01:01:49.160 +the wonderful packages that you just + +01:01:49.160 --> 01:01:51.460 +mentioned, VertiCo and Consult, + +01:01:51.460 --> 01:01:55.360 +but they don't have a manual that covers all + +01:01:55.360 --> 01:01:57.780 +that. They use sort of like a cookbook, + +01:01:58.260 --> 01:02:02.220 +a wiki online to answer a lot of the + +01:02:02.220 --> 01:02:04.600 +questions that people have and everybody has + +01:02:04.600 --> 01:02:07.640 +to figure out their configurations you know + +01:02:07.640 --> 01:02:11.380 +to make these things all work together. + +01:02:12.800 --> 01:02:16.460 +We'd like to do that engineering and say here + +01:02:16.460 --> 01:02:18.560 +it is you know it's like if you want to + +01:02:18.560 --> 01:02:20.320 +configure it and make it your own, + +01:02:20.320 --> 01:02:23.500 +you can do it. But there is a default + +01:02:23.760 --> 01:02:26.880 +configuration that handles all the typical + +01:02:26.880 --> 01:02:29.940 +use cases and you can just load it up and run + +01:02:30.060 --> 01:02:31.660 +because it's made to use, + +01:02:32.840 --> 01:02:36.500 +you don't have to hack it to make it useful + +01:02:36.500 --> 01:02:37.260 +for you. + +01:02:37.900 --> 01:02:40.560 +[Speaker 1]: Yeah, it reminds me of the discussion we had + +01:02:40.560 --> 01:02:42.740 +with Stéphane yesterday about sane defaults. + +01:02:43.320 --> 01:02:45.520 +And I think the question was, + +01:02:46.500 --> 01:02:49.080 +Emacs should probably ship with sane defaults + +01:02:49.080 --> 01:02:51.740 +for people. And Stéphane's answer was, + +01:02:51.740 --> 01:02:53.860 +well, my sane defaults might not be the same + +01:02:53.860 --> 01:02:55.220 +thing as your sane defaults. + +01:02:55.960 --> 01:02:57.560 +And that's why I think it's important, + +01:02:57.560 --> 01:02:59.340 +really, to have a core set of features, + +01:02:59.340 --> 01:03:01.300 +be it with hyperbole of org mode, + +01:03:01.360 --> 01:03:02.580 +that is well-documented, + +01:03:02.880 --> 01:03:05.460 +as you mentioned. But what I like about this + +01:03:05.460 --> 01:03:07.260 +in a way, and I think hyperbole is perhaps + +01:03:07.260 --> 01:03:09.340 +taking more benefits of this than Org Mode, + +01:03:09.340 --> 01:03:12.280 +is that the self-documentation aspect of it + +01:03:12.540 --> 01:03:14.540 +feels like it's easier with hyperbole because + +01:03:14.540 --> 01:03:17.320 +you're not bound by Org Mode buffers. + +01:03:17.320 --> 01:03:19.340 +You can link to just about everything. + +01:03:19.940 --> 01:03:24.240 +And for me, this ability to self-document is, + +01:03:24.240 --> 01:03:26.140 +well, first, very true to the philosophy of + +01:03:26.140 --> 01:03:27.480 +Emacs in the first place, + +01:03:27.500 --> 01:03:31.900 +but also opens up those resonance cycles + +01:03:32.020 --> 01:03:34.200 +where, oh, you get interested and then you + +01:03:34.200 --> 01:03:35.820 +start reading up and then the documentation + +01:03:35.820 --> 01:03:38.320 +is so good that it feeds into your practice + +01:03:38.320 --> 01:03:41.040 +and then it goes nuclear and you gain so much + +01:03:41.040 --> 01:03:42.540 +knowledge as a result of this. + +01:03:42.620 --> 01:03:44.480 +All right, Bob, we are about out of time. + +01:03:44.480 --> 01:03:46.280 +We only have about 1 minute until we go to + +01:03:46.280 --> 01:03:48.220 +the next talk. Do you have any passing words? + +01:03:50.180 --> 01:03:53.860 +[Speaker 0]: I do. I think, you know, + +01:03:54.280 --> 01:03:56.880 +the world's complex, it's getting more + +01:03:57.440 --> 01:04:00.520 +complex. I think that's why people use Emacs + +01:04:00.520 --> 01:04:02.560 +in the first place, because it's a big + +01:04:02.560 --> 01:04:04.920 +system. You wouldn't use it unless you wanted + +01:04:04.920 --> 01:04:06.600 +it to simplify your life. + +01:04:07.580 --> 01:04:10.760 +Hyperbole is built with the same idea in + +01:04:10.760 --> 01:04:13.640 +mind. You may not get it just like Lisp. + +01:04:13.740 --> 01:04:15.720 +A lot of people don't understand when they + +01:04:15.720 --> 01:04:17.420 +first encounter it, but when they do + +01:04:17.420 --> 01:04:19.580 +understand it, they're blown away. + +01:04:19.960 --> 01:04:21.360 +It changes their life. + +01:04:22.040 --> 01:04:25.020 +You know, when you really understand implicit + +01:04:25.120 --> 01:04:28.100 +buttons, I think that's 1 of the things in + +01:04:28.100 --> 01:04:30.860 +hyperbole that can change your Emacs working + +01:04:30.860 --> 01:04:34.080 +life. So just give that a try and I think + +01:04:34.080 --> 01:04:36.660 +you'll be pleasantly surprised across time. + +01:04:39.220 --> 01:04:40.920 +[Speaker 1]: you so much Bob. We'll be moving on to the + +01:04:40.920 --> 01:04:42.980 +next talk in about 20 seconds so everyone see + +01:04:42.980 --> 01:04:44.940 +you in a bit and Bob thank you so much again. + +01:04:37.040 --> 01:04:46.100 +[Speaker 0]: Thanks very much. And thank Thank you. + +01:04:51.140 --> 01:04:53.040 +[Speaker 1]: All right I think we are off here now. + +01:04:53.040 --> 01:04:53.940 +So thank you so much, Bob. + +01:04:53.940 --> 01:04:55.440 +I'm going to need to step out and get ready + +01:04:56.609 --> 01:04:59.240 +[Speaker 0]: Yeah, do your thing. You do a great job at + +01:04:59.240 --> 01:05:01.760 +it. But I wanted to ask you where in London + +01:04:55.440 --> 01:05:04.780 +[Speaker 1]: for the next talk. I'm not in London, + +01:05:05.280 --> 01:05:07.940 +I'm in France, and I just moved to London. + +01:05:01.760 --> 01:05:10.740 +[Speaker 0]: you are. Oh, okay, got it. + +01:05:11.200 --> 01:05:12.680 +Sorry, I thought you were. + +01:05:13.000 --> 01:05:13.720 +Take care. + +01:05:14.340 --> 01:05:15.060 +[Speaker 1]: All right, bye-bye, Bob. + +01:05:15.060 --> 01:05:15.750 +Thanks a lot. Bye-bye. + +01:05:15.750 --> 01:05:16.250 +Bye-bye. diff --git a/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt new file mode 100644 index 00000000..adc0d11e --- /dev/null +++ b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt @@ -0,0 +1,4625 @@ +WEBVTT + + +00:00:09.400 --> 00:00:09.519 +[Speaker 0]: 5 seconds. I keep forgetting we have an + +00:00:11.120 --> 00:00:11.620 +introduction now. The introduction is flying. + +00:00:20.560 --> 00:00:20.900 +[Speaker 1]: You're going to give a 30 second, + +00:00:23.820 --> 00:00:24.320 +[Speaker 0]: Well, it's about 5 seconds now. + +00:00:27.900 --> 00:00:28.400 +[Speaker 1]: right? Just say go when you want me to go. + +00:00:30.780 --> 00:00:31.280 +[Speaker 0]: Sure. You'll hear me anyway. + +00:00:31.800 --> 00:00:32.299 +[Speaker 1]: Okay. + +00:00:34.900 --> 00:00:35.220 +[Speaker 0]: All right, I think we are live now. + +00:00:35.800 --> 00:00:36.100 +So hi again, everyone. + +00:00:37.680 --> 00:00:37.900 +I promised you we would be back in about 30 + +00:00:39.440 --> 00:00:39.940 +seconds. I lied, it was actually 1 minute, + +00:00:41.320 --> 00:00:41.760 +but we are here with Bob. + +00:00:42.340 --> 00:00:42.840 +Hi, Bob, how are you doing? + +00:00:46.780 --> 00:00:46.940 +[Speaker 1]: Hi, doing great. Glad to + +00:00:50.220 --> 00:00:50.600 +[Speaker 0]: be with you. Yeah, glad to be here, + +00:00:52.340 --> 00:00:52.580 +and so are we. We're glad to have you again + +00:00:54.280 --> 00:00:54.400 +this year. So what we're going to do, + +00:00:55.920 --> 00:00:56.140 +we're not going to waste any time right now + +00:00:57.739 --> 00:00:57.880 +with chit-chats. What we're going to do, + +00:00:58.940 --> 00:00:59.059 +we're going to move straight into your + +00:01:00.860 --> 00:01:01.120 +presentation, Bob, so that you have as much + +00:01:04.080 --> 00:01:04.239 +time as you can. I'm going to recede into the + +00:01:07.280 --> 00:01:07.440 +background. I am going to full screen your + +00:01:08.479 --> 00:01:08.979 +presentation on a stream. + +00:01:11.180 --> 00:01:11.680 +And Bob, the floor is all yours. + +00:01:14.220 --> 00:01:14.720 +[Speaker 1]: Thank you very much, Leo. + +00:01:18.000 --> 00:01:18.400 +Glad to be here. I hope everybody has an idea + +00:01:22.280 --> 00:01:22.780 +of what Hyperbole is, but it's a broad + +00:01:25.380 --> 00:01:25.880 +information management system inside Emacs + +00:01:28.040 --> 00:01:28.540 +that works in all major modes. + +00:01:31.560 --> 00:01:31.760 +It's a global minor mode that you can turn on + +00:01:34.540 --> 00:01:34.760 +and off very rapidly so that you can just get + +00:01:35.660 --> 00:01:36.160 +in and out of hyperbole. + +00:01:40.440 --> 00:01:40.940 +And it works mostly from a mini buffer menu + +00:01:43.940 --> 00:01:44.040 +that if we just hit ctrl H H we see at the + +00:01:47.220 --> 00:01:47.420 +bottom of the screen here and as you see in + +00:01:48.480 --> 00:01:48.980 +some of this text right here, + +00:01:55.280 --> 00:01:55.680 +Dee will show you a demo with all these video + +00:01:57.180 --> 00:01:57.680 +links of Hyperbole now. + +00:02:01.560 --> 00:02:01.780 +But let's just get into the top 10 reasons to + +00:02:08.340 --> 00:02:08.840 +use Hyperbole. Number 10 is a key series + +00:02:12.100 --> 00:02:12.600 +curly braces. So you just put curly braces + +00:02:17.120 --> 00:02:17.620 +around any set of key sequences that you want + +00:02:22.200 --> 00:02:22.440 +and hyperbole magically turns that into what + +00:02:25.440 --> 00:02:25.640 +we call an implicit button a hyper button and + +00:02:28.340 --> 00:02:28.580 +any kind of text that you have so if we go + +00:02:35.260 --> 00:02:35.760 +down here and we just click click here we see + +00:02:39.720 --> 00:02:40.220 +it that was a complex button that said let's + +00:02:42.700 --> 00:02:43.200 +start a shell, let's set an environment + +00:02:44.960 --> 00:02:45.140 +variable as you see the command right up + +00:02:47.220 --> 00:02:47.420 +there, and then let's do a grep over the + +00:02:50.500 --> 00:02:50.680 +hyperbole code and find all instances of a + +00:02:54.860 --> 00:02:55.360 +particular label. So if we hit made a return, + +00:02:56.760 --> 00:02:57.260 +that's called the action key. + +00:02:59.120 --> 00:02:59.340 +That's what you use throughout hyperbole when + +00:03:01.400 --> 00:03:01.900 +you just want to activate any kind of button. + +00:03:06.200 --> 00:03:06.380 +So you see it jumped to the grep output and + +00:03:08.260 --> 00:03:08.440 +this is in a shell buffer it's not in a + +00:03:10.900 --> 00:03:11.180 +compilation buffer so anywhere that you have + +00:03:13.260 --> 00:03:13.760 +this sort of thing it's also an implicit + +00:03:16.560 --> 00:03:17.040 +button and any sort of grep output or + +00:03:20.280 --> 00:03:20.780 +compiler output you can just jump to with the + +00:03:23.080 --> 00:03:23.580 +same key, made a return. + +00:03:28.740 --> 00:03:29.240 +So that's key series, the first part. + +00:03:33.520 --> 00:03:33.880 +And then just to note that you can also just + +00:03:38.760 --> 00:03:39.000 +do a, well I'll just do it here and show you + +00:03:43.040 --> 00:03:43.380 +that you can do a recursive grep with this + +00:03:45.340 --> 00:03:45.840 +hyperbole command, HYPBR grep. + +00:03:48.500 --> 00:03:49.000 +And if you're in an Emacs list buffer, + +00:03:54.240 --> 00:03:54.740 +it will only grep across the Emacs list. + +00:03:58.100 --> 00:03:58.340 +So a very handy way to just go through your + +00:04:00.600 --> 00:04:01.040 +code very rapidly and then jump to various + +00:04:03.960 --> 00:04:04.280 +points in it. So we have a lot to cover + +00:04:05.600 --> 00:04:05.800 +today, so I'm going to go through this + +00:04:07.060 --> 00:04:07.560 +rapidly. This isn't a tutorial, + +00:04:10.200 --> 00:04:10.340 +it's just to get you interested in some of + +00:04:12.900 --> 00:04:13.060 +the features, and then there's a ton of + +00:04:15.420 --> 00:04:15.920 +reference material and videos now available + +00:04:18.360 --> 00:04:18.860 +for Hyperlink. So let's go to number 9. + +00:04:21.860 --> 00:04:22.360 +Path names become implicit buttons. + +00:04:23.700 --> 00:04:24.060 +You don't even have to quote them. + +00:04:26.460 --> 00:04:26.920 +You can add environment variables or elist + +00:04:28.700 --> 00:04:29.200 +variables with the syntax right here. + +00:04:31.820 --> 00:04:32.180 +So here we have a shell script that's + +00:04:33.000 --> 00:04:33.500 +somewhere on our path. + +00:04:35.940 --> 00:04:36.380 +And notice path is an environment variable + +00:04:39.000 --> 00:04:39.140 +with many different paths within it, + +00:04:42.100 --> 00:04:42.600 +right? But Hyperbole knows that and it + +00:04:44.480 --> 00:04:44.980 +searches the path, gets the first match, + +00:04:48.120 --> 00:04:48.620 +finds it, and finds the actual shell script. + +00:04:49.920 --> 00:04:50.420 +So you can just embed that anywhere. + +00:04:51.660 --> 00:04:52.160 +Here we have a list variable, + +00:04:54.120 --> 00:04:54.360 +hyperbdur, which is the home directory for + +00:04:57.620 --> 00:04:58.120 +hyperbole, and then a markdown file, + +00:05:01.180 --> 00:05:01.680 +and a link to a direct section in the file, + +00:05:04.880 --> 00:05:05.220 +and the 5 colon 5 means go to line 5 within + +00:05:06.760 --> 00:05:07.260 +that section and column 5. + +00:05:08.900 --> 00:05:09.400 +So let's just try it. Boom, + +00:05:11.240 --> 00:05:11.500 +we're right there, and we're on another link + +00:05:12.720 --> 00:05:13.220 +that we could activate as well. + +00:05:17.620 --> 00:05:17.960 +So notice the next line is the same link but + +00:05:20.120 --> 00:05:20.280 +this is how you normally have to do it in a + +00:05:22.680 --> 00:05:23.160 +markdown file. You have to change the section + +00:05:25.480 --> 00:05:25.640 +header to have dashes but with hyperbole you + +00:05:27.620 --> 00:05:28.120 +don't have to. You can just put it exactly + +00:05:29.340 --> 00:05:29.840 +like you see it in your file. + +00:05:34.440 --> 00:05:34.660 +Here the pound syntax for sections is really + +00:05:36.140 --> 00:05:36.640 +a generic syntax in the hyperbole. + +00:05:39.660 --> 00:05:39.840 +And so it works in all different kinds of + +00:05:41.000 --> 00:05:41.500 +files, your programming files. + +00:05:45.040 --> 00:05:45.240 +Here's a shell script and we said let's just + +00:05:48.680 --> 00:05:49.120 +go to the first comment that has alias in it. + +00:05:51.300 --> 00:05:51.700 +Notice we didn't have to say the whole line, + +00:05:52.700 --> 00:05:53.160 +just the first part of it. + +00:05:57.880 --> 00:05:58.140 +And it matched to it. Here we have a link to + +00:06:01.560 --> 00:06:01.680 +our hyperbole structured outliner called the + +00:06:04.160 --> 00:06:04.660 +K Outliner. And you can see it auto-numbers + +00:06:07.560 --> 00:06:08.000 +all these cells. But in addition to just + +00:06:10.280 --> 00:06:10.640 +displaying, you can also add a pipe symbol + +00:06:14.440 --> 00:06:14.900 +near the end and use this view syntax to clip + +00:06:17.160 --> 00:06:17.500 +to 2 lines and show blank lines. + +00:06:19.760 --> 00:06:19.920 +So let's see if each node gets clipped to 2 + +00:06:22.480 --> 00:06:22.680 +lines. So you see they're all just 2 now with + +00:06:24.780 --> 00:06:25.280 +the ellipses and then we can expand them. + +00:06:28.260 --> 00:06:28.760 +So a lot of power there just with path names. + +00:06:30.780 --> 00:06:31.120 +Let's continue to number 8. + +00:06:32.440 --> 00:06:32.940 +[Speaker 0]: Can I just interrupt you just a bit? + +00:06:33.420 --> 00:06:33.920 +[Speaker 1]: Yes. + +00:06:37.540 --> 00:06:37.720 +[Speaker 0]: I think your phone, so we have your phone set + +00:06:39.960 --> 00:06:40.460 +up in case your internet misbehaves and we've + +00:06:41.580 --> 00:06:42.080 +set this up before we started, + +00:06:44.060 --> 00:06:44.380 +but I think the vibration is a little loud + +00:06:46.060 --> 00:06:46.160 +whenever it does. Can you maybe move it a + +00:06:50.020 --> 00:06:50.380 +little bit? I think so. + +00:06:51.380 --> 00:06:51.880 +It will have to vibrate again. + +00:06:53.720 --> 00:06:54.220 +[Speaker 1]: Is that okay? No, my phone... + +00:06:56.380 --> 00:06:56.880 +Okay. It shouldn't have been vibrating. + +00:07:00.760 --> 00:07:01.260 +[Speaker 0]: It might have been another device, + +00:07:02.360 --> 00:07:02.800 +but definitely we had vibration. + +00:07:04.000 --> 00:07:04.500 +Anyway, carry on. Sorry for the interruption. + +00:07:06.420 --> 00:07:06.920 +[Speaker 1]: It could be me. So number 8, + +00:07:10.320 --> 00:07:10.520 +special prefixes. There are 3 prefixes you + +00:07:11.440 --> 00:07:11.820 +can attach to path names. + +00:07:13.180 --> 00:07:13.680 +The first, if you want to load, + +00:07:15.540 --> 00:07:16.040 +instead of just finding a file, + +00:07:18.960 --> 00:07:19.460 +an ELIST file, you can actually load it. + +00:07:21.560 --> 00:07:22.060 +And so I can just hit made a return on this, + +00:07:23.800 --> 00:07:24.300 +and you see in the mini buffer, + +00:07:26.600 --> 00:07:27.100 +it loaded it as compiled e-list. + +00:07:28.840 --> 00:07:29.340 +I could put a .el on here, + +00:07:33.000 --> 00:07:33.500 +a .elc, .gz, all of that'll work, + +00:07:35.920 --> 00:07:36.420 +and just put a dash in front to load it. + +00:07:38.300 --> 00:07:38.720 +If you want to run a shell command, + +00:07:40.900 --> 00:07:41.040 +just put an exclamation mark in front of + +00:07:42.380 --> 00:07:42.540 +something and again you can have the + +00:07:44.340 --> 00:07:44.620 +environment variable. So here we're saying + +00:07:46.720 --> 00:07:47.220 +run the program date and you see, + +00:07:49.540 --> 00:07:50.040 +let's see, let's do it again. + +00:07:53.040 --> 00:07:53.240 +There we go. It ran date and you see the + +00:07:55.320 --> 00:07:55.680 +output right there. And what if you want to + +00:07:57.540 --> 00:07:58.040 +run a graphical program on your system? + +00:08:01.560 --> 00:08:01.760 +Well here, we want to open a PDF file and I'm + +00:08:04.840 --> 00:08:05.340 +just using XDG Open on Linux, + +00:08:09.320 --> 00:08:09.440 +you could use Open on Mac and you just put an + +00:08:12.340 --> 00:08:12.840 +ampersand in front and there's the Hyperbole + +00:08:15.340 --> 00:08:15.840 +manual instantly displayed. + +00:08:18.120 --> 00:08:18.620 +So lots of power there and all of that + +00:08:22.120 --> 00:08:22.360 +actually .pdf's and many other file types are + +00:08:24.860 --> 00:08:25.080 +automatically linked to various programs by + +00:08:27.080 --> 00:08:27.340 +Hyperbole. So you could just use the path + +00:08:29.200 --> 00:08:29.340 +name itself and it would probably behave the + +00:08:33.940 --> 00:08:34.440 +same way. Number 7, bookmarks on steroids. + +00:08:37.059 --> 00:08:37.419 +So Hyperbole gives you a personal button + +00:08:39.840 --> 00:08:40.340 +file, which is on the menu you see here under + +00:08:41.780 --> 00:08:42.280 +button files, and then personal. + +00:08:44.860 --> 00:08:45.360 +So here we'll just display it. + +00:08:47.480 --> 00:08:47.720 +And you can put whatever you want in here, + +00:08:49.360 --> 00:08:49.860 +these implicit buttons of any type. + +00:08:52.460 --> 00:08:52.660 +You can name them the way here and you can + +00:08:55.280 --> 00:08:55.560 +activate either the name with MetaReturn or + +00:08:56.760 --> 00:08:56.920 +the button itself. So, + +00:08:58.900 --> 00:08:59.400 +of course, if we did MetaReturn here, + +00:09:02.720 --> 00:09:03.220 +we'd just display that in a web browser. + +00:09:05.020 --> 00:09:05.520 +I'll just do a few of these. + +00:09:06.760 --> 00:09:07.200 +So here's a section of line. + +00:09:08.080 --> 00:09:08.580 +Let's just jump there. + +00:09:11.100 --> 00:09:11.400 +But these can be all sorts of different + +00:09:12.900 --> 00:09:13.140 +actions that are going on. + +00:09:15.840 --> 00:09:16.040 +And you just, whatever cross references you + +00:09:17.360 --> 00:09:17.840 +want, you put in here. + +00:09:19.900 --> 00:09:20.400 +And the neat thing is that this then becomes + +00:09:22.920 --> 00:09:23.420 +a list of what we call global buttons. + +00:09:26.040 --> 00:09:26.540 +So when I go into the menu and I go control + +00:09:30.140 --> 00:09:30.640 +HHGA to activate a global button, + +00:09:32.800 --> 00:09:33.220 +you can see that all the names from this file + +00:09:35.600 --> 00:09:36.100 +appear here. So only the name buttons appear, + +00:09:39.780 --> 00:09:40.240 +and I could like go to the hyperbole to-do + +00:09:41.760 --> 00:09:42.260 +list and things like that. + +00:09:45.480 --> 00:09:45.660 +So very, very quick access to all your + +00:09:47.080 --> 00:09:47.440 +information whenever you need it. + +00:09:49.440 --> 00:09:49.600 +And that could be an org file as well if you + +00:09:53.000 --> 00:09:53.500 +prefer that. So we just took care of that. + +00:09:56.880 --> 00:09:57.000 +Number 6, instant test case running and + +00:09:58.920 --> 00:09:59.420 +debugging. This is a fairly new feature. + +00:10:02.080 --> 00:10:02.240 +What we're seeing here is a pre-release of + +00:10:04.280 --> 00:10:04.440 +version 9, which should be out within the + +00:10:07.440 --> 00:10:07.560 +next week. But the instructions at the + +00:10:10.460 --> 00:10:10.680 +beginning of the presentation tell you how to + +00:10:13.220 --> 00:10:13.720 +get the development version of HyperBlade, + +00:10:15.060 --> 00:10:15.560 +which is right now 8.01 + +00:10:18.540 --> 00:10:19.040 +pre, but that's virtually the same as what 9 + +00:10:22.560 --> 00:10:23.060 +will be. So you can grab that as of today. + +00:10:27.040 --> 00:10:27.540 +So let's just jump to a test file. + +00:10:29.800 --> 00:10:30.300 +What you see here is called an explicit + +00:10:32.520 --> 00:10:33.020 +button. You can actually make buttons where + +00:10:35.600 --> 00:10:35.820 +similar to org, where you just see a bit of + +00:10:38.000 --> 00:10:38.500 +the button and all of the metadata is hidden. + +00:10:41.800 --> 00:10:42.040 +I can say control A J and I see all about + +00:10:43.740 --> 00:10:43.940 +that button, exactly what it's going to do + +00:10:46.980 --> 00:10:47.200 +before I activate it and even who created it + +00:10:50.580 --> 00:10:50.680 +or last modified it. Then just queue out of + +00:10:52.080 --> 00:10:52.580 +here and you're back where you were. + +00:10:56.320 --> 00:10:56.820 +So now, what this did is link us to an ERT + +00:10:59.440 --> 00:10:59.920 +test. If you write tests in Emacs, + +00:11:01.560 --> 00:11:02.060 +you probably use ERT tests. + +00:11:04.920 --> 00:11:05.220 +So if I hit made a return on here it'll just + +00:11:08.300 --> 00:11:08.520 +run the test tell me it passed great okay but + +00:11:11.320 --> 00:11:11.760 +maybe I had a problem so let me use control + +00:11:16.820 --> 00:11:17.080 +you made a return and that will e-debug the + +00:11:19.720 --> 00:11:20.080 +test instantly. So now I'll step through it + +00:11:21.700 --> 00:11:22.200 +and it says, well, let's, + +00:11:25.400 --> 00:11:25.580 +this single line actually creates that + +00:11:27.440 --> 00:11:27.800 +explicit button. You see we have an empty + +00:11:29.060 --> 00:11:29.480 +buffer here that we're in. + +00:11:31.640 --> 00:11:31.780 +Now I step through that and now there's the + +00:11:33.740 --> 00:11:34.160 +explicit button that got put in there. + +00:11:36.760 --> 00:11:36.940 +Now the next line I step through it and this + +00:11:38.720 --> 00:11:39.160 +is going to check if we have the right action + +00:11:42.040 --> 00:11:42.260 +type and it returns true so that's good and + +00:11:45.060 --> 00:11:45.220 +now we should be it should be associated with + +00:11:48.400 --> 00:11:48.680 +the temp buffer returns true good And that's + +00:11:50.860 --> 00:11:51.360 +why what you saw before is this passed. + +00:11:52.260 --> 00:11:52.760 +The whole thing passed. + +00:11:54.240 --> 00:11:54.740 +So lots of power there. + +00:11:57.380 --> 00:11:57.600 +Simple to use. You're just using your made a + +00:11:58.860 --> 00:11:59.360 +return and prefix arguments. + +00:12:02.980 --> 00:12:03.240 +It's something everybody who develops should + +00:12:07.280 --> 00:12:07.640 +have. So number, let's go on. + +00:12:09.440 --> 00:12:09.720 +I think we're making pretty good time here, + +00:12:10.740 --> 00:12:11.240 +but I turned off my timer. + +00:12:15.540 --> 00:12:15.800 +Let's go to number 5. This is a very new + +00:12:17.160 --> 00:12:17.660 +feature, which is very cool too. + +00:12:19.920 --> 00:12:20.420 +You used to have to use the mouse probably + +00:12:23.680 --> 00:12:23.880 +and you could drag across windows to go from + +00:12:26.580 --> 00:12:26.820 +a source to a referent buffer and that would + +00:12:27.880 --> 00:12:28.340 +create a hyperlink for you. + +00:12:30.600 --> 00:12:30.880 +But now we've installed it and made it even + +00:12:33.640 --> 00:12:34.140 +easier on, we've installed it on a, + +00:12:36.040 --> 00:12:36.540 +on the hyperbole menus. + +00:12:39.680 --> 00:12:40.180 +So let's just go back to our presentation + +00:12:43.340 --> 00:12:43.660 +here and say we want to link to this line + +00:12:45.980 --> 00:12:46.160 +that we're on there. And I'll just create the + +00:12:48.340 --> 00:12:48.480 +button in our scratch buffer here so it + +00:12:50.160 --> 00:12:50.660 +doesn't really mess anything up. + +00:12:53.800 --> 00:12:53.980 +So I just put my point in where I want the + +00:12:56.780 --> 00:12:56.920 +button to appear and then I put point where I + +00:12:59.700 --> 00:13:00.060 +want it to link to in the other the other + +00:13:02.600 --> 00:13:02.800 +buffer and then I just say control HH to get + +00:13:04.760 --> 00:13:05.260 +my menu, I for implicit button, + +00:13:07.440 --> 00:13:07.940 +and then L for link. Boom, + +00:13:09.480 --> 00:13:09.980 +it inserts it, right at point. + +00:13:12.720 --> 00:13:12.880 +What did it do? It knew that this was in the + +00:13:14.900 --> 00:13:15.080 +hyperbole directory and I have a variable for + +00:13:17.600 --> 00:13:17.780 +that, so that if you sent this link to your + +00:13:18.680 --> 00:13:19.180 +friend who uses Hyperbole, + +00:13:21.300 --> 00:13:21.440 +it would still work right because they have a + +00:13:22.360 --> 00:13:22.860 +different hyperbole there. + +00:13:26.880 --> 00:13:27.380 +And then I want to go directly to line 116. + +00:13:29.860 --> 00:13:30.360 +So boom, it just took me there. + +00:13:33.680 --> 00:13:33.900 +So that's it. And Hyperbole is doing all this + +00:13:36.220 --> 00:13:36.420 +for you. You just say I want a link to this + +00:13:38.760 --> 00:13:38.940 +thing and it figures out what's at point and + +00:13:41.920 --> 00:13:42.240 +it determines the right type of implicit link + +00:13:45.360 --> 00:13:45.520 +to put there. And that's the whole point is + +00:13:47.120 --> 00:13:47.320 +that you're just working like when you're + +00:13:50.280 --> 00:13:50.500 +programming or you're writing an article and + +00:13:53.360 --> 00:13:53.520 +you just hit made a return or or pull up a + +00:13:57.040 --> 00:13:57.200 +menu and hit a key binding and you're off to + +00:14:02.220 --> 00:14:02.400 +the races. So that was implicit linking We + +00:14:04.760 --> 00:14:05.260 +can also create those explicit link buttons, + +00:14:07.440 --> 00:14:07.760 +and as well as the global link, + +00:14:09.140 --> 00:14:09.580 +where we would just give it a name, + +00:14:11.380 --> 00:14:11.640 +and it would automatically put it in our + +00:14:14.200 --> 00:14:14.640 +global button file without us even having + +00:14:18.240 --> 00:14:18.380 +that on screen. So lots of power there as + +00:14:19.160 --> 00:14:19.660 +well, lots of consistency. + +00:14:24.860 --> 00:14:25.040 +Now let's take a look at the K Outliner a + +00:14:27.780 --> 00:14:28.040 +little more. I'm just going to show you 1 + +00:14:29.620 --> 00:14:29.820 +feature actually. I don't have time to show + +00:14:31.080 --> 00:14:31.580 +you the K Outliner in detail, + +00:14:33.720 --> 00:14:34.220 +but it's a really cool structured outliner + +00:14:35.900 --> 00:14:36.400 +that even if you love Org Mode, + +00:14:39.060 --> 00:14:39.280 +you should try it. And this is 1 thing that + +00:14:40.560 --> 00:14:41.060 +you can't get with Org Mode, + +00:14:44.620 --> 00:14:45.100 +is let's say Hyperlink comes with an example + +00:14:48.080 --> 00:14:48.580 +file which teaches you about the K Outliner. + +00:14:50.440 --> 00:14:50.940 +So we'll just use that right here. + +00:14:52.540 --> 00:14:53.040 +And when you're in the K Outliner, + +00:14:55.320 --> 00:14:55.820 +you can bring up and go into the K Outliner + +00:14:57.040 --> 00:14:57.540 +menu right here at the bottom. + +00:14:59.920 --> 00:15:00.360 +And there's a format menu there. + +00:15:02.220 --> 00:15:02.600 +You always take the first letter of a menu, + +00:15:04.600 --> 00:15:05.100 +the first capital letter of a menu item. + +00:15:08.540 --> 00:15:08.720 +So F for format and then D for display in + +00:15:11.200 --> 00:15:11.700 +browser. So just let's do it. + +00:15:16.720 --> 00:15:17.220 +We have with 1 button or 1 key we've produced + +00:15:23.160 --> 00:15:23.660 +the entire outline in a collapsible outline + +00:15:25.760 --> 00:15:26.260 +in HTML. So I can go here. + +00:15:28.740 --> 00:15:29.240 +I just have to use my mouse. + +00:15:32.800 --> 00:15:33.300 +So I can expand and collapse these trees live + +00:15:39.020 --> 00:15:39.520 +with very basic coding. + +00:15:42.180 --> 00:15:42.680 +We tried to keep this as simple as possible. + +00:15:45.420 --> 00:15:45.580 +But you see it maintains the structure of the + +00:15:47.380 --> 00:15:47.880 +outline and even tables. + +00:15:57.320 --> 00:15:57.620 +So all the formatting is maintained and again + +00:15:59.960 --> 00:16:00.100 +it's instant. Or you can just export it to a + +00:16:01.420 --> 00:16:01.920 +file without displaying it. + +00:16:05.380 --> 00:16:05.880 +Very efficient kinds of operations. + +00:16:10.760 --> 00:16:10.960 +So that was number 4. Number 3 is a + +00:16:12.900 --> 00:16:13.400 +subsystem, another subsystem in Hyperbole + +00:16:15.920 --> 00:16:16.080 +called Hycontrol, which is for window and + +00:16:18.340 --> 00:16:18.600 +frame management. And I just wanted to show + +00:16:20.760 --> 00:16:20.920 +you 1 thing in there. It's got a lot of + +00:16:23.920 --> 00:16:24.420 +capabilities. But I always had the problem + +00:16:27.840 --> 00:16:28.340 +that Emacs wouldn't let me scale my fonts, + +00:16:30.280 --> 00:16:30.780 +all of my faces at the same time. + +00:16:33.220 --> 00:16:33.680 +I wanted to zoom. I didn't want to increase + +00:16:36.020 --> 00:16:36.260 +the default font size and all the others stay + +00:16:40.160 --> 00:16:40.660 +the same. So let's just display our faces + +00:16:45.040 --> 00:16:45.200 +right here and then we have a choice of + +00:16:47.360 --> 00:16:47.860 +either controlling frames or windows. + +00:16:49.740 --> 00:16:50.240 +So let's start by controlling frames. + +00:16:52.600 --> 00:16:52.760 +So you get another submenu when you're in + +00:16:55.520 --> 00:16:56.020 +high control to tell you what to do here. + +00:16:59.280 --> 00:16:59.480 +And there's just lowercase z and uppercase z. + +00:17:02.980 --> 00:17:03.400 +So let's try it. So it's scaling the entire + +00:17:05.520 --> 00:17:06.020 +frame. And you can see from the list of faces + +00:17:08.000 --> 00:17:08.500 +that they're all scaling at the same time. + +00:17:09.720 --> 00:17:10.220 +And I can go back down. + +00:17:13.280 --> 00:17:13.619 +Now if I switch to window mode, + +00:17:15.839 --> 00:17:16.099 +and there's a special fast way to do that, + +00:17:18.599 --> 00:17:18.819 +just hit T to toggle. And if you look at the + +00:17:21.619 --> 00:17:21.819 +bottom menu it says frames right now now it + +00:17:25.319 --> 00:17:25.599 +says windows when I hit T so now if I do the + +00:17:30.540 --> 00:17:30.640 +same Z to increase it's just this window and + +00:17:36.300 --> 00:17:36.800 +but it's you know it's the faces in there so + +00:17:40.400 --> 00:17:40.680 +a lot of power again but I just haven't found + +00:17:43.080 --> 00:17:43.220 +anywhere else that you can get that kind of + +00:17:45.320 --> 00:17:45.820 +control over your faces very rapidly. + +00:17:51.140 --> 00:17:51.640 +So that's number 3. Now number 2, + +00:17:56.280 --> 00:17:56.780 +let's put that in there. + +00:18:02.980 --> 00:18:03.320 +So the HiROLO is the final subsystem in + +00:18:05.740 --> 00:18:06.240 +Hyperbole and this has gotten much cooler. + +00:18:08.180 --> 00:18:08.680 +So it started off as a contact management + +00:18:11.040 --> 00:18:11.540 +system, but it's really just a hierarchical + +00:18:14.800 --> 00:18:15.060 +record management system that lets you have + +00:18:17.520 --> 00:18:18.020 +as many files, directories as you want, + +00:18:19.860 --> 00:18:20.280 +and you can search across all of them without + +00:18:22.740 --> 00:18:23.240 +any external utilities necessary, + +00:18:25.740 --> 00:18:26.240 +just what's built into Emacs and Hyperlink. + +00:18:29.640 --> 00:18:29.920 +So as you can see, we've expanded it to + +00:18:31.320 --> 00:18:31.820 +handle org files, markdown, + +00:18:34.120 --> 00:18:34.620 +K outlines, Emacs outlines. + +00:18:36.440 --> 00:18:36.820 +So what I'm going to do is just say, + +00:18:40.240 --> 00:18:40.680 +I want to search using my Hyberlo file list. + +00:18:42.920 --> 00:18:43.140 +You just set that to what you wanted to + +00:18:44.640 --> 00:18:44.820 +search. But now you have all this + +00:18:46.020 --> 00:18:46.520 +flexibility. You can use environment + +00:18:48.680 --> 00:18:48.840 +variables in it. You can just specify a + +00:18:50.860 --> 00:18:51.340 +directory and it will find all those matching + +00:18:53.100 --> 00:18:53.600 +files below that directory recursively. + +00:18:58.260 --> 00:18:58.460 +You can give it the markdown file here and + +00:19:00.840 --> 00:19:01.160 +you can use file wildcards as well. + +00:19:04.020 --> 00:19:04.360 +I mean, look at this. It's got a list + +00:19:05.640 --> 00:19:06.140 +variable in it and a wildcard, + +00:19:09.360 --> 00:19:09.840 +and it's just all I'm gonna do is I change + +00:19:13.260 --> 00:19:13.380 +this from a Lisp expression to make it a + +00:19:15.040 --> 00:19:15.380 +hyper button. You just change the outer + +00:19:16.420 --> 00:19:16.920 +parens to angle brackets, + +00:19:19.120 --> 00:19:19.620 +and then it's automatically an implicit + +00:19:22.680 --> 00:19:22.840 +button that you can activate with made a + +00:19:25.840 --> 00:19:26.340 +return so just ran that and now I've set my + +00:19:29.220 --> 00:19:29.480 +file list so now let's do a search it would + +00:19:34.080 --> 00:19:34.580 +be ctrl H H roll it X R and then S for search + +00:19:36.180 --> 00:19:36.680 +But I'll just do it this way. + +00:19:39.820 --> 00:19:40.320 +And boom, it found everything that fast. + +00:19:42.440 --> 00:19:42.940 +And I can just get like, + +00:19:45.140 --> 00:19:45.520 +show the top items in there. + +00:19:47.760 --> 00:19:48.260 +So I kind of have outlining in this buffer. + +00:19:51.440 --> 00:19:51.940 +I can just move to each match that I hit. + +00:19:53.480 --> 00:19:53.680 +And notice, although everything was + +00:19:55.080 --> 00:19:55.580 +collapsed, it's expanding here. + +00:19:58.100 --> 00:19:58.520 +When I move in and out of each of the entry + +00:20:02.220 --> 00:20:02.400 +matches, it expands or collapses as I move to + +00:20:05.740 --> 00:20:06.240 +the next 1. So a lot of power there. + +00:20:09.120 --> 00:20:09.620 +What else? Just tabbing through these things. + +00:20:11.840 --> 00:20:12.120 +And you notice that it's working across all + +00:20:12.840 --> 00:20:13.340 +of these different types. + +00:20:15.720 --> 00:20:16.220 +And it's telling you which file everything + +00:20:17.540 --> 00:20:17.840 +came from right up here. + +00:20:19.440 --> 00:20:19.940 +So I could just made a return here, + +00:20:23.000 --> 00:20:23.500 +should work. Yes, revisit the file normally. + +00:20:25.260 --> 00:20:25.760 +And it just pulls it right up. + +00:20:27.900 --> 00:20:28.400 +So everything is live and hyperbole. + +00:20:29.620 --> 00:20:30.120 +You've got hyperlinks everywhere. + +00:20:33.240 --> 00:20:33.740 +Let's just get rid of that. + +00:20:41.420 --> 00:20:41.600 +Go back to our demo. So if you are fans of + +00:20:46.200 --> 00:20:46.560 +Vertico and Consult, you can now use that + +00:20:49.120 --> 00:20:49.300 +with the High Rollo. So all you have to do is + +00:20:50.940 --> 00:20:51.440 +let's just format our windows, + +00:20:55.400 --> 00:20:55.720 +and then I'll say, let's use ConsultGrep over + +00:20:58.380 --> 00:20:58.880 +the Rolodex. Now, it found all the matches + +00:21:01.560 --> 00:21:02.060 +there, and I can just move live through them + +00:21:04.540 --> 00:21:04.640 +in the buffer like you may be used to or I + +00:21:08.100 --> 00:21:08.600 +can filter back down and say using orderless + +00:21:13.480 --> 00:21:13.700 +joystick or anything that has joy in it just + +00:21:16.940 --> 00:21:17.160 +match to those lines and then I can you know + +00:21:19.680 --> 00:21:20.020 +either jump there or quit out of here. + +00:21:21.580 --> 00:21:22.080 +I'll just quit out of it right now. + +00:21:24.880 --> 00:21:25.240 +So very cool. And all of that is using + +00:21:28.380 --> 00:21:28.640 +whatever you personally set as the set of + +00:21:30.060 --> 00:21:30.560 +files and directories you want to search. + +00:21:35.740 --> 00:21:35.940 +And finally, our number 1 feature of + +00:21:40.120 --> 00:21:40.400 +Hyperbole is you can customize this to give + +00:21:42.960 --> 00:21:43.460 +you these kinds of implicit buttons, + +00:21:45.580 --> 00:21:46.080 +whatever kind you want. + +00:21:48.640 --> 00:21:49.140 +And there are 3 levels of doing this. + +00:21:50.640 --> 00:21:51.140 +The first is for non-programmers. + +00:21:53.180 --> 00:21:53.680 +You can just set a string, + +00:21:56.540 --> 00:21:57.040 +like a URL with a parameter in it. + +00:21:58.940 --> 00:21:59.440 +So the %s represents the parameter, + +00:22:01.240 --> 00:22:01.440 +and This is how you do a search on + +00:22:03.560 --> 00:22:04.060 +DuckDuckGo. So all I have to do is evaluate + +00:22:06.660 --> 00:22:07.160 +this defal for action link. + +00:22:10.520 --> 00:22:11.020 +And now I have a new implicit button type + +00:22:12.900 --> 00:22:13.400 +that I can put between angle brackets. + +00:22:15.080 --> 00:22:15.580 +And I just give it that name, + +00:22:17.500 --> 00:22:18.000 +ddg, and some parameter, + +00:22:19.540 --> 00:22:20.040 +whatever I want to search for, + +00:22:22.540 --> 00:22:23.040 +and this is a button that does that search. + +00:22:28.320 --> 00:22:28.700 +Very cool, right? So you can embed these. + +00:22:30.540 --> 00:22:31.040 +This could be a hyperlink in, + +00:22:34.620 --> 00:22:35.120 +you know, a comment in a programming file. + +00:22:38.040 --> 00:22:38.160 +Anything on the entire web that you want to + +00:22:41.820 --> 00:22:42.320 +link to, whatever kind of compact notation + +00:22:44.600 --> 00:22:44.800 +you want to give it. So that's what we're + +00:22:46.680 --> 00:22:47.140 +going to learn as we get more advanced here + +00:22:48.900 --> 00:22:49.400 +you can give it even more compact notations. + +00:22:51.940 --> 00:22:52.420 +So as you get more advanced you can say, + +00:22:53.760 --> 00:22:54.240 +well I don't like this angle bracket, + +00:22:56.520 --> 00:22:57.020 +I want to have an implicit button that uses + +00:22:59.340 --> 00:22:59.620 +these square brackets and then an angle + +00:23:01.960 --> 00:23:02.080 +bracket inside it. So then you need the + +00:23:04.680 --> 00:23:05.180 +defile for implicit link. + +00:23:08.600 --> 00:23:08.860 +This lets you specify your start and end + +00:23:11.980 --> 00:23:12.180 +delimiters for your new type and and then you + +00:23:14.340 --> 00:23:14.840 +can give it a function that you wanted to run + +00:23:18.120 --> 00:23:18.320 +and that will take the text of whatever is in + +00:23:19.280 --> 00:23:19.780 +the button, in this case, + +00:23:23.560 --> 00:23:23.760 +test release here, and feed it to the + +00:23:25.580 --> 00:23:26.060 +function that I gave here. + +00:23:29.100 --> 00:23:29.540 +So what this function does is grep over my + +00:23:33.260 --> 00:23:33.420 +git log and find any commits that include the + +00:23:34.940 --> 00:23:35.360 +term test release in it. + +00:23:38.000 --> 00:23:38.200 +So let's try it. First I have to add the + +00:23:41.540 --> 00:23:41.740 +button type and that's all it takes and it + +00:23:44.620 --> 00:23:44.800 +defined it now. So anywhere in Emacs now I + +00:23:46.440 --> 00:23:46.940 +can use this button type essentially. + +00:23:48.480 --> 00:23:48.980 +So let me try to activate it. + +00:23:52.260 --> 00:23:52.760 +Okay and it says yeah let's save it. + +00:23:55.440 --> 00:23:55.940 +Okay so now it's running a git log command. + +00:23:59.240 --> 00:23:59.440 +It found all the commits and now of course if + +00:24:02.720 --> 00:24:02.980 +I had made a return on this commit it + +00:24:05.000 --> 00:24:05.500 +recognizes it as an implicit link, + +00:24:08.800 --> 00:24:09.300 +and if I search for what was a test release, + +00:24:11.760 --> 00:24:11.960 +there it is. So this commit had that in + +00:24:13.740 --> 00:24:14.180 +there. So all these matches, + +00:24:16.000 --> 00:24:16.280 +so I don't know how other people do this, + +00:24:19.540 --> 00:24:20.040 +but for me this makes it a lot simpler. + +00:24:24.600 --> 00:24:24.800 +So a lot of power that any programmer can + +00:24:27.100 --> 00:24:27.520 +use. And finally, if you've mastered Emacs + +00:24:28.860 --> 00:24:29.360 +Lisp, or you're starting to, + +00:24:33.480 --> 00:24:33.740 +you can look in the hib types file in + +00:24:36.820 --> 00:24:37.320 +Hyperbole and see all sorts of uses of defib, + +00:24:38.940 --> 00:24:39.440 +which is defined implicit button. + +00:24:42.500 --> 00:24:42.660 +And that's the full power of e-LISP when you + +00:24:44.680 --> 00:24:45.060 +want to define 1. So what we're going to do + +00:24:46.280 --> 00:24:46.780 +here is I wanted to know, + +00:24:49.160 --> 00:24:49.660 +given a date, what the day of the week is. + +00:24:52.660 --> 00:24:53.040 +And because the date primitives weren't quite + +00:24:54.140 --> 00:24:54.640 +written the way I might like, + +00:24:57.040 --> 00:24:57.500 +it's a little longer than some. + +00:24:59.860 --> 00:25:00.360 +But I'm just going to evaluate this list. + +00:25:05.600 --> 00:25:06.100 +And I've now defined DOW as an action type. + +00:25:08.220 --> 00:25:08.520 +Now, how do I know I'm doing that? + +00:25:10.200 --> 00:25:10.700 +So I can always say Control-H, + +00:25:13.440 --> 00:25:13.580 +capital A here to see what a button's going + +00:25:15.360 --> 00:25:15.860 +to do. And it tells me When I'm there, + +00:25:17.640 --> 00:25:18.140 +I'm at a hyperbole button, + +00:25:22.940 --> 00:25:23.440 +and the type is from category DOW. + +00:25:24.920 --> 00:25:25.120 +And what's it gonna do? + +00:25:26.920 --> 00:25:27.420 +It takes a mark, it's gonna do a message + +00:25:29.380 --> 00:25:29.880 +action. Okay, so let's try it. + +00:25:32.320 --> 00:25:32.780 +It tells me that's a date, + +00:25:33.840 --> 00:25:34.220 +and it falls on a Sunday, + +00:25:35.320 --> 00:25:35.820 +which is today. That's correct. + +00:25:38.520 --> 00:25:39.020 +So 2 days from today is a Tuesday. + +00:25:42.960 --> 00:25:43.460 +Beautiful. So we've just totally transformed + +00:25:46.340 --> 00:25:46.840 +what we can do with text. + +00:25:48.400 --> 00:25:48.900 +You notice there's no markup here. + +00:25:53.200 --> 00:25:53.440 +And this is working with all of the other + +00:25:55.440 --> 00:25:55.600 +implicit types that we have everywhere in + +00:25:57.720 --> 00:25:57.920 +Emacs. It's only going to match to this kind + +00:26:00.060 --> 00:26:00.560 +of pattern and anywhere else, + +00:26:02.320 --> 00:26:02.820 +you know, it just won't trigger that type. + +00:26:06.180 --> 00:26:06.440 +So lots of power. You just need to get + +00:26:07.200 --> 00:26:07.700 +started with Hyperbole. + +00:26:10.640 --> 00:26:10.880 +There's great documentation both inside the + +00:26:13.820 --> 00:26:14.060 +code in the manual. There's a fast demo that + +00:26:16.620 --> 00:26:16.880 +you can start with and there's about 10 + +00:26:19.000 --> 00:26:19.500 +different videos. There'll be 3 presentations + +00:26:21.940 --> 00:26:22.440 +on hyperbole here at the conference, + +00:26:26.000 --> 00:26:26.500 +and I hope you've enjoyed this presentation. + +00:26:29.740 --> 00:26:30.040 +I'd love to answer your questions and get + +00:26:31.200 --> 00:26:31.700 +some new users for Hyperbole. + +00:26:35.820 --> 00:26:36.020 +So lastly, I'd like to thank my + +00:26:37.680 --> 00:26:38.040 +co-maintainer, Matt, who's going to speak + +00:26:41.820 --> 00:26:42.040 +later about the extensive test protocols we + +00:26:45.420 --> 00:26:45.920 +have in Hyperbole. Hyperbole works on every + +00:26:47.360 --> 00:26:47.860 +version of Emacs from 27.1 + +00:26:52.180 --> 00:26:52.600 +up, and every operating system and Windows + +00:26:55.960 --> 00:26:56.120 +system that you use. And thanks so much to + +00:26:58.140 --> 00:26:58.640 +the volunteers and the speakers at EmacsConf. + +00:27:01.720 --> 00:27:02.000 +You do a great job, and we're all really + +00:27:04.200 --> 00:27:04.400 +appreciative that you take all the time that + +00:27:05.720 --> 00:27:06.220 +you do to make this happen. + +00:27:07.120 --> 00:27:07.620 +Thank you very much. + +00:27:10.900 --> 00:27:11.400 +[Speaker 0]: And thank you so much Bob. + +00:27:14.540 --> 00:27:14.680 +So I'll let you do the gymnastics to join us + +00:27:15.920 --> 00:27:16.420 +back on BBB and put your webcam. + +00:27:18.340 --> 00:27:18.840 +In the meantime, I'll invite people, + +00:27:20.240 --> 00:27:20.740 +as Sasha told you in the introduction, + +00:27:23.300 --> 00:27:23.600 +to go put your question in the pad. + +00:27:25.680 --> 00:27:25.880 +The link is on the talks page and also on + +00:27:27.720 --> 00:27:28.220 +IRC. So take your time. + +00:27:29.700 --> 00:27:29.900 +We've already got some people who've asked + +00:27:32.860 --> 00:27:33.060 +questions. You can also start joining the + +00:27:34.640 --> 00:27:35.140 +room. Let me just ping Sasha. + +00:27:37.940 --> 00:27:38.440 +Ping to open ID HyperAmp. + +00:27:40.920 --> 00:27:41.120 +So, you'll be able to join us on + +00:27:43.000 --> 00:27:43.260 +BigBlueButton as well to go chat with Bob + +00:27:44.900 --> 00:27:45.040 +more directly. I'm not sure if people have + +00:27:45.980 --> 00:27:46.480 +joined already. Not yet. + +00:27:50.920 --> 00:27:51.060 +So, Bob, what I'll do, + +00:27:51.880 --> 00:27:52.280 +we already have 4 questions. + +00:27:53.920 --> 00:27:54.080 +I'm gonna read them to you and you can take + +00:27:54.720 --> 00:27:54.900 +your time answering them, + +00:27:57.180 --> 00:27:57.340 +but we do have about 7 minutes until we go to + +00:27:58.940 --> 00:27:59.120 +the next talk, so we need to be a little bit + +00:28:00.420 --> 00:28:00.920 +[Speaker 1]: Okay. + +00:28:02.920 --> 00:28:03.240 +[Speaker 0]: chop-chop. All right, so reading the first + +00:28:05.000 --> 00:28:05.460 +questions, and I'm also going to display them + +00:28:06.400 --> 00:28:06.900 +for the stream to see, + +00:28:09.600 --> 00:28:09.760 +do buttons keep their metadata within the + +00:28:12.100 --> 00:28:12.380 +same file? E.g., would I see it if I change + +00:28:13.440 --> 00:28:13.940 +to fundamental mode, for instance? + +00:28:19.060 --> 00:28:19.340 +[Speaker 1]: So all of the things that I was showing you, + +00:28:20.800 --> 00:28:21.300 +implicit buttons have no metadata. + +00:28:23.400 --> 00:28:23.800 +That's the great thing about them, + +00:28:27.140 --> 00:28:27.400 +is you just type them in the buffer and what + +00:28:29.800 --> 00:28:30.020 +you see is all there is to that button and + +00:28:32.800 --> 00:28:33.300 +hyperbole generates all the smarts associated + +00:28:35.280 --> 00:28:35.780 +with them. When you create an explicit + +00:28:38.160 --> 00:28:38.660 +button, which I showed you 1 or 2 examples + +00:28:42.520 --> 00:28:42.720 +of, that metadata is, there is metadata with + +00:28:45.420 --> 00:28:45.860 +that, and that is stored in a separate file + +00:28:47.360 --> 00:28:47.860 +in the same directory called .hypb. + +00:28:51.300 --> 00:28:51.500 +So it's hidden away and it doesn't affect the + +00:28:53.200 --> 00:28:53.700 +format of the buffer that it's in. + +00:28:56.040 --> 00:28:56.540 +So again, what you see is what you get. + +00:28:58.520 --> 00:28:58.740 +You just see the delimiters around the + +00:29:00.640 --> 00:29:01.140 +explicit button and that's it. + +00:29:04.000 --> 00:29:04.500 +So Hyperbole takes care of all that for you. + +00:29:08.080 --> 00:29:08.360 +However, if you embed them into a mail + +00:29:09.200 --> 00:29:09.480 +message, which you can, + +00:29:11.920 --> 00:29:12.180 +you can mail buttons, then there is a hidden + +00:29:14.440 --> 00:29:14.700 +area at the end of the mail message that + +00:29:16.640 --> 00:29:17.120 +encodes the metadata for the explicit + +00:29:17.120 --> 00:29:17.620 +buttons. + +00:29:21.140 --> 00:29:21.640 +[Speaker 0]: Ok, great. Next question. + +00:29:24.060 --> 00:29:24.560 +Is it possible to link to a file by its ID, + +00:29:26.980 --> 00:29:27.340 +like the node, org ID or some similar unique + +00:29:27.620 --> 00:29:28.120 +string inside? + +00:29:32.120 --> 00:29:32.620 +[Speaker 1]: Yes, In fact, that's 1 of the new features in + +00:29:37.640 --> 00:29:37.840 +9. You just made a return on an ID and it + +00:29:40.280 --> 00:29:40.780 +takes you right to the org node, + +00:29:44.760 --> 00:29:44.900 +works with org Rome and org straight out of + +00:29:47.680 --> 00:29:47.900 +the box. We're looking at ways to make it + +00:29:49.640 --> 00:29:50.040 +easier to just insert those in places, + +00:29:52.580 --> 00:29:52.800 +but since you have word keys that do that + +00:29:55.320 --> 00:29:55.600 +already, you can just insert them in any + +00:29:58.180 --> 00:29:58.420 +documents and Hyperbole will recognize them. + +00:30:02.080 --> 00:30:02.580 +I think In some cases you may need to put id + +00:30:04.900 --> 00:30:05.400 +colon in front of the id as well. + +00:30:06.420 --> 00:30:06.920 +Generally it works. + +00:30:11.060 --> 00:30:11.560 +[Speaker 0]: Ok, great. Moving on to the next question. + +00:30:13.260 --> 00:30:13.760 +Regarding the frames example, + +00:30:16.160 --> 00:30:16.320 +any thoughts or considerations for a + +00:30:18.760 --> 00:30:19.020 +transient interface or is this something 1 + +00:30:22.120 --> 00:30:22.280 +could already toggle? Are you familiar with + +00:30:22.660 --> 00:30:23.160 +transient interface? + +00:30:26.200 --> 00:30:26.700 +[Speaker 1]: Yes, we don't use transient because we, + +00:30:29.640 --> 00:30:30.140 +you know, Hyperbole started out in 1991, + +00:30:34.020 --> 00:30:34.280 +though it's had much much work since then so + +00:30:37.740 --> 00:30:37.940 +we predate a lot of newer things in Emacs and + +00:30:41.040 --> 00:30:41.400 +then we just use them as as they Become + +00:30:45.180 --> 00:30:45.480 +useful too hyperbole We think the the mini + +00:30:46.480 --> 00:30:46.720 +buffer menu is pretty good. + +00:30:48.280 --> 00:30:48.780 +We could rewrite stuff in transient, + +00:30:51.100 --> 00:30:51.600 +but we haven't seen the need yet. + +00:30:54.760 --> 00:30:54.960 +Maybe high control, that might be a good + +00:30:58.260 --> 00:30:58.480 +candidate, because there are so many keys in + +00:31:00.240 --> 00:31:00.440 +it. So we'll think about that. + +00:31:02.560 --> 00:31:03.060 +But it would be a while before we got to it. + +00:31:06.840 --> 00:31:07.060 +[Speaker 0]: Moving on to the next question, + +00:31:08.620 --> 00:31:08.800 +sorry I got really confused because there's a + +00:31:10.760 --> 00:31:11.260 +French salut in the text. + +00:31:13.100 --> 00:31:13.600 +Is someone saying hi to me or something? + +00:31:14.600 --> 00:31:15.100 +All right, next question. + +00:31:16.920 --> 00:31:17.420 +Regarding multi-file search functionality, + +00:31:22.260 --> 00:31:22.740 +why not implement it within the existing + +00:31:25.280 --> 00:31:25.680 +framework of MetaX grep or similar built-in + +00:31:28.020 --> 00:31:28.260 +commands? Yet another search interface sounds + +00:31:28.620 --> 00:31:29.120 +a bit redundant. + +00:31:33.660 --> 00:31:33.900 +[Speaker 1]: Multi-file search, so High Rollo I guess + +00:31:35.640 --> 00:31:35.940 +you're talking about. I think what you missed + +00:31:38.940 --> 00:31:39.440 +there is that High Rollo matches to records, + +00:31:42.620 --> 00:31:42.880 +multi-line records, so it's not a + +00:31:44.860 --> 00:31:45.360 +line-oriented match, it's a record-oriented + +00:31:50.520 --> 00:31:50.760 +match. So Grep, you can say maybe give me 3 + +00:31:52.800 --> 00:31:53.000 +lines of context, but what if I have a + +00:31:55.860 --> 00:31:56.100 +20-line record? I want to see the whole + +00:31:58.580 --> 00:31:59.060 +thing. And so, it's a full-text search + +00:32:02.980 --> 00:32:03.480 +interface, which lets you have any size + +00:32:06.760 --> 00:32:07.260 +entries or nodes in the match buffer. + +00:32:10.520 --> 00:32:10.760 +So that's 1 reason. MADAX grep works with + +00:32:12.720 --> 00:32:12.880 +hyperbole. I mean, you just use it if you + +00:32:15.240 --> 00:32:15.580 +want and then you can hit MADA return on grep + +00:32:19.400 --> 00:32:19.640 +lines. So we basically take everything from + +00:32:24.240 --> 00:32:24.400 +POSIX and everything in Emacs and we try to + +00:32:26.200 --> 00:32:26.680 +make a lot of it simpler to use. + +00:32:28.440 --> 00:32:28.940 +We don't take away any of the functionality, + +00:32:30.540 --> 00:32:31.040 +we just augment it. + +00:32:35.020 --> 00:32:35.220 +[Speaker 0]: Right, and I think that's the logic for a lot + +00:32:37.000 --> 00:32:37.200 +of the packages you know the philosophy is + +00:32:38.940 --> 00:32:39.220 +just you create your little bit your little + +00:32:41.180 --> 00:32:41.420 +island where you do your stuff and if you can + +00:32:42.800 --> 00:32:42.940 +resonate with other islands so much the + +00:32:44.860 --> 00:32:45.080 +better and it feels like between those + +00:32:47.720 --> 00:32:47.900 +islands you know hyperbole is a great way to + +00:32:49.480 --> 00:32:49.980 +connect things that are just text. + +00:32:51.380 --> 00:32:51.880 +So it's always been a lovely philosophy. + +00:32:53.160 --> 00:32:53.620 +There's always been a lovely philosophy + +00:32:53.860 --> 00:32:54.360 +behind it. + +00:32:58.020 --> 00:32:58.200 +[Speaker 1]: 1 other point I'd make there is that the + +00:33:01.060 --> 00:33:01.480 +Hyrolo also contains logical search + +00:33:04.740 --> 00:33:04.940 +operators. So when I typed in that string you + +00:33:06.900 --> 00:33:07.360 +could just as well type with like Lisp + +00:33:08.640 --> 00:33:09.140 +expressions, semi Lisp expressions. + +00:33:12.980 --> 00:33:13.480 +You can say open paren and word 1, + +00:33:16.800 --> 00:33:17.280 +word 2, close paren. You know you can have or + +00:33:22.200 --> 00:33:22.360 +and XOR and not and it'll do the search and + +00:33:23.720 --> 00:33:24.220 +just retrieve the entries, + +00:33:27.440 --> 00:33:27.600 +again, multi-line entries that match all of + +00:33:29.200 --> 00:33:29.700 +the criteria that you specified there. + +00:33:30.720 --> 00:33:31.120 +So that's fairly unique, + +00:33:33.000 --> 00:33:33.320 +I think. So you basically got a full text + +00:33:35.340 --> 00:33:35.840 +search platform with logical operators, + +00:33:38.080 --> 00:33:38.580 +instantly, you know, fast moving, + +00:33:42.280 --> 00:33:42.720 +rapid keys that you can control everything + +00:33:44.920 --> 00:33:45.280 +with and it's all integrated into this larger + +00:33:45.280 --> 00:33:45.780 +framework. + +00:33:48.800 --> 00:33:49.060 +[Speaker 0]: Okay, great. Well, Bob, + +00:33:50.020 --> 00:33:50.520 +you have 2 more questions, + +00:33:53.600 --> 00:33:53.740 +but there's a big 1 about what inspired you + +00:33:56.120 --> 00:33:56.440 +to write it back. It's being hyperbole around + +00:33:56.980 --> 00:33:57.360 +the time of its birth, + +00:33:59.180 --> 00:33:59.680 +but sadly, we only have about 1 more minute. + +00:34:01.000 --> 00:34:01.320 +So what I'm going to ask you to do, + +00:34:02.240 --> 00:34:02.720 +feel free to answer the question. + +00:34:05.020 --> 00:34:05.140 +If you go on BBB, I've pasted the link to the + +00:34:06.820 --> 00:34:06.960 +other pad, I think you can see it on your + +00:34:10.520 --> 00:34:11.020 +[Speaker 1]: I have the ether pad up. + +00:34:12.560 --> 00:34:13.060 +[Speaker 0]: computer as well. So what are we going to do? + +00:34:16.679 --> 00:34:16.880 +Sorry, I'm just a little bit pressed by time + +00:34:18.280 --> 00:34:18.480 +because it's not me controlling when we move + +00:34:19.699 --> 00:34:20.199 +on to the next talk, as was evidenced + +00:34:22.000 --> 00:34:22.179 +yesterday when we got yonked to the next + +00:34:25.020 --> 00:34:25.159 +talk. So Bob, feel free to take all the time + +00:34:25.840 --> 00:34:26.280 +you want to answer questions. + +00:34:27.719 --> 00:34:28.040 +People, if you wanna join the Big Blue Button + +00:34:29.960 --> 00:34:30.060 +room, the links are available and open on the + +00:34:31.480 --> 00:34:31.719 +talk page. You can join and ask as many + +00:34:32.560 --> 00:34:33.060 +questions as you want to Bob. + +00:34:34.199 --> 00:34:34.440 +And for us, with a live stream, + +00:34:36.219 --> 00:34:36.500 +we'll be moving on to the next talk in about + +00:34:38.940 --> 00:34:39.060 +30 seconds. So Bob, all that's left is for me + +00:34:40.679 --> 00:34:40.900 +to thank you for your presentation again this + +00:34:42.100 --> 00:34:42.600 +year and for all your answers. + +00:34:44.060 --> 00:34:44.560 +[Speaker 1]: Thank you, Leo. + +00:34:46.159 --> 00:34:46.440 +[Speaker 0]: All right. Bye bye, Bob. + +00:34:48.080 --> 00:34:48.239 +And we'll be moving on to the next talk in + +00:34:49.900 --> 00:34:50.400 +about 10 seconds. See you in a bit. + +00:34:55.860 --> 00:34:56.139 +All right, Bob, we are off air I think now. + +00:34:57.540 --> 00:34:57.720 +Thank you so much. I need to get moving for + +00:35:01.820 --> 00:35:02.320 +[Speaker 1]: Okay, is somebody gonna keep writing answers + +00:35:04.040 --> 00:35:04.540 +in here or I need to type them in? + +00:35:06.000 --> 00:35:06.280 +[Speaker 0]: the next talk. It's probably best now if you + +00:35:09.160 --> 00:35:09.480 +read the questions on your own and answer + +00:35:10.680 --> 00:35:11.000 +them. We'll collate everything together, + +00:35:11.980 --> 00:35:12.480 +we'd just like to have your answers. + +00:35:16.680 --> 00:35:17.180 +[Speaker 1]: I hope some people will join the BBB. + +00:35:21.140 --> 00:35:21.340 +[Speaker 0]: it in my... All right, + +00:35:21.340 --> 00:35:21.840 +bye-bye. + +00:35:22.800 --> 00:35:23.300 +[Speaker 1]: But I'll start. I'll put Bye-bye. + +00:35:28.360 --> 00:35:28.580 +So let me take a second here to see what + +00:35:32.480 --> 00:35:32.980 +questions we have. Did we cover that? + +00:35:42.400 --> 00:35:42.900 +OK. The point is why not upstream search + +00:35:46.100 --> 00:35:46.600 +interface? Could you clarify that question? + +00:35:50.980 --> 00:35:51.420 +I don't quite know what that means. + +00:35:53.620 --> 00:35:53.800 +So I'll go on to the next 1 and come back to + +00:35:57.520 --> 00:35:57.660 +that. Hyperlinks been around for a number of + +00:35:59.620 --> 00:35:59.860 +years now. What inspired you to write it back + +00:36:00.960 --> 00:36:01.460 +around the time of its birth? + +00:36:02.640 --> 00:36:03.140 +Well, that's a good question. + +00:36:06.940 --> 00:36:07.360 +It was born before the World Wide Web, + +00:36:08.760 --> 00:36:09.260 +actually. And it was right before. + +00:36:12.600 --> 00:36:13.100 +I remember we were in the midst of a version + +00:36:15.800 --> 00:36:16.300 +when the first version of the web occurred. + +00:36:19.640 --> 00:36:19.820 +And I was thinking that there was going to be + +00:36:22.200 --> 00:36:22.700 +an information explosion of unstructured + +00:36:26.920 --> 00:36:27.140 +information. And like we needed to have much + +00:36:30.660 --> 00:36:30.920 +better tools to be able to manage say like + +00:36:36.300 --> 00:36:36.740 +5,000 email messages coming in and all sorts + +00:36:38.760 --> 00:36:39.260 +of non-database-oriented information + +00:36:41.500 --> 00:36:42.000 +structures. So I said we need an advanced + +00:36:45.860 --> 00:36:46.080 +interactive hypertext system and it needs to + +00:36:49.160 --> 00:36:49.320 +work with all the general capabilities that + +00:36:53.600 --> 00:36:54.100 +we use like email and our document production + +00:36:58.180 --> 00:36:58.500 +systems. So I was doing research at the time + +00:37:03.960 --> 00:37:04.200 +at a university And I decided to work on + +00:37:05.640 --> 00:37:06.140 +something that we called personalized + +00:37:07.020 --> 00:37:07.520 +information environments. + +00:37:09.960 --> 00:37:10.120 +And there's a paper about this out there if + +00:37:11.540 --> 00:37:12.040 +you want to dig it out on the web. + +00:37:14.860 --> 00:37:15.360 +So Pies, as they were called, + +00:37:19.620 --> 00:37:20.040 +was an architecture which would have a bunch + +00:37:23.940 --> 00:37:24.100 +of managers, like Hyperbole was 1 of the + +00:37:25.320 --> 00:37:25.820 +managers, the hypertext manager, + +00:37:29.060 --> 00:37:29.440 +and then a bunch of point tools that would + +00:37:30.220 --> 00:37:30.720 +leverage the managers, + +00:37:33.080 --> 00:37:33.580 +like an email reader would be a point tool + +00:37:35.640 --> 00:37:36.140 +that would leverage the hypertext manager. + +00:37:39.200 --> 00:37:39.480 +And so the first, I did in fact write + +00:37:39.960 --> 00:37:40.460 +something called PyMail, + +00:37:43.340 --> 00:37:43.840 +which was very much Gmail-like, + +00:37:47.140 --> 00:37:47.640 +before Gmail. And so inside, + +00:37:50.800 --> 00:37:51.300 +and I did a, it was like our mail in a way, + +00:37:53.520 --> 00:37:54.020 +but inside your our mail summaries, + +00:37:56.720 --> 00:37:57.180 +for example, you could have explicit buttons + +00:38:00.680 --> 00:38:01.120 +embedded and that were drawn from the subject + +00:38:01.800 --> 00:38:02.300 +of your email message, + +00:38:05.640 --> 00:38:06.140 +and they'd work just like the regular button. + +00:38:09.520 --> 00:38:10.020 +So it was very flexible and it had rule-based + +00:38:11.140 --> 00:38:11.640 +processing and things. + +00:38:14.180 --> 00:38:14.340 +So Hyperbole came out of that and it's come a + +00:38:19.020 --> 00:38:19.520 +long way, But it's still a very useful core + +00:38:22.200 --> 00:38:22.440 +hypertext system, hypermedia system I should + +00:38:26.520 --> 00:38:26.920 +say. Are you familiar with the Embark + +00:38:29.760 --> 00:38:30.060 +package? I am a bit. I've just started using + +00:38:31.400 --> 00:38:31.900 +it. I think there's some overlapping + +00:38:33.700 --> 00:38:34.200 +functionality with hyperbole. + +00:38:39.140 --> 00:38:39.360 +Yes, we've found that people over time have + +00:38:41.160 --> 00:38:41.600 +enjoyed hyperbole and have started + +00:38:43.460 --> 00:38:43.960 +replicating some of its features, + +00:38:45.380 --> 00:38:45.880 +small amounts of the features. + +00:38:51.120 --> 00:38:51.340 +I talked to, I hope I don't miss his name, + +00:38:55.760 --> 00:38:56.000 +but O'Adam who writes that once in a while we + +00:38:59.040 --> 00:38:59.480 +dialogue and I think Embark is great, + +00:39:04.080 --> 00:39:04.500 +you know, I'll give him some pointers too and + +00:39:07.740 --> 00:39:08.040 +he thinks that Embark and hyperbole are quite + +00:39:10.240 --> 00:39:10.740 +compatible too, just like organ hyperbole. + +00:39:12.580 --> 00:39:13.080 +So that's how we like to keep it. + +00:39:17.940 --> 00:39:18.140 +Some people prefer just a small package of + +00:39:20.920 --> 00:39:21.100 +MBARC, and it does different things than what + +00:39:23.600 --> 00:39:23.800 +Hyperbole does. So I think you use all of + +00:39:27.280 --> 00:39:27.540 +these tools together, and they can work very + +00:39:33.460 --> 00:39:33.960 +well together. Any other questions? + +00:39:37.800 --> 00:39:38.300 +Anybody still here? If not, + +00:39:40.680 --> 00:39:41.180 +probably people are off to another talk. + +00:39:47.160 --> 00:39:47.660 +So thank you very much and look for Hyperbole + +00:39:51.340 --> 00:39:51.840 +version 9 in the next week. + +00:39:56.380 --> 00:39:56.880 +Thanks very much. Bye. + +00:40:06.660 --> 00:40:07.120 +Should I leave BBB? Oh Alpha Papa's here. + +00:40:15.840 --> 00:40:16.040 +Hey. Good to see you. Alright, + +00:40:22.240 --> 00:40:22.740 +well... Well, I'll stay for another minute, + +00:40:26.920 --> 00:40:27.280 +but I think I'm going to go off video 2 and + +00:40:29.280 --> 00:40:29.780 +start listening to another talk. + +00:40:30.720 --> 00:40:30.980 +Thanks, everyone. Thanks, + +00:40:30.980 --> 00:40:31.480 +everyone. + +00:40:56.920 --> 00:40:56.960 +Yes, I can hear you. Yes, + +00:40:59.720 --> 00:41:00.040 +[Speaker 0]: Have you been answering questions? + +00:41:03.540 --> 00:41:03.700 +[Speaker 1]: I can hear you. finished answering the + +00:41:04.700 --> 00:41:05.200 +questions. We're all done. + +00:41:07.200 --> 00:41:07.280 +[Speaker 0]: I Okay, cool. Well, what I'm going to do, + +00:41:08.100 --> 00:41:08.400 +I'm going to close the room, + +00:41:09.720 --> 00:41:10.160 +unless you want to go a little longer, + +00:41:11.640 --> 00:41:11.880 +because this talk that we're playing right + +00:41:13.180 --> 00:41:13.480 +now is finishing really quick, + +00:41:14.620 --> 00:41:15.120 +and we don't have a Q&A afterwards. + +00:41:18.540 --> 00:41:19.040 +So, do you want to stay on air or something? + +00:41:21.240 --> 00:41:21.740 +[Speaker 1]: Yeah, if you let people know to come back, + +00:41:23.140 --> 00:41:23.320 +because some went to go hear that + +00:41:24.400 --> 00:41:24.900 +presentation, I can stay. + +00:41:27.440 --> 00:41:27.880 +[Speaker 0]: Sure, I'll make an announcement then. + +00:41:29.240 --> 00:41:29.680 +And you can stay, we'll just put on BBB. + +00:41:31.400 --> 00:41:31.840 +You can stay muted until people join. + +00:41:33.440 --> 00:41:33.640 +But this way it opens up avenues for people + +00:41:35.580 --> 00:41:35.980 +to join. And if no 1 shows up in 5 minutes, + +00:41:36.560 --> 00:41:37.060 +we'll all go on break. + +00:41:40.560 --> 00:41:41.060 +Does that sound okay? Cool, + +00:41:44.180 --> 00:41:44.320 +I'll go back to the management in the + +00:41:45.280 --> 00:41:45.780 +background and I'll let you know. + +00:41:47.000 --> 00:41:47.240 +[Speaker 1]: Great, thank you. Where are you? + +00:41:47.700 --> 00:41:48.200 +Oh yeah, okay. + +00:41:50.400 --> 00:41:50.740 +[Speaker 0]: So sorry, I kind of need to run. + +00:41:51.880 --> 00:41:52.380 +I'll be back in about 2 minutes. + +00:42:05.740 --> 00:42:06.240 +Okay, bye. Bye. + +00:43:27.040 --> 00:43:27.540 +Okay, Bob, I've won the stream. + +00:43:28.660 --> 00:43:28.940 +We are joining it now. + +00:43:29.880 --> 00:43:30.380 +We've got about 5 seconds. + +00:43:43.080 --> 00:43:43.580 +And I think we are back. + +00:43:50.760 --> 00:43:51.260 +so we are gone, Bob, please. + +00:43:52.800 --> 00:43:53.300 +[Speaker 1]: Hi. So, yeah, I was going to say, + +00:43:56.720 --> 00:43:57.160 +can we see if anybody comes back in the room? + +00:43:57.620 --> 00:43:58.120 +How do you tell? + +00:44:03.420 --> 00:44:03.740 +[Speaker 0]: You should be able to show on the left, + +00:44:04.440 --> 00:44:04.920 +you've got on BbBlueButton, + +00:44:06.300 --> 00:44:06.380 +you've got a button, I'm showing it on the + +00:44:08.200 --> 00:44:08.440 +screen, but you've got a little button that + +00:44:09.880 --> 00:44:10.380 +allows you to show the people joining. + +00:44:15.140 --> 00:44:15.340 +So, hello everyone. Let's see if you had more + +00:44:16.760 --> 00:44:17.080 +question on your pad that we could be taking + +00:44:18.920 --> 00:44:19.040 +in the meantime, just give me a second to + +00:44:23.000 --> 00:44:23.500 +[Speaker 1]: your pad. Here we go, an error occurred. + +00:44:32.720 --> 00:44:33.220 +[Speaker 0]: find Okay. All right, it's loading up. + +00:44:37.960 --> 00:44:38.440 +[Speaker 1]: Wow. Feels like there's an AI writing this + +00:44:41.180 --> 00:44:41.680 +stuff on the pad. Has it? + +00:44:45.820 --> 00:44:46.060 +Is this the last pad? Oh no, + +00:44:46.880 --> 00:44:47.080 +this is a different 1, + +00:44:51.020 --> 00:44:51.520 +[Speaker 0]: Which question are you looking at now? + +00:44:53.460 --> 00:44:53.820 +[Speaker 1]: sorry. It was a different pad, + +00:44:55.940 --> 00:44:56.440 +[Speaker 0]: Oh right. + +00:44:57.260 --> 00:44:57.380 +[Speaker 2]: Okay, here + +00:44:57.560 --> 00:44:58.060 +[Speaker 1]: that was the problem. we go. + +00:45:00.660 --> 00:45:00.900 +Okay, I'm back. So, yeah, + +00:45:03.000 --> 00:45:03.480 +it looks like... Is anybody back? + +00:45:06.680 --> 00:45:07.180 +Send, if you're here, send a chat message. + +00:45:09.520 --> 00:45:10.020 +[Speaker 0]: Yeah, because it's been something. + +00:45:13.740 --> 00:45:14.240 +You have, apparently, whenever we leave those + +00:45:17.720 --> 00:45:18.220 +BBB chat room open, the moment we go off air, + +00:45:20.080 --> 00:45:20.280 +people start joining and asking a lot of very + +00:45:21.980 --> 00:45:22.240 +interesting questions and you know that's all + +00:45:24.140 --> 00:45:24.280 +well and good, we'll be able to put them on + +00:45:26.160 --> 00:45:26.280 +the page later on. But it'd be great if you + +00:45:28.040 --> 00:45:28.260 +could also have those discussions when we are + +00:45:29.640 --> 00:45:30.140 +live because a lot of people would benefit + +00:45:31.960 --> 00:45:32.120 +from the brilliance that goes on in this + +00:45:34.400 --> 00:45:34.760 +room. So please don't be shy, + +00:45:39.400 --> 00:45:39.900 +[Speaker 1]: So we're on the general stream now? + +00:45:41.660 --> 00:45:41.760 +[Speaker 0]: join and talk. Yep, we are back on the + +00:45:45.940 --> 00:45:46.060 +general stream. We have about until 10 of the + +00:45:47.680 --> 00:45:48.180 +next hour, which is 19 minutes. + +00:45:55.640 --> 00:45:56.140 +[Speaker 1]: Just- Why So have you ever tried hyperbole, + +00:45:56.380 --> 00:45:56.880 +Leo? + +00:45:58.780 --> 00:45:59.280 +[Speaker 0]: don't you and I talk? I have never, + +00:46:02.440 --> 00:46:02.840 +but You know, it feels like every year when + +00:46:03.380 --> 00:46:03.740 +you present something, + +00:46:05.140 --> 00:46:05.640 +it feels like I already know so much. + +00:46:07.080 --> 00:46:07.580 +Because of the buttons, + +00:46:09.600 --> 00:46:10.080 +it feels like it's also something that we've + +00:46:11.980 --> 00:46:12.440 +reinvented many times in Emacs. + +00:46:13.440 --> 00:46:13.940 +It's like conversion to evolution, + +00:46:16.400 --> 00:46:16.560 +except you're the 1 who started ahead of + +00:46:16.920 --> 00:46:17.420 +everyone else. + +00:46:19.200 --> 00:46:19.700 +[Speaker 1]: Well, that's a good point because, + +00:46:22.840 --> 00:46:23.200 +you know, we have, Emacs itself has push + +00:46:25.240 --> 00:46:25.520 +buttons, which you see like in the help + +00:46:27.220 --> 00:46:27.540 +buffers. And those used to, + +00:46:29.340 --> 00:46:29.840 +we didn't really do anything with those, + +00:46:32.280 --> 00:46:32.780 +but now we've subsumed them as implicit + +00:46:34.840 --> 00:46:35.340 +buttons as well. So you're made a return, + +00:46:38.000 --> 00:46:38.500 +we'll work on those anywhere too. + +00:46:41.320 --> 00:46:41.820 +So, we're trying to get, + +00:46:45.660 --> 00:46:45.920 +you use 1 key, right? To control every type + +00:46:46.800 --> 00:46:47.080 +of button that you have. + +00:46:47.920 --> 00:46:48.420 +It works on org links, + +00:46:51.300 --> 00:46:51.800 +org buttons anywhere, or URLs. + +00:46:53.940 --> 00:46:54.440 +Because it's so simple. + +00:46:58.480 --> 00:46:58.820 +All you need is like 5 to 10 lines of code to + +00:47:02.560 --> 00:47:02.760 +map. You map the pattern that represents a + +00:47:04.900 --> 00:47:05.060 +concept, right? And then you can create an + +00:47:07.500 --> 00:47:07.700 +infinite number of those buttons from that + +00:47:09.240 --> 00:47:09.520 +type. That's what's really cool about + +00:47:12.560 --> 00:47:13.060 +Hyperbole is say I have a 500 page document + +00:47:15.400 --> 00:47:15.600 +and it uses a really weird format for + +00:47:16.560 --> 00:47:17.060 +cross-referencing, right? + +00:47:21.960 --> 00:47:22.320 +I write my 3 lines of pattern match to work + +00:47:23.860 --> 00:47:24.200 +with that, and then everywhere throughout + +00:47:25.760 --> 00:47:25.960 +that document and the hundreds of other + +00:47:27.480 --> 00:47:27.680 +documents that will be created with that + +00:47:30.380 --> 00:47:30.880 +format, they're all live buttons instantly. + +00:47:32.740 --> 00:47:33.240 +Nothing changed about the document. + +00:47:35.280 --> 00:47:35.540 +That's really cool. You know, + +00:47:37.360 --> 00:47:37.860 +word mode, we have global word buttons, + +00:47:41.860 --> 00:47:42.040 +but mostly it has to be embedded within an + +00:47:44.260 --> 00:47:44.760 +org file, right? And follow that syntax. + +00:47:51.660 --> 00:47:51.900 +With hyperbole, it's like we can adapt as the + +00:47:54.800 --> 00:47:55.300 +world adapts around us to whatever formats + +00:47:56.440 --> 00:47:56.940 +people want to use that day. + +00:47:59.240 --> 00:47:59.380 +And you can even change things to look the + +00:48:01.700 --> 00:48:02.200 +way you want, right, and have your own + +00:48:04.540 --> 00:48:04.860 +cross-references. There's something built + +00:48:07.060 --> 00:48:07.560 +into Hyperbole that's not really active, + +00:48:12.620 --> 00:48:13.120 +which was sort of along the Zettelkasten way. + +00:48:15.200 --> 00:48:15.420 +We wrote this a long time ago. + +00:48:16.460 --> 00:48:16.960 +It's called hib-doc.el, + +00:48:21.720 --> 00:48:22.200 +and it's a card catalog notion. + +00:48:25.320 --> 00:48:25.820 +So it uses the high rollo in the background + +00:48:29.900 --> 00:48:30.180 +but it lets you create these forms that are + +00:48:32.660 --> 00:48:32.800 +cards that you fill out with whatever kind of + +00:48:35.080 --> 00:48:35.380 +data you want and then it gives you the full + +00:48:38.040 --> 00:48:38.520 +text searching across the cards and each card + +00:48:41.260 --> 00:48:41.760 +has a unique ID that you can reference + +00:48:44.920 --> 00:48:45.240 +similar to org IDs but these are human + +00:48:49.700 --> 00:48:49.860 +readable and human typable and so you can you + +00:48:52.460 --> 00:48:52.960 +can just have a cross-reference to any doc ID + +00:48:55.940 --> 00:48:56.100 +and essentially create what Engelbart used to + +00:49:00.180 --> 00:49:00.480 +call a journal, which is all these IDs on + +00:49:02.980 --> 00:49:03.220 +documents that point you directly to the + +00:49:05.460 --> 00:49:05.640 +document archive so that you could have like + +00:49:09.780 --> 00:49:10.020 +your internal publishing system and you know + +00:49:12.440 --> 00:49:12.940 +it's very simple to do and it's just 1 module + +00:49:14.160 --> 00:49:14.660 +added on to Hyperbole. + +00:49:19.020 --> 00:49:19.140 +[Speaker 0]: Yeah it's especially interesting for me you + +00:49:20.960 --> 00:49:21.140 +know because coming back to the side of + +00:49:23.240 --> 00:49:23.400 +convergent evolutions it's funny because the + +00:49:24.380 --> 00:49:24.880 +parameters are a little different. + +00:49:25.760 --> 00:49:26.260 +For us with org buttons, + +00:49:29.060 --> 00:49:29.340 +we're very happy. A lot of the stuff during + +00:49:31.020 --> 00:49:31.360 +EmacsConf is run with org mode, + +00:49:33.840 --> 00:49:34.340 +like we have Elisp going everywhere to + +00:49:36.820 --> 00:49:37.320 +compile a lot of org properties, + +00:49:39.140 --> 00:49:39.640 +like speaker information, + +00:49:41.120 --> 00:49:41.480 +for instance, how long the talk is, + +00:49:42.500 --> 00:49:42.800 +the title, and all this. + +00:49:44.540 --> 00:49:44.760 +We have all of this in an org file, + +00:49:45.520 --> 00:49:46.020 +which we use as a database, + +00:49:47.480 --> 00:49:47.800 +but then we can do so much stuff. + +00:49:50.500 --> 00:49:50.740 +We can send email and we can update the + +00:49:52.080 --> 00:49:52.200 +schedule. By the way, if you're interested in + +00:49:54.160 --> 00:49:54.280 +this, we'll have a talk on the DevTrack in + +00:49:56.320 --> 00:49:56.640 +the afternoon today that Sacha did and it's + +00:49:57.800 --> 00:49:58.140 +wonderful. I'm just teasing it. + +00:49:58.540 --> 00:49:59.040 +[Speaker 1]: Oh, that's great. + +00:50:00.640 --> 00:50:01.140 +[Speaker 0]: But coming back to Hyperbole, + +00:50:03.840 --> 00:50:04.000 +for you, it feels like the parameters were + +00:50:06.140 --> 00:50:06.560 +slightly different because the feeling was, + +00:50:08.600 --> 00:50:09.000 +I just want a tunnel that can work between + +00:50:11.100 --> 00:50:11.240 +any type of files. Now it's all well and + +00:50:13.100 --> 00:50:13.580 +good, Org-Rome, D-Note, + +00:50:14.480 --> 00:50:14.760 +and all this stuff like this, + +00:50:16.360 --> 00:50:16.860 +they create bidirectional links, + +00:50:19.040 --> 00:50:19.540 +but it's only between org-mode files. + +00:50:21.540 --> 00:50:22.040 +Whereas what you're achieving with Hyperbole, + +00:50:24.360 --> 00:50:24.760 +and you've done it much earlier than everyone + +00:50:26.940 --> 00:50:27.440 +else, is that you have this concept + +00:50:29.260 --> 00:50:29.440 +regardless of the type of file that you're + +00:50:32.020 --> 00:50:32.520 +using. And I find this to be beautiful. + +00:50:34.900 --> 00:50:35.240 +Like 5 years ago, whenever you were talking + +00:50:36.900 --> 00:50:37.280 +about hyperbole, I did not have a concrete + +00:50:38.040 --> 00:50:38.540 +idea of what was happening. + +00:50:40.000 --> 00:50:40.360 +But ever since I've gone through the journey + +00:50:42.040 --> 00:50:42.380 +of really understanding what the El Caster + +00:50:44.500 --> 00:50:45.000 +method were about, it feels like you were + +00:50:46.600 --> 00:50:46.980 +foreigners in the topic. + +00:50:48.340 --> 00:50:48.540 +Obviously, you've mentioned the mother of all + +00:50:49.740 --> 00:50:50.240 +demos by Edward Engelbart, + +00:50:53.600 --> 00:50:54.100 +but those ideas are not novel, + +00:50:56.520 --> 00:50:56.820 +but it feels like only now are they starting + +00:50:58.140 --> 00:50:58.520 +to be appropriated by people, + +00:50:59.340 --> 00:50:59.800 +especially in free software, + +00:51:00.700 --> 00:51:01.200 +and it's really good to see. + +00:51:02.200 --> 00:51:02.440 +I'm really excited to, + +00:51:04.280 --> 00:51:04.600 +well, have my small part to play in this. + +00:51:06.760 --> 00:51:06.960 +And I'm also excited to be able to chat with + +00:51:09.640 --> 00:51:10.140 +you and people like Bastien and other people + +00:51:10.900 --> 00:51:11.400 +about all those topics. + +00:51:13.280 --> 00:51:13.780 +[Speaker 1]: Yeah, I think, you know, + +00:51:16.400 --> 00:51:16.640 +it's fun that we can laugh now about when + +00:51:19.540 --> 00:51:20.000 +people say people are still using Emacs, + +00:51:22.440 --> 00:51:22.800 +you know, is because they're not used, + +00:51:23.960 --> 00:51:24.160 +certain people aren't using it. + +00:51:26.640 --> 00:51:26.880 +They have no idea of how far it's come and + +00:51:28.260 --> 00:51:28.760 +how powerful it is. And, + +00:51:31.020 --> 00:51:31.520 +you know, we're leveraging Elisp heavily, + +00:51:33.440 --> 00:51:33.940 +obviously, but if you look at the definition + +00:51:37.480 --> 00:51:37.980 +of our types, they look exactly like defunds + +00:51:41.160 --> 00:51:41.420 +in ELisp. And we've been able to do that + +00:51:42.280 --> 00:51:42.780 +because of Lisp macros. + +00:51:46.420 --> 00:51:46.920 +So we basically have our own domain-specific + +00:51:49.920 --> 00:51:50.160 +language there. But there's almost nothing to + +00:51:52.500 --> 00:51:52.740 +learn because it's just like what you know + +00:51:55.440 --> 00:51:55.680 +from UList. So again, you know, + +00:51:57.720 --> 00:51:57.980 +taking the concept and leveraging it, + +00:52:00.060 --> 00:52:00.520 +abstracting it and leveraging it multiple + +00:52:02.440 --> 00:52:02.940 +times gives you a lot of power. + +00:52:05.820 --> 00:52:06.040 +And people, you know, somebody said the other + +00:52:07.000 --> 00:52:07.500 +day, and I said, finally, + +00:52:09.860 --> 00:52:10.360 +this quote happened. He said, + +00:52:14.820 --> 00:52:15.060 +there's so many things that I do with + +00:52:16.960 --> 00:52:17.200 +hyperbole every day that I forget that I'm + +00:52:21.220 --> 00:52:21.440 +using hyperbole. Because it's just so + +00:52:23.080 --> 00:52:23.580 +embedded in this guy's workflow. + +00:52:25.240 --> 00:52:25.440 +And that's really how I use it. + +00:52:26.880 --> 00:52:27.380 +You know, there are features in there, + +00:52:28.580 --> 00:52:29.060 +can't use everything, right? + +00:52:31.360 --> 00:52:31.860 +So there are features that I don't use, + +00:52:35.380 --> 00:52:35.580 +but I use a lot of things and it's all like + +00:52:37.080 --> 00:52:37.580 +muscle memory, just like the keyboard, + +00:52:39.240 --> 00:52:39.740 +the Emacs key bindings. + +00:52:41.780 --> 00:52:42.180 +So it's very exciting to get to that level. + +00:52:44.120 --> 00:52:44.300 +And now, you know, we haven't started with + +00:52:46.440 --> 00:52:46.940 +the chatbots or any of the AI integration, + +00:52:49.240 --> 00:52:49.440 +but I'm starting to think about that a little + +00:52:53.140 --> 00:52:53.520 +bit and how we'll interface to that world and + +00:52:54.820 --> 00:52:55.320 +I think it's going to be very exciting. + +00:52:58.180 --> 00:52:58.340 +[Speaker 0]: Yeah, likewise and I think it harks back to + +00:53:00.520 --> 00:53:00.660 +what we were talking about before when we + +00:53:03.560 --> 00:53:03.700 +mentioned Hyperbole being a package inside of + +00:53:04.800 --> 00:53:05.300 +an ecosystem that is Emacs. + +00:53:07.740 --> 00:53:08.040 +But it's not because something is well + +00:53:10.320 --> 00:53:10.560 +circumscribed in terms of feature set that it + +00:53:12.500 --> 00:53:12.880 +does not influence everything around it. + +00:53:14.680 --> 00:53:15.060 +Like Hyperbole can be used with something + +00:53:17.900 --> 00:53:18.080 +completely at the opposite end of what it was + +00:53:21.180 --> 00:53:21.380 +intended for, just because it provides a good + +00:53:23.480 --> 00:53:23.860 +set of tools that can be used wherever else + +00:53:25.900 --> 00:53:26.100 +you want in Emacs. And it's the same thing + +00:53:27.720 --> 00:53:27.980 +with Org Mode, it's the same thing with many, + +00:53:28.780 --> 00:53:29.280 +many different things. + +00:53:32.320 --> 00:53:32.820 +And it feels like integrating AIs, + +00:53:36.420 --> 00:53:36.920 +or generative AIs, into Emacs would provide + +00:53:42.160 --> 00:53:42.340 +such a tool that could apply to any kind of + +00:53:44.540 --> 00:53:45.040 +other major mode or any kind of other use. + +00:53:46.460 --> 00:53:46.640 +So I'm also excited to see this. + +00:53:49.900 --> 00:53:50.220 +It feels like we are sitting at the brink of + +00:53:51.980 --> 00:53:52.480 +a revolution. I'm not going to say the acne + +00:53:54.200 --> 00:53:54.440 +stuff, but it definitely feels like right + +00:53:57.100 --> 00:53:57.560 +now, by trying to see what we can do with AI, + +00:53:59.160 --> 00:53:59.380 +it's definitely going to change the way not + +00:54:01.360 --> 00:54:01.560 +only we program, but also the way we take + +00:54:02.720 --> 00:54:03.160 +notes and the way we design stuff, + +00:54:04.940 --> 00:54:05.220 +arcing back to what John Wigley said + +00:54:08.160 --> 00:54:08.660 +yesterday about his draft program on macOS. + +00:54:10.440 --> 00:54:10.940 +Bob, if you don't mind, + +00:54:12.880 --> 00:54:13.080 +I see people typing questions and I also see + +00:54:14.540 --> 00:54:14.820 +people joining on people buttons, + +00:54:16.720 --> 00:54:16.920 +so I'm going to read you the 2 questions that + +00:54:17.760 --> 00:54:18.260 +have been added. Is that okay? + +00:54:20.080 --> 00:54:20.580 +[Speaker 1]: Great, go for it. + +00:54:22.600 --> 00:54:23.100 +[Speaker 0]: Cool, so first question. + +00:54:24.880 --> 00:54:25.240 +Wow, what you're describing now, + +00:54:27.320 --> 00:54:27.520 +and that's when you were talking about the + +00:54:31.580 --> 00:54:31.840 +bi-directional links and especially the last + +00:54:32.540 --> 00:54:33.040 +question in its entirety, + +00:54:35.220 --> 00:54:35.440 +What you're describing now reminds me a lot + +00:54:37.040 --> 00:54:37.440 +about HyperCard that I grew up on. + +00:54:39.000 --> 00:54:39.220 +Do you know if Hyperbole inspired Bill + +00:54:40.840 --> 00:54:41.040 +Atkinson or if you were inspired by + +00:54:42.880 --> 00:54:43.040 +HyperCard? Or were there just a lot of + +00:54:44.580 --> 00:54:44.820 +thoughts about hyper-contextuality around + +00:54:45.020 --> 00:54:45.520 +that time? + +00:54:49.600 --> 00:54:50.100 +[Speaker 1]: Alright, well this is another interesting + +00:54:52.120 --> 00:54:52.360 +anecdote. I don't know if it's true or not, + +00:54:57.340 --> 00:54:57.840 +but I think HyperCard predated our stuff. + +00:55:00.180 --> 00:55:00.480 +It was right around the same time when + +00:55:01.920 --> 00:55:02.420 +Hyperbole was starting out. + +00:55:04.540 --> 00:55:05.040 +But when I was doing the Pi research, + +00:55:08.460 --> 00:55:08.800 +I worked at, when I left school, + +00:55:11.200 --> 00:55:11.280 +I worked at Motorola, and we did a lot of + +00:55:12.540 --> 00:55:13.040 +work with Apple back then. + +00:55:15.060 --> 00:55:15.480 +And somebody came back and he said, + +00:55:17.540 --> 00:55:18.040 +you know, the people over there have seen + +00:55:21.900 --> 00:55:21.940 +your Pi research and they really liked it a + +00:55:25.840 --> 00:55:26.020 +lot. And so they were leveraging that when + +00:55:28.280 --> 00:55:28.440 +they decided to create the division that they + +00:55:33.120 --> 00:55:33.280 +called Apple Pi, which was the originator of + +00:55:36.300 --> 00:55:36.500 +the Newton which eventually led to the + +00:55:40.440 --> 00:55:40.940 +iPhone. So it all kind of is interconnected + +00:55:44.120 --> 00:55:44.380 +just like the impact that free software has + +00:55:46.800 --> 00:55:47.240 +had around the world. So you never know where + +00:55:49.360 --> 00:55:49.860 +your stuff is gonna go or end up. + +00:55:53.160 --> 00:55:53.400 +[Speaker 0]: Right. All right, moving on to the next + +00:55:55.600 --> 00:55:55.840 +question. Is it possible to only use 1 + +00:55:57.340 --> 00:55:57.800 +feature of hyperbole without the others, + +00:56:00.140 --> 00:56:00.580 +i.e. Using only the implicit explicit buttons + +00:56:03.340 --> 00:56:03.580 +without I control I roller or without having + +00:56:05.860 --> 00:56:05.920 +to rewrite part of the code in hyperbole in + +00:56:07.540 --> 00:56:08.040 +order to be able to load a smaller hyperbole. + +00:56:08.660 --> 00:56:09.160 +Does it make sense? + +00:56:12.140 --> 00:56:12.640 +[Speaker 1]: Yes we get asked this all the time. + +00:56:16.100 --> 00:56:16.560 +So you can use any little bit that you want + +00:56:19.120 --> 00:56:19.620 +anywhere right you can even just call code + +00:56:23.160 --> 00:56:23.660 +from Hyperbole. I mean you don't use + +00:56:24.720 --> 00:56:25.080 +everything in Emacs, right? + +00:56:27.180 --> 00:56:27.680 +But you still install Emacs on your machine. + +00:56:29.580 --> 00:56:30.080 +It's exactly the same thing. + +00:56:32.900 --> 00:56:33.280 +Those libraries don't take up any memory, + +00:56:36.140 --> 00:56:36.380 +they take up a little disk space and it's so + +00:56:38.360 --> 00:56:38.520 +trivial compared to the amount of disk we + +00:56:41.280 --> 00:56:41.780 +have today. So a lot of things are not loaded + +00:56:43.240 --> 00:56:43.740 +unless you activate them. + +00:56:48.720 --> 00:56:48.900 +And so I know that you do have to build all + +00:56:50.860 --> 00:56:51.340 +those things. So maybe that's what bothers + +00:56:55.520 --> 00:56:56.020 +people. It takes 2 minutes if you're using, + +00:56:57.920 --> 00:56:58.400 +it depends how fast your computer is. + +00:57:00.920 --> 00:57:01.160 +But you build it once on install like every + +00:57:04.440 --> 00:57:04.600 +other package. And it used to be that there + +00:57:06.460 --> 00:57:06.620 +would be a lot of warnings just because of + +00:57:08.740 --> 00:57:09.020 +the way we wrote the code and we didn't + +00:57:10.920 --> 00:57:11.120 +really have to deal with some of those + +00:57:12.620 --> 00:57:13.080 +warnings. But with this new release, + +00:57:14.640 --> 00:57:15.140 +we've gotten rid of almost all of them, + +00:57:19.280 --> 00:57:19.780 +including the native compiler messages. + +00:57:22.120 --> 00:57:22.620 +So it should be a very clean install now, + +00:57:26.120 --> 00:57:26.620 +and just use 1 part at a time. + +00:57:29.580 --> 00:57:29.820 +But the other parts are there in case you + +00:57:31.960 --> 00:57:32.080 +make a link to something and you use a + +00:57:34.360 --> 00:57:34.600 +facility just like I was showing as I went + +00:57:35.860 --> 00:57:36.360 +across subsystems today. + +00:57:37.640 --> 00:57:38.040 +It may take you a year, + +00:57:39.880 --> 00:57:40.120 +but then all of a sudden you find the use + +00:57:42.100 --> 00:57:42.340 +case for Hyrule and you say, + +00:57:43.520 --> 00:57:44.020 +oh, I'm glad I have it there. + +00:57:47.140 --> 00:57:47.540 +And yes, some of these things could be split + +00:57:49.320 --> 00:57:49.540 +into sub packages like you do in the org + +00:57:52.320 --> 00:57:52.500 +ecosystem. But given our limited resources on + +00:57:56.120 --> 00:57:56.420 +the team, we find having them all in 1 gives + +00:57:57.440 --> 00:57:57.940 +us a higher level of quality, + +00:58:00.480 --> 00:58:00.980 +and lets us deliver a better integrated + +00:58:02.800 --> 00:58:03.300 +system for your use. + +00:58:06.040 --> 00:58:06.300 +[Speaker 0]: Yeah, exactly. And I think, + +00:58:08.600 --> 00:58:09.100 +you know, it's, it's not a monolith. + +00:58:12.240 --> 00:58:12.540 +I mean, it's usually easier, + +00:58:14.340 --> 00:58:14.620 +easy, more easy, more easy. + +00:58:16.000 --> 00:58:16.480 +Sorry, I was right on the first try. + +00:58:20.140 --> 00:58:20.640 +It's usually easier to maintain a monolith + +00:58:22.780 --> 00:58:23.140 +that contains many bits of functionality like + +00:58:25.060 --> 00:58:25.280 +org. You have plenty of people using org + +00:58:26.680 --> 00:58:27.180 +mode, not using org-agenda, + +00:58:28.780 --> 00:58:28.980 +for instance, or you've got plenty of people + +00:58:31.320 --> 00:58:31.560 +using org-mode and barely using Babel because + +00:58:34.240 --> 00:58:34.740 +it doesn't really translate to their use. + +00:58:37.500 --> 00:58:37.720 +And I feel like I very much agree with you. + +00:58:39.320 --> 00:58:39.520 +It's okay to install a package and only use + +00:58:39.920 --> 00:58:40.420 +some of the functions. + +00:58:43.080 --> 00:58:43.580 +I was reminded, as you were discussing this, + +00:58:44.640 --> 00:58:45.140 +of the consults package, + +00:58:46.420 --> 00:58:46.920 +which is part of the VertiCo, + +00:58:50.540 --> 00:58:51.040 +mbark and marginalia and all this. + +00:58:54.520 --> 00:58:54.960 +Consult, it replaces a lot of the Emacs + +00:58:56.820 --> 00:58:56.980 +built-in commands like for finding your + +00:58:59.760 --> 00:58:59.900 +buffers or finding text inside of your + +00:59:03.480 --> 00:59:03.980 +buffer. It's great. And you do not need to + +00:59:06.140 --> 00:59:06.300 +completely move to consult as you get + +00:59:08.940 --> 00:59:09.080 +started. You can start colonizing 1 step at a + +00:59:11.040 --> 00:59:11.540 +time the function that you usually use. + +00:59:15.580 --> 00:59:16.060 +I highly recommend to people to not let the + +00:59:18.560 --> 00:59:18.700 +size of a project deter them from trying it + +00:59:21.140 --> 00:59:21.640 +out because, again, in Emacs, + +00:59:22.300 --> 00:59:22.800 +everything is horizontal. + +00:59:27.980 --> 00:59:28.180 +If somehow you want to do something that was + +00:59:29.440 --> 00:59:29.640 +not intended primarily for this, + +00:59:31.720 --> 00:59:32.220 +or if you only want to use 10% of a package, + +00:59:35.160 --> 00:59:35.540 +well, do it. An example that I have for me is + +00:59:39.660 --> 00:59:39.840 +that Lispy is the minor mode that I use for + +00:59:41.880 --> 00:59:42.380 +editing Elisp documents, + +00:59:45.140 --> 00:59:45.380 +and it's great. Elisp provides similar + +00:59:46.840 --> 00:59:47.040 +functions to Paredit, which might be a little + +00:59:48.960 --> 00:59:49.300 +more popular, which allows you to have modal + +00:59:52.400 --> 00:59:52.540 +editing when you are on specific parts of a + +00:59:54.480 --> 00:59:54.620 +file, like the opening parenthesis or the + +00:59:56.040 --> 00:59:56.480 +closing parenthesis. It's great, + +00:59:58.080 --> 00:59:58.320 +it provides modal editing for those modes, + +01:00:00.840 --> 01:00:01.340 +but I certainly do not know everything, + +01:00:04.040 --> 01:00:04.280 +every modal command associated to it. + +01:00:06.000 --> 01:00:06.180 +I just use the 1 that makes the most sense to + +01:00:07.680 --> 01:00:08.180 +me. So feel free to explore. + +01:00:13.200 --> 01:00:13.700 +[Speaker 1]: I'll just say, we get this so much. + +01:00:15.360 --> 01:00:15.660 +It's not that large. I mean, + +01:00:16.960 --> 01:00:17.360 +there's a fair number of files, + +01:00:20.600 --> 01:00:20.820 +but it's just like 1 major directory and then + +01:00:21.840 --> 01:00:22.340 +the KOutliner directory. + +01:00:25.120 --> 01:00:25.560 +And when you look at these things, + +01:00:26.640 --> 01:00:27.140 +you install web applications, + +01:00:30.240 --> 01:00:30.440 +everything else, just when you download the + +01:00:31.700 --> 01:00:31.820 +source code, it's much, + +01:00:33.480 --> 01:00:33.980 +much smaller than any of that. + +01:00:37.120 --> 01:00:37.360 +So I don't know why people you know accept + +01:00:39.140 --> 01:00:39.640 +that it's larger than your typical package. + +01:00:41.400 --> 01:00:41.900 +Why there's really an issue there. + +01:00:44.580 --> 01:00:45.080 +[Speaker 0]: I think it's because people tend to assume + +01:00:47.980 --> 01:00:48.480 +that a paradigm like the 1 you're describing, + +01:00:51.360 --> 01:00:51.560 +which seems to be changing the way you use + +01:00:53.200 --> 01:00:53.480 +Emacs in a way because you're no longer + +01:00:55.520 --> 01:00:56.000 +thinking of as buffers as separate entities, + +01:00:57.520 --> 01:00:57.980 +you can tunnel between them. + +01:00:59.820 --> 01:01:00.180 +You know, it feels like a huge paradigm shift + +01:01:02.120 --> 01:01:02.320 +and you assume that the code behind it is + +01:01:03.880 --> 01:01:04.080 +going to be humongous as well, + +01:01:05.080 --> 01:01:05.380 +but it's usually not the case. + +01:01:07.480 --> 01:01:07.640 +It's just that the idea is very pure at the + +01:01:09.560 --> 01:01:10.060 +start, and the paradigm shift that it allows + +01:01:14.020 --> 01:01:14.120 +is also magnificent. But at the end of the + +01:01:15.700 --> 01:01:16.200 +day, the code is fairly simple, + +01:01:17.860 --> 01:01:18.360 +because it does 1 thing and it does it well. + +01:01:20.860 --> 01:01:21.180 +[Speaker 1]: 1 thing I noticed too, + +01:01:23.560 --> 01:01:23.760 +I mean I'm a big believer in turnkey kind of + +01:01:26.780 --> 01:01:27.180 +systems. In fact a long time ago when I built + +01:01:28.680 --> 01:01:29.180 +an IDE on Emacs called InfoDoc, + +01:01:31.980 --> 01:01:32.480 +that was delivered pre-compiled. + +01:01:35.760 --> 01:01:35.940 +So it's like you download it like every other + +01:01:39.140 --> 01:01:39.440 +app and you run it. And so I think + +01:01:41.980 --> 01:01:42.480 +eliminating all the friction that occurs, + +01:01:45.860 --> 01:01:46.360 +and you know, I just got going recently with + +01:01:48.860 --> 01:01:49.160 +the wonderful packages that you just + +01:01:50.980 --> 01:01:51.460 +mentioned, VertiCo and Consult, + +01:01:55.120 --> 01:01:55.320 +but they don't have a manual that covers all + +01:01:57.280 --> 01:01:57.780 +that. They use sort of like a cookbook, + +01:02:02.020 --> 01:02:02.220 +a wiki online to answer a lot of the + +01:02:04.380 --> 01:02:04.600 +questions that people have and everybody has + +01:02:05.860 --> 01:02:06.360 +to figure out their configurations, + +01:02:10.640 --> 01:02:10.880 +you know, to make these things all work + +01:02:14.180 --> 01:02:14.680 +together. We'd like to do that engineering + +01:02:17.080 --> 01:02:17.440 +and say here it is, you know, + +01:02:19.240 --> 01:02:19.500 +it's like if you want to configure it and + +01:02:20.920 --> 01:02:21.420 +make it your own, you can do it. + +01:02:24.860 --> 01:02:25.160 +But there is a default configuration that + +01:02:28.180 --> 01:02:28.380 +handles all the typical use cases and you can + +01:02:30.940 --> 01:02:31.220 +just load it up and run because it's made to + +01:02:35.860 --> 01:02:36.020 +use, you don't have to hack it to make it + +01:02:36.760 --> 01:02:37.260 +useful for you. + +01:02:40.380 --> 01:02:40.560 +[Speaker 0]: Yeah, it reminds me of the discussion we had + +01:02:42.240 --> 01:02:42.740 +with Stéphane yesterday about sane defaults. + +01:02:45.080 --> 01:02:45.580 +And I think the question was, + +01:02:48.580 --> 01:02:49.080 +Emacs should probably ship with sane defaults + +01:02:51.360 --> 01:02:51.740 +for people. And Stéphane's answer was, + +01:02:53.620 --> 01:02:53.800 +well, my sane defaults might not be the same + +01:02:54.720 --> 01:02:55.220 +thing as your sane defaults. + +01:02:57.160 --> 01:02:57.560 +And that's why I think it's important, + +01:02:59.020 --> 01:02:59.340 +really, to have a core set of features, + +01:03:00.800 --> 01:03:01.300 +be it with hyperbole of org mode, + +01:03:02.020 --> 01:03:02.520 +that is well-documented, + +01:03:05.220 --> 01:03:05.500 +as you mentioned. But what I like about this + +01:03:06.900 --> 01:03:07.260 +in a way, and I think hyperbole is perhaps + +01:03:08.800 --> 01:03:09.300 +taking more benefits of this than Org Mode, + +01:03:11.780 --> 01:03:12.280 +is that the self-documentation aspect of it + +01:03:14.340 --> 01:03:14.540 +feels like it's easier with hyperbole because + +01:03:16.820 --> 01:03:17.300 +you're not bound by Org Mode buffers. + +01:03:18.840 --> 01:03:19.340 +You can link to just about everything. + +01:03:23.940 --> 01:03:24.240 +And for me, this ability to self-document is + +01:03:26.040 --> 01:03:26.140 +well, first, very true to the philosophy of + +01:03:27.040 --> 01:03:27.540 +Emacs in the first place, + +01:03:31.400 --> 01:03:31.900 +but also opens up those resonance cycles + +01:03:34.040 --> 01:03:34.180 +where, oh, you get interested and then you + +01:03:35.320 --> 01:03:35.820 +start reading up and then the documentation + +01:03:37.860 --> 01:03:38.320 +is so good that it feeds into your practice + +01:03:40.840 --> 01:03:41.040 +and then it goes nuclear and you gain so much + +01:03:42.040 --> 01:03:42.540 +knowledge as a result of this. + +01:03:44.280 --> 01:03:44.440 +All right, Bob, we are about out of time. + +01:03:46.120 --> 01:03:46.280 +We only have about 1 minute until we go to + +01:03:47.720 --> 01:03:48.220 +the next talk. Do you have any parting words? + +01:03:53.360 --> 01:03:53.860 +[Speaker 1]: I do. I think, you know, + +01:03:56.380 --> 01:03:56.880 +the world's complex, it's getting more + +01:03:59.980 --> 01:04:00.480 +complex. I think that's why people use Emacs + +01:04:02.080 --> 01:04:02.560 +in the first place, because it's a big + +01:04:04.600 --> 01:04:04.920 +system. You wouldn't use it unless you wanted + +01:04:06.100 --> 01:04:06.600 +it to simplify your life. + +01:04:10.580 --> 01:04:10.760 +Hyperbole is built with the same idea in + +01:04:14.020 --> 01:04:14.180 +mind. You may not get it just like a lot of + +01:04:15.720 --> 01:04:16.020 +people don't understand when they first + +01:04:17.900 --> 01:04:18.400 +encounter it, but when they do understand it, + +01:04:20.860 --> 01:04:21.360 +they're blown away. It changes their life. + +01:04:24.520 --> 01:04:25.020 +You know, when you really understand implicit + +01:04:27.880 --> 01:04:28.100 +buttons, I think that's 1 of the things in + +01:04:30.480 --> 01:04:30.820 +hyperbole that can change your Emacs working + +01:04:33.840 --> 01:04:34.060 +life. So just give that a try and I think + +01:04:36.140 --> 01:04:36.640 +you'll be pleasantly surprised across time. + +01:04:39.720 --> 01:04:39.860 +[Speaker 0]: And thank you so much Bob. + +01:04:41.400 --> 01:04:41.600 +We'll be moving on to the next talk in about + +01:04:43.480 --> 01:04:43.620 +20 seconds so everyone see you in a bit and + +01:04:44.440 --> 01:04:44.940 +Bob thank you so much again. + +01:04:45.560 --> 01:04:46.060 +[Speaker 1]: Thanks very much. Thank you. + +01:04:52.800 --> 01:04:53.000 +[Speaker 0]: All right I think we are off here now, + +01:04:53.800 --> 01:04:53.980 +so thank you so much Bob. + +01:04:55.380 --> 01:04:55.540 +I'm gonna need to step out and get ready for + +01:04:59.100 --> 01:04:59.240 +[Speaker 1]: Yeah, do your thing. You do a great job at + +01:05:01.400 --> 01:05:01.760 +it. But I wanted to ask you where in London + +01:05:04.280 --> 01:05:04.780 +[Speaker 0]: the next talk. I'm not in London, + +01:05:07.360 --> 01:05:07.480 +I'm in France and I just know the time in + +01:05:10.240 --> 01:05:10.740 +[Speaker 1]: you are. Oh, okay, got it. + +01:05:12.180 --> 01:05:12.680 +Sorry, I thought you were, + +01:05:15.020 --> 01:05:15.520 +[Speaker 0]: London. All right, bye-bye Bob. + +01:05:15.860 --> 01:05:16.360 +[Speaker 1]: take care. Bye. + +01:05:45.080 --> 01:05:45.580 +[Speaker 0]: Silence. + +01:06:00.060 --> 01:06:00.560 +You + +01:07:00.180 --> 01:07:00.680 +[Speaker 1]: 311. + +01:08:15.060 --> 01:08:15.560 +[Speaker 0]: Silence. + +01:10:20.580 --> 01:10:20.700 +[Speaker 2]: We will read the input from yesterday and we + +01:10:23.560 --> 01:10:24.060 +will continue the evaluation with a different + +01:10:25.380 --> 01:10:25.880 +I provided in this input. + +01:10:32.420 --> 01:10:32.660 +So let's try to type some arbitrary value And + +01:10:37.920 --> 01:10:38.100 +[Speaker 0]: this value. And at the same + +01:10:38.100 --> 01:10:38.380 +[Speaker 2]: you see that the loop continued with time, + +01:10:40.580 --> 01:10:41.080 +it could easily interrupt. + +01:10:45.720 --> 01:10:45.980 +OK, what most annoying thing that I had + +01:10:47.240 --> 01:10:47.560 +previously with the usual regular + +01:10:50.320 --> 01:10:50.820 +implementation, then I have a quite nice + +01:10:53.660 --> 01:10:54.160 +Geeks API where I can build packages, + +01:10:55.380 --> 01:10:55.880 +systems, and other stuff. + +01:10:59.640 --> 01:11:00.140 +But if I evaluate this expression, + +01:11:05.140 --> 01:11:05.640 +I will get an error. OK. + +01:11:11.500 --> 01:11:11.740 +I will get an error because I don't have an + +01:11:12.980 --> 01:11:13.480 +appropriate environment. + +01:11:16.640 --> 01:11:16.800 +But what I can do, I can connect to the + +01:11:22.360 --> 01:11:22.660 +remote label by creating a server with + +01:11:25.440 --> 01:11:25.920 +xlabelListen command and connecting to it + +01:11:27.100 --> 01:11:27.600 +with etherconnect command. + +01:11:28.580 --> 01:11:28.740 +And now I + +01:11:29.540 --> 01:11:30.040 +[Speaker 0]: can emulate this expression. + +01:11:32.780 --> 01:11:33.280 +Right? Wow. Right. Whoa. + +01:11:39.800 --> 01:11:40.300 +Okay. + +01:11:46.240 --> 01:11:46.740 +[Speaker 2]: It actually doesn't matter for my example. + +01:11:51.820 --> 01:11:52.320 +I will explain how it doesn't work easily. + +01:11:54.940 --> 01:11:55.400 +This is a long running process which prints + +01:11:57.980 --> 01:11:58.280 +something and it can take up to a few + +01:12:00.980 --> 01:12:01.160 +minutes. And for the whole few minutes I + +01:12:04.960 --> 01:12:05.440 +don't see any results the same as with this + +01:12:07.760 --> 01:12:08.000 +infinite loop, which brings the STD out, + +01:12:09.960 --> 01:12:10.460 +but I don't see anything interactive. + +01:12:15.720 --> 01:12:16.120 +And with array, I can run the evaluation of + +01:12:22.120 --> 01:12:22.620 +the same expression. And you will see + +01:12:27.040 --> 01:12:27.440 +instantly that STTR output is presented here + +01:12:29.060 --> 01:12:29.560 +in slightly yellowish color. + +01:12:32.200 --> 01:12:32.560 +And I can interrupt the evaluation if I don't + +01:12:35.080 --> 01:12:35.580 +want to wait until it's finished. + +01:12:39.560 --> 01:12:39.920 +And just after that, I can evaluate another + +01:12:48.340 --> 01:12:48.840 +[Speaker 0]: that's + +01:12:54.520 --> 01:12:55.020 +[Speaker 2]: value. So cool. And let's see 1 more thing. + +01:12:56.320 --> 01:12:56.820 +We have an infinite loop. + +01:12:59.060 --> 01:12:59.560 +And we have some completion here. + +01:13:00.700 --> 01:13:01.200 +And completion still works. + +01:13:05.740 --> 01:13:05.900 +Very nice. While the infinite loop is + +01:13:12.160 --> 01:13:12.440 +[Speaker 0]: OK. Actually, it took + +01:13:15.060 --> 01:13:15.560 +[Speaker 2]: running. me around 2 months of full-time work + +01:13:19.540 --> 01:13:19.740 +under my own savings. And you can support and + +01:13:22.800 --> 01:13:23.040 +help to the project using WebIn Collective or + +01:13:24.160 --> 01:13:24.660 +by contributing on SourceHub. + +01:13:30.180 --> 01:13:30.420 +The future steps for the project includes an + +01:13:32.980 --> 01:13:33.120 +experimental workflow where you have a + +01:13:35.580 --> 01:13:36.060 +multiple simultaneous evaluation in different + +01:13:37.060 --> 01:13:37.560 +contexts. For example, + +01:13:40.640 --> 01:13:41.140 +you have fibers, you have goblins, + +01:13:45.720 --> 01:13:46.000 +you have some HTTP server or some other + +01:13:48.340 --> 01:13:48.840 +thing, and you want to run all of them + +01:13:54.140 --> 01:13:54.640 +independently in slightly isolated sessions, + +01:13:59.280 --> 01:13:59.540 +and you want to have ability to still + +01:14:00.320 --> 01:14:00.720 +interact with them. For example, + +01:14:03.340 --> 01:14:03.800 +if they require standard input or something + +01:14:07.540 --> 01:14:08.040 +else you want to be able to provide. + +01:14:12.040 --> 01:14:12.320 +You want to see the STD out of those + +01:14:13.780 --> 01:14:14.280 +long-running processors and so on. + +01:14:19.780 --> 01:14:20.280 +The second thing is 3D integration for better + +01:14:22.000 --> 01:14:22.500 +syntax highlighting, code navigation, + +01:14:26.680 --> 01:14:27.180 +and other features. And after that, + +01:14:30.140 --> 01:14:30.640 +probably we will do a full-fledged debugger + +01:14:35.760 --> 01:14:36.020 +so you can jump expressions 1 by 1 and see + +01:14:39.380 --> 01:14:39.880 +the results and see some intermediate values + +01:14:41.880 --> 01:14:42.380 +during the evaluation. + +01:14:44.960 --> 01:14:45.020 +And it's very possible because nrecl is a + +01:14:46.760 --> 01:14:46.960 +very extensible protocol and you can + +01:14:49.480 --> 01:14:49.980 +implement whatever you want on top of it. + +01:14:55.380 --> 01:14:55.860 +I will answer 2 probably very frequent + +01:14:57.660 --> 01:14:58.000 +questions. Does it support other Scheme + +01:15:00.520 --> 01:15:01.020 +implementations? At the moment, + +01:15:04.200 --> 01:15:04.360 +it doesn't. But the Scheme implementation is + +01:15:07.340 --> 01:15:07.840 +not restricted. You have a server which + +01:15:09.520 --> 01:15:09.920 +implemented in your language, + +01:15:10.640 --> 01:15:11.140 +and you have a client, + +01:15:16.320 --> 01:15:16.620 +in our case, Array, which communicates with + +01:15:19.860 --> 01:15:20.280 +this protocol. So if you implement an Ripple + +01:15:21.300 --> 01:15:21.800 +server in a different language, + +01:15:25.460 --> 01:15:25.840 +it should work with already implemented Array + +01:15:32.180 --> 01:15:32.500 +client. And is it possible to use the same + +01:15:34.200 --> 01:15:34.640 +functionality in other text editors, + +01:15:35.920 --> 01:15:36.340 +for example, in VS Code, + +01:15:41.200 --> 01:15:41.420 +Vim, whatever, yes, it's possible and the + +01:15:43.860 --> 01:15:44.240 +case is similar here. You have already + +01:15:46.920 --> 01:15:47.220 +implemented an EnableServer and you can write + +01:15:50.500 --> 01:15:51.000 +your own and it will work. + +01:15:55.020 --> 01:15:55.260 +I would like to thank the authors and + +01:15:57.260 --> 01:15:57.760 +maintainers and contributors of Kyle, + +01:15:59.200 --> 01:15:59.700 +Geyser, Cider, Closure, + +01:16:03.260 --> 01:16:03.760 +and Emacs, and all other people who somehow + +01:16:07.360 --> 01:16:07.860 +related to the work on those projects + +01:16:10.240 --> 01:16:10.740 +involved in this talk. + +01:16:13.320 --> 01:16:13.480 +And I hope the scheme programming will be + +01:16:16.320 --> 01:16:16.820 +enjoyable. If you want to contact me, + +01:16:19.600 --> 01:16:19.900 +join TrojanRC channel at RepairerChat or drop + +01:16:21.820 --> 01:16:22.260 +me a message via email or feed the words + +01:16:26.600 --> 01:16:26.820 +using Andrew at TrojanHackle and I will see + +01:16:28.680 --> 01:16:29.180 +you in a bit in Kuwait session. + +01:16:57.220 --> 01:16:57.440 +[Speaker 3]: Hey folks. So this was a great talk by Andrew + +01:16:58.860 --> 01:16:59.340 +Tropan. Unfortunately, + +01:17:02.280 --> 01:17:02.780 +Andrew isn't around just yet. + +01:17:04.480 --> 01:17:04.680 +We are still waiting for him if he does show + +01:17:08.180 --> 01:17:08.680 +up but in the meantime please do feel free to + +01:17:11.480 --> 01:17:11.980 +continue posting your questions on the path + +01:17:14.580 --> 01:17:15.080 +and if Andrew does show up here of course + +01:17:17.340 --> 01:17:17.640 +We'll take them otherwise we will forward + +01:17:19.700 --> 01:17:19.920 +them to Andrew so that he could answer them + +01:17:21.360 --> 01:17:21.860 +after the conference. Thank you + +01:17:45.060 --> 01:17:45.560 +[Speaker 0]: You + +01:18:00.080 --> 01:18:00.580 +Silence. + +01:18:15.060 --> 01:18:15.560 +Silence. Silence. + +01:19:07.760 --> 01:19:08.260 +[Speaker 3]: I see 2 questions on the panel already. + +01:19:14.280 --> 01:19:14.600 +Let's see. 1 asking how much Android uses + +01:19:17.720 --> 01:19:18.040 +these repos remotely or versus on their + +01:19:20.640 --> 01:19:20.800 +desktop. And now they're asking if this can + +01:19:22.760 --> 01:19:23.260 +be integrated with EGLOT. + +01:19:26.400 --> 01:19:26.580 +And I will note that it is very cool that + +01:19:28.200 --> 01:19:28.700 +this year we've had so many talks on repos. + +01:19:32.320 --> 01:19:32.680 +Just goes to show how powerful Emacs is and + +01:19:34.540 --> 01:19:34.640 +just how much or how far you can push it and + +01:19:44.760 --> 01:19:45.020 +how much you can do So see someone asking on + +01:19:49.660 --> 01:19:50.160 +IRC If or how many people use Given Geeks + +01:19:52.960 --> 01:19:53.460 +Since we are talking about scheme, + +01:19:56.980 --> 01:19:57.260 +GivenGeeks is a great platform slash + +01:20:01.520 --> 01:20:01.700 +operating system or distro for for your + +01:20:03.480 --> 01:20:03.980 +desktops but also for servers and such. + +01:20:04.920 --> 01:20:05.380 +They do some impressive, + +01:20:09.400 --> 01:20:09.900 +amazing work. And it's pretty much all done + +01:20:10.900 --> 01:20:11.400 +in the Google Cloud schema. + +01:20:13.120 --> 01:20:13.620 +So very cool stuff. + +01:20:55.520 --> 01:20:56.020 +[Speaker 0]: Silence. Silence. + +01:21:11.040 --> 01:21:11.540 +Silence. + +01:21:30.060 --> 01:21:30.560 +You + +01:22:11.520 --> 01:22:11.680 +[Speaker 3]: I see another interesting question on the + +01:22:15.020 --> 01:22:15.520 +pad. How hard is it to add support for + +01:22:16.560 --> 01:22:17.060 +something relevant in Guile? + +01:22:19.600 --> 01:22:19.760 +And if it makes sense to contribute at this + +01:22:20.500 --> 01:22:21.000 +early stage of development. + +01:22:23.520 --> 01:22:23.860 +They said that they've written several + +01:22:25.080 --> 01:22:25.440 +packages for chicken skin before, + +01:22:26.960 --> 01:22:27.460 +and they would like to try this 1 as well. + +01:23:00.260 --> 01:23:00.760 +[Speaker 0]: You you + +01:23:46.380 --> 01:23:46.880 +[Speaker 3]: Okay. + +01:24:17.980 --> 01:24:18.480 +I guess since Andrew isn't still here, + +01:24:20.740 --> 01:24:21.100 +and there was some chatter about Giddu Geeks + +01:24:23.960 --> 01:24:24.460 +in the chat, maybe it might be nice for me to + +01:24:26.980 --> 01:24:27.100 +share my screen and plug Giddu Geeks for a + +01:24:29.600 --> 01:24:29.700 +little bit and introduce it, + +01:24:32.420 --> 01:24:32.600 +or at least show its website to folks who may + +01:24:34.400 --> 01:24:34.600 +not have seen it yet. So I'm going to try and + +01:24:35.000 --> 01:24:35.500 +do that now. + +01:25:11.320 --> 01:25:11.820 +OK, let's see if this works. + +01:25:25.080 --> 01:25:25.580 +OK, so this is GnuGeeks' website. + +01:25:26.580 --> 01:25:27.080 +You can go to geeks.gnu.org + +01:25:30.320 --> 01:25:30.800 +and they introduce it at the top. + +01:25:35.020 --> 01:25:35.520 +So it's a wholly free operating system or + +01:25:38.600 --> 01:25:38.780 +distribution of Gini Linux Meaning that it + +01:25:41.680 --> 01:25:41.920 +only has free software packaged and no + +01:25:44.220 --> 01:25:44.440 +non-free packages. So it is endorsed by the + +01:25:47.900 --> 01:25:48.040 +FSF on the Gini project As someone said in + +01:25:49.320 --> 01:25:49.820 +the chat, it's kind of like Nix, + +01:25:52.960 --> 01:25:53.460 +but instead built on GigaGallop scheme. + +01:25:56.880 --> 01:25:57.380 +It has transactional upgrades and rollbacks, + +01:26:01.780 --> 01:26:01.940 +so if you do upgrade your system and let's + +01:26:02.720 --> 01:26:02.980 +say in the middle of it, + +01:26:04.740 --> 01:26:05.240 +your hardware fails or your power goes out, + +01:26:08.080 --> 01:26:08.240 +the likelihood of things being corrupted is + +01:26:10.400 --> 01:26:10.900 +very low because the upgrade is essentially + +01:26:13.220 --> 01:26:13.720 +prepared like in the background. + +01:26:15.660 --> 01:26:16.160 +And then pretty much atomically, + +01:26:18.340 --> 01:26:18.840 +the system is switched to it. + +01:26:22.840 --> 01:26:23.080 +And also if there is some kind of Sorry, + +01:26:23.940 --> 01:26:24.440 +I'm losing my voice here. + +01:26:26.320 --> 01:26:26.660 +If there is some kind of issue that makes + +01:26:27.340 --> 01:26:27.840 +your system unbootable, + +01:26:31.100 --> 01:26:31.460 +you could always go back to booting the + +01:26:34.440 --> 01:26:34.640 +previously, the previous revision of your + +01:26:37.200 --> 01:26:37.360 +system when you restart in the + +01:26:47.360 --> 01:26:47.800 +GrubBootLoader. So they have a nice blog + +01:26:50.280 --> 01:26:50.500 +where they regularly post updates and what's + +01:26:52.360 --> 01:26:52.540 +new in the project. You can go check that + +01:26:57.160 --> 01:26:57.660 +out. They also have a packages archive where + +01:27:00.480 --> 01:27:00.660 +you can see a list of all the software that + +01:27:02.380 --> 01:27:02.880 +has been packaged for Pinookies. + +01:27:05.140 --> 01:27:05.640 +It is an impressive list. + +01:28:44.460 --> 01:28:44.960 +[Speaker 0]: You + +01:30:30.060 --> 01:30:30.560 +Silence. + +01:32:40.080 --> 01:32:40.580 +And obviously you can run kines in it. + +01:32:50.640 --> 01:32:51.140 +There is mouse support. + +01:33:02.580 --> 01:33:03.080 +And there is true color support, + +01:33:08.040 --> 01:33:08.180 +so you can show any color in a tagline as + +01:33:09.900 --> 01:33:10.400 +long as your main display supports it. + +01:33:17.660 --> 01:33:18.160 +And then there is shell integration. + +01:33:20.740 --> 01:33:21.240 +For example, directory tracking. + +01:33:28.697 --> 01:33:29.197 +Like if I can switch to some other directory + +01:33:31.420 --> 01:33:31.920 +and Thank you. diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt new file mode 100644 index 00000000..2f7b316a --- /dev/null +++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt @@ -0,0 +1,1595 @@ +WEBVTT + + +00:00:12.660 --> 00:00:13.160 +[Speaker 0]: I guess we are now live. + +00:00:15.360 --> 00:00:15.860 +So Joseph, thanks for being here. + +00:00:16.960 --> 00:00:17.460 +Thanks for talking to the hyperdrive. + +00:00:22.240 --> 00:00:22.440 +We already had some, or we already have a lot + +00:00:24.360 --> 00:00:24.619 +of questions here. And I guess I would start + +00:00:26.040 --> 00:00:26.540 +with, let's call it the difficult, + +00:00:29.119 --> 00:00:29.439 +the most difficult 1. So when you were + +00:00:30.820 --> 00:00:31.320 +developing hyperdrive for your colleague, + +00:00:34.760 --> 00:00:34.920 +what do you, or what have you learned the + +00:00:34.920 --> 00:00:35.420 +most? + +00:00:43.080 --> 00:00:43.320 +[Speaker 1]: I have learned how much faster and more + +00:00:46.360 --> 00:00:46.620 +enjoyable the development of this project can + +00:00:51.540 --> 00:00:52.040 +be with talented people working by my side, + +00:00:55.960 --> 00:00:56.260 +like Jonas and Adam and Prat and Mo, + +00:00:58.100 --> 00:00:58.260 +it's been really a pleasure to work with + +00:00:58.440 --> 00:00:58.940 +these folks. + +00:01:04.959 --> 00:01:05.140 +[Speaker 0]: So you have started at first on your own and + +00:01:07.400 --> 00:01:07.760 +then probably pushed it somewhere in open + +00:01:10.320 --> 00:01:10.820 +source or how did it develop, + +00:01:11.740 --> 00:01:12.240 +your development experience? + +00:01:15.920 --> 00:01:16.160 +[Speaker 1]: A few years ago, we started looking into + +00:01:21.960 --> 00:01:22.200 +using peer-to-peer technology for sharing all + +00:01:25.080 --> 00:01:25.360 +kinds of information. And we came across Move + +00:01:29.280 --> 00:01:29.440 +SignWeaver, who was recommended to us by a + +00:01:32.560 --> 00:01:32.720 +mutual friend. And we started working with + +00:01:33.840 --> 00:01:34.340 +Move, and then about a year ago, + +00:01:37.060 --> 00:01:37.560 +we started looking into using Emacs, + +00:01:40.020 --> 00:01:40.460 +the peer-to-peer software, + +00:01:43.520 --> 00:01:43.780 +so that we could make use of all of the + +00:01:46.340 --> 00:01:46.500 +powerful things that Emacs already does with + +00:01:47.780 --> 00:01:48.280 +org mode and other packages. + +00:01:51.560 --> 00:01:51.760 +And then we started working with Adam and + +00:01:52.320 --> 00:01:52.820 +Pratt and Jonas. + +00:01:54.280 --> 00:01:54.780 +[Speaker 2]: Yes. + +00:01:59.880 --> 00:02:00.380 +[Speaker 0]: So we are skipping to the next question. + +00:02:03.700 --> 00:02:04.200 +So to read it out, I use multiple computers + +00:02:06.200 --> 00:02:06.480 +and my partner also would like access to my + +00:02:08.680 --> 00:02:09.139 +notes. So, 2 questions at first. + +00:02:12.440 --> 00:02:12.720 +First 1, how well would this work with using + +00:02:15.060 --> 00:02:15.300 +this to edit my Zettelkasten hyperdrive using + +00:02:15.660 --> 00:02:16.160 +multiple computers? + +00:02:21.260 --> 00:02:21.760 +[Speaker 1]: Hyperdrive is single writer currently. + +00:02:24.140 --> 00:02:24.280 +So what that means is that if you have a + +00:02:25.080 --> 00:02:25.580 +hyperdrive that you've created, + +00:02:28.320 --> 00:02:28.820 +you're the only 1 who can make changes to it. + +00:02:31.560 --> 00:02:32.060 +And that's limited right now to editing 1 + +00:02:33.240 --> 00:02:33.740 +hyperdrive from 1 machine. + +00:02:38.240 --> 00:02:38.740 +In theory, you could use the same private key + +00:02:40.240 --> 00:02:40.680 +and write to it from multiple machines, + +00:02:43.520 --> 00:02:44.020 +but you would have to make sure that you sync + +00:02:46.300 --> 00:02:46.520 +it on both machines and didn't make + +00:02:48.160 --> 00:02:48.480 +concurrent writes because then you would fork + +00:02:49.840 --> 00:02:50.340 +the history of your hyperdrive, + +00:02:51.020 --> 00:02:51.520 +and that would be bad. + +00:02:57.740 --> 00:02:57.980 +But we've spent a lot of time making links to + +00:02:59.780 --> 00:03:00.280 +hyperdrives work well, + +00:03:02.160 --> 00:03:02.360 +relative links within hyperdrives to other + +00:03:03.560 --> 00:03:03.840 +files inside of your drive. + +00:03:05.520 --> 00:03:06.020 +So you should be able to, + +00:03:10.120 --> 00:03:10.520 +with some exceptions, just take your personal + +00:03:13.360 --> 00:03:13.780 +information management set of org files or + +00:03:14.760 --> 00:03:15.260 +whatever it is that you have, + +00:03:18.160 --> 00:03:18.260 +and upload them into a hyperdrive if all of + +00:03:22.740 --> 00:03:23.100 +that is publicly available or would be good + +00:03:27.260 --> 00:03:27.400 +to share publicly. And you can make that + +00:03:28.940 --> 00:03:29.440 +available for other people to link to. + +00:03:30.640 --> 00:03:30.840 +So you can have multiple different + +00:03:32.040 --> 00:03:32.540 +hyperdrives that link to 1 another. + +00:03:35.600 --> 00:03:36.100 +[Speaker 0]: So it's like a huge network of hyperdrives + +00:03:38.000 --> 00:03:38.500 +connected to each other in some way. + +00:03:39.140 --> 00:03:39.640 +[Speaker 1]: Yeah. + +00:03:41.120 --> 00:03:41.620 +[Speaker 0]: So that's kind of neat and kind of cool. + +00:03:44.240 --> 00:03:44.480 +There was a follow-up question or the second + +00:03:46.780 --> 00:03:47.100 +part of the question. Okay, + +00:03:48.860 --> 00:03:49.200 +then using the same hyperdrive is probably + +00:03:51.820 --> 00:03:52.060 +not possible, but interlinking would be the + +00:03:57.500 --> 00:03:57.840 +best way to do it. There was a question + +00:03:59.540 --> 00:03:59.820 +concerning how they should install it. + +00:04:01.160 --> 00:04:01.440 +So What would be a good way of getting + +00:04:03.580 --> 00:04:04.080 +hyperdrives if you do not want to install npm + +00:04:06.460 --> 00:04:06.740 +and have a binary? Could you compile it with + +00:04:08.300 --> 00:04:08.800 +denner or rusk or zig or go? + +00:04:10.960 --> 00:04:11.120 +CLI alternative tool, I would prefer to + +00:04:11.840 --> 00:04:12.340 +download a single binary. + +00:04:17.420 --> 00:04:17.720 +[Speaker 1]: There's something that Jonas was playing + +00:04:20.459 --> 00:04:20.800 +around with using Geeks to install Hyper + +00:04:22.860 --> 00:04:23.360 +Gateway. So the way that HyperDrive.el, + +00:04:26.880 --> 00:04:27.380 +the Emacs package, works right now is similar + +00:04:30.300 --> 00:04:30.720 +to the way that the transmission Emacs client + +00:04:34.200 --> 00:04:34.640 +for BitTorrent works, where you have a client + +00:04:37.320 --> 00:04:37.480 +in Emacs that connects to a daemon that is a + +00:04:39.120 --> 00:04:39.280 +separate process that's running on your + +00:04:41.820 --> 00:04:42.320 +machine, the transmission daemon. + +00:04:43.500 --> 00:04:44.000 +But in this case, we have HyperGateway, + +00:04:46.060 --> 00:04:46.560 +which is running as a daemon on your machine. + +00:04:48.180 --> 00:04:48.680 +And then hyperdrive.el + +00:04:51.020 --> 00:04:51.520 +connects to that daemon and sends requests, + +00:04:53.520 --> 00:04:53.620 +and all of the hyperdrive stuff under the + +00:04:55.880 --> 00:04:56.380 +hood happens with her gateway. + +00:04:57.940 --> 00:04:58.440 +But so that package can, + +00:05:00.280 --> 00:05:00.460 +or hypergateway, the program can be + +00:05:02.900 --> 00:05:03.080 +installed, The easiest way is to just + +00:05:04.400 --> 00:05:04.900 +download it from the GitHub releases. + +00:05:07.060 --> 00:05:07.560 +You could also use NPM to install it. + +00:05:09.520 --> 00:05:09.680 +And then the third option that we've been + +00:05:12.920 --> 00:05:13.040 +playing around with is Jonas was writing a + +00:05:14.540 --> 00:05:15.040 +little script to install it using Geeks, + +00:05:18.340 --> 00:05:18.840 +since Geeks now comes with Node 18. + +00:05:20.740 --> 00:05:20.940 +And so you should be able to install it using + +00:05:20.940 --> 00:05:21.440 +Geeks. + +00:05:25.320 --> 00:05:25.520 +[Speaker 0]: Right, thank you. We have 2 people here + +00:05:26.100 --> 00:05:26.600 +joined with microphone. + +00:05:30.240 --> 00:05:30.560 +Do we have now any question to Joseph or just + +00:05:32.060 --> 00:05:32.560 +here for chilling out. + +00:05:41.820 --> 00:05:42.260 +I guess it's a no. Plasma, + +00:05:42.260 --> 00:05:42.760 +yeah. + +00:05:46.120 --> 00:05:46.260 +[Speaker 3]: What about using, having some of the + +00:05:47.960 --> 00:05:48.460 +information being private in the hyperdrives. + +00:05:54.240 --> 00:05:54.400 +[Speaker 1]: That's not what we have been focusing on at + +00:05:55.240 --> 00:05:55.640 +this point. At this point, + +00:05:57.340 --> 00:05:57.660 +what we've been working on is mainly using + +00:06:02.180 --> 00:06:02.680 +hyperdrives for a public forum type tool. + +00:06:06.420 --> 00:06:06.560 +But you could encrypt those files if you + +00:06:09.340 --> 00:06:09.840 +wanted to. You can also just, + +00:06:13.660 --> 00:06:14.160 +a poor man's security would just be to share + +00:06:16.660 --> 00:06:16.960 +your HyperDrive link only with those people + +00:06:19.060 --> 00:06:19.560 +that you want to have access to your drive. + +00:06:21.820 --> 00:06:22.240 +But the way that it works right now is anyone + +00:06:23.800 --> 00:06:24.280 +who has the link to a hyperdrive can access + +00:06:26.040 --> 00:06:26.420 +its content. So long as there are peers + +00:06:28.740 --> 00:06:28.900 +available on the network who can serve it to + +00:06:28.900 --> 00:06:29.400 +you. + +00:06:37.440 --> 00:06:37.660 +[Speaker 0]: Any follow up question from your side, + +00:06:37.660 --> 00:06:38.160 +Plasma? + +00:06:46.720 --> 00:06:47.220 +[Speaker 3]: I had 1, I'll just have to re-remember it. + +00:06:55.240 --> 00:06:55.600 +[Speaker 0]: If you remember it, just feel free to + +00:06:56.000 --> 00:06:56.500 +interrupt me. + +00:06:58.980 --> 00:06:59.220 +[Speaker 3]: What about working? I've looked at this + +00:07:03.120 --> 00:07:03.480 +before. What about, if I remember correctly, + +00:07:04.920 --> 00:07:05.220 +it doesn't do as well with large files, + +00:07:09.060 --> 00:07:09.520 +so if you're going to store 200 gigs of video + +00:07:12.180 --> 00:07:12.520 +files, stuff like IPFS works a lot better, + +00:07:15.200 --> 00:07:15.480 +or BitTorrent. This is, + +00:07:17.120 --> 00:07:17.620 +are you, were you using the, + +00:07:21.980 --> 00:07:22.300 +any way of using multiple protocols for stuff + +00:07:25.560 --> 00:07:25.800 +like that? Or what were you doing with, + +00:07:27.340 --> 00:07:27.480 +or were you just doing the small files with + +00:07:28.680 --> 00:07:29.180 +the same protocol? Or + +00:07:34.440 --> 00:07:34.920 +[Speaker 1]: I would love to see an IPFS client in Emacs + +00:07:37.260 --> 00:07:37.700 +as well that could interface with Kubo or + +00:07:40.040 --> 00:07:40.240 +some other IPFS daemon and I think that those + +00:07:41.120 --> 00:07:41.620 +could work really well together. + +00:07:45.680 --> 00:07:45.860 +We mostly have been playing around with + +00:07:47.240 --> 00:07:47.740 +sharing relatively small files, + +00:07:52.120 --> 00:07:52.240 +up to hundreds of megabytes or maybe a + +00:07:55.240 --> 00:07:55.640 +gigabyte. We haven't played around yet with + +00:07:57.380 --> 00:07:57.880 +hyperdrive.el, the Emacs client, + +00:07:59.240 --> 00:07:59.740 +testing that with HyperGateway. + +00:08:04.020 --> 00:08:04.160 +But there may be other experiments that have + +00:08:05.880 --> 00:08:06.380 +been done that show that that works well. + +00:08:10.880 --> 00:08:11.320 +The main thing is that IPFS uses content + +00:08:14.820 --> 00:08:15.060 +addressability to reduce duplication of the + +00:08:16.620 --> 00:08:17.120 +content. Whereas in HyperDrive, + +00:08:20.140 --> 00:08:20.320 +if you upload the same file with the same + +00:08:23.160 --> 00:08:23.620 +contents twice, now you have double the + +00:08:25.120 --> 00:08:25.580 +content being stored in your HyperDrive. + +00:08:26.040 --> 00:08:26.540 +It's not deduplicated. + +00:08:30.800 --> 00:08:31.300 +You can always clear out part of the history + +00:08:36.340 --> 00:08:36.659 +of your hyperdrive But IPFS has really good + +00:08:39.140 --> 00:08:39.640 +built-in deduplication whereas hyperdrive + +00:08:39.860 --> 00:08:40.360 +does not + +00:08:44.159 --> 00:08:44.540 +[Speaker 4]: I have a question. + +00:08:47.440 --> 00:08:47.580 +[Speaker 3]: What about like commenting on other like if + +00:08:50.140 --> 00:08:50.600 +you have a couple of different Hypercore + +00:08:53.900 --> 00:08:54.220 +blogs, what about like commenting between + +00:08:56.680 --> 00:08:57.040 +them? Like you have some people who have a + +00:08:59.280 --> 00:08:59.640 +commenting form on Reddit for their blog + +00:08:59.640 --> 00:09:00.140 +posts. + +00:09:04.640 --> 00:09:04.760 +[Speaker 1]: So Move SignWeaver has been doing a lot of + +00:09:07.880 --> 00:09:08.380 +work recently with the distributed press API + +00:09:12.040 --> 00:09:12.540 +to integrate ActivityPub with these + +00:09:14.120 --> 00:09:14.620 +peer-to-peer technologies. + +00:09:17.980 --> 00:09:18.240 +Move can give you more information about + +00:09:22.120 --> 00:09:22.440 +that. But there is another feature that we'd + +00:09:23.400 --> 00:09:23.900 +like to add to hyperdrive.el, + +00:09:29.140 --> 00:09:29.640 +which is peer discovery using the swarming + +00:09:30.600 --> 00:09:31.100 +feature that HyperCore, + +00:09:34.600 --> 00:09:35.100 +HyperSWARM offers, where you'd be able to say + +00:09:38.500 --> 00:09:38.660 +that my node, my peer-to-peer node is + +00:09:41.640 --> 00:09:41.840 +interested in Emacs and free software as + +00:09:43.100 --> 00:09:43.320 +topics. And those would be 2 different + +00:09:45.060 --> 00:09:45.300 +topics. I would advertise on the network that + +00:09:46.240 --> 00:09:46.740 +I'm interested in those topics. + +00:09:49.120 --> 00:09:49.480 +And I would be able to discover other peers + +00:09:52.040 --> 00:09:52.200 +on the network who have also advertised that + +00:09:53.440 --> 00:09:53.940 +they're interested in those same topics. + +00:09:56.040 --> 00:09:56.320 +And then they would tell me, + +00:09:59.260 --> 00:09:59.760 +hey, here's the public key of my hyperdrive. + +00:10:01.820 --> 00:10:02.320 +Come check it out. I have posted information + +00:10:04.300 --> 00:10:04.540 +about those topics. And so in that way, + +00:10:06.860 --> 00:10:07.360 +you'd be able to, in a distributed fashion, + +00:10:09.660 --> 00:10:09.800 +discover other peers on the network who are + +00:10:11.240 --> 00:10:11.600 +interested in topics that you're interested + +00:10:11.600 --> 00:10:12.100 +in. + +00:10:16.780 --> 00:10:16.960 +[Speaker 3]: Something that would be useful in addition to + +00:10:19.600 --> 00:10:20.100 +that idea is like if you had your emacs + +00:10:25.560 --> 00:10:25.680 +Zettelkasten Publish like let's say you have + +00:10:27.860 --> 00:10:28.140 +some private data You make sure that that's + +00:10:29.800 --> 00:10:30.060 +scrubbed out before it goes to your hyper + +00:10:31.760 --> 00:10:32.260 +core and then you have another part of it + +00:10:35.540 --> 00:10:35.940 +that gets turned into a website for it's also + +00:10:38.040 --> 00:10:38.240 +given to other hyper core clients but you'd + +00:10:40.120 --> 00:10:40.620 +rather get the emacs users the org documents + +00:10:44.760 --> 00:10:44.920 +then you also publish some of them on a + +00:10:48.680 --> 00:10:48.840 +website so everybody as much people can get + +00:10:53.560 --> 00:10:53.960 +it as possible. And then a way of figuring + +00:10:55.640 --> 00:10:56.140 +out who you'd want to do, + +00:10:57.780 --> 00:10:58.180 +or if you're an Emacs user, + +00:10:59.860 --> 00:11:00.040 +maybe figure out that they're all related to + +00:11:01.440 --> 00:11:01.640 +each other, but you want to get the art mode + +00:11:03.080 --> 00:11:03.580 +documents because you're using EMAX. + +00:11:05.900 --> 00:11:06.400 +Yeah. + +00:11:10.360 --> 00:11:10.760 +[Speaker 0]: Maybe a side note, we have 4 minutes here on + +00:11:12.040 --> 00:11:12.400 +before we switch into the next track, + +00:11:13.200 --> 00:11:13.700 +just to let you know. + +00:11:17.900 --> 00:11:18.400 +[Speaker 1]: Thank you. So the hyper drive mirror feature + +00:11:21.220 --> 00:11:21.720 +that we added, would allow you to selectively + +00:11:24.840 --> 00:11:24.960 +choose which files you want to share in a + +00:11:28.500 --> 00:11:28.780 +hyperdrive. So, with Prot's denote file + +00:11:30.660 --> 00:11:31.000 +naming scheme or Carl Voigt's file tags + +00:11:33.600 --> 00:11:33.760 +naming scheme, you could just specify a + +00:11:35.940 --> 00:11:36.140 +regular expression. And you could say, + +00:11:40.140 --> 00:11:40.460 +I want to share out of my directory of org + +00:11:42.560 --> 00:11:42.740 +files, I want to share only those files that + +00:11:44.220 --> 00:11:44.720 +have been tagged as public, + +00:11:47.320 --> 00:11:47.520 +or only those files that have been tagged as + +00:11:49.680 --> 00:11:49.840 +emacs and then only those ones would get + +00:11:50.720 --> 00:11:51.220 +uploaded into your hyperdrive + +00:11:54.280 --> 00:11:54.560 +[Speaker 3]: or exclude all in any of the ones that say + +00:11:54.560 --> 00:11:55.060 +private + +00:12:01.620 --> 00:12:02.120 +[Speaker 0]: yep mike had a question + +00:12:05.220 --> 00:12:05.720 +[Speaker 4]: yeah I have a question for the hyperdrive. + +00:12:08.520 --> 00:12:08.940 +So I just maybe I missed it and you haven't + +00:12:09.340 --> 00:12:09.840 +put a link. + +00:12:16.200 --> 00:12:16.700 +[Speaker 1]: Oh, Mikhail, we can't hear you. + +00:12:22.660 --> 00:12:23.160 +[Speaker 3]: Heard you for a second. + +00:12:28.440 --> 00:12:28.940 +[Speaker 1]: Yes? + +00:12:29.640 --> 00:12:30.040 +[Speaker 4]: Can someone hear me? Okay, + +00:12:31.200 --> 00:12:31.400 +I have no idea what happened to my + +00:12:32.480 --> 00:12:32.980 +microphone, but now it's back. + +00:12:34.760 --> 00:12:34.920 +[Speaker 3]: Now we can. You can see the microphone on the + +00:12:35.840 --> 00:12:36.340 +top of the screen. So + +00:12:38.940 --> 00:12:39.080 +[Speaker 4]: yes, thank you. Okay. I have a question to + +00:12:41.520 --> 00:12:41.720 +hyperdrive. Is the hyperdrive a find on the + +00:12:46.160 --> 00:12:46.320 +hole punch point, point T O hole Or is it + +00:12:47.020 --> 00:12:47.520 +just another hyperdrive? + +00:12:51.260 --> 00:12:51.760 +[Speaker 1]: That's exactly the project that we're using. + +00:12:54.520 --> 00:12:55.020 +So the HolePunch team has released hyperdrive + +00:12:59.340 --> 00:12:59.620 +and other hyper core libraries as free + +00:13:01.880 --> 00:13:02.380 +software libraries that you can use. + +00:13:03.940 --> 00:13:04.440 +And so MoV SignWeaver, + +00:13:07.080 --> 00:13:07.440 +the project that MoV is working on, + +00:13:11.120 --> 00:13:11.620 +HyperGateway, depends on those libraries and + +00:13:15.520 --> 00:13:15.880 +it makes it easy for you to build other + +00:13:17.200 --> 00:13:17.700 +clients like hyperdrive.el + +00:13:20.600 --> 00:13:21.100 +which connect to the hyperdrive network. + +00:13:22.800 --> 00:13:23.300 +I hope that answers your question. + +00:13:25.140 --> 00:13:25.440 +[Speaker 4]: Yes it does, thank you. + +00:13:28.380 --> 00:13:28.620 +And what did make you choose hyperdrive for + +00:13:29.380 --> 00:13:29.880 +this Emacs project? + +00:13:34.400 --> 00:13:34.900 +[Speaker 1]: Mainly the fact that the drives are mutable, + +00:13:37.660 --> 00:13:38.160 +which makes it distinct from IPFS or + +00:13:40.800 --> 00:13:41.020 +BitTorrent, where when you share some piece + +00:13:44.760 --> 00:13:45.060 +of content, you're stuck with that static + +00:13:46.800 --> 00:13:47.020 +piece of content, which works well for some + +00:13:49.600 --> 00:13:50.100 +cases, but if you say you have a Zettelkasten + +00:13:52.300 --> 00:13:52.500 +or you have a set of org files that you want + +00:13:56.120 --> 00:13:56.580 +to share with people, you want to be able to + +00:13:58.860 --> 00:13:59.160 +update those files and have other people pull + +00:13:59.960 --> 00:14:00.360 +those updates from you. + +00:14:02.300 --> 00:14:02.720 +And so HyperDrive allows you to have these + +00:14:05.340 --> 00:14:05.820 +mutable sets of files that you can share and + +00:14:08.440 --> 00:14:08.600 +use the same link for other peers to pull the + +00:14:09.440 --> 00:14:09.800 +latest changes from you. + +00:14:11.660 --> 00:14:11.960 +Also, it's versioned, as we showed in the + +00:14:15.200 --> 00:14:15.700 +video, which is really helpful for having + +00:14:17.500 --> 00:14:17.900 +community deliberations and community + +00:14:19.400 --> 00:14:19.600 +discussions where you want to be able to + +00:14:22.420 --> 00:14:22.700 +reference some something that somebody said + +00:14:26.120 --> 00:14:26.320 +in the past and not have it get deleted or + +00:14:26.860 --> 00:14:27.360 +changed or something. + +00:14:30.600 --> 00:14:31.100 +[Speaker 0]: We are now switching to talk So just for + +00:14:32.720 --> 00:14:33.200 +letting you know if you want to say something + +00:14:37.640 --> 00:14:37.840 +now. Too late. The BB room is still open, + +00:14:38.480 --> 00:14:38.860 +so you can still discuss. + +00:14:41.480 --> 00:14:41.980 +There's also a lot going on on the pad. + +00:14:47.980 --> 00:14:48.480 +But you can also discuss here inside and + +00:14:49.760 --> 00:14:50.260 +answer the pet questions maybe later. + +00:14:52.800 --> 00:14:53.300 +[Speaker 1]: Yeah, there are good questions. + +00:14:58.680 --> 00:14:59.180 +I'll go ahead, please. + +00:15:01.120 --> 00:15:01.620 +[Speaker 3]: continuing here on the pad? + +00:15:04.540 --> 00:15:05.040 +[Speaker 1]: Are we I can hear you. + +00:15:07.540 --> 00:15:08.040 +[Speaker 5]: Yeah, so the question I had on the pad was, + +00:15:10.760 --> 00:15:10.900 +would it make sense in any sense to put a + +00:15:13.820 --> 00:15:13.940 +FUSE interface or put the POSIX semantics in + +00:15:14.960 --> 00:15:15.460 +front of this at some point? + +00:15:17.800 --> 00:15:18.080 +[Speaker 1]: Yeah, that would be cool. + +00:15:20.680 --> 00:15:21.060 +It's kind of a similar question to any plans + +00:15:21.680 --> 00:15:22.180 +for a Tramp interface. + +00:15:25.440 --> 00:15:25.940 +There was a project that the HyperCore + +00:15:31.160 --> 00:15:31.500 +HolePunch team was working on a year or more + +00:15:34.320 --> 00:15:34.820 +ago that provided a FUSE interface. + +00:15:39.560 --> 00:15:40.060 +And I think it didn't pan out. + +00:15:43.580 --> 00:15:43.940 +But it's a good idea. Same with the Tramp + +00:15:46.560 --> 00:15:46.720 +interface. It seems like a good idea that + +00:15:51.900 --> 00:15:52.260 +would make it possible to more easily hook + +00:15:55.520 --> 00:15:56.020 +into the built-in Emacs functionality for, + +00:16:01.340 --> 00:16:01.840 +for example, like incremental file name + +00:16:03.680 --> 00:16:03.960 +completion, which we don't currently support + +00:16:09.800 --> 00:16:10.260 +in Hyperdrive.el. So I'd love to have + +00:16:12.720 --> 00:16:13.220 +feedback and design ideas for those projects. + +00:16:15.860 --> 00:16:16.020 +[Speaker 5]: Yeah, there's just Everything in Emacs just + +00:16:17.980 --> 00:16:18.280 +sort of assumes the file system is there and + +00:16:20.940 --> 00:16:21.440 +usable in that way. That's all. + +00:16:23.980 --> 00:16:24.480 +[Speaker 1]: Yeah, it's a good idea. + +00:16:28.180 --> 00:16:28.680 +[Speaker 3]: An idea for the privacy type thing is + +00:16:33.160 --> 00:16:33.380 +Syncthing links. Because I think you can set + +00:16:36.100 --> 00:16:36.480 +up Syncthing in such a way that you have the + +00:16:38.560 --> 00:16:38.900 +private networks that other people can't + +00:16:40.240 --> 00:16:40.740 +actually get access to. + +00:16:45.540 --> 00:16:45.700 +[Speaker 1]: I did not know that that was possible with + +00:16:47.120 --> 00:16:47.620 +Syncthing. I'll have to look into that. + +00:16:48.840 --> 00:16:49.200 +[Speaker 3]: At least I think it is anyway, + +00:16:53.000 --> 00:16:53.500 +because yeah, there's ways you can explicitly + +00:16:56.780 --> 00:16:57.280 +authorize devices. Yeah, + +00:17:00.240 --> 00:17:00.400 +right. I think you could actually set it up + +00:17:03.480 --> 00:17:03.960 +in such a way that you can have private stuff + +00:17:06.300 --> 00:17:06.480 +and links, and then that might be a way that + +00:17:10.119 --> 00:17:10.619 +you can get a completely distributed + +00:17:12.720 --> 00:17:13.220 +Zettelcast and with private notes. + +00:17:22.339 --> 00:17:22.599 +[Speaker 1]: Yeah. Good idea. There's a question in the + +00:17:26.280 --> 00:17:26.380 +pad about DATRS, a Rust version of + +00:17:28.660 --> 00:17:29.160 +HyperDrive. I had not heard of that, + +00:17:30.260 --> 00:17:30.760 +so I'll have to look into that. + +00:17:33.040 --> 00:17:33.460 +If you had your druthers, + +00:17:34.820 --> 00:17:35.320 +what would make your work on hyperdrive.dl + +00:17:40.240 --> 00:17:40.740 +easier? It's been a lot of fun. + +00:17:42.480 --> 00:17:42.980 +I would love to have more user feedback. + +00:17:45.660 --> 00:17:46.160 +That would be my wish. + +00:17:50.500 --> 00:17:51.000 +I tried putting a git repo in HyperDrive. + +00:17:53.320 --> 00:17:53.500 +Does it work well? I don't think that would + +00:17:56.880 --> 00:17:57.100 +work well because, as I mentioned a moment a + +00:18:00.060 --> 00:18:00.220 +few moments ago, the data that you put into a + +00:18:00.920 --> 00:18:01.420 +hyperdrive is duplicated. + +00:18:06.300 --> 00:18:06.800 +So if you had the whole work tree in + +00:18:08.800 --> 00:18:08.960 +hyperdrive every time you made a change and + +00:18:12.340 --> 00:18:12.840 +saved it, it would be duplicated. + +00:18:15.240 --> 00:18:15.740 +If you had just a bare repository, + +00:18:18.240 --> 00:18:18.740 +I don't know, try it. + +00:18:21.140 --> 00:18:21.540 +[Speaker 3]: They're trying to solve the same problem, + +00:18:23.560 --> 00:18:24.060 +but 1 of the optimizations they have for + +00:18:25.520 --> 00:18:25.900 +being able to view a whole bunch of people's + +00:18:28.780 --> 00:18:28.980 +data is they made shallow clones a lot + +00:18:34.640 --> 00:18:35.140 +[Speaker 1]: Would you phrase that again, + +00:18:35.140 --> 00:18:35.640 +please? + +00:18:39.780 --> 00:18:40.280 +[Speaker 3]: easier. Right? So like Git and Hypercore, + +00:18:42.720 --> 00:18:43.220 +1 of the things they do is they allow you to + +00:18:46.160 --> 00:18:46.660 +have a whole history of every single change + +00:18:51.880 --> 00:18:52.380 +for a dataset Zettelkasten project. + +00:18:56.400 --> 00:18:56.600 +But 1 of the optimizations Hypercore did to + +00:19:02.020 --> 00:19:02.220 +make it more network web friendly is they + +00:19:04.540 --> 00:19:04.700 +made the shallow clones work a lot better and + +00:19:07.040 --> 00:19:07.240 +a lot... Yeah, they made that work a lot + +00:19:08.760 --> 00:19:09.060 +better so you don't have to download every + +00:19:11.340 --> 00:19:11.840 +single thing for every single project. + +00:19:14.860 --> 00:19:15.100 +And because they both are implementing the + +00:19:17.800 --> 00:19:18.040 +delta upgrades, I don't see how they could + +00:19:19.000 --> 00:19:19.500 +work really well together. + +00:19:21.780 --> 00:19:22.280 +At least from what it looked like to me. + +00:19:25.640 --> 00:19:26.140 +It can't hurt to experiment. + +00:19:28.980 --> 00:19:29.480 +[Speaker 1]: But yeah, I would agree with you. + +00:19:35.020 --> 00:19:35.180 +Is data transferred between nodes in the + +00:19:38.800 --> 00:19:39.060 +clear or encrypted? That's a good question. + +00:19:41.640 --> 00:19:42.140 +I don't know how it's encrypted. + +00:19:47.440 --> 00:19:47.940 +I don't, I wouldn't recommend sharing + +00:19:53.400 --> 00:19:53.900 +sensitive data with hyperdrive right now? + +00:19:55.680 --> 00:19:55.800 +I would recommend if you want to play with + +00:19:57.240 --> 00:19:57.520 +it, have it be something where you're + +00:20:00.660 --> 00:20:01.160 +expecting the data to be shared. + +00:20:03.460 --> 00:20:03.960 +Is there a searchable catalog? + +00:20:06.700 --> 00:20:06.980 +[Speaker 3]: It's also the data in transport versus data + +00:20:08.480 --> 00:20:08.800 +at rest. I'm pretty sure the data at rest + +00:20:09.960 --> 00:20:10.460 +would not be encrypted. + +00:20:14.440 --> 00:20:14.640 +Right. You can separate that into those 2 + +00:20:14.640 --> 00:20:15.140 +questions. + +00:20:19.920 --> 00:20:20.420 +[Speaker 1]: Right. Right. Is there a searchable catalog + +00:20:23.000 --> 00:20:23.320 +of hyper drives? So that's a thing, + +00:20:32.980 --> 00:20:33.480 +an idea that we've been a distributed trust + +00:20:38.200 --> 00:20:38.700 +network for discovering peers that are + +00:20:41.260 --> 00:20:41.760 +trusted for a particular topic. + +00:20:47.220 --> 00:20:47.440 +And we actually made a demo video of a + +00:20:51.760 --> 00:20:51.900 +previous prototype that's available on the + +00:20:54.580 --> 00:20:55.080 +Ashen hyperdrive that you can watch that + +00:20:58.980 --> 00:20:59.280 +shows the basic idea. But the idea is just + +00:21:02.980 --> 00:21:03.480 +that you would have a list of peers that you + +00:21:07.120 --> 00:21:07.620 +think are worth listening to or worth reading + +00:21:09.400 --> 00:21:09.880 +for a particular topic. + +00:21:11.980 --> 00:21:12.180 +And those peers would have peers that they + +00:21:14.640 --> 00:21:14.920 +think are worth listening to for that same + +00:21:16.600 --> 00:21:16.720 +topic. And so you would say, + +00:21:17.560 --> 00:21:17.900 +if I'm interested in Emacs, + +00:21:21.220 --> 00:21:21.660 +I want to see all the peers that I trust for + +00:21:23.700 --> 00:21:24.200 +the topic Emacs. And if, + +00:21:27.340 --> 00:21:27.640 +say, Adam Porter shows up in my list and Adam + +00:21:30.340 --> 00:21:30.840 +Porter trusts Jonas and Jonas trusts Pratt, + +00:21:33.420 --> 00:21:33.920 +I would be able to read hyperdrive + +00:21:36.760 --> 00:21:37.260 +information from all of those people by + +00:21:41.600 --> 00:21:41.800 +looking at the indirect relationships that I + +00:21:43.260 --> 00:21:43.760 +have by following the chain of relationships, + +00:21:44.760 --> 00:21:45.260 +kind of like a web of trust. + +00:21:49.640 --> 00:21:49.860 +And so it would also allow you to have a + +00:21:53.480 --> 00:21:53.980 +network of peers that you trust to block + +00:21:54.900 --> 00:21:55.400 +other people on your behalf. + +00:21:57.660 --> 00:21:58.160 +So it would be useful for subjective + +00:22:02.220 --> 00:22:02.520 +moderation where you can remove spam and bad + +00:22:04.920 --> 00:22:05.420 +actors from the people that you follow + +00:22:08.940 --> 00:22:09.440 +without having to delegate that powerful + +00:22:13.260 --> 00:22:13.380 +responsibility to some third party in a + +00:22:15.260 --> 00:22:15.720 +permanent way where that third party might + +00:22:23.040 --> 00:22:23.320 +abuse that power. So it allows you to share + +00:22:26.120 --> 00:22:26.260 +your list of trusted peers and your list of + +00:22:29.180 --> 00:22:29.280 +blocked peers with other people in a + +00:22:29.860 --> 00:22:30.360 +peer-to-peer way. + +00:22:38.080 --> 00:22:38.580 +[Speaker 3]: Have you ever looked at GNUnet? + +00:22:40.200 --> 00:22:40.700 +It kind of does some... + +00:22:45.660 --> 00:22:45.800 +It's trying to do something weird with the + +00:22:47.520 --> 00:22:47.600 +internet where it redesigns it from the + +00:22:51.040 --> 00:22:51.540 +ground up to be peer-to-peer, + +00:22:53.680 --> 00:22:54.180 +local first, or something like that. + +00:22:58.380 --> 00:22:58.880 +[Speaker 1]: I would like to know more about GNUnet. + +00:23:01.800 --> 00:23:01.960 +Yes. I have heard of it, + +00:23:03.620 --> 00:23:04.120 +but I haven't really researched it. + +00:23:09.060 --> 00:23:09.560 +If you edit a file on the hyperdrive, + +00:23:12.400 --> 00:23:12.900 +then edit the same file on the local mirror, + +00:23:15.480 --> 00:23:15.640 +how is the conflict handled when you sync the + +00:23:21.140 --> 00:23:21.280 +mirror again? So I think if I understand the + +00:23:29.160 --> 00:23:29.620 +question, the answer is that you can't edit + +00:23:32.280 --> 00:23:32.780 +the file in 2 different places, + +00:23:36.860 --> 00:23:37.360 +I think is the answer to the question. + +00:23:41.220 --> 00:23:41.720 +If you were to manually copy the private key + +00:23:44.040 --> 00:23:44.540 +from 1 machine onto another machine, + +00:23:51.820 --> 00:23:52.320 +then you could cause a conflict, + +00:23:54.400 --> 00:23:54.900 +like a merge conflict, + +00:23:58.100 --> 00:23:58.240 +but you would have to go out of your way to + +00:24:00.520 --> 00:24:00.900 +do that. And It's not handled. + +00:24:03.580 --> 00:24:03.820 +I think the Hypercore Hole Punch team has + +00:24:05.600 --> 00:24:05.860 +another project that they're working on that + +00:24:07.200 --> 00:24:07.700 +would, it's called AutoBase, + +00:24:09.560 --> 00:24:10.060 +that would merge those conflicts. + +00:24:13.200 --> 00:24:13.680 +But we're not using that right now. + +00:24:16.260 --> 00:24:16.760 +And I think it's in early development still. + +00:24:19.860 --> 00:24:20.360 +So there might be a solution in the future. + +00:24:32.240 --> 00:24:32.740 +[Speaker 3]: What's a surprising change of thoughts or + +00:24:36.900 --> 00:24:37.180 +what's the most interesting thing you weren't + +00:24:39.060 --> 00:24:39.560 +expecting to discover while developing this? + +00:24:44.640 --> 00:24:44.800 +Like change of thoughts on how you write or I + +00:24:45.020 --> 00:24:45.520 +don't know. + +00:24:59.060 --> 00:24:59.540 +[Speaker 1]: Well, I'm relatively new to Emacs and to Lisp + +00:25:01.200 --> 00:25:01.700 +and really to programming in general. + +00:25:04.160 --> 00:25:04.540 +And so it's been a fantastic learning + +00:25:08.480 --> 00:25:08.900 +experience. Adam, Alpha Papa, + +00:25:11.320 --> 00:25:11.520 +Adam and I have been doing a lot of pair + +00:25:12.960 --> 00:25:13.460 +programming sessions where we work together + +00:25:15.380 --> 00:25:15.880 +and I get to learn from him. + +00:25:19.540 --> 00:25:19.940 +And we've had meetings with Jonas and Prat + +00:25:23.560 --> 00:25:23.800 +and meetings with Mauve where it's a + +00:25:25.520 --> 00:25:26.020 +fantastic learning experience for me to + +00:25:30.660 --> 00:25:30.800 +discover how to build software in an + +00:25:32.820 --> 00:25:33.320 +efficient and intelligent way. + +00:25:40.580 --> 00:25:40.920 +It's a huge pleasure. If there are no more + +00:25:43.320 --> 00:25:43.820 +questions, I just wanted to encourage + +00:25:48.380 --> 00:25:48.620 +everyone to try it out and to let us know + +00:25:50.380 --> 00:25:50.560 +what you think. It would be really helpful to + +00:25:54.960 --> 00:25:55.320 +have some feedback from people who are using + +00:25:57.240 --> 00:25:57.600 +it in new and creative ways that we haven't + +00:25:57.600 --> 00:25:58.100 +anticipated. + +00:26:02.120 --> 00:26:02.300 +[Speaker 6]: Hi, I'd just like to say that I tried this + +00:26:02.980 --> 00:26:03.480 +new thing called hyperdrive.el + +00:26:05.880 --> 00:26:06.380 +today, and I think it's pretty cool. + +00:26:12.540 --> 00:26:12.800 +[Speaker 2]: Sorry, that was somebody else. + +00:26:13.440 --> 00:26:13.940 +Hey Joseph, how's it going? + +00:26:15.080 --> 00:26:15.580 +Oh, talk today. + +00:26:16.420 --> 00:26:16.580 +[Speaker 3]: Oh, thanks. Wonderful. + +00:26:19.200 --> 00:26:19.700 +[Speaker 1]: Who's that? Oh, hey. Well, + +00:26:34.060 --> 00:26:34.560 +I'm going to say goodbye. + +00:26:37.040 --> 00:26:37.540 +Thank you. And thank you for your questions, + +00:26:39.680 --> 00:26:39.840 +[Speaker 3]: I know that + +00:26:40.380 --> 00:26:40.880 +[Speaker 1]: PlasmaStrike. I've met you before. + +00:26:42.340 --> 00:26:42.720 +Appreciate your questions, + +00:26:42.880 --> 00:26:43.380 +your thoughts. + +00:26:50.380 --> 00:26:50.880 +[Speaker 2]: Oh, by the way, Joseph, + +00:26:53.000 --> 00:26:53.500 +we have our, our first, + +00:26:55.120 --> 00:26:55.480 +I don't know if our first new user, + +00:26:57.280 --> 00:26:57.780 +but we have the first link being shared, + +00:27:01.160 --> 00:27:01.480 +to hyperdrive file in the chat and I loaded + +00:27:03.080 --> 00:27:03.240 +it and it works. And it's funny too. + +00:27:03.880 --> 00:27:04.000 +It's worth looking at. + +00:27:09.140 --> 00:27:09.640 +So. Oh, I think it's frozen. + +00:27:11.580 --> 00:27:12.080 +I don't know if anybody can hear me. + +00:27:12.720 --> 00:27:13.220 +[Speaker 3]: I can. + +00:27:15.200 --> 00:27:15.620 +[Speaker 2]: Okay, cool. The browser is frozen. + +00:27:19.020 --> 00:27:19.520 +It's it's not, okay. Just unfroze. + +00:27:21.740 --> 00:27:22.100 +Anyway. All right. Well, + +00:27:24.000 --> 00:27:24.440 +By the way, I enjoyed your talks about + +00:27:26.260 --> 00:27:26.480 +hyperbole. I'm going to rewatch those later + +00:27:28.040 --> 00:27:28.260 +when I get a chance. It was nice to meet you, + +00:27:31.100 --> 00:27:31.240 +too. Bob is a really great guy to work with. + +00:27:38.800 --> 00:27:39.300 +[Speaker 3]: Definitely a lot of interesting people. + +00:27:40.200 --> 00:27:40.700 +[Speaker 2]: I owe him 1. Yes, sir. + +00:27:41.580 --> 00:27:41.760 +All right, you have a good day, + +00:27:45.140 --> 00:27:45.640 +[Speaker 3]: Will do, I like the insistence on local + +00:27:48.740 --> 00:27:48.940 +first. Feels like it's a good dovetail with + +00:27:49.540 --> 00:27:50.040 +the hyper core + +00:27:51.180 --> 00:27:51.680 +[Speaker 2]: enjoy the conference. Yeah, + +00:27:54.960 --> 00:27:55.120 +yeah, I think there's a lot of a lot of + +00:27:57.980 --> 00:27:58.180 +interesting possibilities to build on this we + +00:28:01.340 --> 00:28:01.600 +have some plans that we Will get to you later + +00:28:05.600 --> 00:28:05.820 +this well in the coming year And we'll see + +00:28:07.480 --> 00:28:07.900 +where the hyperdrive people, + +00:28:09.920 --> 00:28:10.040 +you know, upstream how they develop it as + +00:28:14.340 --> 00:28:14.840 +well and yeah, so exciting times. diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt new file mode 100644 index 00000000..c1376f19 --- /dev/null +++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt @@ -0,0 +1,2274 @@ +WEBVTT captioned by bhavin192, checked by sachac + +00:00.000 --> 00:00:02.600 +Hello, I'm Joseph Turner. + +00:00:02.600 --> 00:00:05.107 +This talk is about hyperdrive.el, + +00:00:05.107 --> 00:00:09.099 +peer-to-peer file system in Emacs. + +00:00:09.100 --> 00:00:11.479 +Hyperdrive is a JavaScript library + +00:00:11.480 --> 00:00:13.359 +developed by the Holepunch team + +00:00:13.360 --> 00:00:16.499 +for sharing files on a peer-to-peer network. + +00:00:16.500 --> 00:00:19.839 +It's released under the Apache 2.0 license. + +NOTE Hyperdrives introduction + +00:00:19.840 --> 00:00:21.639 +Here's how it works. + +00:00:21.640 --> 00:00:24.580 +To participate as a peer, you run a node, + +00:00:24.581 --> 00:00:27.280 +a lightweight local server that allows you + +00:00:27.281 --> 00:00:29.959 +to connect with other nodes on the network. + +00:00:29.960 --> 00:00:33.123 +You can create a hyperdrive or multiple hyperdrives, + +00:00:33.123 --> 00:00:36.219 +and you can author files within them. + +00:00:36.220 --> 00:00:38.699 +Each hyperdrive is automatically assigned + +00:00:38.700 --> 00:00:40.906 +a globally unique link + +00:00:40.906 --> 00:00:44.579 +that starts with `hyper://`. + +00:00:44.580 --> 00:00:47.019 +When you share that link with someone, + +00:00:47.020 --> 00:00:49.159 +they have access to your hyperdrive. + +00:00:49.160 --> 00:00:52.819 +Anyone who has that link can load the hyperdrive + +00:00:52.820 --> 00:00:56.000 +from the network and view its content. + +00:56.000 --> 00:00:59.019 +When you load a Hyperdrive file from the network, + +00:00:59.020 --> 00:01:02.019 +your node caches that data locally + +00:01:02.020 --> 00:01:04.133 +and automatically begins seeding it + +00:01:04.133 --> 00:01:05.219 +back to the network, + +00:01:05.220 --> 00:01:12.619 +making it available for others to download from you. + +00:01:12.620 --> 00:01:14.519 +Hyperdrives are single writer. + +00:01:14.520 --> 00:01:16.879 +This means that when you create a new drive, + +00:01:16.880 --> 00:01:19.719 +you are the only one who can make changes to it. + +00:01:19.720 --> 00:01:21.267 +Others can view it + +00:01:21.267 --> 00:01:23.799 +and can seed it back to the network, + +00:01:23.800 --> 00:01:27.339 +but you're the only one who can modify it. + +00:01:27.340 --> 00:01:29.739 +Hyperdrives are offline first. + +00:01:29.740 --> 00:01:32.999 +This means that when you load data from the network, + +00:01:33.000 --> 00:01:34.900 +it's stored locally on your machine + +00:01:34.900 --> 00:01:36.179 +for you to view later, + +00:01:36.180 --> 00:01:38.799 +even when you're disconnected from other peers. + +00:01:38.800 --> 00:01:40.799 +You can also create new drives + +00:01:40.800 --> 00:01:43.600 +and modify your drives when you're offline, + +00:01:43.600 --> 00:01:44.999 +and then share those changes + +00:01:45.000 --> 00:01:47.919 +once you connect with peers later. + +00:01:47.920 --> 00:01:50.299 +Hyperdrives are local first. + +00:01:50.300 --> 00:01:52.400 +This means that when you are connected with + +00:01:52.400 --> 00:01:54.739 +other peers on a local area network, + +00:01:54.740 --> 00:01:56.939 +even if none of the peers involved + +00:01:56.940 --> 00:01:58.979 +are connected to the broader Internet, + +00:01:58.980 --> 00:02:02.059 +you can still share files. + +00:02:02.060 --> 00:02:04.799 +Hyperdrives are sparsely replicated. + +00:02:04.800 --> 00:02:07.479 +This means that you can download individual files + +00:02:07.479 --> 00:02:10.020 +from a hyperdrive without having to download + +00:02:10.020 --> 00:02:11.719 +the whole thing. + +00:02:11.720 --> 00:02:15.471 +This saves on disk space and also allows you + +00:02:15.471 --> 00:02:17.233 +to quickly load just the files + +00:02:17.233 --> 00:02:20.539 +that you're interested in. + +00:02:20.540 --> 00:02:22.467 +Hyperdrives are mutable. + +00:02:22.467 --> 00:02:25.499 +You can add files, change files, + +00:02:25.500 --> 00:02:28.119 +remove files from a hyperdrive. + +00:02:28.120 --> 00:02:30.667 +And when peers load your drive + +00:02:30.667 --> 00:02:32.559 +using the very same link, + +00:02:32.560 --> 00:02:34.025 +they will be able to load + +00:02:34.025 --> 00:02:37.319 +the latest changes that you've published. + +00:02:37.320 --> 00:02:39.459 +Hyperdrives are versioned. + +00:02:39.460 --> 00:02:42.429 +This means that when you make changes to a file, + +00:02:42.429 --> 00:02:46.000 +the previous versions of those files are not lost. + +02:46.000 --> 00:02:49.359 +Peers can load the old versions of a file + +00:02:49.360 --> 00:02:52.439 +that was changed or deleted, for example, + +00:02:52.440 --> 00:02:55.067 +simply by specifying the version number + +00:02:55.067 --> 00:02:58.167 +of the hyperdrive when the file still existed + +00:02:58.167 --> 00:03:04.599 +or existed in a previous state. + +NOTE About USHIN and the contributors + +00:03:04.600 --> 00:03:07.379 +I'm presenting this talk on behalf of USHIN. + +00:03:07.380 --> 00:03:10.679 +USHIN is a tiny nonprofit whose mission is to + +00:03:10.680 --> 00:03:14.032 +promote personal, community and global health + +00:03:14.032 --> 00:03:17.367 +through free and open universal shared information + +00:03:17.367 --> 00:03:19.699 +for everybody. + +00:03:19.700 --> 00:03:21.551 +USHIN was founded in the early 90s + +00:03:21.551 --> 00:03:24.859 +by Paula Maas, Steve Nash and others + +00:03:24.860 --> 00:03:26.399 +with the goal of creating + +00:03:26.400 --> 00:03:29.131 +a distributed health information network + +00:03:29.131 --> 00:03:33.429 +that would allow people to find, share, compare + +00:03:33.429 --> 00:03:35.667 +and deliberate health information + +00:03:35.667 --> 00:03:37.779 +from a variety of sources. + +00:03:37.780 --> 00:03:40.699 +Since then, the scope of the project has broadened + +00:03:40.700 --> 00:03:43.259 +to include all kinds of information. + +00:03:43.260 --> 00:03:45.779 +And in recent years, we've been focusing on + +00:03:45.780 --> 00:03:49.499 +building with peer-to-peer software. + +00:03:49.500 --> 00:03:50.534 +About three years ago, + +00:03:50.534 --> 00:03:52.634 +we started working with Mauve Signweaver, + +00:03:52.634 --> 00:03:54.767 +who has since then been our steadfast + +00:03:54.767 --> 00:03:58.259 +peer-to-peer explorer and guide. + +00:03:58.260 --> 00:04:00.079 +This year, we started working on + +00:04:00.080 --> 00:04:02.799 +this hyperdrive.el Emacs package, + +00:04:02.800 --> 00:04:05.059 +and Adam has been the powerhouse + +00:04:05.060 --> 00:04:08.079 +behind the Emacs Lisp development. + +00:04:08.080 --> 00:04:08.967 +About a month ago, + +00:04:08.967 --> 00:04:11.099 +Jonas Bernoulli started joining with us, + +00:04:11.100 --> 00:04:14.419 +and he has been offering his expertise + +00:04:14.420 --> 00:04:15.639 +in the realm of user interface design + +00:04:15.640 --> 00:04:18.000 +using his Transient library. + +04:18.000 --> 00:04:22.139 +And Protesilaos Stavrou has been not only valuable + +00:04:22.140 --> 00:04:25.000 +in terms of user design and feedback, + +00:04:25.000 --> 00:04:27.119 +but he created a wonderful + +00:04:27.120 --> 00:04:32.099 +basic introduction to Hyperdrive. Take a look. + +NOTE Basic introduction to Hyperdrive + +00:04:32.646 --> 00:04:33.585 +[Prot]: Hello everyone! + +00:04:33.586 --> 00:04:36.365 +My name is Protesilaos, also known as Prot. + +00:04:36.366 --> 00:04:37.805 +In this video, I want to show you + +00:04:37.806 --> 00:04:40.746 +the basics of hyperdrive.el. + +00:04:40.746 --> 00:04:44.012 +This is a package for Emacs that lets us connect to + +00:04:44.013 --> 00:04:47.832 +the Hyperdrive peer-to-peer network. + +00:04:47.833 --> 00:04:51.572 +We can browse existing drives on the network, + +00:04:51.573 --> 00:04:53.879 +meaning existing file systems, + +00:04:53.880 --> 00:04:59.052 +or create and maintain our own hyperdrive, + +00:04:59.053 --> 00:05:03.473 +to which we can add, remove or edit files. + +00:05:03.473 --> 00:05:05.473 +We will see this together. + +00:05:05.473 --> 00:05:08.732 +What I have here in front of me is a basic + +00:05:08.733 --> 00:05:12.972 +use-package declaration for hyperdrive.el. + +00:05:12.973 --> 00:05:16.992 +All I am doing is binding `hyperdrive-menu` + +00:05:16.993 --> 00:05:19.792 +to a key and also activating + +00:05:19.793 --> 00:05:23.612 +the menu bar entry of hyperdrive. + +00:05:23.613 --> 00:05:26.812 +Let me show you very quickly, `hyperdrive-menu`. + +00:05:26.813 --> 00:05:31.292 +And this is the sort of interface that it brings up. + +00:05:31.293 --> 00:05:33.473 +We will take a closer look at it. + +00:05:33.473 --> 00:05:35.992 +As for the menu bar, + +00:05:35.993 --> 00:05:41.072 +we have `hyperdrive-menu` over here, + +00:05:41.073 --> 00:05:44.192 +and we will take a look at this as well. + +00:05:44.193 --> 00:05:45.692 +Suffice to say that + +00:05:45.693 --> 00:05:48.272 +you can get the same functionality + +00:05:48.273 --> 00:05:51.992 +with the menu bar or with `hyperdrive-menu`, + +00:05:51.993 --> 00:05:55.892 +as well as by calling the commands directly + +00:05:55.893 --> 00:06:00.052 +with `M-x` or their respective key bindings. + +00:06:00.053 --> 00:06:02.979 +I won't cover everything in that regard, + +00:06:02.980 --> 00:06:06.132 +but please bear this fact in mind. + +NOTE Managing files with Hyperdrive.el + +00:06:06.133 --> 00:06:09.212 +Let's start then with what I have here + +00:06:09.213 --> 00:06:13.852 +in this other tab, which is a set of files. + +00:06:13.853 --> 00:06:18.473 +I have prepared in my local file system - a hyperdrive. + +00:06:18.473 --> 00:06:20.332 +This contains a set of files + +00:06:20.333 --> 00:06:22.652 +that I ultimately want to share + +00:06:22.653 --> 00:06:24.352 +on the peer-to-peer network, + +00:06:24.353 --> 00:06:28.052 +meaning that I want this to eventually be + +00:06:28.053 --> 00:06:31.473 +reflected in my own hyperdrive. + +00:06:31.473 --> 00:06:34.053 +What I did to get started is + +00:06:34.054 --> 00:06:36.492 +I invoked `hyperdrive-menu`. + +00:06:36.493 --> 00:06:38.572 +The very first thing you need to do + +00:06:38.573 --> 00:06:40.992 +to get started with Hyperdrive, + +00:06:40.993 --> 00:06:43.632 +either to browse or to create, + +00:06:43.633 --> 00:06:46.013 +is to start the gateway, + +00:06:46.013 --> 00:06:48.692 +meaning to be able to connect to + +00:06:48.693 --> 00:06:50.473 +the peer-to-peer network. + +00:06:50.473 --> 00:06:53.492 +You see here in `hyperdrive-menu` that there is + +00:06:53.493 --> 00:06:56.292 +an indicator next to the "Gateway" heading + +00:06:56.293 --> 00:06:59.473 +telling me that the gateway is on. + +00:06:59.473 --> 00:07:04.672 +I started it with `G` and then `s`. + +00:07:04.673 --> 00:07:06.572 +Once you start it, + +00:07:06.573 --> 00:07:10.152 +you can type `h` to visit an existing drive, + +00:07:10.153 --> 00:07:12.112 +`N` to create a drive, + +00:07:12.113 --> 00:07:17.473 +or `L` to open a link to an existing hyperdrive. + +00:07:17.473 --> 00:07:21.153 +You may get this link via email, for example. + +00:07:21.154 --> 00:07:24.932 +In this case, let me be over here + +00:07:24.933 --> 00:07:27.972 +and let me just kill this buffer. + +00:07:27.973 --> 00:07:32.952 +What I want in this case is to select a hyperdrive. + +00:07:32.953 --> 00:07:35.452 +You see here I have my own hyperdrive + +00:07:35.453 --> 00:07:37.812 +and also the hyperdrive of USHIN, + +00:07:37.813 --> 00:07:41.332 +the developers of hyperdrive.el. + +00:07:41.333 --> 00:07:43.972 +What I want to do in this case, + +00:07:43.973 --> 00:07:46.852 +you see there are various options available. + +00:07:46.853 --> 00:07:50.212 +I want to type `v` to view a file. + +00:07:50.213 --> 00:07:50.972 +And in this case, + +00:07:50.973 --> 00:07:53.632 +I will just type the forward slash, + +00:07:53.633 --> 00:07:56.992 +which means to view the root directory + +00:07:56.993 --> 00:08:00.852 +of this hyperdrive. And I am here. + +00:08:00.853 --> 00:08:04.219 +It is an empty drive apart from + +00:08:04.220 --> 00:08:06.512 +my credentials over here. + +00:08:06.513 --> 00:08:10.112 +There is nothing more really to see. + +00:08:10.113 --> 00:08:12.092 +But what I want to do is + +00:08:12.093 --> 00:08:15.352 +to start adding files to this drive. + +00:08:15.353 --> 00:08:18.332 +Let me use the menu bar for this. + +00:08:18.333 --> 00:08:21.052 +I will hover over to the menu bar, + +00:08:21.053 --> 00:08:24.772 +and I will find the "Hyperdrive" submenu. + +00:08:24.773 --> 00:08:27.912 +Then I will go find where the drives are. + +00:08:27.913 --> 00:08:30.672 +And you see that there are writable drives, + +00:08:30.673 --> 00:08:32.812 +meaning drives that I manage, + +00:08:32.813 --> 00:08:37.352 +and read-only drives, meaning drives of other users. + +00:08:37.353 --> 00:08:40.332 +In this case, USHIN is read-only, of course, + +00:08:40.333 --> 00:08:42.972 +and Protesilaos is writable. + +00:08:42.973 --> 00:08:48.352 +So what I want to do is upload a file to Protesilaos. + +00:08:48.353 --> 00:08:52.473 +And it prompts me in the Minibuffer for a file. + +00:08:52.473 --> 00:08:55.292 +I will just add the README. + +00:08:55.293 --> 00:08:58.173 +It is asking me, "Where do you want to add it?" + +00:08:58.173 --> 00:09:00.552 +And in square brackets, the default is to add it + +00:09:00.553 --> 00:09:03.812 +to the root directory of the hyperdrive. + +00:09:03.813 --> 00:09:07.012 +So I will just type `RET` to select the default. + +00:09:07.013 --> 00:09:11.392 +And there it is. It is already in the drive. + +00:09:11.393 --> 00:09:14.072 +Let me add the COPYING file as well, + +00:09:14.073 --> 00:09:16.673 +using the same method. + +00:09:16.673 --> 00:09:21.392 +I will go find my drive. "Upload File." + +00:09:21.393 --> 00:09:23.852 +And let's add the COPYING. + +00:09:23.853 --> 00:09:29.432 +And I also want to add it to the root directory. + +00:09:29.433 --> 00:09:30.632 +So already I have two files. + +00:09:30.633 --> 00:09:31.952 +This is looking good. + +00:09:31.953 --> 00:09:37.013 +Now I am opening the file inside of hyperdrive. + +00:09:37.014 --> 00:09:39.032 +This is not the same file + +00:09:39.033 --> 00:09:42.673 +as I have in my local directory. + +00:09:42.673 --> 00:09:47.432 +What I can do here, for example, is I can... + +00:09:47.433 --> 00:09:49.892 +Let me open another file here, the COPYING. + +00:09:49.893 --> 00:09:52.112 +I can create an Org link. + +00:09:52.113 --> 00:09:54.332 +Notice that these are Org files. + +00:09:54.333 --> 00:09:58.852 +So I will use the standard `org-store-link` command. + +00:09:58.853 --> 00:10:01.172 +You can see the key binding I invoked + +00:10:01.173 --> 00:10:03.532 +and the command it calls + +00:10:03.533 --> 00:10:05.892 +on the top right corner of my screen. + +00:10:05.893 --> 00:10:07.412 +So what I did is + +00:10:07.413 --> 00:10:11.992 +I copied a link to this hyperdrive file. + +00:10:11.993 --> 00:10:15.352 +And in this other file over here, + +00:10:15.353 --> 00:10:22.152 +I want to say "Free/libre." + +00:10:22.153 --> 00:10:27.072 +So I am editing my hyperdrive terms: + +00:10:27.073 --> 00:10:35.352 +"Check the," and I will paste the link here, + +00:10:35.353 --> 00:10:40.072 +"for how to use my files." + +00:10:40.073 --> 00:10:44.812 +If we check what is here, + +00:10:44.813 --> 00:10:47.812 +you will see that this is a link + +00:10:47.813 --> 00:10:50.879 +inside of the hyperdrive. + +00:10:50.880 --> 00:10:52.712 +And it's pointing specifically + +00:10:52.713 --> 00:10:54.992 +to that heading over there, + +00:10:54.993 --> 00:10:58.172 +which has this unique identifier, + +00:10:58.173 --> 00:11:00.512 +as you can see over here. + +00:11:00.513 --> 00:11:03.072 +So this is wonderful. + +00:11:03.073 --> 00:11:09.712 +I want to rename it to "Check the COPYING + +00:11:09.713 --> 00:11:11.952 +for how to use my files." + +00:11:11.953 --> 00:11:13.932 +I will save this. + +00:11:13.933 --> 00:11:16.839 +And now what I want to do is, + +00:11:16.840 --> 00:11:20.492 +I want to invoke `hyperdrive-menu`. + +00:11:20.493 --> 00:11:23.152 +And you will see now the menu, unlike earlier, + +00:11:23.153 --> 00:11:27.212 +has more commands, more stuff we can do with it. + +00:11:27.213 --> 00:11:31.792 +For example, I can type `w` to copy a URL. + +00:11:31.793 --> 00:11:34.499 +And by typing `w`, you will notice... + +00:11:34.500 --> 00:11:37.332 +Let me go to the `*scratch*` buffer to paste this in. + +00:11:37.333 --> 00:11:40.092 +You will notice what the URL is. + +00:11:40.093 --> 00:11:44.132 +It is my hyperdrive, my unique identifier, + +00:11:44.133 --> 00:11:47.512 +and then forward slash, meaning the root directory, + +00:11:47.513 --> 00:11:49.672 +and then README.org. + +00:11:49.673 --> 00:11:54.092 +That is the file I was editing. + +00:11:54.093 --> 00:11:56.572 +Let's do `hyperdrive-menu` again. + +00:11:56.573 --> 00:11:58.132 +Let's remove the `*scratch*` buffer. + +00:11:58.133 --> 00:11:59.932 +And let's do `hyperdrive-menu`. + +00:11:59.933 --> 00:12:02.379 +And you will notice that there are options + +00:12:02.380 --> 00:12:05.132 +to download the file, for example. + +00:12:05.133 --> 00:12:07.212 +If you are reading somebody else's file, + +00:12:07.213 --> 00:12:10.012 +you can download it to your own file system. + +00:12:10.013 --> 00:12:12.012 +Let me do that. "Download." + +00:12:12.013 --> 00:12:14.752 +And it is asking me, "Where do you want to save this?" + +00:12:14.753 --> 00:12:20.673 +For now, I will save it in the `/tmp/`, like this. + +00:12:20.673 --> 00:12:23.212 +Let's call it test.org. + +00:12:23.213 --> 00:12:25.052 +Okay, `/tmp/test.org`. + +00:12:25.053 --> 00:12:29.092 +Let me go and visit `test.org`. + +00:12:29.093 --> 00:12:30.279 +And there it is. + +00:12:30.280 --> 00:12:32.652 +It downloaded it just like that. + +00:12:32.653 --> 00:12:35.372 +This is how you can, for example, + +00:12:35.373 --> 00:12:38.472 +download the pictures and videos + +00:12:38.473 --> 00:12:42.332 +that I will eventually share on my hyperdrive. + +00:12:42.333 --> 00:12:44.712 +Let's invoke `hyperdrive-menu` again. + +00:12:44.713 --> 00:12:48.052 +And let's go up to the parent, you see, + +00:12:48.053 --> 00:12:50.512 +with the caret (`^`) sign. + +00:12:50.513 --> 00:12:53.172 +This will take me to the parent directory, + +00:12:53.173 --> 00:12:56.572 +in this case, the root directory of my hyperdrive. + +NOTE Dired like interface + +00:12:56.573 --> 00:12:58.352 +Let me do it a bit differently. + +00:12:58.353 --> 00:13:00.192 +The same idea, a bit differently. + +00:13:00.193 --> 00:13:02.732 +For those of you who are familiar with + +00:13:02.733 --> 00:13:05.912 +Dired and the `dired-jump` command, + +00:13:05.913 --> 00:13:08.752 +Dired is the standard file manager of Emacs. + +00:13:08.753 --> 00:13:13.172 +And `dired-jump` is a command that lets you jump + +00:13:13.173 --> 00:13:14.592 +from the current file + +00:13:14.593 --> 00:13:18.652 +to the directory that contains that file. + +00:13:18.653 --> 00:13:20.732 +So you see, I am here. + +00:13:20.733 --> 00:13:22.552 +The `dired-jump` command, by default, + +00:13:22.553 --> 00:13:25.232 +is bound to Ctrl-x, Ctrl-j (`C-x C-j`). + +00:13:25.233 --> 00:13:29.432 +So if I do `C-x C-j`, in this case, + +00:13:29.433 --> 00:13:30.772 +it invokes a command. + +00:13:30.773 --> 00:13:33.712 +You can see the name of it, `hyperdrive-up`, + +00:13:33.713 --> 00:13:37.732 +which is functionally equivalent to `dired-jump`. + +00:13:37.733 --> 00:13:41.332 +It does the same thing, meaning that it took me + +00:13:41.333 --> 00:13:45.252 +to the parent directory of this file. + +00:13:45.253 --> 00:13:48.252 +I think this is very helpful. + +00:13:48.253 --> 00:13:50.692 +This listing over here, in general, + +00:13:50.693 --> 00:13:55.272 +tries to mimic or to reuse + +00:13:55.273 --> 00:13:58.552 +the knowledge you already have of Dired. + +00:13:58.553 --> 00:14:01.072 +For example, if you type `o`, + +00:14:01.073 --> 00:14:05.312 +it will open the file at point in the other window, + +00:14:05.313 --> 00:14:07.092 +same as in Dired. + +00:14:07.093 --> 00:14:08.992 +Whereas if you type `RET`, + +00:14:08.993 --> 00:14:11.912 +it would open it in the current window. + +00:14:11.913 --> 00:14:16.252 +Again, same as what you will do in Dired. + +00:14:16.253 --> 00:14:18.013 +Let's see over here. + +00:14:18.014 --> 00:14:21.643 +You have options to jump with `j`, + +00:14:21.643 --> 00:14:26.232 +which is using Minibuffer completion to go to a file. + +00:14:26.233 --> 00:14:28.432 +Right now, I only have two files, + +00:14:28.433 --> 00:14:32.099 +but the idea is the same. + +00:14:32.100 --> 00:14:34.012 +It's, again, what you would do in Dired + +00:14:34.013 --> 00:14:37.332 +if you type `j` with the default key bindings, though, + +00:14:37.333 --> 00:14:40.292 +not with Evil mode or something else. + +00:14:40.293 --> 00:14:42.912 +Let's see again what we have over here. + +00:14:42.913 --> 00:14:45.933 +You can create a bookmark, and this will work, + +00:14:45.934 --> 00:14:48.553 +but no need to show you everything. + +00:14:48.554 --> 00:14:50.693 +The idea is that you create a bookmark + +00:14:50.694 --> 00:14:53.213 +the way you create any Emacs bookmark, + +00:14:53.214 --> 00:14:54.932 +to a file, to a directory. + +00:14:54.933 --> 00:14:55.993 +It doesn't matter. + +00:14:55.994 --> 00:14:57.733 +And then you can jump to it, + +00:14:57.734 --> 00:15:01.233 +the way bookmarks in Emacs always work. + +NOTE History in hyperdrive + +00:15:01.234 --> 00:15:02.892 +What I want to show you now + +00:15:02.893 --> 00:15:06.312 +a little bit is the history. + +00:15:06.313 --> 00:15:09.012 +History in Hyperdrive + +00:15:09.013 --> 00:15:11.433 +has to do with the drive itself. + +00:15:11.434 --> 00:15:13.613 +Meaning that individual files + +00:15:13.614 --> 00:15:15.313 +do not have their own history, + +00:15:15.314 --> 00:15:18.673 +but the drive as such has a history. + +00:15:18.674 --> 00:15:22.013 +Whenever you add a file, you remove a file, + +00:15:22.014 --> 00:15:25.672 +or you edit a file, you are incrementing + +00:15:25.673 --> 00:15:29.132 +the versioning of the hyperdrive by one. + +00:15:29.133 --> 00:15:34.573 +So each action corresponds to one unit of history. + +00:15:34.574 --> 00:15:37.832 +If you add a file, remove a file, and edit a file, + +00:15:37.833 --> 00:15:40.992 +this means that you are up three versions. + +00:15:40.993 --> 00:15:44.712 +So whatever your version number is, plus three. + +00:15:44.713 --> 00:15:48.912 +I am on version 24* over here. [* latest, not version 24] + +00:15:48.913 --> 00:15:55.932 +Let me go to this file now, + +00:15:55.933 --> 00:15:59.792 +and let me do `V h` + +00:15:59.793 --> 00:16:02.173 +to see a history of it. + +00:16:02.173 --> 00:16:07.552 +You will notice that between versions 23 and 24, + +00:16:07.553 --> 00:16:09.972 +this file was constant. + +00:16:09.973 --> 00:16:12.632 +But in version 25, we have a change. + +00:16:12.633 --> 00:16:14.352 +When you are in this buffer over here, + +00:16:14.353 --> 00:16:17.212 +you can type the equals sign (`=`), + +00:16:17.213 --> 00:16:22.373 +which is a key binding that will bring up the diff. + +00:16:22.373 --> 00:16:24.472 +So the set of changes between + +00:16:24.473 --> 00:16:27.032 +the previous version and the current version. + +00:16:27.033 --> 00:16:32.512 +And you see here, between versions 23 and 25, + +00:16:32.513 --> 00:16:35.092 +I have this addition. + +00:16:35.093 --> 00:16:38.372 +I think this is wonderful because now + +00:16:38.373 --> 00:16:41.172 +you can always go and check + +00:16:41.173 --> 00:16:42.412 +what is the state of this file. + +00:16:42.413 --> 00:16:43.852 +What is this person up to? + +00:16:43.853 --> 00:16:46.312 +What have they been changing? + +00:16:46.313 --> 00:16:50.792 +And with Hyperdrive, you can also visit… + +00:16:50.793 --> 00:16:58.513 +Let me go to the parent here. + +00:16:58.514 --> 00:17:02.412 +You can always visit a previous history. + +00:17:02.413 --> 00:17:06.012 +So, for example, I will go to the previous history, + +00:17:06.013 --> 00:17:08.032 +and let me see this file again + +00:17:08.033 --> 00:17:09.553 +in its previous history. + +00:17:09.554 --> 00:17:11.093 +I am looking at the file, + +00:17:11.094 --> 00:17:15.153 +but notice that the file now is not editable + +00:17:15.154 --> 00:17:17.353 +because this is in the past. + +00:17:17.354 --> 00:17:19.313 +I cannot rewrite history. + +00:17:19.314 --> 00:17:23.413 +I can only go to the present and then modify it + +00:17:23.414 --> 00:17:27.213 +and then create a new history, a new version. + +00:17:27.214 --> 00:17:31.213 +But this helps me see the state of the file + +00:17:31.214 --> 00:17:35.973 +at that version of the hyperdrive. + +00:17:35.973 --> 00:17:39.973 +So this is the basic idea of it, folks. + +NOTE Use case of sharing large files + +00:17:39.973 --> 00:17:42.233 +What I want to do then is + +00:17:42.234 --> 00:17:46.253 +continue with my process here. + +00:17:46.254 --> 00:17:51.973 +Let me actually do it like this so that you can see. + +00:17:51.973 --> 00:17:54.373 +Continue with the process of + +00:17:54.374 --> 00:17:56.493 +publishing all those files + +00:17:56.494 --> 00:17:59.753 +that I have on my hyperdrive. + +00:17:59.754 --> 00:18:02.853 +For example, this is a picture of a flower + +00:18:02.854 --> 00:18:04.113 +that I have taken. + +00:18:04.114 --> 00:18:05.733 +I think it's very nice. + +00:18:05.734 --> 00:18:08.032 +And this is a video of an eagle + +00:18:08.033 --> 00:18:09.593 +that was flying above me. + +00:18:09.594 --> 00:18:13.773 +And I will share this on the Hyperdrive network. + +00:18:13.774 --> 00:18:15.732 +From the network, by the way, + +00:18:15.733 --> 00:18:18.452 +you can also stream video as well. + +00:18:18.453 --> 00:18:20.693 +It is described in the hyperdrive.el manual, + +00:18:20.694 --> 00:18:24.252 +but I cannot show you everything right now. + +00:18:24.253 --> 00:18:26.512 +I think you get the idea. + +00:18:26.513 --> 00:18:29.712 +The gist is, you have a file system + +00:18:29.713 --> 00:18:31.912 +that you can share with the world + +00:18:31.913 --> 00:18:34.132 +using peer-to-peer technology. + +00:18:34.133 --> 00:18:38.519 +And for me, this is a powerful tool. + +00:18:38.520 --> 00:18:41.912 +This is a valuable proposition + +00:18:41.913 --> 00:18:45.012 +because I can share these large files I have, + +00:18:45.013 --> 00:18:47.432 +these pictures or videos, + +00:18:47.433 --> 00:18:49.712 +which I cannot post on my website + +00:18:49.713 --> 00:18:52.712 +due to bandwidth considerations. + +00:18:52.713 --> 00:18:55.592 +And this way, I can still share with the world + +00:18:55.593 --> 00:18:59.073 +something that I consider interesting. + +00:18:59.073 --> 00:19:00.212 +That's all for today, folks. + +00:19:00.213 --> 00:19:01.893 +Thank you very much for your attention. + +00:19:01.894 --> 00:19:05.513 +Remember that hyperdrive.el is still in development + +00:19:05.514 --> 00:19:07.393 +and things may change. + +00:19:07.394 --> 00:19:10.312 +But the fundamentals are in place + +00:19:10.313 --> 00:19:13.073 +and will remain constant. + +00:19:13.073 --> 00:19:19.460 +That's all for today. Take care. Goodbye. + +00:19:19.461 --> 00:19:20.793 +[Joseph]: Thank you, Prot. + +NOTE Drive creation with hyperdrive.el + +00:19:20.913 --> 00:19:23.852 +Another fundamental feature of hyperdrive.el + +00:19:23.980 --> 00:19:26.319 +is drive creation. + +00:19:26.319 --> 00:19:28.338 +The first step, as always, + +00:19:28.339 --> 00:19:30.858 +is to make sure that the gateway is running. + +00:19:30.859 --> 00:19:35.118 +So I'll open up `hyperdrive-menu` with `C-c h`. + +00:19:35.119 --> 00:19:36.778 +By the way, my key presses, + +00:19:36.779 --> 00:19:38.698 +as well as the commands that they run, + +00:19:38.699 --> 00:19:42.438 +can be seen at the top right of my screen. + +00:19:42.439 --> 00:19:44.618 +Down here, I see that the gateway is off. + +00:19:44.619 --> 00:19:49.138 +So I'll start it with `G s`. + +00:19:49.139 --> 00:19:50.559 +Now, it takes a few moments + +00:19:50.560 --> 00:19:52.219 +for the gateway to spin up. + +00:19:52.219 --> 00:19:54.298 +So to refresh the menu, + +00:19:54.299 --> 00:19:58.398 +I will close it and open it again. + +00:19:58.399 --> 00:20:01.218 +And now we see that the gateway is on. + +00:20:01.219 --> 00:20:05.919 +I'll press `N` to create a new drive. + +00:20:05.919 --> 00:20:09.758 +Now it's prompting me for a new hyperdrive seed. + +00:20:09.759 --> 00:20:12.938 +A seed is a string of characters + +00:20:12.939 --> 00:20:14.998 +that will be used to generate, + +00:20:14.999 --> 00:20:18.298 +in tandem with my secret master key, + +00:20:18.299 --> 00:20:21.338 +a new public key that will globally, + +00:20:21.339 --> 00:20:24.878 +uniquely identify this drive. + +00:20:24.879 --> 00:20:31.758 +So I'll type in "emacsconf". + +00:20:31.759 --> 00:20:32.658 +And after a moment, + +00:20:32.659 --> 00:20:36.998 +we see the newly created, empty drive. + +00:20:36.999 --> 00:20:40.098 +So I'll open up `hyperdrive-menu` once more. + +00:20:40.099 --> 00:20:43.798 +And I'll press `h` to open the sub-menu that shows + +00:20:43.799 --> 00:20:45.978 +more information about this hyperdrive, + +00:20:45.979 --> 00:20:50.878 +as well as commands related to this drive. + +00:20:50.879 --> 00:20:54.918 +In blue here, we see the seed that I just entered + +00:20:54.919 --> 00:21:00.219 +as well as the public key that it generated. + +00:21:00.219 --> 00:21:02.198 +We also see that the petname + +00:21:02.199 --> 00:21:06.539 +is also set to emacsconf. + +00:21:06.540 --> 00:21:09.038 +The petname is different from the seed. + +00:21:09.039 --> 00:21:13.078 +The petname is my personal, local identifier + +00:21:13.079 --> 00:21:14.678 +for this drive. + +00:21:14.679 --> 00:21:16.819 +I can change it whenever I want. + +00:21:16.819 --> 00:21:19.738 +And while it's not a secret, + +00:21:19.739 --> 00:21:23.998 +it's not displayed to other users. + +00:21:23.999 --> 00:21:26.359 +So I will leave it for now. + +00:21:26.360 --> 00:21:28.138 +"emacsconf" is fine. + +00:21:28.139 --> 00:21:30.858 +But when I go to share this drive, + +00:21:30.859 --> 00:21:34.158 +I'll want to display something more memorable + +00:21:34.159 --> 00:21:36.878 +than this long public key. + +00:21:36.879 --> 00:21:39.219 +And that's what the nickname is for. + +00:21:39.219 --> 00:21:42.518 +I'll change that by pressing `n`, + +00:21:42.519 --> 00:21:48.219 +and I'll type in "Emacs Conference". + +00:21:48.219 --> 00:21:51.358 +Now, when other peers load this hyperdrive + +00:21:51.359 --> 00:21:57.058 +by its URL, which I can copy by pressing `w`, + +00:21:57.059 --> 00:21:59.498 +they will see the nickname + +00:21:59.499 --> 00:22:02.018 +in addition to the public key. + +00:22:02.019 --> 00:22:05.720 +So if hyperdrive.el is like a phone book, + +00:22:05.720 --> 00:22:09.419 +the public keys are akin to phone numbers, + +00:22:09.419 --> 00:22:13.938 +the nickname is like the name that your contacts + +00:22:13.939 --> 00:22:16.298 +give you when they introduce themselves, + +00:22:16.299 --> 00:22:18.318 +and the petname is the name + +00:22:18.319 --> 00:22:22.298 +that you actually write down in your phone book. + +00:22:22.299 --> 00:22:25.298 +I'll show you what nicknames and petnames look like + +00:22:25.299 --> 00:22:29.619 +for drives that are not writable to me. + +00:22:29.619 --> 00:22:32.478 +I'll press `C-g` to close this submenu, + +00:22:32.479 --> 00:22:34.638 +and now I'm back at the main menu. + +00:22:34.639 --> 00:22:39.998 +I'll press `C-u h` to choose a hyperdrive, + +00:22:39.999 --> 00:22:44.558 +and I'll look at Prot's hyperdrive here. + +00:22:44.559 --> 00:22:46.298 +And here we see that the nickname + +00:22:46.299 --> 00:22:49.838 +of Prot's hyperdrive is "Protesilaos". + +00:22:49.839 --> 00:22:50.918 +Now, it's grayed out, + +00:22:50.919 --> 00:22:53.238 +which means that I can't change it. + +00:22:53.239 --> 00:22:56.418 +I can't change it because it's not my hyperdrive. + +00:22:56.419 --> 00:22:58.538 +But I can change the petname if I want it + +00:22:58.539 --> 00:23:00.538 +to show up under a different name. + +00:23:00.539 --> 00:23:02.438 +So I'll press `p`, + +00:23:02.439 --> 00:23:06.678 +and I'll type in "Prot", and hit Enter. + +00:23:06.679 --> 00:23:11.319 +Now I'll open his hyperdrive by pressing `f`. + +00:23:11.319 --> 00:23:13.898 +And I'll pick a path, I'll just hit `RET` + +00:23:13.899 --> 00:23:16.758 +to open the root directory. + +00:23:16.759 --> 00:23:19.458 +And now, when Prot's hyperdrive shows up, + +00:23:19.459 --> 00:23:20.538 +at the top of the screen, + +00:23:20.539 --> 00:23:26.198 +I see that it's identified with the petname "Prot." + +NOTE hyperdrive-mirror + +00:23:26.199 --> 00:23:28.719 +Now I'll show off `hyperdrive-mirror`. + +00:23:28.719 --> 00:23:32.158 +`hyperdrive-mirror` is like `hyperdrive-upload-file`, + +00:23:32.159 --> 00:23:33.878 +except that it allows you to upload + +00:23:33.879 --> 00:23:37.918 +an entire directory full of files recursively. + +00:23:37.919 --> 00:23:40.038 +For this example, I will upload + +00:23:40.039 --> 00:23:44.819 +the contents of the emacsconf-mirror directory. + +00:23:44.819 --> 00:23:48.918 +First step is to open the menu. I'll press H, + +00:23:48.919 --> 00:23:53.378 +and then I will choose the emacsconf drive. + +00:23:53.379 --> 00:23:57.718 +In the bottom here, we see the Mirror group. + +00:23:57.719 --> 00:23:59.478 +The first option that I can change + +00:23:59.479 --> 00:24:01.819 +is the source directory. + +00:24:01.819 --> 00:24:04.618 +The source directory is the directory on my local + +00:24:04.619 --> 00:24:08.819 +machine from which files will be uploaded. + +00:24:08.819 --> 00:24:11.198 +By default, the source directory + +00:24:11.199 --> 00:24:17.059 +is set to the current directory of the main buffer. + +00:24:17.060 --> 00:24:19.419 +This is good for now, so I'll leave it. + +00:24:19.419 --> 00:24:22.198 +The target directory is the directory + +00:24:22.199 --> 00:24:25.418 +in the hyperdrive where the files will end up. + +00:24:25.419 --> 00:24:28.838 +By default, it's the root directory, + +00:24:28.839 --> 00:24:30.358 +but for this example, + +00:24:30.359 --> 00:24:36.358 +I'll put these files in a subdirectory called notes. + +00:24:36.359 --> 00:24:40.298 +The filter is the rule that allows you + +00:24:40.299 --> 00:24:43.378 +to programmatically determine which files + +00:24:43.379 --> 00:24:46.578 +in the local directory will be uploaded + +00:24:46.579 --> 00:24:50.338 +into the hyperdrive, and which ones won't. + +00:24:50.339 --> 00:24:54.718 +By default, all files are mirrored, but in this case, + +00:24:54.719 --> 00:24:58.498 +let's say that I want to upload only the Org files, + +00:24:58.499 --> 00:25:01.358 +these first three, and I want to exclude + +00:25:01.359 --> 00:25:05.419 +the markdown file, solar-oven-notes.md. + +00:25:05.419 --> 00:25:10.378 +So I'll press `m f`, and I will choose + +00:25:10.379 --> 00:25:13.419 +the regular expression string option. + +00:25:13.419 --> 00:25:16.278 +If I wanted to, I could choose a named function + +00:25:16.279 --> 00:25:22.198 +or a lambda, but I won't demo that here. + +00:25:22.199 --> 00:25:26.338 +I'll type in `org$`, which will match against + +00:25:26.339 --> 00:25:31.658 +the files that end with "org." + +00:25:31.659 --> 00:25:35.898 +The filter is here, and I'll leave confirmation on. + +00:25:35.899 --> 00:25:39.718 +The confirmation step just allows me to review + +00:25:39.719 --> 00:25:42.138 +the list of files that are going to be uploaded + +00:25:42.139 --> 00:25:45.898 +into the drive before it happens. + +00:25:45.899 --> 00:25:52.878 +So I'll press `m m` to mirror them, and I see here + +00:25:52.879 --> 00:25:58.438 +that these three files are going to be uploaded. + +00:25:58.439 --> 00:26:05.558 +Looks good. I'll press `C-c C-c` to confirm the mirror. + +00:26:05.559 --> 00:26:07.738 +Now it says three files have been uploaded, + +00:26:07.739 --> 00:26:11.378 +and here they are in the drive. + +00:26:11.379 --> 00:26:15.818 +Good, so now I will modify the + +00:26:15.819 --> 00:26:19.938 +fermented-overnight-oats file in the hyperdrive. + +00:26:19.939 --> 00:26:24.339 +So I've loaded it, and I'll add here: + +00:26:24.340 --> 00:26:31.818 +"or other grains - cook them in advance if you want to," + +00:26:31.819 --> 00:26:33.778 +and I'll save it. + +00:26:33.779 --> 00:26:37.778 +Now this file, fermented-overnight-oats.org, + +00:26:37.779 --> 00:26:40.678 +has been modified on the hyperdrive + +00:26:40.679 --> 00:26:44.538 +more recently than on the file system. + +00:26:44.539 --> 00:26:48.899 +The file system file has not been modified. + +00:26:48.900 --> 00:26:53.818 +So I'll go back to my local directory, + +00:26:53.819 --> 00:26:56.538 +and I'll modify a different file. + +00:26:56.539 --> 00:27:00.458 +In this case, I'll add another hoedown + +00:27:00.459 --> 00:27:04.619 +to the fiddle-tunes.org file. + +00:27:04.619 --> 00:27:09.619 +"Tom and Jerry." That's a good hoedown. + +00:27:09.619 --> 00:27:14.119 +And now I'll mirror again. + +00:27:14.119 --> 00:27:16.778 +So I'll open the menu, and I'll press `h`, + +00:27:16.779 --> 00:27:20.578 +and then I'll open up the emacsconf demo drive. + +00:27:20.579 --> 00:27:22.958 +And now I've also decided that + +00:27:22.959 --> 00:27:26.718 +I want to include the solar-oven-notes.md file. + +00:27:26.719 --> 00:27:28.498 +So I'll remove the filter + +00:27:28.499 --> 00:27:32.119 +so that it's no longer excluded. + +00:27:32.119 --> 00:27:34.078 +I'll leave the rest of the settings the same, + +00:27:34.079 --> 00:27:38.778 +and I'll press `m m` again. + +00:27:38.779 --> 00:27:40.018 +And now we see that the + +00:27:40.019 --> 00:27:43.538 +`*hyperdrive-mirror*` buffer looks different. + +00:27:43.539 --> 00:27:47.378 +So, there are two main groups. + +00:27:47.379 --> 00:27:49.986 +These are the files that are going to be uploaded, + +00:27:49.986 --> 00:27:52.898 +and these are the files that are ignored. + +00:27:52.899 --> 00:27:56.538 +They're not going to be uploaded. + +00:27:56.539 --> 00:28:00.519 +The first subgroup is the files that are new locally. + +00:28:00.519 --> 00:28:04.898 +So the solar-oven-notes.md file is new on my machine, + +00:28:04.899 --> 00:28:07.319 +and it doesn't exist in the hyperdrive. + +00:28:07.319 --> 00:28:10.038 +So the mirror command is going to take that file + +00:28:10.039 --> 00:28:13.758 +and add it to the hyperdrive. + +00:28:13.759 --> 00:28:17.519 +This group contains the files that are newer locally. + +00:28:17.519 --> 00:28:19.778 +So the fiddle-tunes.org file + +00:28:19.779 --> 00:28:23.358 +has been modified on my local machine, + +00:28:23.359 --> 00:28:26.718 +but it hasn't been modified on the hyperdrive. + +00:28:26.719 --> 00:28:28.858 +So `hyperdrive-mirror` is going to take the + +00:28:28.859 --> 00:28:33.858 +updated version and put it on the hyperdrive. + +00:28:33.859 --> 00:28:35.958 +Now, the first group that's going to be ignored + +00:28:35.959 --> 00:28:39.358 +are the files that are older locally. + +00:28:39.359 --> 00:28:42.978 +So the fermented oats file has been modified + +00:28:42.979 --> 00:28:45.298 +on the hyperdrive more recently + +00:28:45.299 --> 00:28:47.538 +than on my local file system. + +00:28:47.539 --> 00:28:51.058 +So `hyperdrive-mirror` isn't going to overwrite + +00:28:51.059 --> 00:28:53.518 +the version of the file in my hyperdrive + +00:28:53.519 --> 00:28:57.278 +with the older local version. + +00:28:57.279 --> 00:29:00.778 +And finally, the emacsconf-preparation.org file + +00:29:00.779 --> 00:29:05.498 +hasn't been modified on either the hyperdrive + +00:29:05.499 --> 00:29:07.438 +or my local file system, + +00:29:07.439 --> 00:29:09.718 +and the timestamp is identical. + +00:29:09.719 --> 00:29:11.278 +So `hyperdrive-mirror` is going to + +00:29:11.279 --> 00:29:13.818 +ignore this file as well. + +00:29:13.819 --> 00:29:15.298 +So the only two files that are going + +00:29:15.299 --> 00:29:19.318 +to be uploaded now are the solar-oven-notes.md file + +00:29:19.319 --> 00:29:21.638 +and the fiddle-tunes.org file. + +00:29:21.639 --> 00:29:25.378 +I'll confirm that with `C-c C-c`. + +00:29:25.379 --> 00:29:26.578 +And now in my hyperdrive + +00:29:26.579 --> 00:29:28.518 +we see that there are four files. + +00:29:28.519 --> 00:29:31.678 +The solar-oven-notes.md file has been uploaded, + +00:29:31.679 --> 00:29:35.519 +and if I open the fiddle-tunes.org file, + +00:29:35.519 --> 00:29:39.478 +we see that it now contains the line "Tom and Jerry," + +00:29:39.479 --> 00:29:41.658 +which means that it was updated based on + +00:29:41.659 --> 00:29:47.098 +the change to the file on my local file system. + +00:29:47.099 --> 00:29:50.558 +This `hyperdrive-mirror` command is the command + +00:29:50.559 --> 00:29:54.138 +that we use to periodically update + +00:29:54.139 --> 00:29:56.598 +the USHIN hyperdrive with + +00:29:56.599 --> 00:30:00.318 +the contents of the USHIN website. + +00:30:00.319 --> 00:30:03.018 +There's going to be a link to the USHIN hyperdrive + +00:30:03.019 --> 00:30:06.818 +as well as the website at the end of the video. + +NOTE hyperdrive history + +00:30:06.819 --> 00:30:09.078 +Now I'll go into a little more detail + +00:30:09.079 --> 00:30:11.218 +about the Hyperdrive history buffer + +00:30:11.219 --> 00:30:15.818 +by showing off the README file in Prot's hyperdrive. + +00:30:15.819 --> 00:30:19.018 +I'll press `C-c h` to open the menu, + +00:30:19.019 --> 00:30:22.198 +`C-u h` to be prompted for a drive. + +00:30:22.199 --> 00:30:24.238 +I'll select Prot's drive, + +00:30:24.239 --> 00:30:26.738 +then I'll press `f` to jump to a file + +00:30:26.739 --> 00:30:28.738 +inside of Prot's drive, + +00:30:28.739 --> 00:30:32.398 +and then `RET` to go to the root directory. + +00:30:32.399 --> 00:30:35.338 +From here, I'll press `j` to jump to + +00:30:35.339 --> 00:30:37.298 +an item in his directory. + +00:30:37.299 --> 00:30:42.378 +I'll press `RET` on the README to load it. + +00:30:42.379 --> 00:30:44.118 +And then finally, I'll open up + +00:30:44.119 --> 00:30:49.578 +`C-c h` to look at the menu. + +00:30:49.579 --> 00:30:50.978 +Here, I see that I'm looking at + +00:30:50.979 --> 00:30:56.858 +the latest version of Prot's README.org file. + +00:30:56.859 --> 00:30:58.738 +I also see that the previous version + +00:30:58.739 --> 00:31:02.418 +of README.org is unknown. + +00:31:02.419 --> 00:31:05.358 +It's unknown because hyperdrives + +00:31:05.359 --> 00:31:07.818 +are sparsely replicated. + +00:31:07.819 --> 00:31:09.998 +That means that when my node loaded this + +00:31:09.999 --> 00:31:12.358 +README.org file, it didn't bother + +00:31:12.359 --> 00:31:13.998 +to load anything else. + +00:31:13.999 --> 00:31:16.058 +It didn't load the previous history + +00:31:16.059 --> 00:31:18.658 +or any other file in his drive. + +00:31:18.659 --> 00:31:20.758 +But now that I want to check out whether + +00:31:20.759 --> 00:31:26.198 +there is a previous version, I'll press `V p`. + +00:31:26.199 --> 00:31:28.918 +And when it loads, I see in the mode line down here + +00:31:28.919 --> 00:31:33.318 +that I'm now looking at version 25 of this drive. + +00:31:33.319 --> 00:31:36.498 +That means that I'm looking at the README.org file + +00:31:36.499 --> 00:31:39.458 +at version 25 of this drive. + +00:31:39.459 --> 00:31:42.018 +I'll open the menu again, and I see + +00:31:42.019 --> 00:31:47.718 +that the same version number is displayed here. + +00:31:47.719 --> 00:31:50.478 +The previous version, before version 25, + +00:31:50.479 --> 00:31:53.558 +is also unknown because we haven't bothered + +00:31:53.559 --> 00:31:56.858 +to load anything before version 25. + +00:31:56.859 --> 00:32:00.478 +I also see that the next version, after version 25, + +00:32:00.479 --> 00:32:02.418 +is the latest version. + +00:32:02.419 --> 00:32:06.718 +So I'll open that up by pressing `V n`. + +00:32:06.719 --> 00:32:10.998 +And now we are back where we started, + +00:32:10.999 --> 00:32:12.918 +at the latest version. + +00:32:12.919 --> 00:32:15.078 +But now we see that the previous version, + +00:32:15.079 --> 00:32:18.998 +the version before the latest version, is version 25. + +00:32:18.999 --> 00:32:24.299 +Because now that our node has loaded the previous version, + +00:32:24.300 --> 00:32:28.619 +it can display that information to us. + +00:32:28.620 --> 00:32:31.639 +From here, I'll open up the history buffer. + +00:32:31.640 --> 00:32:35.319 +I'll press `V h`. + +00:32:35.320 --> 00:32:40.319 +And I can see that there are two known existent + +00:32:40.320 --> 00:32:46.119 +ranges in Prot's README.org history. + +00:32:46.119 --> 00:32:50.119 +This means that the latest version of README.org + +00:32:50.120 --> 00:32:54.419 +was modified at version 39. + +00:32:54.420 --> 00:32:57.479 +And that Prot made four changes + +00:32:57.480 --> 00:33:00.319 +to other files in his hyperdrive + +00:33:00.320 --> 00:33:04.279 +besides the README.org file since then. + +00:33:04.280 --> 00:33:08.659 +Before that, the time that Prot modified + +00:33:08.660 --> 00:33:11.839 +the README.org file was at version 25. + +00:33:11.840 --> 00:33:15.199 +And then he made 13 other changes to other files + +00:33:15.200 --> 00:33:18.579 +inside of this drive. + +00:33:18.580 --> 00:33:20.258 +Before that, we don't know. + +00:33:20.259 --> 00:33:21.858 +We haven't loaded the history. + +00:33:21.859 --> 00:33:23.178 +But since we're curious, + +00:33:23.179 --> 00:33:27.919 +I'll hit `RET` on the unknown line. + +00:33:27.920 --> 00:33:32.139 +And now we see that in Prot's hyperdrive, + +00:33:32.140 --> 00:33:34.939 +the README.org file didn't exist + +00:33:34.940 --> 00:33:39.019 +for the first 22 revisions of his drive. + +00:33:39.020 --> 00:33:43.779 +Then Prot created it at version 23. + +00:33:43.780 --> 00:33:46.919 +Then again, at 25, made a change. + +00:33:46.920 --> 00:33:50.559 +And then made another change at 39. + +00:33:50.560 --> 00:33:54.419 +For good measure, I'll show you the diffs. + +00:33:54.420 --> 00:33:58.179 +The first diff just contains the entire file + +00:33:58.180 --> 00:34:05.119 +because the file didn't exist before version 23. + +00:34:05.119 --> 00:34:08.619 +Then, at version 25, Prot added a link + +00:34:08.620 --> 00:34:13.119 +to the COPYING.org file. + +00:34:13.119 --> 00:34:14.219 +And then, at 39, + +00:34:14.220 --> 00:34:17.339 +Prot changed the link to his own hyperdrive + +00:34:17.340 --> 00:34:20.879 +to be a relative link. + +NOTE Streaming video from hyperdrive + +00:34:20.880 --> 00:34:24.299 +Now, I'll stream a video from the USHIN hyperdrive + +00:34:24.300 --> 00:34:27.899 +that shows off a prototype interface we created + +00:34:27.900 --> 00:34:31.719 +for exploring networks of sources of information. + +00:34:31.720 --> 00:34:33.939 +I'll open up `hyperdrive-menu`. + +00:34:33.940 --> 00:34:37.219 +Press `C-u h` to be prompted for a drive. + +00:34:37.220 --> 00:34:39.739 +I'll select the USHIN drive. + +00:34:39.740 --> 00:34:41.939 +Press `f` to jump to a file in it. + +00:34:41.940 --> 00:34:46.559 +And then I'll jump to the media directory. + +00:34:46.560 --> 00:34:50.179 +Once it loads, I'll press `RET` on the video + +00:34:50.180 --> 00:34:54.559 +that I want to stream. + +00:34:54.560 --> 00:34:56.686 +[Voice from the video]: This is a demonstration + +00:34:56.686 --> 00:34:57.838 +of the subjective trust interface + +00:34:57.839 --> 00:35:02.499 +that the USHIN team built for the u4u.io web app. + +00:35:02.500 --> 00:35:04.079 +[Joseph]: There it is. + +00:35:04.080 --> 00:35:07.119 +Streaming a video from Hyperdrive. + +NOTE hyperdrive.el under the hood + +00:35:08.746 --> 00:35:13.026 +Here's how hyperdrive.el works under the hood. + +00:35:13.027 --> 00:35:14.726 +It uses plz [Please], + +00:35:14.727 --> 00:35:18.079 +the HTTP library that Adam Porter wrote, + +00:35:18.080 --> 00:35:22.719 +to send requests via curl to hyper-gateway. + +00:35:22.720 --> 00:35:26.579 +hyper-gateway is a program that Mauve Signweaver wrote, + +00:35:26.580 --> 00:35:30.759 +which runs a hyperdrive node under the hood. + +00:35:30.760 --> 00:35:34.039 +It also runs a local HTTP server, + +00:35:34.040 --> 00:35:38.459 +which accepts requests to control the node. + +00:35:38.460 --> 00:35:43.479 +For example, if hyperdrive.el wants to show a file + +00:35:43.480 --> 00:35:45.219 +from someone's hyperdrive, + +00:35:45.220 --> 00:35:49.119 +it sends the appropriate link via curl + +00:35:49.120 --> 00:35:52.959 +as a GET request to hyper-gateway. + +00:35:52.960 --> 00:35:57.239 +hyper-gateway then fetches the data from the network + +00:35:57.240 --> 00:35:59.339 +and returns it via curl, + +00:35:59.340 --> 00:36:03.939 +via plz, back to hyperdrive.el. + +00:36:03.940 --> 00:36:07.419 +If hyper-gateway already has a locally cached copy, + +00:36:07.420 --> 00:36:09.239 +it doesn't bother checking the network. + +00:36:09.240 --> 00:36:12.559 +It just sends it straight away. + +00:36:12.560 --> 00:36:15.879 +Likewise, if hyperdrive.el wants to add a file + +00:36:15.880 --> 00:36:20.199 +to a hyperdrive, it sends a PUT request. + +00:36:20.200 --> 00:36:24.979 +hyper-gateway is not installed as part of hyperdrive.el. + +00:36:24.980 --> 00:36:26.659 +It needs to be installed + +00:36:26.660 --> 00:36:35.739 +as a separate, executable program. + +00:36:35.740 --> 00:36:39.459 +We have plans to switch from using hyper-gateway + +00:36:39.460 --> 00:36:42.458 +to another program that Mauve Signweaver + +00:36:42.459 --> 00:36:47.838 +is working on, called hyper-sdk-rpc. + +00:36:47.839 --> 00:36:52.019 +hyper-sdk-rpc will give us more fine-grained control + +00:36:52.020 --> 00:36:54.699 +over the underlying Hyperdrive node, + +00:36:54.700 --> 00:36:56.819 +which will open up some new features. + +00:36:56.820 --> 00:37:00.899 +For example, we'll be able to rename files atomically, + +00:37:00.900 --> 00:37:03.419 +diff directories between versions, + +00:37:03.420 --> 00:37:11.219 +and list the peers that we're currently connected to. + +00:37:11.220 --> 00:37:13.359 +Here are some of the Emacs libraries + +00:37:13.360 --> 00:37:17.539 +that hyperdrive.el depends on. + +00:37:17.540 --> 00:37:22.399 +Hyperdrive.el uses plz to send HTTP requests + +00:37:22.400 --> 00:37:25.698 +to hyper-gateway. Check it out. + +00:37:25.699 --> 00:37:28.559 +It's on GNU ELPA. + +00:37:28.560 --> 00:37:33.639 +ewoc.el is a built-in library that's documented + +00:37:33.640 --> 00:37:37.339 +in the Emacs Lisp manual under the rather cryptic + +00:37:37.340 --> 00:37:41.599 +heading "Abstract Display Functions." + +00:37:41.600 --> 00:37:44.519 +Really, what it does is it allows you + +00:37:44.520 --> 00:37:49.999 +to map a data model to some display. + +00:37:50.000 --> 00:37:53.859 +What we do with it in hyperdrive.el is, + +00:37:53.860 --> 00:38:02.049 +in the directory view, we map directory entry items, + +00:38:02.049 --> 00:38:04.239 +files and directories, to display items. + +00:38:04.240 --> 00:38:08.700 +And ewoc.el makes it easy to update the display + +00:38:08.701 --> 00:38:14.760 +whenever the underlying data changes. + +00:38:14.761 --> 00:38:21.279 +Hyperdrive.el uses persist.el to store + +00:38:21.280 --> 00:38:25.639 +Hyperdrive metadata about known hyperdrives + +00:38:25.640 --> 00:38:29.480 +as well as version history between sessions, + +00:38:29.481 --> 00:38:32.120 +so that the data is cached + +00:38:32.121 --> 00:38:34.960 +when you log out and log back in. + +00:38:34.961 --> 00:38:38.720 +If you're going to be developing a program in Emacs + +00:38:38.721 --> 00:38:41.960 +for Emacs 29 or later, + +00:38:41.961 --> 00:38:44.940 +I recommend looking at multisession.el, + +00:38:44.941 --> 00:38:50.160 +because it's built-in, and it has some features + +00:38:50.161 --> 00:38:57.540 +that persist.el doesn't have. + +NOTE Next steps + +00:38:57.541 --> 00:39:00.000 +Thank you for listening to this talk. + +00:39:00.001 --> 00:39:03.680 +I hope you get a chance to try out hyperdrive.el. + +00:39:03.681 --> 00:39:08.620 +Here is a link to the hyperdrive.el manual + +00:39:08.621 --> 00:39:11.560 +in the USHIN hyperdrive. + +00:39:11.561 --> 00:39:14.980 +When you go to paste this link in, + +00:39:14.981 --> 00:39:18.920 +you'll need to combine it back into one line. + +00:39:18.921 --> 00:39:22.500 +This link is available in the hyperdrive.el manual, + +00:39:22.501 --> 00:39:26.660 +which is available from within a browser, + +00:39:26.661 --> 00:39:29.820 +at this link on the USHIN website. + +00:39:29.821 --> 00:39:32.960 +We also have a public conference room that you can join. + +00:39:32.961 --> 00:39:35.520 +It's an XMPP multi-user chat + +00:39:35.521 --> 00:39:39.780 +that the Sopranica team graciously makes available + +00:39:39.781 --> 00:39:41.620 +for us to use. + +00:39:41.621 --> 00:39:43.900 +There's also a Matrix bridge, + +00:39:43.901 --> 00:39:48.659 +if that's more your cup of tea. + +00:39:48.660 --> 00:39:52.820 +Thank you to the EmacsConf organizers. + +00:39:52.821 --> 00:39:55.160 +It's been a pleasure to participate, + +00:39:55.161 --> 00:39:57.613 +and I look forward to hearing the rest of the talks. + +00:39:57.614 --> 00:40:02.859 +Have a good day. diff --git a/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt b/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt new file mode 100644 index 00000000..7d2db739 --- /dev/null +++ b/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt @@ -0,0 +1,353 @@ +WEBVTT + + +00:00:03.340 --> 00:00:03.480 +Today I will share a nice workflow I have + +00:00:04.400 --> 00:00:04.900 +developed for stream of consciousness + +00:00:06.560 --> 00:00:06.759 +journaling. The goal of stream of + +00:00:08.080 --> 00:00:08.240 +consciousness journaling is to get your + +00:00:09.960 --> 00:00:10.080 +thoughts on the screen as effectively and + +00:00:10.679 --> 00:00:11.040 +efficiently as possible. + +00:00:12.780 --> 00:00:12.980 +These 2 features when combined reinforce each + +00:00:14.860 --> 00:00:15.060 +other and let you hear yourself think in a + +00:00:15.960 --> 00:00:16.460 +very efficient manner, + +00:00:17.220 --> 00:00:17.580 +increasing the number, + +00:00:18.960 --> 00:00:19.160 +quality, and types of thoughts you can get + +00:00:21.100 --> 00:00:21.260 +out of it. The tools I will be using for this + +00:00:22.680 --> 00:00:23.099 +are Emacs, KL line from the Hyperbolt + +00:00:24.080 --> 00:00:24.279 +package, centered cursor mode, + +00:00:25.119 --> 00:00:25.619 +Olivetti mode, and optionally, + +00:00:26.820 --> 00:00:27.240 +voice to text. Additionally, + +00:00:28.939 --> 00:00:29.119 +you can see my commands and key bindings on + +00:00:31.500 --> 00:00:31.680 +the right. I will start off by showing a + +00:00:32.119 --> 00:00:32.619 +typing demo + +00:00:48.120 --> 00:00:48.620 +about how my day went. + +00:01:12.900 --> 00:01:13.180 +There are certain functionalities for stream + +00:01:14.640 --> 00:01:14.960 +of consciousness journaling that are desired + +00:01:15.900 --> 00:01:16.320 +or detrimental to the process. + +00:01:17.040 --> 00:01:17.540 +Stream of thought functionalities, + +00:01:26.000 --> 00:01:26.240 +things I want. The ability to optionally use + +00:01:27.720 --> 00:01:28.020 +speech to text. I do this by using + +00:01:29.380 --> 00:01:29.880 +Nerdictation, a Python program. + +00:01:32.320 --> 00:01:32.480 +I am still experimenting with this as it + +00:01:34.120 --> 00:01:34.200 +changes the quality and types of thoughts you + +00:01:35.280 --> 00:01:35.720 +can get out of stream of consciousness + +00:01:37.680 --> 00:01:37.880 +journaling. I am still looking for better + +00:01:39.900 --> 00:01:40.240 +ways of doing this. The ability to easily + +00:01:41.680 --> 00:01:41.880 +organize and split off my thoughts by + +00:01:43.040 --> 00:01:43.540 +creating and manipulating outlines. + +00:01:46.280 --> 00:01:46.560 +Creating them in real time is needed for live + +00:01:48.240 --> 00:01:48.720 +journaling and allows for later editing + +00:01:53.140 --> 00:01:53.300 +really easily. I showed off some of these + +00:01:56.479 --> 00:01:56.740 +commands before. To just write words without + +00:01:57.540 --> 00:01:58.040 +worrying about format. + +00:02:00.160 --> 00:02:00.480 +To not worry about scrolling, + +00:02:01.640 --> 00:02:02.140 +I use centered cursor mode. + +00:02:05.200 --> 00:02:05.660 +To not worry about lines, + +00:02:06.960 --> 00:02:07.460 +I use the KOutline auto-filling + +00:02:09.360 --> 00:02:09.800 +functionality. To not worry about pressing + +00:02:11.400 --> 00:02:11.720 +Enter, and to have a nice looking journal + +00:02:12.660 --> 00:02:13.160 +with hard returns afterwards. + +00:02:19.060 --> 00:02:19.320 +Manually filling is needed with spacing when + +00:02:22.160 --> 00:02:22.660 +it is wrong. I do that with metaJ. + +00:02:30.680 --> 00:02:31.180 +Counterproductive functionality. + +00:02:33.480 --> 00:02:33.680 +Spell checking. While this is useful for + +00:02:35.500 --> 00:02:35.680 +editing, it is not useful for stream of + +00:02:36.220 --> 00:02:36.720 +consciousness journaling. + +00:02:39.020 --> 00:02:39.140 +Having this on or off conditionally while you + +00:02:40.760 --> 00:02:40.940 +are live journaling is a killer feature of + +00:02:48.040 --> 00:02:48.460 +Emacs. Reading slash editing the journal. + +00:02:50.240 --> 00:02:50.380 +Part of the value proposition of this is to + +00:02:51.420 --> 00:02:51.820 +listen to what you are thinking, + +00:02:52.680 --> 00:02:53.180 +so this is needed functionality. + +00:02:55.580 --> 00:02:55.680 +You cannot listen very well when you are + +00:02:57.360 --> 00:02:57.720 +speaking, and the converse is true as well. + +00:02:59.240 --> 00:02:59.440 +You cannot speak very well when you are + +00:03:01.280 --> 00:03:01.440 +listening, decreasing what you can get out of + +00:03:04.120 --> 00:03:04.240 +it. Features when editing or listening to + +00:03:05.200 --> 00:03:05.700 +your journal. Spell checking. + +00:03:07.780 --> 00:03:08.280 +I use the Spackage Spellfoo, + +00:03:20.740 --> 00:03:20.980 +but there are others. I use multiple panes to + +00:03:25.040 --> 00:03:25.440 +read and edit. I use a combination of follow + +00:03:27.940 --> 00:03:28.440 +mode and some of my custom functions. + +00:03:31.860 --> 00:03:32.360 +These are what I use right here. + +00:03:53.360 --> 00:03:53.480 +The ability to change the view specs of the + +00:03:59.340 --> 00:03:59.840 +document. Stuff like, toggling blank lines. + +00:04:08.300 --> 00:04:08.800 +Show the first heading of everything. + +00:04:18.620 --> 00:04:18.839 +You can also export the KOutline pages to + +00:04:21.560 --> 00:04:21.779 +HTML for other people to read or another way + +00:04:29.440 --> 00:04:29.940 +to look at it. Easy manipulation of cells. + +00:04:34.040 --> 00:04:34.160 +You use the Alt and arrow keys just like in + +00:04:37.200 --> 00:04:37.700 +Orm mode to delete cells easily. + +00:04:47.020 --> 00:04:47.180 +The ability to manually reformat KL9 cells in + +00:04:49.540 --> 00:04:49.760 +addition to auto formatting of the cells for + +00:04:50.860 --> 00:04:51.180 +when spacing looks off. + +00:04:53.900 --> 00:04:54.080 +MetaJ is nice, and auto-filling is also nice + +00:04:54.920 --> 00:04:55.420 +for having multiple pages. + +00:04:58.660 --> 00:04:59.020 +Why do I use these tools versus other common + +00:05:06.060 --> 00:05:06.200 +tools? K-Outline vs. Playtext Writing in + +00:05:08.460 --> 00:05:08.600 +outlines helps me easily structure my + +00:05:09.960 --> 00:05:10.280 +thoughts in a way that is easy to write, + +00:05:12.500 --> 00:05:12.800 +read, and edit. Org Mode vs. + +00:05:15.360 --> 00:05:15.600 +K-Outline Org Mode gives me lots of ways to + +00:05:17.120 --> 00:05:17.620 +structure my journal slash document. + +00:05:19.600 --> 00:05:20.100 +While this is great for a lot of things, + +00:05:21.540 --> 00:05:22.040 +for stream of consciousness journaling, + +00:05:24.960 --> 00:05:25.140 +this causes decision fatigue and loss of + +00:05:30.320 --> 00:05:30.720 +concentration. Types of questions I get when + +00:05:31.960 --> 00:05:32.460 +structuring an org-mode document? + +00:05:35.080 --> 00:05:35.400 +Do I keep everything in a heading or below + +00:05:36.100 --> 00:05:36.600 +the heading in paragraphs? + +00:05:38.080 --> 00:05:38.240 +How do I handle new lines? + +00:05:40.240 --> 00:05:40.520 +Do I just use visual line mode with no hard + +00:05:42.520 --> 00:05:42.880 +returns? Or if I make hard returns, + +00:05:44.800 --> 00:05:45.300 +on what line number do I do them? + +00:05:50.080 --> 00:05:50.460 +More visual line nodes in org-mode documents + +00:05:52.660 --> 00:05:53.160 +like a potential org ID in your property + +00:05:57.720 --> 00:05:57.940 +stores. While a lot of the above is really + +00:05:59.880 --> 00:06:00.060 +nice if you are making something like a + +00:06:01.640 --> 00:06:02.060 +website to present to other people, + +00:06:04.080 --> 00:06:04.340 +these features are counterproductive to + +00:06:05.040 --> 00:06:05.540 +stream-of-thought journaling. + +00:06:08.900 --> 00:06:09.200 +Org mode is also top-notch for other things + +00:06:11.780 --> 00:06:12.280 +such as GTD. I don't think org mode has + +00:06:13.820 --> 00:06:14.280 +bindings to create child, + +00:06:15.460 --> 00:06:15.960 +same-level, and parent cells. + +00:06:19.340 --> 00:06:19.600 +Centered cursor mode versus scroll lock mode + +00:06:22.640 --> 00:06:22.960 +built-in. Scroll lock mode changes its place + +00:06:28.180 --> 00:06:28.380 +when you move the cursor from the bottom or + +00:06:30.080 --> 00:06:30.280 +the top of the page. Centered cursor mode + +00:06:33.420 --> 00:06:33.680 +will reliably fix itself to the center when + +00:06:36.280 --> 00:06:36.780 +the cursor position is not there. diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt new file mode 100644 index 00000000..d48cc06d --- /dev/null +++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt @@ -0,0 +1,1910 @@ +WEBVTT + + +00:00:13.099 --> 00:00:13.599 +[Speaker 0]: Okay. Hello, everyone. + +00:00:16.560 --> 00:00:17.060 +I think this is the start of the Q&A session. + +00:00:25.119 --> 00:00:25.599 +So people can just ask me questions here. + +00:00:28.259 --> 00:00:28.380 +Or I think maybe these questions are going to + +00:00:30.560 --> 00:00:30.980 +be read by someone. Yes, + +00:00:34.680 --> 00:00:35.060 +thank you. Should I start doing that? + +00:00:39.280 --> 00:00:39.400 +I also know that there's questions in the + +00:00:41.320 --> 00:00:41.480 +either pad room, so I could start out + +00:00:42.280 --> 00:00:42.780 +answering those as well. + +00:00:45.020 --> 00:00:45.300 +[Speaker 1]: Right, sure. Whichever way you prefer. + +00:00:46.860 --> 00:00:47.220 +If you prefer to read the questions yourself, + +00:00:48.940 --> 00:00:49.080 +by all means, or if you would prefer me to + +00:00:50.080 --> 00:00:50.280 +read them to you, that also works. + +00:00:50.580 --> 00:00:50.920 +[Speaker 2]: Oh, I see. + +00:00:51.600 --> 00:00:51.760 +[Speaker 0]: Why don't you read them to me? + +00:00:53.260 --> 00:00:53.760 +I think it'll just be more interesting then. + +00:00:56.820 --> 00:00:57.160 +[Speaker 1]: Sure. OK, let's see. The first question is, + +00:00:58.360 --> 00:00:58.860 +what is your use case for embedding, + +00:01:00.060 --> 00:01:00.560 +mainly for searching? + +00:01:06.180 --> 00:01:06.340 +[Speaker 0]: Yeah, I mean, I think the use case really is + +00:01:12.100 --> 00:01:12.320 +searching. And I think it is very useful when + +00:01:15.060 --> 00:01:15.320 +you're searching for something in a vague + +00:01:18.280 --> 00:01:18.780 +way. Just to give you an example, + +00:01:23.860 --> 00:01:24.360 +I have a note system called EKG. + +00:01:25.760 --> 00:01:26.260 +I type all my notes on it. + +00:01:28.620 --> 00:01:29.120 +You can find it on GitHub and Melba. + +00:01:34.140 --> 00:01:34.400 +But I wrote something at some point a year + +00:01:35.840 --> 00:01:36.020 +ago or something. I wrote something that I + +00:01:36.600 --> 00:01:36.980 +just vaguely remembered. + +00:01:38.800 --> 00:01:38.940 +Oh, this was about a certain kind of + +00:01:41.580 --> 00:01:41.760 +communication. I wanted communicating to + +00:01:43.280 --> 00:01:43.479 +large audiences. There's some interesting tip + +00:01:44.700 --> 00:01:45.060 +that I wrote down that was really cool. + +00:01:49.920 --> 00:01:50.080 +And I was like, well, I need to find it. + +00:01:52.260 --> 00:01:52.640 +So I did an embedding search for something + +00:01:55.479 --> 00:01:55.979 +like, you know, tips for communicating. + +00:01:58.979 --> 00:01:59.100 +Like those words may not have been in what I + +00:02:00.020 --> 00:02:00.520 +was trying to find at all, + +00:02:02.680 --> 00:02:03.180 +But it was able to find it. + +00:02:05.840 --> 00:02:06.260 +And that is something that's very hard to do + +00:02:07.200 --> 00:02:07.360 +in other ways. Like, you know, + +00:02:08.520 --> 00:02:08.720 +if you had to do this with normal search, + +00:02:09.199 --> 00:02:09.660 +you have to do synonyms. + +00:02:10.940 --> 00:02:11.200 +And like maybe those synonyms wouldn't cover + +00:02:11.960 --> 00:02:12.340 +it. Like with embedding, + +00:02:13.940 --> 00:02:14.160 +you can basically get at like the vague + +00:02:14.960 --> 00:02:15.460 +sentiment. You're like, + +00:02:17.320 --> 00:02:17.560 +you know, you're, you know, + +00:02:19.520 --> 00:02:19.700 +you can really query on like what things are + +00:02:21.760 --> 00:02:22.260 +about as opposed to what words they have. + +00:02:25.600 --> 00:02:26.100 +Also, it's super good for similarity search. + +00:02:27.720 --> 00:02:27.900 +So you could say, look, + +00:02:30.040 --> 00:02:30.240 +I have a bunch of things that are encoded + +00:02:31.400 --> 00:02:31.900 +with embeddings that I want to show. + +00:02:34.120 --> 00:02:34.280 +For example, you can make an embedding for + +00:02:35.220 --> 00:02:35.380 +every buffer. You'd be like, + +00:02:37.060 --> 00:02:37.200 +well, show me buffers that are similar to + +00:02:38.740 --> 00:02:38.980 +this buffer. That doesn't sound super useful, + +00:02:40.440 --> 00:02:40.940 +but this is the kind of thing you could do. + +00:02:45.300 --> 00:02:45.480 +And so if you have a bunch of notes or + +00:02:46.720 --> 00:02:46.920 +something else that you want to search on, + +00:02:48.240 --> 00:02:48.740 +you'd be like, what's similar to this buffer? + +00:02:51.500 --> 00:02:51.760 +Or what notes are similar to each other? + +00:02:53.040 --> 00:02:53.540 +What buffers are similar to each other? + +00:02:55.380 --> 00:02:55.880 +It's super good for this sort of thing. + +00:03:00.780 --> 00:03:01.280 +And it's also good for this kind of retrieval + +00:03:03.080 --> 00:03:03.520 +augmented generation, where you sort of, + +00:03:05.080 --> 00:03:05.280 +you retrieve things and the purpose is not + +00:03:06.600 --> 00:03:06.880 +for you to see them, but then you pass that + +00:03:12.040 --> 00:03:12.180 +to the LLM. And then it's able to be a little + +00:03:14.340 --> 00:03:14.800 +bit more accurate because it has the actual + +00:03:15.760 --> 00:03:16.260 +text that you're trying to, + +00:03:18.960 --> 00:03:19.180 +that is relevant, and it can cite from and + +00:03:20.720 --> 00:03:20.820 +things like that. And then it could give you + +00:03:22.260 --> 00:03:22.660 +a much better answer that's kind of, + +00:03:25.520 --> 00:03:25.680 +you know, not just from its own little neural + +00:03:26.320 --> 00:03:26.820 +nets and memory. + +00:03:31.920 --> 00:03:32.120 +[Speaker 1]: Cool, thanks. Let's see, + +00:03:35.740 --> 00:03:36.100 +next question. What do you think about embed + +00:03:40.160 --> 00:03:40.660 +Emacs manual versus GPT's Emacs manual? + +00:03:45.480 --> 00:03:45.660 +[Speaker 0]: I'm not exactly sure what this question is + +00:03:46.980 --> 00:03:47.480 +trying to say. So I mean, + +00:03:51.000 --> 00:03:51.140 +if someone wrote that and wants to expand on + +00:03:55.080 --> 00:03:55.320 +it a little bit, but I think that maybe + +00:03:58.420 --> 00:03:58.920 +you're saying like you could embed, + +00:04:00.280 --> 00:04:00.780 +have embeddings for like various, + +00:04:02.520 --> 00:04:02.720 +like every paragraph or something of the + +00:04:04.540 --> 00:04:04.680 +Emacs manual. But it's also the case that + +00:04:06.500 --> 00:04:07.000 +like GPT is already for sure already read it, + +00:04:09.760 --> 00:04:09.960 +right? And so you could ask questions that + +00:04:13.460 --> 00:04:13.780 +are about Emacs and our ELISP or whatever + +00:04:15.200 --> 00:04:15.700 +part of the manual you want to find. + +00:04:19.760 --> 00:04:20.240 +And it will do a reasonably good job, + +00:04:22.280 --> 00:04:22.780 +especially the better models will do a + +00:04:24.620 --> 00:04:24.940 +reasonably good job of saying you something + +00:04:26.040 --> 00:04:26.540 +that is vaguely accurate. + +00:04:29.440 --> 00:04:29.860 +But if you do this retrieval augmented + +00:04:30.580 --> 00:04:31.080 +generation with embeddings, + +00:04:32.640 --> 00:04:33.140 +you can get something that is very accurate. + +00:04:36.700 --> 00:04:36.960 +At least I think. I haven't tried it, + +00:04:38.760 --> 00:04:39.020 +but this is a technique that works in other + +00:04:43.040 --> 00:04:43.260 +similar cases. So you can also imagine like, + +00:04:44.320 --> 00:04:44.500 +oh, this whole thing I said, + +00:04:47.860 --> 00:04:48.120 +like, oh, you can query for vague things and + +00:04:49.140 --> 00:04:49.600 +get parts of the manual, + +00:04:52.680 --> 00:04:53.000 +perhaps. I'm not exactly sure if that would + +00:04:55.120 --> 00:04:55.520 +be useful, but maybe. Usually when I'm + +00:04:57.040 --> 00:04:57.180 +looking things up in the Emacs manual or + +00:04:58.320 --> 00:04:58.780 +Elist manual, I have something extremely + +00:05:00.020 --> 00:05:00.300 +specific and I kind of know where to look. + +00:05:02.960 --> 00:05:03.080 +But having other ways to get at this + +00:05:04.000 --> 00:05:04.500 +information is always good. + +00:05:10.240 --> 00:05:10.740 +[Speaker 1]: Right. Looks like they added a clarification + +00:05:12.280 --> 00:05:12.720 +if you would like to read that yourself, + +00:05:14.180 --> 00:05:14.680 +or would you like me to read it for you? + +00:05:17.640 --> 00:05:18.140 +[Speaker 0]: Yeah. Yes, OK. It says, + +00:05:20.460 --> 00:05:20.740 +I've never tried. Yeah, + +00:05:21.500 --> 00:05:21.820 +the question is like OK, + +00:05:23.100 --> 00:05:23.240 +there is a difference between the kind of + +00:05:23.860 --> 00:05:24.360 +thing as I just described. + +00:05:26.200 --> 00:05:26.600 +I have not tried the difference with the EMAX + +00:05:31.560 --> 00:05:31.980 +manual itself. It'd be interesting to see + +00:05:33.700 --> 00:05:33.960 +what this is, but I would expect like these + +00:05:35.140 --> 00:05:35.600 +techniques, the retrieval augmented + +00:05:38.840 --> 00:05:39.340 +generation is generally pretty good. + +00:05:41.240 --> 00:05:41.740 +And I suspect it would, + +00:05:43.580 --> 00:05:43.780 +I would bet money on the fact that it's gonna + +00:05:45.820 --> 00:05:46.240 +give you, you know, better results than just, + +00:05:48.160 --> 00:05:48.360 +you know, doing a free form query without any + +00:05:49.440 --> 00:05:49.940 +retrieval augmented generation. + +00:05:54.240 --> 00:05:54.640 +[Speaker 1]: Cool. Let's see. Next question. + +00:05:56.380 --> 00:05:56.880 +When deferring commit messages to an LLM, + +00:05:59.700 --> 00:05:59.920 +what, if anything, do you find you might have + +00:06:02.940 --> 00:06:03.440 +[Speaker 0]: lost? Yeah, it's a good question. + +00:06:06.060 --> 00:06:06.560 +When deferring anything to a computer, + +00:06:08.860 --> 00:06:09.360 +like, you know, I used to have to remember + +00:06:11.200 --> 00:06:11.700 +how to get places, and now, + +00:06:14.540 --> 00:06:15.040 +you know, on the few occasions which I drive, + +00:06:16.560 --> 00:06:16.720 +like, It could just tell me how to get + +00:06:21.960 --> 00:06:22.280 +places. So similar things could occur here + +00:06:24.960 --> 00:06:25.460 +where like, okay, I'm just leaving the LLM. + +00:06:27.380 --> 00:06:27.680 +And so I'm kind of missing out on some + +00:06:30.040 --> 00:06:30.220 +opportunity to think coherently about a + +00:06:32.440 --> 00:06:32.680 +particular commit. Particular commits are + +00:06:36.140 --> 00:06:36.540 +kind of low level. I don't think it's usually + +00:06:39.340 --> 00:06:39.840 +relatively obvious and what they're doing. + +00:06:42.600 --> 00:06:42.800 +And in this case, I think there's not much + +00:06:44.220 --> 00:06:44.540 +loss. But for sure, in other cases, + +00:06:46.400 --> 00:06:46.900 +if you're starting to get into situations + +00:06:48.640 --> 00:06:48.800 +where it's writing your emails and all this + +00:06:52.920 --> 00:06:53.300 +stuff. First of all, it's in 1 sense, + +00:06:55.580 --> 00:06:56.040 +I'm not sure you might be losing something by + +00:06:57.520 --> 00:06:57.780 +delegating things. On the other hand, + +00:06:59.120 --> 00:06:59.280 +you know, when you're interacting with these + +00:07:01.280 --> 00:07:01.560 +LLMs, you have to be extremely specific about + +00:07:03.120 --> 00:07:03.240 +what you want, or else it's just not going to + +00:07:07.540 --> 00:07:07.680 +do a good job. And that might actually be a + +00:07:09.440 --> 00:07:09.860 +good thing. So the question might be that + +00:07:11.820 --> 00:07:12.240 +maybe you might gain things by using an LLM + +00:07:13.860 --> 00:07:14.060 +to do your work. It might not actually even + +00:07:15.060 --> 00:07:15.400 +save you that much time, + +00:07:18.480 --> 00:07:18.640 +at least initially, because you have to kind + +00:07:20.460 --> 00:07:20.660 +of practice again super specific about what + +00:07:22.740 --> 00:07:22.900 +you want to get out of the output it's going + +00:07:26.940 --> 00:07:26.980 +to give you so like oh I'm you know maybe you + +00:07:29.600 --> 00:07:29.820 +know you're on the emacs devel mailing list + +00:07:31.780 --> 00:07:31.980 +and you're like okay write this email about + +00:07:34.000 --> 00:07:34.140 +this about this And here's what I want to + +00:07:35.370 --> 00:07:35.460 +say. And here's the kind of tone I want to + +00:07:36.020 --> 00:07:36.420 +use. And here's the like, + +00:07:37.660 --> 00:07:38.160 +oh, you might want to specify like everything + +00:07:39.620 --> 00:07:40.120 +that you kind of want to get into this. + +00:07:42.180 --> 00:07:42.680 +Usually it's easier just to write the email. + +00:07:45.600 --> 00:07:46.100 +But I think that practice of kind of + +00:07:48.080 --> 00:07:48.420 +understanding what you want is not something + +00:07:52.680 --> 00:07:53.180 +you normally do. And I think it's going to be + +00:07:56.040 --> 00:07:56.480 +an interesting exercise that will help people + +00:07:57.280 --> 00:07:57.540 +understand. That said, + +00:07:58.860 --> 00:07:59.020 +I haven't done that much of that, + +00:07:59.900 --> 00:08:00.040 +so I can't say, oh, yeah, + +00:08:01.080 --> 00:08:01.440 +I've done this and it works for me. + +00:08:03.000 --> 00:08:03.120 +Maybe. I think it's an interesting thing to + +00:08:03.120 --> 00:08:03.620 +explore. + +00:08:07.720 --> 00:08:08.220 +[Speaker 1]: Sure. Thanks. Let's see. + +00:08:10.840 --> 00:08:11.140 +Let's see. Can you share your font settings + +00:08:13.440 --> 00:08:13.740 +in your Emacs config? Those are some nice + +00:08:14.200 --> 00:08:14.700 +fonts for reading. + +00:08:18.900 --> 00:08:19.200 +[Speaker 0]: Yeah, I think I was using Menlo at the time. + +00:08:20.840 --> 00:08:20.980 +Unfortunately, I don't save those kinds of + +00:08:21.940 --> 00:08:22.200 +things, like a history of this. + +00:08:24.000 --> 00:08:24.500 +I've kind of switched now to, + +00:08:27.340 --> 00:08:27.540 +what was that? I think I wrote it down in + +00:08:29.440 --> 00:08:29.940 +the, I switched to MunaSpace, + +00:08:31.920 --> 00:08:32.420 +which just came out like a week or 2 ago, + +00:08:33.340 --> 00:08:33.840 +and is also pretty cool. + +00:08:35.440 --> 00:08:35.940 +So I think it's Menlo. + +00:08:37.380 --> 00:08:37.760 +The internal question, + +00:08:38.400 --> 00:08:38.900 +what font are you using? + +00:08:42.020 --> 00:08:42.340 +[Speaker 1]: Indeed, yeah. It looks like someone guessed + +00:08:43.780 --> 00:08:44.280 +as well that it might be Menlo. + +00:08:47.680 --> 00:08:48.040 +OK, Cool. Yeah, next question. + +00:08:48.900 --> 00:08:49.400 +In terms of standardization, + +00:08:53.260 --> 00:08:53.520 +do you see a need for the medium to large + +00:08:55.840 --> 00:08:56.160 +scale effort needed? And then they also + +00:08:56.960 --> 00:08:57.460 +elaborate about it. + +00:09:03.600 --> 00:09:04.100 +[Speaker 0]: Yeah, I mean, I do think, + +00:09:06.040 --> 00:09:06.300 +I don't know if it's large scale, + +00:09:08.000 --> 00:09:08.500 +but at least it's probably medium scale. + +00:09:10.320 --> 00:09:10.520 +There's a lot of things that are missing that + +00:09:12.260 --> 00:09:12.400 +we don't have right now in emacs when you're + +00:09:13.660 --> 00:09:14.160 +dealing with LLMs. 1 is, + +00:09:18.240 --> 00:09:18.420 +a prompting system. And by that, + +00:09:21.820 --> 00:09:22.020 +I mean, you know, prompts are just like big + +00:09:24.520 --> 00:09:24.720 +blocks of text, but there's also senses that + +00:09:28.260 --> 00:09:28.420 +like prompts need to be composable and you + +00:09:30.480 --> 00:09:30.660 +need to be able to iterate on parts of the + +00:09:36.600 --> 00:09:37.100 +prompt. And so it's also customizable. + +00:09:38.940 --> 00:09:39.060 +Users might want to customize it. + +00:09:41.260 --> 00:09:41.360 +On the other hand, it's not super easy to + +00:09:43.820 --> 00:09:44.320 +write the prompt. So you want really good + +00:09:47.900 --> 00:09:48.040 +defaults. So the whole prompt system is kind + +00:09:51.360 --> 00:09:51.460 +of complicated. That needs to be kind of + +00:09:52.580 --> 00:09:52.760 +standardized, because I don't think there's + +00:09:54.380 --> 00:09:54.720 +any tools for doing something like that right + +00:09:58.380 --> 00:09:58.880 +now. I personally use my system, + +00:10:00.220 --> 00:10:00.600 +my note system for EKG. + +00:10:01.720 --> 00:10:01.920 +I don't think that's appropriate for + +00:10:02.800 --> 00:10:03.120 +everyone, but it does, + +00:10:04.480 --> 00:10:04.640 +I did write it to have some of these + +00:10:06.540 --> 00:10:06.760 +capabilities of composability that I think + +00:10:08.360 --> 00:10:08.860 +are useful for a prompt generation. + +00:10:11.940 --> 00:10:12.280 +It'd be nice to have a system like that, + +00:10:15.660 --> 00:10:16.160 +but for general use. I don't, + +00:10:17.840 --> 00:10:18.060 +this is something I've been meaning to think + +00:10:18.840 --> 00:10:19.000 +about, like how to do it, + +00:10:19.760 --> 00:10:19.920 +but like this, you know, + +00:10:21.260 --> 00:10:21.660 +if someone's interested in getting this area, + +00:10:26.120 --> 00:10:26.420 +like, I would love to chat about that or, + +00:10:27.600 --> 00:10:27.980 +you know, I think there's a lot of + +00:10:31.020 --> 00:10:31.260 +interesting ideas that we could have to have + +00:10:34.080 --> 00:10:34.540 +a system that allows us to make progress + +00:10:38.860 --> 00:10:39.360 +here. And also, I think there's more to + +00:10:40.520 --> 00:10:40.900 +standardization to be done. + +00:10:42.820 --> 00:10:43.140 +1 thing I'd also like to see that we haven't + +00:10:47.020 --> 00:10:47.220 +done yet is a system for standardizing on + +00:10:48.060 --> 00:10:48.560 +getting structured output. + +00:10:49.640 --> 00:10:50.140 +This is gonna be super useful. + +00:10:52.280 --> 00:10:52.780 +I have this for open AIs API, + +00:10:53.560 --> 00:10:54.060 +cause they support it. + +00:10:55.940 --> 00:10:56.040 +And it's really nice, cause then you can + +00:10:57.440 --> 00:10:57.660 +write elist functions that like, + +00:10:59.380 --> 00:10:59.880 +okay, I'm going to call the LLM. + +00:11:00.760 --> 00:11:01.000 +I'm gonna get structured output. + +00:11:02.040 --> 00:11:02.160 +I know what that structure is going to be. + +00:11:03.480 --> 00:11:03.680 +It's not going to be just a big block of + +00:11:05.660 --> 00:11:06.040 +text. I could turn it into a, + +00:11:07.000 --> 00:11:07.480 +you know, a P list or something. + +00:11:09.280 --> 00:11:09.480 +And then I could get the values out of that P + +00:11:11.880 --> 00:11:12.260 +list. And I know that way I could do, + +00:11:14.220 --> 00:11:14.720 +I could write actual apps that are, + +00:11:18.300 --> 00:11:18.720 +you know, very, very sort of, + +00:11:20.200 --> 00:11:20.680 +you know, useful for very specific purposes + +00:11:21.900 --> 00:11:22.400 +and not just for text generation. + +00:11:24.000 --> 00:11:24.320 +And I think that's 1 of the most important + +00:11:27.100 --> 00:11:27.540 +things we want to do. And I have some ideas + +00:11:28.840 --> 00:11:29.160 +about how to do it. I just haven't pursued + +00:11:31.640 --> 00:11:32.040 +those yet. But if other people have ideas, + +00:11:34.340 --> 00:11:34.540 +I think this would be really interesting to + +00:11:35.520 --> 00:11:36.020 +add to the LLM package. + +00:11:37.260 --> 00:11:37.760 +So contact me there. + +00:11:42.100 --> 00:11:42.600 +[Speaker 1]: Awesome. Quick note before we continue. + +00:11:44.440 --> 00:11:44.540 +So I'm not sure how long we're going to be on + +00:11:46.040 --> 00:11:46.280 +stream for, because this is the last talk + +00:11:48.640 --> 00:11:49.120 +before the break. If we are on the stream + +00:11:49.840 --> 00:11:50.200 +long-term, then great. + +00:11:51.820 --> 00:11:52.300 +But if not, folks are welcome to continue + +00:11:53.320 --> 00:11:53.680 +writing questions on the pad. + +00:11:55.140 --> 00:11:55.280 +And hopefully, Andrew will get to them at + +00:11:58.020 --> 00:11:58.280 +some point. Or if Andrew maybe has some extra + +00:11:59.960 --> 00:12:00.140 +time available and wants to stay on + +00:12:01.640 --> 00:12:01.920 +BigBlueButton here, then folks are also + +00:12:03.940 --> 00:12:04.340 +welcome to join here and chat with Andrew + +00:12:08.940 --> 00:12:09.240 +directly as well. Okay, + +00:12:10.740 --> 00:12:10.900 +awesome. So yeah, the next question is, + +00:12:12.040 --> 00:12:12.400 +what are your thoughts on the carbon + +00:12:14.060 --> 00:12:14.560 +footprint of LLM usage? + +00:12:17.200 --> 00:12:17.700 +[Speaker 0]: Yeah, it's a really interesting question. + +00:12:23.180 --> 00:12:23.360 +I don't have any particular knowledge or + +00:12:25.440 --> 00:12:25.580 +opinions about that. It's something I think + +00:12:26.980 --> 00:12:27.180 +we should all be educating ourselves more + +00:12:32.240 --> 00:12:32.380 +about. It is really, I mean, + +00:12:33.040 --> 00:12:33.220 +there's 2 parts of this, + +00:12:35.380 --> 00:12:35.500 +right? They take a, there's a huge amount of + +00:12:37.160 --> 00:12:37.360 +carbon footprint involved in training these + +00:12:38.720 --> 00:12:39.220 +things. Then running them is relatively + +00:12:42.540 --> 00:12:42.880 +lightweight. So the question is not + +00:12:44.440 --> 00:12:44.920 +necessarily like once it's trained, + +00:12:46.480 --> 00:12:46.640 +like I don't feel like it's a big deal to + +00:12:48.280 --> 00:12:48.560 +keep using it, but like training these things + +00:12:50.680 --> 00:12:51.180 +is kind of like the big carbon cost of it. + +00:12:53.680 --> 00:12:54.160 +But like right now, the way everything's + +00:12:56.040 --> 00:12:56.260 +going, like every, you know, + +00:12:59.060 --> 00:12:59.560 +all, you know, the top 5 or 6 tech companies + +00:13:00.900 --> 00:13:01.400 +are all training their LLMs, + +00:13:03.580 --> 00:13:03.740 +and this is all costing a giant amount of + +00:13:06.820 --> 00:13:07.060 +carbon probably. On the other hand these same + +00:13:08.560 --> 00:13:08.680 +companies are pretty good about using the + +00:13:10.260 --> 00:13:10.440 +least amount of carbon necessary you know + +00:13:12.340 --> 00:13:12.740 +they have their own their tricks for doing + +00:13:13.260 --> 00:13:13.760 +things very efficiently. + +00:13:22.100 --> 00:13:22.360 +[Speaker 1]: Cool next question, LLMs are slow and + +00:13:24.000 --> 00:13:24.340 +responding. Do you think Emacs should provide + +00:13:26.680 --> 00:13:27.180 +more async primitives to keep it responsive? + +00:13:29.380 --> 00:13:29.880 +Like the URL retrieve is quite bad at + +00:13:31.720 --> 00:13:31.760 +building API clients with it. + +00:13:31.920 --> 00:13:32.420 +Building API clients with it? + +00:13:36.400 --> 00:13:36.900 +[Speaker 0]: Yeah. Well, OK, so first of all, + +00:13:40.240 --> 00:13:40.740 +people should be using the LLM client. + +00:13:48.740 --> 00:13:48.900 +And So right now, 1 thing I should have + +00:13:50.220 --> 00:13:50.440 +mentioned at the top is that there are new + +00:13:52.500 --> 00:13:52.640 +packages that I recorded this talk that you + +00:13:54.480 --> 00:13:54.920 +just saw several months ago. + +00:13:57.780 --> 00:13:58.180 +And so like Elama, there's this package Elama + +00:13:59.700 --> 00:14:00.080 +that came out that is using the LM package. + +00:14:02.440 --> 00:14:02.680 +And so for example, it doesn't need to worry + +00:14:05.140 --> 00:14:05.580 +about this sort of thing because it just uses + +00:14:07.560 --> 00:14:07.920 +LLM and package and the LLM package worries + +00:14:11.680 --> 00:14:11.820 +about this. And while I'm on the subject of + +00:14:12.540 --> 00:14:12.720 +things I forgot to mention, + +00:14:15.140 --> 00:14:15.340 +I also should just mention very quickly that + +00:14:17.020 --> 00:14:17.520 +there is now an open source model, + +00:14:21.680 --> 00:14:21.960 +Mistral. And so that's kind of this new thing + +00:14:23.860 --> 00:14:24.240 +on the scene that happened after I recorded + +00:14:26.240 --> 00:14:26.420 +my talk. And I think it's super important to + +00:14:28.660 --> 00:14:28.820 +the community and important that we have the + +00:14:30.620 --> 00:14:31.120 +opportunity to use that if we want to. + +00:14:33.160 --> 00:14:33.660 +Okay, but to answer the actual question, + +00:14:37.660 --> 00:14:38.100 +there has been some talk about the problems + +00:14:40.680 --> 00:14:40.840 +with URL retrieve in the URL package in + +00:14:42.200 --> 00:14:42.700 +general in EmacsDevEl. + +00:14:46.760 --> 00:14:47.080 +It's not great. I would like to have better + +00:14:50.900 --> 00:14:51.040 +primitives. And I've asked the author of + +00:14:54.060 --> 00:14:54.560 +Please PLZ to kind of provide some necessary + +00:14:56.120 --> 00:14:56.620 +callbacks. I think that's a great library. + +00:15:00.280 --> 00:15:00.360 +And I'd like to see that kind of like, + +00:15:01.320 --> 00:15:01.680 +It's nice that we have options, + +00:15:03.340 --> 00:15:03.520 +and that is an option that uses curl on the + +00:15:05.140 --> 00:15:05.640 +back end, and that has some benefits. + +00:15:09.060 --> 00:15:09.280 +So there's this big debate about whether we + +00:15:10.600 --> 00:15:11.100 +should have primitives or just use curl. + +00:15:13.340 --> 00:15:13.420 +I'm not exactly sure what the right call is, + +00:15:15.320 --> 00:15:15.820 +but there has been discussions about this. + +00:15:19.540 --> 00:15:20.040 +[Speaker 1]: Excellent. And someone commented that GPTEL + +00:15:21.820 --> 00:15:22.200 +is async and apparently very good at tracking + +00:15:22.300 --> 00:15:22.800 +the point. + +00:15:26.680 --> 00:15:27.180 +[Speaker 0]: Yes, yes, GPTEL has similar functionalities + +00:15:29.800 --> 00:15:30.040 +to LLM, although I believe it's going to move + +00:15:33.040 --> 00:15:33.540 +to LLM itself sometime soon. + +00:15:39.480 --> 00:15:39.860 +[Speaker 1]: Next question, speaking of which, + +00:15:42.440 --> 00:15:42.560 +anyone trained or fine-tuned or prompted a + +00:15:44.680 --> 00:15:44.760 +model with their org data yet and applied it + +00:15:46.560 --> 00:15:47.040 +to interesting use cases like planning, + +00:15:47.920 --> 00:15:48.340 +scheduling, et cetera, + +00:15:49.320 --> 00:15:49.820 +and maybe care to comment? + +00:15:54.620 --> 00:15:55.120 +[Speaker 0]: I don't know anyone who is doing that. + +00:15:55.860 --> 00:15:56.360 +I think it is interesting. + +00:15:57.800 --> 00:15:58.300 +Like this is what I kind of mentioned at the + +00:16:01.060 --> 00:16:01.300 +very end of the talk. There is a lot of stuff + +00:16:02.440 --> 00:16:02.540 +there like you could you know if you + +00:16:04.760 --> 00:16:04.920 +especially mean an LLM can kind of work as + +00:16:07.940 --> 00:16:08.160 +sort of like a secretary kind of person that + +00:16:12.180 --> 00:16:12.440 +could help you prioritize Still it's a + +00:16:14.760 --> 00:16:14.920 +slightly unclear how what the best way to use + +00:16:16.480 --> 00:16:16.720 +it is So I think there's more of a question + +00:16:18.340 --> 00:16:18.480 +for the community about like what people have + +00:16:21.140 --> 00:16:21.320 +been trying. I see someone has mentioned that + +00:16:23.400 --> 00:16:23.900 +they are using it for weekly review. + +00:16:26.940 --> 00:16:27.180 +And it's kind of nice to like, + +00:16:29.060 --> 00:16:29.380 +maybe you could read your agenda or maybe + +00:16:30.480 --> 00:16:30.780 +this for like weekly review. + +00:16:32.040 --> 00:16:32.240 +It could like read all the stuff you've done + +00:16:33.340 --> 00:16:33.480 +and ask you questions about it. + +00:16:35.020 --> 00:16:35.280 +And like, what should happen next? + +00:16:36.520 --> 00:16:36.780 +Or like, is this going to cause a problem? + +00:16:39.060 --> 00:16:39.280 +Like, I can, I can understand if that could + +00:16:40.860 --> 00:16:41.180 +happen? That's like, that's kind of nice. + +00:16:43.660 --> 00:16:44.160 +And this kind of people have had good success + +00:16:48.540 --> 00:16:48.760 +out of using these LLMs to bounce ideas off + +00:16:49.920 --> 00:16:50.420 +of are, you know, for, + +00:16:52.680 --> 00:16:52.800 +you know, I've seen people say that like they + +00:16:55.360 --> 00:16:55.600 +want, they use it for reading and they kind + +00:16:58.520 --> 00:16:58.740 +of dialogue with the LM to kind of like do + +00:16:59.500 --> 00:17:00.000 +sort of active reading. + +00:17:02.500 --> 00:17:02.860 +So you can imagine doing something similar + +00:17:04.400 --> 00:17:04.740 +with your tasks where it's sort of you're + +00:17:06.560 --> 00:17:06.760 +engaged in dialogue about like planning your + +00:17:08.880 --> 00:17:09.000 +tax with some with a alum that could kind of + +00:17:10.800 --> 00:17:11.180 +understand what those are and ask you some + +00:17:13.780 --> 00:17:13.940 +questions I think it. You know, + +00:17:16.839 --> 00:17:17.040 +if it'd be nice. So, the problem is like + +00:17:18.480 --> 00:17:18.980 +there's no great way to share all this stuff. + +00:17:20.720 --> 00:17:21.220 +I guess if you have something like this, + +00:17:23.300 --> 00:17:23.720 +put it on Reddit. If you don't have Reddit, + +00:17:24.599 --> 00:17:24.880 +I don't know what to do. + +00:17:26.000 --> 00:17:26.500 +I would say put it somewhere. + +00:17:28.840 --> 00:17:29.020 +At the very least, I could maybe open up like + +00:17:31.320 --> 00:17:31.820 +an LLM discussion session on the LLM package + +00:17:34.000 --> 00:17:34.500 +GitHub, But not everyone likes to use GitHub. + +00:17:36.100 --> 00:17:36.180 +I don't know. It'd be nice if there's a + +00:17:38.940 --> 00:17:39.060 +mailing list or IRC chat for this sort of + +00:17:40.840 --> 00:17:41.340 +thing. But there isn't at the moment. + +00:17:46.560 --> 00:17:46.720 +[Speaker 1]: All right. Let's see. I think that's the end + +00:17:48.080 --> 00:17:48.580 +of the questions on the pad so far. + +00:17:51.020 --> 00:17:51.180 +There was also some discussion or some + +00:17:52.260 --> 00:17:52.760 +chatter, I believe, on IRC. + +00:17:54.560 --> 00:17:54.820 +I'm not sure. Andrew, are you on IRC right + +00:18:00.060 --> 00:18:00.260 +[Speaker 0]: I am, but I don't think I'm on any place that + +00:18:01.400 --> 00:18:01.640 +has the chatter. So if there's chatter, + +00:18:02.440 --> 00:18:02.940 +then I'm not seeing it. + +00:18:04.600 --> 00:18:05.100 +[Speaker 1]: now? Okay. Yeah, it was in the emacsconf-dev + +00:18:06.760 --> 00:18:07.260 +channel. + +00:18:09.600 --> 00:18:10.100 +[Speaker 0]: Okay, let me see if I can. + +00:18:25.600 --> 00:18:25.840 +Oh, yes. I mean, I could see the channel, + +00:18:27.520 --> 00:18:27.840 +but I missed whatever came before. + +00:18:29.340 --> 00:18:29.480 +So if there's anything you want to kind of + +00:18:30.840 --> 00:18:31.340 +call out, I can try to answer it here. + +00:18:35.320 --> 00:18:35.640 +[Speaker 1]: OK, cool. I believe at least 2 other folks + +00:18:37.500 --> 00:18:38.000 +who are participating in the discussion there + +00:18:40.120 --> 00:18:40.620 +who have also joined here on BigBlueButton, + +00:18:42.440 --> 00:18:42.940 +Codin Quark and AeonTurn92. + +00:18:47.000 --> 00:18:47.480 +So you folks, if Andrew is still available + +00:18:50.460 --> 00:18:50.640 +and has time, you're welcome to chat here and + +00:18:53.000 --> 00:18:53.320 +ask questions or discuss here as well. + +00:18:55.580 --> 00:18:55.840 +[Speaker 0]: 1 Thank you. Thank you for your help, + +00:18:57.740 --> 00:18:58.080 +and thank you for reading all the questions. + +00:18:59.700 --> 00:18:59.820 +[Speaker 1]: AUDIENCE 2 Cheers, and thanks to you for a + +00:19:00.540 --> 00:19:01.040 +great talk and the discussion. + +00:19:01.880 --> 00:19:02.380 +[Speaker 0]: AUDIENCE AUDIENCE 1 Thank you. + +00:19:03.140 --> 00:19:03.640 +[Speaker 1]: AUDIENCE 2 Cheers. + +00:19:07.900 --> 00:19:08.040 +[Speaker 0]: So I'll just, I will wait here and see if + +00:19:08.320 --> 00:19:08.760 +there's any questions. + +00:19:10.760 --> 00:19:11.260 +If not, I will log off after a few minutes. + +00:19:15.900 --> 00:19:16.080 +[Speaker 2]: Well, I guess since we were mentioned that + +00:19:18.480 --> 00:19:18.980 +there was a small chat about local alarms. + +00:19:22.640 --> 00:19:23.000 +Because chat dpt is nice, + +00:19:25.600 --> 00:19:26.100 +no, but privacy concerns, + +00:19:27.380 --> 00:19:27.880 +and it's not free and stuff. + +00:19:31.000 --> 00:19:31.500 +Which, so The question is, + +00:19:36.960 --> 00:19:37.460 +what is the promise for local models? + +00:19:39.660 --> 00:19:40.160 +[Speaker 0]: Yeah, so local is definitely... + +00:19:41.380 --> 00:19:41.880 +[Speaker 2]: Or at least open source. + +00:19:45.680 --> 00:19:46.120 +[Speaker 0]: Yeah, so there is a local open source model, + +00:19:47.960 --> 00:19:48.460 +Misral, which you could run. + +00:19:51.340 --> 00:19:51.840 +The LLM package allows you to use, + +00:19:56.120 --> 00:19:56.260 +I think there's 3 kind of local things you + +00:19:58.100 --> 00:19:58.440 +could use. Like many of these things, + +00:20:00.220 --> 00:20:00.480 +there's like many kind of ways to do the same + +00:20:03.960 --> 00:20:04.460 +sort of thing. So LLM is supporting OLAMMA + +00:20:10.240 --> 00:20:10.520 +and LLAMMA-CPP. And let's see, + +00:20:12.240 --> 00:20:12.740 +1 other. Which 1 is it? + +00:20:18.420 --> 00:20:18.700 +And maybe that's it. Maybe the, + +00:20:21.820 --> 00:20:21.940 +oh, GPT for all. So each 1 of these kind of + +00:20:23.100 --> 00:20:23.600 +has slightly different functionality. + +00:20:26.820 --> 00:20:27.180 +For example, I think GPT for all doesn't + +00:20:31.780 --> 00:20:32.280 +support embeddings. And I hear that Olama's + +00:20:33.740 --> 00:20:34.240 +embeddings are kind of currently broken. + +00:20:35.920 --> 00:20:36.420 +But basically they should support everything. + +00:20:39.100 --> 00:20:39.600 +And the open source models are, + +00:20:43.180 --> 00:20:43.380 +so the local models are reasonably good. + +00:20:44.760 --> 00:20:44.900 +Like I don't think you'd use them and be + +00:20:46.200 --> 00:20:46.639 +like, what is this horrible nonsense? + +00:20:50.200 --> 00:20:50.380 +Like it's, it gives you relatively good + +00:20:51.820 --> 00:20:52.120 +results. Like it's not gonna be at the level + +00:20:56.060 --> 00:20:56.320 +of like GPT 3.5 or 4, but it's not far away + +00:20:57.720 --> 00:20:58.220 +from GPT 3.5, I think. + +00:21:02.380 --> 00:21:02.880 +[Speaker 2]: I'm just saying that Olam has like a presets + +00:21:05.940 --> 00:21:06.300 +for connecting the actual working servers for + +00:21:06.300 --> 00:21:06.800 +Olama? + +00:21:08.560 --> 00:21:08.760 +[Speaker 0]: So, I'll try. Yeah, so you could, + +00:21:09.860 --> 00:21:10.040 +what you could do is you could like for + +00:21:11.940 --> 00:21:12.100 +example you could download Olama which is + +00:21:15.780 --> 00:21:15.940 +just a way of setting up local models and + +00:21:17.320 --> 00:21:17.780 +running local models on your machine. + +00:21:18.580 --> 00:21:18.820 +So typically what it does, + +00:21:19.720 --> 00:21:20.020 +you like download a program, + +00:21:23.720 --> 00:21:23.800 +let's say Olama. Then Olama will have the + +00:21:24.940 --> 00:21:25.440 +ability to download models. + +00:21:27.240 --> 00:21:27.360 +And so you could choose from just a host of + +00:21:29.280 --> 00:21:29.440 +different models. Each 1 of these things has + +00:21:30.200 --> 00:21:30.440 +a bunch of different models. + +00:21:31.920 --> 00:21:32.080 +So it downloads all these things to your + +00:21:36.600 --> 00:21:37.020 +machine. But I would say that the key problem + +00:21:40.200 --> 00:21:40.580 +here is that it requires a fairly beefy + +00:21:40.580 --> 00:21:41.080 +machine. + +00:21:42.600 --> 00:21:43.100 +[Speaker 2]: So. Yeah, yeah, of course. + +00:21:45.060 --> 00:21:45.300 +Why I was asking, because you briefly + +00:21:46.440 --> 00:21:46.880 +mentioned that there are some Israeli + +00:21:52.300 --> 00:21:52.440 +servers. I understand that they run it like a + +00:21:53.680 --> 00:21:54.000 +government or stuff like that? + +00:21:55.440 --> 00:21:55.940 +No, no, sorry. People want everyone? + +00:21:59.340 --> 00:21:59.620 +[Speaker 0]: I don't, I mean, maybe you've said something + +00:22:00.620 --> 00:22:01.020 +that sounded like Israeli servers. + +00:22:01.620 --> 00:22:02.120 +[Speaker 2]: Okay, okay. + +00:22:04.920 --> 00:22:05.080 +[Speaker 0]: I think- There's no government LLMs as far as + +00:22:06.820 --> 00:22:07.280 +I know. Although, I'm sure the governments + +00:22:08.200 --> 00:22:08.700 +are working on their own LLMs, + +00:22:10.980 --> 00:22:11.480 +et cetera. But yeah, basically your choices + +00:22:15.060 --> 00:22:15.220 +are spend a, I mean, if you use open AI or + +00:22:16.080 --> 00:22:16.580 +something or anything else, + +00:22:17.960 --> 00:22:18.460 +you're really not spending any money. + +00:22:20.560 --> 00:22:20.840 +Like I've never been able to spend any money + +00:22:23.680 --> 00:22:24.020 +on OpenAI. Like unless you're doing something + +00:22:25.840 --> 00:22:26.280 +very intensive and really are using it to, + +00:22:28.000 --> 00:22:28.180 +you know, if you're using it for your + +00:22:29.620 --> 00:22:29.780 +personal use, it's just hard to spend any + +00:22:31.720 --> 00:22:31.960 +money. But on the other hand, + +00:22:32.780 --> 00:22:32.860 +it's not free. So you can, + +00:22:33.040 --> 00:22:33.540 +you know, + +00:22:36.300 --> 00:22:36.680 +[Speaker 2]: Actually, it's rather cheap. + +00:22:37.680 --> 00:22:38.180 +There's no question about that. + +00:22:40.580 --> 00:22:40.920 +The problem is that it has a bad track record + +00:22:41.580 --> 00:22:42.080 +on privacy. + +00:22:45.540 --> 00:22:46.040 +[Speaker 0]: Yes, that's, I think that is a key problem. + +00:22:48.120 --> 00:22:48.280 +This is probably the number 1 reason why you + +00:22:51.840 --> 00:22:52.340 +might want to use a local AI, + +00:22:54.720 --> 00:22:55.220 +a local LLM. Another 1 is like, + +00:22:57.400 --> 00:22:57.900 +you may not agree with the decisions. + +00:23:00.360 --> 00:23:00.820 +You know, there's a lot of trust and safety + +00:23:05.140 --> 00:23:05.440 +stuff that these companies have to do. + +00:23:09.020 --> 00:23:09.240 +Like they don't want like the LMs to kind of + +00:23:11.400 --> 00:23:11.640 +like give you, like tell you how you can make + +00:23:13.180 --> 00:23:13.580 +meth or how you can make a bomb, + +00:23:14.960 --> 00:23:15.460 +which they would do. They would totally do + +00:23:19.580 --> 00:23:20.080 +it. So, But each time you kind of restrict + +00:23:22.540 --> 00:23:22.680 +what is happening with what you can get out + +00:23:23.860 --> 00:23:24.360 +of the LM, it gets a little worse. + +00:23:24.960 --> 00:23:25.440 +So some people + +00:23:27.040 --> 00:23:27.540 +[Speaker 2]: want to have local. That's expected. + +00:23:31.080 --> 00:23:31.400 +I guess even open source language modules + +00:23:33.540 --> 00:23:34.040 +will soon have HR spaces because it's simply + +00:23:34.720 --> 00:23:35.220 +a legal issue. + +00:23:40.760 --> 00:23:41.140 +[Speaker 0]: I think that's true. I also think that there + +00:23:42.880 --> 00:23:43.040 +probably will be, although I don't know of + +00:23:45.060 --> 00:23:45.300 +any offhand, that will are completely + +00:23:46.960 --> 00:23:47.200 +uncensored. I know people are interested and + +00:23:48.240 --> 00:23:48.480 +are running uncensored models. + +00:23:49.440 --> 00:23:49.940 +I don't know how to do it. + +00:23:52.280 --> 00:23:52.780 +I think it's a little bit dubious, + +00:23:54.960 --> 00:23:55.040 +but some people do want to do it. + +00:23:56.280 --> 00:23:56.780 +There's another reason for using local + +00:24:02.280 --> 00:24:02.780 +servers. Do you have any recommendation for + +00:24:05.500 --> 00:24:05.720 +models to run locally and also comments on + +00:24:06.780 --> 00:24:07.280 +whether a GPU is required? + +00:24:14.040 --> 00:24:14.160 +Usually a GPU, well, you can run it without a + +00:24:16.960 --> 00:24:17.460 +GPU, but it does run much better. + +00:24:19.480 --> 00:24:19.980 +Like for example, I think when I used, + +00:24:22.560 --> 00:24:23.060 +Lama is sort of like a standard. + +00:24:27.160 --> 00:24:27.320 +This was the model for that Facebook came out + +00:24:31.380 --> 00:24:31.880 +with for local use. And It was, + +00:24:37.260 --> 00:24:37.760 +yeah, it's good. It's, + +00:24:40.400 --> 00:24:40.900 +but it's now it's I think, + +00:24:44.620 --> 00:24:44.920 +Mistral is kind of like has a better + +00:24:46.480 --> 00:24:46.800 +performance, But there's also different model + +00:24:51.000 --> 00:24:51.500 +sizes. There's 7B, like the Lama 7B is OK. + +00:24:52.940 --> 00:24:53.440 +The Mistral 7B, 7 billion, + +00:24:54.800 --> 00:24:55.300 +are like, basically it'll take like, + +00:24:58.380 --> 00:24:58.880 +you can run it with like 16 gigs of RAM, + +00:25:02.720 --> 00:25:03.040 +is pretty good. It's probably about as equal + +00:25:06.900 --> 00:25:07.000 +to the LLAMA13B. Those are the number of + +00:25:08.360 --> 00:25:08.860 +parameters, if I remember correctly. + +00:25:10.680 --> 00:25:11.180 +And then there's a 7B, + +00:25:12.340 --> 00:25:12.840 +which I've never been able to run. + +00:25:16.120 --> 00:25:16.620 +And even if the 7B, if you run it without a + +00:25:19.640 --> 00:25:20.140 +GPU, it takes quite a while to answer. + +00:25:22.080 --> 00:25:22.580 +I think I've had experiences where it took + +00:25:23.940 --> 00:25:24.440 +literally like several, + +00:25:26.480 --> 00:25:26.780 +like 5 minutes before it even started + +00:25:28.880 --> 00:25:29.100 +responding, but you do eventually get + +00:25:32.220 --> 00:25:32.580 +something. And it could be that like things + +00:25:33.840 --> 00:25:33.960 +have gotten better since the last time I + +00:25:35.440 --> 00:25:35.940 +tried this, because things are moving fast. + +00:25:38.360 --> 00:25:38.860 +But it is super recommended to have a GPU. + +00:25:42.440 --> 00:25:42.620 +This is the problem. It's kind of like, + +00:25:43.840 --> 00:25:44.180 +yes, free software is great. + +00:25:46.880 --> 00:25:47.120 +But if free software is requiring that you + +00:25:50.460 --> 00:25:50.760 +have these kind of beefy servers and have all + +00:25:52.000 --> 00:25:52.500 +this hardware, that's not great. + +00:25:53.600 --> 00:25:54.100 +I think there's a case to be made. + +00:25:55.680 --> 00:25:56.180 +[Speaker 1]: a hardware + +00:25:59.040 --> 00:25:59.540 +[Speaker 0]: with slots instead of a laptop. + +00:26:01.560 --> 00:26:02.060 +Yeah, yeah, that's right. + +00:26:03.660 --> 00:26:03.960 +[Speaker 2]: Ideally, you can have Ideally, + +00:26:07.400 --> 00:26:07.660 +it would be nice if FSL for all things could + +00:26:12.040 --> 00:26:12.540 +run something for open source model. + +00:26:16.320 --> 00:26:16.640 +And not free, but the key point is that it's + +00:26:16.640 --> 00:26:17.140 +Libre? + +00:26:22.580 --> 00:26:23.080 +[Speaker 0]: Yes, so actually I think Google does do that. + +00:26:24.720 --> 00:26:24.800 +I'll have to look it up, + +00:26:27.560 --> 00:26:27.820 +but I haven't explored this yet. + +00:26:31.220 --> 00:26:31.720 +But Google's server, which LLM does support, + +00:26:33.800 --> 00:26:34.300 +supports arbitrary models. + +00:26:36.420 --> 00:26:36.600 +So you can run LLMA or things like that. + +00:26:38.940 --> 00:26:39.200 +The problem is that even if you're running + +00:26:40.320 --> 00:26:40.820 +Mistral, which has no restrictions. + +00:26:42.940 --> 00:26:43.140 +So this is the kind of thing that like the + +00:26:44.900 --> 00:26:45.060 +Free Software Foundation cares a lot about. + +00:26:47.240 --> 00:26:47.740 +Like you want it to be like no restrictions, + +00:26:49.740 --> 00:26:49.840 +legal restrictions on you as you run the + +00:26:52.080 --> 00:26:52.580 +model. So even if it's running Mistral, + +00:26:54.800 --> 00:26:55.300 +just by using the server, + +00:26:58.460 --> 00:26:58.660 +the company server, it will impose some + +00:26:59.440 --> 00:26:59.900 +restrictions on you probably, + +00:27:02.320 --> 00:27:02.480 +right? There's gonna be some license that you + +00:27:04.760 --> 00:27:05.260 +have to, or something you have to abide by. + +00:27:08.480 --> 00:27:08.600 +So I think, yes, it depends on how much you + +00:27:09.280 --> 00:27:09.780 +care about it, I guess. + +00:27:19.500 --> 00:27:19.640 +I should find out more about that and make + +00:27:21.580 --> 00:27:22.080 +sure that it's a good point that I should, + +00:27:23.980 --> 00:27:24.180 +you know, people should be able to run free + +00:27:25.920 --> 00:27:26.280 +models over the server. + +00:27:28.320 --> 00:27:28.440 +So I should make sure we support that in the + +00:27:40.360 --> 00:27:40.860 +LLM package. So, is there any other questions + +00:27:48.240 --> 00:27:48.740 +Or is otherwise we can end the session. + +00:28:00.800 --> 00:28:01.040 +Yeah, all right. Thank you. + +00:28:02.440 --> 00:28:02.940 +Thank you. Thank you everyone who listened. + +00:28:04.540 --> 00:28:05.040 +I'm super happy like I, + +00:28:06.560 --> 00:28:07.060 +the interest is great. + +00:28:08.900 --> 00:28:09.220 +I think there's great stuff to be done here + +00:28:10.960 --> 00:28:11.140 +and I'm kind of super excited what we're + +00:28:11.940 --> 00:28:12.160 +going to do in the next year, + +00:28:13.140 --> 00:28:13.440 +so hopefully, like next year, + +00:28:14.600 --> 00:28:14.760 +and the conference we have something even + +00:28:16.440 --> 00:28:16.560 +more exciting to say about LLM and how they + +00:28:17.320 --> 00:28:17.820 +can be used with Emacs. + +00:28:19.620 --> 00:28:20.120 +So thank + +00:28:30.060 --> 00:28:30.560 +you diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt new file mode 100644 index 00000000..858d0fdb --- /dev/null +++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt @@ -0,0 +1,41 @@ +WEBVTT + + +00:00:00.000 --> 00:00:25.079 +Intro to the Talk + +00:00:25.080 --> 00:01:56.359 +What are LLMs? + +00:01:56.360 --> 00:03:32.239 +Power of LLMs (Magit Demo) + +00:03:32.240 --> 00:05:20.119 +Drawbacks of LLMs (regex demo) + +00:05:20.120 --> 00:07:32.799 +Embeddings + +00:07:32.800 --> 00:08:48.479 +Image Generation + +00:08:48.480 --> 00:11:05.679 +Fine-tuning + +00:11:08.160 --> 00:12:02.519 +Open Source + +00:12:02.840 --> 00:14:04.159 +The Future + +00:14:08.200 --> 00:18:14.439 +LLMs in Emacs - existing packages + +00:18:15.960 --> 00:19:04.079 +Abstracting LLM challenges + +00:19:04.080 --> 00:20:01.599 +Emacs is the ideal interface for LLMs + +00:20:01.960 --> 00:20:26.160 +Outro diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt new file mode 100644 index 00000000..3ac4b34c --- /dev/null +++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt @@ -0,0 +1,1377 @@ +WEBVTT captioned by bala, checked by sachac + +NOTE Intro to the Talk + +00:00:00.000 --> 00:00:04.159 +Hello, I'm Andrew Hyatt and I'm going to talk to you + +00:00:04.160 --> 00:00:06.439 +about large language models and how + +00:00:06.440 --> 00:00:11.079 +they relate to Emacs. + +00:00:11.080 --> 00:00:14.919 +And I'm going to talk to you about the technology + +00:00:14.920 --> 00:00:18.279 +and how we're going to use it in Emacs. + +00:00:18.280 --> 00:00:21.159 +There'll be demos and there'll be talks about, + +00:00:21.160 --> 00:00:22.879 +I'll finish up by kind of talking about where + +00:00:22.880 --> 00:00:25.079 +I think this should go in the future. + +NOTE What are LLMs? + +00:00:25.080 --> 00:00:28.239 +So to start off with, let's just talk like, + +00:00:28.240 --> 00:00:29.759 +I just want to make sure everyone's on the same page. + +00:00:29.760 --> 00:00:30.919 +What are large language models? + +00:00:30.920 --> 00:00:34.639 +Not everyone may be caught up on this. + +00:00:34.640 --> 00:00:38.999 +Large language models are a way... Basically, + +00:00:39.000 --> 00:00:42.999 +the current versions of large language models + +00:00:43.000 --> 00:00:44.479 +are all based on the similar architecture + +00:00:44.480 --> 00:00:45.279 +called the transformer. + +00:00:45.280 --> 00:00:48.719 +It's just an efficient way to train and produce output. + +00:00:48.720 --> 00:00:51.919 +So these things are basically models + +00:00:51.920 --> 00:00:58.079 +that predict the next word or something like that. + +00:00:58.080 --> 00:01:02.119 +And they're trained on an enormous corpus of information + +00:01:02.120 --> 00:01:04.319 +and they get extremely good + +00:01:04.320 --> 00:01:06.079 +at predicting the next word. + +00:01:06.080 --> 00:01:09.679 +And from that basic ability, you can train + +00:01:09.680 --> 00:01:12.439 +through further tuning from human input, + +00:01:12.440 --> 00:01:13.959 +human ratings and things like that. + +00:01:13.960 --> 00:01:17.479 +You can train different models based on that + +00:01:17.480 --> 00:01:18.759 +that will do question answering. + +00:01:18.760 --> 00:01:22.519 +And this is how basically ChatGPT works. + +00:01:22.520 --> 00:01:25.599 +There's a base LLM, like GPT. + +00:01:25.600 --> 00:01:27.799 +And then you have a chat version of that, + +00:01:27.800 --> 00:01:29.959 +which is just trained to just... You give + +00:01:29.960 --> 00:01:32.199 +it a prompt, like what do you want it to do? + +00:01:32.200 --> 00:01:37.279 +And it gives you an output that does what you told it to do, + +00:01:37.280 --> 00:01:39.919 +or at least attempts to do it. + +00:01:39.920 --> 00:01:42.079 +Those are the power of large language models is + +00:01:42.080 --> 00:01:45.639 +they're extremely, extremely impressive. + +00:01:45.640 --> 00:01:47.199 +Certainly this is, in AI, + +00:01:47.200 --> 00:01:49.079 +this has been the biggest thing to happen + +00:01:49.080 --> 00:01:51.559 +probably in my lifetime, + +00:01:51.560 --> 00:01:56.359 +or at least my lifetime as my working lifetime. + +NOTE Power of LLMs (Magit Demo) + +00:01:56.360 --> 00:02:02.559 +So let me give you a demonstration of + +00:02:02.560 --> 00:02:06.679 +what kinds of stuff it could do in Emacs. + +00:02:06.680 --> 00:02:09.039 +So here I have a Emacs file. + +00:02:09.040 --> 00:02:12.479 +So this is my Emacs init file. + +00:02:12.480 --> 00:02:13.599 +I have a change. + +00:02:13.600 --> 00:02:16.879 +Let's commit that change. + +00:02:16.880 --> 00:02:19.439 +And, you know, I don't like writing commit messages, + +00:02:19.440 --> 00:02:23.039 +so I can generate it. + +00:02:23.040 --> 00:02:27.479 +And it did an actually just looking. + +00:02:27.480 --> 00:02:29.759 +So all it does is it's looking, it's just reading the diff. + +00:02:29.760 --> 00:02:32.479 +I'm just feeding it the diff with some instructions. + +00:02:32.480 --> 00:02:37.759 +And it is this a incredible commit message? + +00:02:37.760 --> 00:02:39.399 +It's not bad, actually. + +00:02:39.400 --> 00:02:42.319 +You can see that it actually has really extracted + +00:02:42.320 --> 00:02:46.439 +the meaning of what I'm doing and has written + +00:02:46.440 --> 00:02:48.879 +a reasonably good commit message. + +00:02:48.880 --> 00:02:53.159 +Now I have to edit it because this is not quite correct. + +00:02:53.160 --> 00:02:55.159 +But it's kind of impressive how good it is. + +00:02:55.160 --> 00:03:00.039 +And my editing, it's kind of easier for me to edit this + +00:03:00.040 --> 00:03:01.879 +than just to write a new one. + +00:03:01.880 --> 00:03:04.479 +And quite often it's good enough to just submit as is. + +00:03:04.480 --> 00:03:08.119 +So this is kind of, you know, you could say + +00:03:08.120 --> 00:03:09.359 +this is just commit messages. + +00:03:09.360 --> 00:03:10.719 +You could respond to emails. + +00:03:10.720 --> 00:03:15.319 +You could, you know, using your own custom instructions + +00:03:15.320 --> 00:03:17.839 +about what you want your email to say. + +00:03:17.840 --> 00:03:19.039 +It'll write the email for you. + +00:03:19.040 --> 00:03:19.839 +It could do like this + +00:03:19.840 --> 00:03:22.519 +Emacs is a way to interact with buffers. + +00:03:22.520 --> 00:03:24.199 +This could basically just output text. + +00:03:24.200 --> 00:03:27.759 +So it's super useful for + +00:03:27.760 --> 00:03:30.319 +understanding something and outputting text based on that, + +00:03:30.320 --> 00:03:32.239 +which is just useful for Emacs. + +NOTE Drawbacks of LLMs (regex demo) + +00:03:32.240 --> 00:03:39.919 +So the drawback is, yeah, it's good, + +00:03:39.920 --> 00:03:43.359 +but it's not that reliable. + +00:03:43.360 --> 00:03:45.679 +And you'd think it's very easy to get caught up in like, + +00:03:45.680 --> 00:03:47.639 +oh my gosh, like this is so powerful. + +00:03:47.640 --> 00:03:50.599 +I bet it could work this, whatever idea could work. + +00:03:50.600 --> 00:03:52.919 +And these ideas, like they almost can. + +00:03:52.920 --> 00:03:55.639 +For example, I was thinking, you know what I could do? + +00:03:55.640 --> 00:03:57.239 +I don't like writing regexes. + +00:03:57.240 --> 00:04:01.199 +Why can't I have a regex replace that's powered by LLMs? + +00:04:01.200 --> 00:04:03.439 +And that way I could give just an instruction + +00:04:03.440 --> 00:04:07.399 +to regex replace. + +00:04:07.400 --> 00:04:12.079 +And so for example, I could do Emacs LLM regex replace. + +00:04:12.080 --> 00:04:12.879 +This is not checked in anywhere. + +00:04:12.880 --> 00:04:17.199 +These are just my own kind of private functions. + +00:04:17.200 --> 00:04:19.239 +My description lowercase all the org headings. + +00:04:19.240 --> 00:04:20.439 +Let's see if it works. + +00:04:20.440 --> 00:04:21.039 +It might work. + +00:04:21.040 --> 00:04:22.959 +No, it doesn't work. + +00:04:22.960 --> 00:04:26.159 +So if I, I'm not going to bother to show you + +00:04:26.160 --> 00:04:28.159 +what it actually came up with, but it's something, + +00:04:28.160 --> 00:04:29.879 +if you looked at it, it'd be like, wow, + +00:04:29.880 --> 00:04:31.639 +this is very close to being... + +00:04:31.640 --> 00:04:34.239 +It looks like it should work, but it doesn't. + +00:04:34.240 --> 00:04:35.839 +Okay. + +00:04:35.840 --> 00:04:38.719 +It's not quite good enough to get it right. + +00:04:38.720 --> 00:04:41.599 +And it's possible that perhaps by giving it + +00:04:41.600 --> 00:04:43.639 +a few examples of, or explaining more + +00:04:43.640 --> 00:04:46.439 +what makes Emacs regexes different. + +00:04:46.440 --> 00:04:47.959 +It could do a better job + +00:04:47.960 --> 00:04:49.279 +and maybe could solve these problems, + +00:04:49.280 --> 00:04:50.679 +but it's always a little bit random. + +00:04:50.680 --> 00:04:52.359 +You're never quite sure what you're going to get. + +00:04:52.360 --> 00:04:54.839 +So this is the drawback. + +00:04:54.840 --> 00:04:58.479 +Like there's a lot of things that look like you could do it, + +00:04:58.480 --> 00:05:00.999 +but when it actually comes down to trying it, + +00:05:01.000 --> 00:05:03.399 +it's surprisingly hard. + +00:05:03.400 --> 00:05:06.319 +And, you know, and whatever you're doing, + +00:05:06.320 --> 00:05:08.999 +it's surprisingly hard to get something + +00:05:09.000 --> 00:05:13.879 +that is repeatably, that's, that is always good. + +00:05:13.880 --> 00:05:20.119 +So yeah, that's currently the problem. + +NOTE Embeddings + +00:05:20.120 --> 00:05:23.399 +So I want to talk about embeddings. + +00:05:23.400 --> 00:05:26.919 +They're another thing that LLMs offer + +00:05:26.920 --> 00:05:28.599 +and that are extremely useful. + +00:05:28.600 --> 00:05:33.119 +They are, what they do is they encode from + +00:05:33.120 --> 00:05:38.959 +a input text that could be a word, a sentence, + +00:05:38.960 --> 00:05:42.159 +a small document. + +00:05:42.160 --> 00:05:45.399 +It encodes a vector about what the meaning, + +00:05:45.400 --> 00:05:46.919 +the semantic meaning of that is. + +00:05:46.920 --> 00:05:51.079 +That means you could, something that is, + +00:05:51.080 --> 00:05:52.279 +uses completely different words, + +00:05:52.280 --> 00:05:54.159 +but is basically talking about the same thing, + +00:05:54.160 --> 00:05:57.839 +perhaps in a different language, should be pretty close + +00:05:57.840 --> 00:06:01.999 +as a vector to the other vector. + +00:06:02.000 --> 00:06:05.399 +You know, as long as they're similarly semantic things, + +00:06:05.400 --> 00:06:12.239 +like the words + +00:06:12.240 --> 00:06:18.959 +highway and Camino are two different words. + +00:06:18.960 --> 00:06:19.639 +They mean the same thing. + +00:06:19.640 --> 00:06:21.319 +They should have very similar embeddings. + +00:06:21.320 --> 00:06:25.119 +So it is a way to kind of encode this + +00:06:25.120 --> 00:06:26.199 +and then you could use this for search. + +00:06:26.200 --> 00:06:28.919 +For example, I haven't tried to do this yet, + +00:06:28.920 --> 00:06:31.479 +but you could probably just make an embedding + +00:06:31.480 --> 00:06:33.919 +for every paragraph in the Emacs manual + +00:06:33.920 --> 00:06:36.239 +and the Elisp manual. + +00:06:36.240 --> 00:06:39.439 +And then, and then there's a very standard technique. + +00:06:39.440 --> 00:06:43.439 +You just... You find that you have a query, + +00:06:43.440 --> 00:06:45.799 +oh, how do I do whatever, whatever in Emacs again? + +00:06:45.800 --> 00:06:49.479 +And you could, you just find that 20 things + +00:06:49.480 --> 00:06:50.319 +that are closest to whatever you're + +00:06:50.320 --> 00:06:51.839 +trying to... the embedding of your query. + +00:06:51.840 --> 00:06:55.279 +You send those things to the LLM, as you know, + +00:06:55.280 --> 00:06:57.799 +with the original query, + +00:06:57.800 --> 00:06:59.919 +and you're basically telling the--asking the LLM, + +00:06:59.920 --> 00:07:01.279 +look, the user is trying to do this. + +00:07:01.280 --> 00:07:03.039 +Here's what I found in the Emacs manual. + +00:07:03.040 --> 00:07:04.639 +That's on the Elisp manual. + +00:07:04.640 --> 00:07:07.439 +That's close to what they're trying to do. + +00:07:07.440 --> 00:07:12.159 +So can you kind of just tell the user what to do? + +00:07:12.160 --> 00:07:14.479 +And from this, and you could say, + +00:07:14.480 --> 00:07:17.639 +just use things from this, you know, that I give you. + +00:07:17.640 --> 00:07:20.679 +Don't just make up your own idea. + +00:07:20.680 --> 00:07:21.839 +You know, don't use your own ideas, + +00:07:21.840 --> 00:07:23.799 +because sometimes it likes to do that + +00:07:23.800 --> 00:07:24.359 +and those things are wrong. + +00:07:24.360 --> 00:07:26.719 +So you could try to, you know, do this and you get, + +00:07:26.720 --> 00:07:28.719 +you could get quite good results using this. + +00:07:28.720 --> 00:07:29.999 +So no one has done this yet, + +00:07:30.000 --> 00:07:32.799 +but that should not be hard to do. + +NOTE Image Generation + +00:07:32.800 --> 00:07:34.879 +Image generation is something that's, you know, + +00:07:34.880 --> 00:07:38.479 +it's not quite an LLM in the sense of... + +00:07:38.480 --> 00:07:43.079 +These are... It's a different technology, + +00:07:43.080 --> 00:07:48.439 +but these things are kind of packaged together + +00:07:48.440 --> 00:07:49.039 +in a sense. + +00:07:49.040 --> 00:07:51.639 +And you'll see that when I talk about Emacs packages, + +00:07:51.640 --> 00:07:54.279 +a lot of them bundle image generation + +00:07:54.280 --> 00:07:55.439 +and large language models. + +00:07:55.440 --> 00:07:59.039 +You know, the APIs are often bundled together by providers. + +00:07:59.040 --> 00:08:02.679 +And the general idea is it's kind of similar + +00:08:02.680 --> 00:08:04.399 +because it's very similar to large, you know, + +00:08:04.400 --> 00:08:06.559 +doing a chat thing where you, you know, + +00:08:06.560 --> 00:08:09.760 +the chat is like, you give it a text request, + +00:08:09.761 --> 00:08:12.759 +like write me a sonnet about, you know, + +00:08:12.760 --> 00:08:14.879 +the battle between Emacs and vi. + +00:08:14.880 --> 00:08:15.839 +And it could, it could do it. + +00:08:15.840 --> 00:08:17.159 +It could do a very good job of that. + +00:08:17.160 --> 00:08:22.519 +But you could also say, you know, + +00:08:22.520 --> 00:08:27.599 +draw me a picture of Emacs and vi as boxers, + +00:08:27.600 --> 00:08:30.359 +as a character-character boxing in a ring, + +00:08:30.360 --> 00:08:32.239 +like a, you know, political cartoon style. + +00:08:32.240 --> 00:08:34.999 +And it can do that as well. + +00:08:35.000 --> 00:08:37.679 +And so you could basically think of this + +00:08:37.680 --> 00:08:39.439 +as just sort of... it's kind of the + +00:08:39.440 --> 00:08:42.399 +same thing with what you're doing + +00:08:42.400 --> 00:08:43.359 +with large language models, + +00:08:43.360 --> 00:08:44.799 +but instead of outputting a text, + +00:08:44.800 --> 00:08:48.479 +you're outputting a picture. + +NOTE Fine-tuning + +00:08:48.480 --> 00:08:51.079 +There's also, I want to mention the concept of fine-tuning. + +00:08:51.080 --> 00:08:55.199 +Fine-tuning is a way to take your-- + +00:08:55.200 --> 00:08:59.759 +take a corpus of inputs and outputs and just from + +00:08:59.760 --> 00:09:01.599 +a large language model, you're like, okay, + +00:09:01.600 --> 00:09:03.599 +given this base large language model, + +00:09:03.600 --> 00:09:06.679 +I want to make sure that when I give you input, + +00:09:06.680 --> 00:09:08.479 +you give me something like output. + +00:09:08.480 --> 00:09:10.119 +And this is what I'm just going to + +00:09:10.120 --> 00:09:11.799 +train you further on these, + +00:09:11.800 --> 00:09:14.879 +these mappings between input and output. + +00:09:14.880 --> 00:09:16.399 +And for example, you could do this. Like, + +00:09:16.400 --> 00:09:18.039 +let's say you wanted to fix that regex demo + +00:09:18.040 --> 00:09:20.999 +I had to make it good. + +00:09:21.000 --> 00:09:23.479 +I don't think it, I think it'd be + +00:09:23.480 --> 00:09:25.039 +relatively effective to train, + +00:09:25.040 --> 00:09:27.039 +to have regex descriptions + +00:09:27.040 --> 00:09:30.119 +and regex examples, Emacs regex examples + +00:09:30.120 --> 00:09:31.239 +as inputs and outputs. + +00:09:31.240 --> 00:09:33.999 +You could get, you know, maybe a hundred, + +00:09:34.000 --> 00:09:35.359 +a few hundreds of these things. + +00:09:35.360 --> 00:09:38.639 +You could train it. + +00:09:38.640 --> 00:09:40.759 +I think that is a reasonable way to, + +00:09:40.760 --> 00:09:43.879 +let's just say, I don't know how well it would work, + +00:09:43.880 --> 00:09:46.839 +but these things definitely work some of the time + +00:09:46.840 --> 00:09:47.999 +and produce pretty good results. + +00:09:48.000 --> 00:09:53.039 +And you could do this on your own machine. + +00:09:53.040 --> 00:09:58.999 +Corporations like OpenAI offer APIs with, you know, + +00:09:59.000 --> 00:10:01.519 +to build your fine tunes on top of OpenAI. + +00:10:01.520 --> 00:10:04.159 +And I think, I'm not a hundred percent sure, + +00:10:04.160 --> 00:10:05.719 +but I think then you can share your model + +00:10:05.720 --> 00:10:06.519 +with other people. + +00:10:06.520 --> 00:10:08.519 +But if not, then you just, you know, + +00:10:08.520 --> 00:10:10.839 +you could use your model for your own specialized purposes. + +00:10:10.840 --> 00:10:14.039 +But in the world of models that you could run, + +00:10:14.040 --> 00:10:16.874 +for example, based on Llama, which is like... + +00:10:16.875 --> 00:10:22.240 +Llama is this model you can run on your own machine from Meta. + +00:10:23.580 --> 00:10:26.880 +There's many fine-tuned models that you could download + +00:10:26.881 --> 00:10:28.960 +and you could run on your own. + +00:10:28.961 --> 00:10:30.839 +They can do very different things too. + +00:10:30.840 --> 00:10:33.399 +Some output Python programs, for example, + +00:10:33.400 --> 00:10:34.279 +that you could just run. + +00:10:34.280 --> 00:10:37.959 +So you just say... + +00:10:37.960 --> 00:10:40.639 +Tell me how old... Let's just say + +00:10:40.640 --> 00:10:41.999 +you have a random task, like + +00:10:42.000 --> 00:10:48.119 +tell me how old these five cities are in minutes, + +00:10:48.120 --> 00:10:49.799 +based on historical evidence. + +00:10:49.800 --> 00:10:53.639 +It's kind of a weird query, but it probably can figure, + +00:10:53.640 --> 00:10:55.119 +it could probably run that for you. + +00:10:55.120 --> 00:10:57.239 +It'll encode its knowledge into whatever + +00:10:57.240 --> 00:10:59.599 +the Python program, then use the Python program + +00:10:59.600 --> 00:11:01.039 +to do the correct calculations. + +00:11:01.040 --> 00:11:05.679 +So pretty, pretty useful stuff. + +NOTE Open Source + +00:11:08.160 --> 00:11:10.399 +So I also want to mention open source + +00:11:10.400 --> 00:11:12.679 +and basically free software here. + +00:11:12.680 --> 00:11:17.599 +These LLMs are mostly not free software. + +00:11:17.600 --> 00:11:19.159 +They're sometimes open source, + +00:11:19.160 --> 00:11:21.959 +but they're generally not free + +00:11:21.960 --> 00:11:23.799 +without restrictions to use. + +00:11:23.800 --> 00:11:27.279 +Most of these things, even Llama, + +00:11:27.280 --> 00:11:28.679 +which you can use on your own machine, + +00:11:28.680 --> 00:11:31.439 +have restrictions that you cannot use it + +00:11:31.440 --> 00:11:32.519 +to train your own model. + +00:11:32.520 --> 00:11:35.119 +This is something that, you know, + +00:11:35.120 --> 00:11:37.519 +it costs millions and millions of dollars + +00:11:37.520 --> 00:11:40.759 +to train and produce these models. + +00:11:40.760 --> 00:11:42.319 +And that's just computation costs. + +00:11:42.320 --> 00:11:45.519 +They do not want you + +00:11:45.520 --> 00:11:47.839 +stealing all that work by training your own models + +00:11:47.840 --> 00:11:48.799 +based on their output. + +00:11:48.800 --> 00:11:55.359 +But there are research LLMs that do, I believe, + +00:11:55.360 --> 00:11:57.999 +conform to free software principles. + +00:11:58.000 --> 00:11:59.519 +They're just not as good yet. + +00:11:59.520 --> 00:12:02.519 +And I think that might change in the future. + +NOTE The Future + +00:12:02.840 --> 00:12:04.119 +So speaking of the future, + +00:12:04.120 --> 00:12:07.519 +one of the things I'd like to point out + +00:12:07.520 --> 00:12:09.639 +is that like the demos I showed you are based on, + +00:12:09.640 --> 00:12:13.519 +I'm using OpenAI 3.5 model. + +00:12:13.520 --> 00:12:16.439 +That's more than, well, no, + +00:12:16.440 --> 00:12:18.199 +it's like a year old basically at this point. + +00:12:18.200 --> 00:12:21.079 +And things are moving fast. + +00:12:21.080 --> 00:12:22.039 +They came out with 4.0. + +00:12:22.040 --> 00:12:23.319 +4.0 is significantly better. + +00:12:23.320 --> 00:12:24.319 +I don't have access to it. + +00:12:24.320 --> 00:12:30.839 +Even though I'm using the API and I'm paying money for it, + +00:12:30.840 --> 00:12:33.639 +you only can get access to 4.0 + +00:12:33.640 --> 00:12:34.439 +if you can spend a dollar. + +00:12:34.440 --> 00:12:36.319 +And I've never been able to spend, + +00:12:36.320 --> 00:12:38.199 +use so much API use that I've spent a dollar. + +00:12:38.200 --> 00:12:44.479 +So I have, I don't have 4.0, but I've tried it + +00:12:44.480 --> 00:12:46.639 +because I do pay for this + +00:12:46.640 --> 00:12:48.340 +so I could get access to 4.0 + +00:12:48.341 --> 00:12:49.599 +and it is substantially better. + +00:12:49.600 --> 00:12:50.519 +By all reports, it's, + +00:12:50.520 --> 00:12:53.839 +the difference is extremely significant. + +00:12:53.840 --> 00:12:55.159 +I would not be surprised + +00:12:55.160 --> 00:12:59.759 +if some of the limitations and drawbacks I described + +00:12:59.760 --> 00:13:02.039 +mostly went away with 4.0. + +00:13:02.040 --> 00:13:06.679 +We're probably at a stage + +00:13:06.680 --> 00:13:09.239 +where regexes will work maybe 5% of the time + +00:13:09.240 --> 00:13:10.119 +if you try them. + +00:13:10.120 --> 00:13:13.639 +But with 4.0, it could work like 80% of the time. + +00:13:13.640 --> 00:13:14.559 +Now, is that good enough? + +00:13:14.560 --> 00:13:17.279 +Probably not, but it's a, + +00:13:17.280 --> 00:13:20.319 +I wouldn't be surprised if you got results like that. + +00:13:20.320 --> 00:13:22.919 +And in a year's time, in two years time, + +00:13:22.920 --> 00:13:26.679 +no one knows how much this is going to play out + +00:13:26.680 --> 00:13:27.519 +before progress stalls, + +00:13:27.520 --> 00:13:32.319 +but there are a lot of interesting research. + +00:13:32.320 --> 00:13:34.279 +I don't think, research wise, + +00:13:34.280 --> 00:13:35.759 +I don't think things have slowed down. + +00:13:35.760 --> 00:13:38.719 +You're still seeing a lot of advances. + +00:13:38.720 --> 00:13:40.999 +You're still seeing a lot of models coming out + +00:13:41.000 --> 00:13:41.839 +and that will come out. + +00:13:41.840 --> 00:13:46.279 +That will be each one, one upping the other one + +00:13:46.280 --> 00:13:49.959 +in terms of quality. + +00:13:49.960 --> 00:13:52.759 +It'll be really interesting to see how this all plays out. + +00:13:52.760 --> 00:13:55.919 +I think that message here is that + +00:13:55.920 --> 00:13:57.999 +we're at the beginning here. + +00:13:58.000 --> 00:14:01.239 +This is why I think this talk is important. + +00:14:01.240 --> 00:14:02.279 +I think this is why we should be + +00:14:02.280 --> 00:14:04.159 +paying attention to this stuff. + +NOTE LLMs in Emacs - existing packages + +00:14:08.200 --> 00:14:11.039 +Let's talk about the existing packages. + +00:14:11.040 --> 00:14:13.199 +Because there's a lot out there, people have, + +00:14:13.200 --> 00:14:17.039 +I think people have been integrating with + +00:14:17.040 --> 00:14:21.239 +these LLMs that often have a relatively easy to use API. + +00:14:21.240 --> 00:14:24.039 +So it's kind of natural that people + +00:14:24.040 --> 00:14:25.679 +have already put out a lot of packages. + +00:14:25.680 --> 00:14:28.319 +Coming off this problem from a lot of different angles, + +00:14:28.320 --> 00:14:30.639 +I don't have time to go through + +00:14:30.640 --> 00:14:31.959 +all of these packages. + +00:14:31.960 --> 00:14:33.559 +These are great packages though. + +00:14:33.560 --> 00:14:35.279 +If you're not familiar with them, + +00:14:35.280 --> 00:14:37.679 +please check them out. + +00:14:37.680 --> 00:14:40.999 +And they all are doing slightly different things. + +00:14:41.000 --> 00:14:43.959 +Some of these are relatively straightforward. + +00:14:43.960 --> 00:14:47.919 +Interactions, just a way to + +00:14:47.920 --> 00:14:52.679 +almost in a comment sort of way to kind of + +00:14:52.680 --> 00:14:54.199 +have just an interaction, + +00:14:54.200 --> 00:14:55.479 +long running interaction with an LLM + +00:14:55.480 --> 00:14:59.039 +where you kind of build off previous responses, + +00:14:59.040 --> 00:15:01.799 +kind of like the OpenAI's UI. + +00:15:01.800 --> 00:15:08.559 +Two very more Emacsy things where you can sort of + +00:15:08.560 --> 00:15:13.679 +embed these LLM responses within a org-mode block + +00:15:13.680 --> 00:15:15.239 +using the org-mode's context. + +00:15:15.240 --> 00:15:20.959 +Or GitHub Copilot integration where you can use it + +00:15:20.960 --> 00:15:23.319 +for auto completion in a very powerful, + +00:15:23.320 --> 00:15:27.319 +you know, this stuff is very useful if it could figure out + +00:15:27.320 --> 00:15:29.199 +what you're trying to do based on the context. + +00:15:29.200 --> 00:15:31.839 +It's quite effective. + +00:15:31.840 --> 00:15:36.359 +But I want to kind of call out one thing + +00:15:36.360 --> 00:15:38.239 +that I'd like to see change. + +00:15:38.240 --> 00:15:42.599 +Which is that users right now, + +00:15:42.600 --> 00:15:45.199 +not all of these have a choice of, + +00:15:45.200 --> 00:15:47.959 +first of all, there's a lot of them. + +00:15:47.960 --> 00:15:49.639 +Each one of them is doing their own calls. + +00:15:49.640 --> 00:15:53.999 +And each one of them is, so each one of them + +00:15:54.000 --> 00:15:55.239 +has their own interfaces. + +00:15:55.240 --> 00:15:57.719 +They're rewriting the interface to OpenAI or wherever. + +00:15:57.720 --> 00:16:00.119 +And they're not, they don't, most of these + +00:16:00.120 --> 00:16:05.119 +do not make it that configurable or at all configurable + +00:16:05.120 --> 00:16:06.599 +what LLM use. + +00:16:06.600 --> 00:16:07.239 +This is not good. + +00:16:07.240 --> 00:16:09.679 +It is important that we use, + +00:16:09.680 --> 00:16:15.679 +we give the user a way to change the LLM they use. + +00:16:15.680 --> 00:16:21.079 +And that is because you might not be comfortable + +00:16:21.080 --> 00:16:24.439 +sending your requests over to a private corporation + +00:16:24.440 --> 00:16:27.799 +where you don't get to see how they use their data. + +00:16:27.800 --> 00:16:29.799 +Your data, really. + +00:16:29.800 --> 00:16:33.319 +That's especially true with things like embeddings + +00:16:33.320 --> 00:16:35.039 +where you might be sending over your documents. + +00:16:35.040 --> 00:16:37.519 +You're just giving them your documents, basically. + +00:16:37.520 --> 00:16:40.759 +And, you know, that does happen. + +00:16:40.760 --> 00:16:43.599 +I don't think really that there's a reason + +00:16:43.600 --> 00:16:44.639 +to be uncomfortable with this, + +00:16:44.640 --> 00:16:51.439 +but that, you know, people are uncomfortable and that's okay. + +00:16:51.440 --> 00:16:53.239 +People might want to use a local machine, + +00:16:53.240 --> 00:16:58.359 +a local LLM for maximum privacy. + +00:16:58.360 --> 00:17:00.639 +That's something we should allow. + +00:17:00.640 --> 00:17:04.519 +People might want to especially use free software. + +00:17:04.520 --> 00:17:05.839 +That's something we should definitely allow. + +00:17:05.840 --> 00:17:07.279 +This is Emacs. + +00:17:07.280 --> 00:17:08.239 +We need to encourage that. + +00:17:08.240 --> 00:17:12.159 +But right now, as most of these things are written, + +00:17:12.160 --> 00:17:13.959 +you can't do it. + +00:17:13.960 --> 00:17:17.839 +And they're spending precious time + +00:17:17.840 --> 00:17:18.879 +just doing things themselves. + +00:17:18.880 --> 00:17:20.839 +This is why I wrote LLM, which is... + +00:17:20.840 --> 00:17:23.039 +it will just make that connection to the LLM for you + +00:17:23.040 --> 00:17:26.719 +and it will connect to, you know, it has plugins. + +00:17:26.720 --> 00:17:30.279 +So if you can, the user can configure what plugin + +00:17:30.280 --> 00:17:31.359 +it actually goes to. + +00:17:31.360 --> 00:17:32.399 +Does it go to OpenAI? + +00:17:32.400 --> 00:17:35.239 +Does it go to Google Cloud Vertex? + +00:17:35.240 --> 00:17:36.999 +Does it go to Llama on your machine? + +00:17:37.000 --> 00:17:38.399 +We're using Ollama, + +00:17:38.400 --> 00:17:40.999 +which is just a way to run Llama locally. + +00:17:41.000 --> 00:17:47.959 +And more things in the future, I hope. + +00:17:47.960 --> 00:17:52.079 +So this is, I'm hoping that we use this. + +00:17:52.080 --> 00:17:54.839 +It's designed to be sort of maximally usable. + +00:17:54.840 --> 00:17:56.279 +You don't need to install anything. + +00:17:56.280 --> 00:17:58.359 +It's on GNU ELPA. + +00:17:58.360 --> 00:17:59.879 +So even if you write something + +00:17:59.880 --> 00:18:01.079 +that you want to contribute to GNU ELPA, + +00:18:01.080 --> 00:18:02.879 +you can use it because it's on GNU ELPA. + +00:18:02.880 --> 00:18:06.439 +It's part of the Emacs package, Emacs core packages. + +00:18:06.440 --> 00:18:09.879 +So, but it has no functionality. + +00:18:09.880 --> 00:18:11.719 +It's really just there as a library + +00:18:11.720 --> 00:18:14.439 +to use by other things offering functionality. Okay. + +NOTE Abstracting LLM challenges + +00:18:15.960 --> 00:18:19.839 +And it's a little bit difficult to abstract. + +00:18:19.840 --> 00:18:21.159 +I want to point this out + +00:18:21.160 --> 00:18:23.599 +because I think it's an important point + +00:18:23.600 --> 00:18:29.519 +is that the, it's, some of these LLMs, for example, + +00:18:29.520 --> 00:18:30.439 +have image generation. + +00:18:30.440 --> 00:18:31.279 +Some do not. + +00:18:31.280 --> 00:18:35.319 +Some of them have very large context windows, even for chat. + +00:18:35.320 --> 00:18:36.999 +You say, okay, all these things can do chat. + +00:18:37.000 --> 00:18:37.319 +Okay. + +00:18:37.320 --> 00:18:38.079 +Yeah, kind of. + +00:18:38.080 --> 00:18:39.999 +Some of these things you could pass a book to, + +00:18:40.000 --> 00:18:41.239 +like Anthropic's API. + +00:18:41.240 --> 00:18:43.039 +Most, you cannot. + +00:18:43.040 --> 00:18:45.559 +So there really are big differences + +00:18:45.560 --> 00:18:46.399 +in how these things work. + +00:18:46.400 --> 00:18:51.539 +I hope those differences diminish in the future. + +00:18:51.540 --> 00:18:53.800 +But it's just one of the challenges + +00:18:53.801 --> 00:18:57.520 +that I hope we can work through in the LLM library. + +00:18:57.521 --> 00:19:02.160 +So it's compatible, but there's definitely + +00:19:02.161 --> 00:19:04.079 +limits to that compatibility. + +NOTE Emacs is the ideal interface for LLMs + +00:19:04.080 --> 00:19:06.160 +I want to point out just to finish off, + +00:19:06.161 --> 00:19:12.879 +Emacs is the, Emacs has real power here + +00:19:12.880 --> 00:19:15.679 +that nothing else I think in the industry is offering. + +00:19:15.680 --> 00:19:19.279 +First of all, people that use Emacs + +00:19:19.280 --> 00:19:20.439 +tend to do a lot of things in Emacs. + +00:19:20.440 --> 00:19:22.159 +We have our to-dos in Emacs with the org mode. + +00:19:22.160 --> 00:19:22.999 +We have mail. + +00:19:23.000 --> 00:19:25.719 +We, you know, we might read email and we might, + +00:19:25.720 --> 00:19:27.679 +and respond to email in Emacs. + +00:19:27.680 --> 00:19:29.199 +We might have notes in Emacs. + +00:19:29.200 --> 00:19:31.359 +This is very powerful. + +00:19:31.360 --> 00:19:34.159 +Using... there's not other stuff like that. + +00:19:34.160 --> 00:19:35.759 +And you could feed this stuff to an LLM. + +00:19:35.760 --> 00:19:37.039 +You could do interesting things + +00:19:37.040 --> 00:19:38.559 +using a combination of all this data. + +00:19:38.560 --> 00:19:40.399 +No one else could do this. + +00:19:40.400 --> 00:19:41.759 +We need to start thinking about it. + +00:19:41.760 --> 00:19:45.039 +Secondly, Emacs can execute commands. + +00:19:45.040 --> 00:19:46.239 +This might be a bad idea. + +00:19:46.240 --> 00:19:48.399 +This might be how the robots take over, + +00:19:48.400 --> 00:19:51.799 +but you could have the LLMs respond with Emacs + +00:19:51.800 --> 00:19:54.199 +commands and run those Emacs commands + +00:19:54.200 --> 00:19:57.079 +and tell the LLM the response and have it do things + +00:19:57.080 --> 00:19:58.679 +as your agent in the editor. + +00:19:58.680 --> 00:20:01.599 +I think we need to explore ideas like this. + +NOTE Outro + +00:20:01.960 --> 00:20:04.279 +And I think we need to share these ideas + +00:20:04.280 --> 00:20:07.039 +and we need to make sure that we're pushing the + +00:20:07.040 --> 00:20:10.519 +envelope for Emacs and actually, you know, doing things, + +00:20:10.520 --> 00:20:12.959 +sharing ideas, sharing progress, + +00:20:12.960 --> 00:20:15.199 +and kind of seeing how far we can push this stuff. + +00:20:15.200 --> 00:20:20.639 +Let's really help Emacs out, be sort of, + +00:20:20.640 --> 00:20:24.519 +take advantage of this super powerful technique. + +00:20:24.520 --> 00:20:26.160 +Thank you for listening. diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt new file mode 100644 index 00000000..277f3dd1 --- /dev/null +++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt @@ -0,0 +1,1019 @@ +WEBVTT + + +00:00:03.540 --> 00:00:03.939 +[Speaker 0]: I would invite all on the, + +00:00:04.600 --> 00:00:04.960 +who are currently watching, + +00:00:06.819 --> 00:00:07.200 +who have questions, put them into the pad + +00:00:08.940 --> 00:00:09.440 +that I can ask them. I'm kind of monitoring + +00:00:16.320 --> 00:00:16.720 +the IRC concurrently. So the first question + +00:00:18.640 --> 00:00:18.800 +that we have on the pad is concerning why you + +00:00:19.600 --> 00:00:20.100 +have switched from OCaml. + +00:00:22.420 --> 00:00:22.800 +Maybe the person has missed it in the talk, + +00:00:23.480 --> 00:00:23.980 +if you've mentioned it. + +00:00:25.080 --> 00:00:25.320 +Why have you switched from OCaml to, + +00:00:25.920 --> 00:00:26.180 +in this case, I guess, + +00:00:26.180 --> 00:00:26.680 +Rust? + +00:00:30.960 --> 00:00:31.080 +[Speaker 1]: Yeah, I mentioned like with writing a + +00:00:34.280 --> 00:00:34.440 +language server that I wrote mine for my + +00:00:36.900 --> 00:00:37.120 +company in OCaml But I wouldn't recommend it + +00:00:38.960 --> 00:00:39.220 +just in general unless like you're doing + +00:00:41.720 --> 00:00:42.040 +something specific with OCaml And the reason + +00:00:44.180 --> 00:00:44.340 +for that and I recommended Rust or like + +00:00:45.780 --> 00:00:46.100 +TypeScript is like OCaml is great. + +00:00:49.080 --> 00:00:49.360 +It's very performant but it's cross + +00:00:50.739 --> 00:00:51.100 +compilation story is not great. + +00:00:54.100 --> 00:00:54.340 +It's like really hard to cross compile like + +00:00:55.840 --> 00:00:56.320 +from 1 platform to another. + +00:00:58.120 --> 00:00:58.540 +And then like the ecosystem and its standard + +00:01:00.380 --> 00:01:00.880 +library is also not great. + +00:01:03.460 --> 00:01:03.640 +And like Rust, its cross compilation is + +00:01:05.820 --> 00:01:06.320 +great. Its ecosystem is great. + +00:01:08.720 --> 00:01:09.060 +OCaml is great if you need to use it, + +00:01:10.880 --> 00:01:11.380 +but it's just it's not ideal. + +00:01:14.220 --> 00:01:14.340 +And there's just also no good examples of a + +00:01:15.240 --> 00:01:15.740 +language server in OCaml. + +00:01:19.119 --> 00:01:19.619 +There's the official like OCaml language + +00:01:22.920 --> 00:01:23.420 +server, But they use a ton of super advanced + +00:01:27.380 --> 00:01:27.540 +language features, like module functors and a + +00:01:28.440 --> 00:01:28.700 +bunch of other random stuff. + +00:01:29.479 --> 00:01:29.979 +So it's not really readable. + +00:01:31.860 --> 00:01:32.300 +But Rust, there's Rust analyzer, + +00:01:33.340 --> 00:01:33.780 +which is readable. In TypeScript, + +00:01:34.860 --> 00:01:35.360 +there's like a million different ones. + +00:01:39.340 --> 00:01:39.660 +So it's less of a, not OCaml is like, + +00:01:40.920 --> 00:01:41.280 +it's not that OCaml isn't great. + +00:01:43.320 --> 00:01:43.440 +It's more of a, these other languages would + +00:01:44.160 --> 00:01:44.660 +probably just be easier. + +00:01:45.280 --> 00:01:45.780 +So. + +00:01:48.619 --> 00:01:48.920 +[Speaker 0]: I guess since the integration to, + +00:01:50.820 --> 00:01:51.000 +for example, like NeoVim or some other + +00:01:53.320 --> 00:01:53.460 +editors are just revenue fine because of the + +00:01:56.920 --> 00:01:57.420 +[Speaker 1]: Sorry, can you say that again? + +00:01:58.580 --> 00:01:59.080 +[Speaker 0]: LSP, I guess. The LSP, + +00:02:01.979 --> 00:02:02.100 +so it's a standard LSP specification that + +00:02:03.080 --> 00:02:03.400 +you're using. So you can also, + +00:02:04.920 --> 00:02:05.340 +for instance, use it and other editors, + +00:02:06.660 --> 00:02:07.160 +like for instance, new them or so. + +00:02:08.680 --> 00:02:08.940 +[Speaker 1]: Yeah. Yeah. You can use it. + +00:02:11.680 --> 00:02:11.920 +It's most, most editors nowadays support it. + +00:02:13.280 --> 00:02:13.780 +Like obviously Emacs, NeoVim, + +00:02:16.420 --> 00:02:16.840 +Sublime, VS code, Intel, + +00:02:17.700 --> 00:02:18.200 +all the IntelliJ ones. + +00:02:21.560 --> 00:02:21.960 +So yeah, that's, that's the fun part. + +00:02:23.440 --> 00:02:23.760 +You don't have to write 10 different + +00:02:26.500 --> 00:02:27.000 +languages to get a bunch of editor support. + +00:02:30.200 --> 00:02:30.300 +[Speaker 0]: Also experience writing it. + +00:02:33.820 --> 00:02:34.040 +So I didn't have really time to hear into + +00:02:36.300 --> 00:02:36.560 +your talk. So I'm sorry if I ask you + +00:02:38.100 --> 00:02:38.600 +questions that you have already said. + +00:02:41.400 --> 00:02:41.900 +How was the experience of writing an LSP? + +00:02:44.340 --> 00:02:44.480 +So have you any knowledge beforehand or do + +00:02:45.600 --> 00:02:46.100 +you just read it all on yourself? + +00:02:49.200 --> 00:02:49.700 +[Speaker 1]: Yeah, there's not a ton of documentation, + +00:02:53.440 --> 00:02:53.940 +which is what motivated me to do this talk. + +00:02:56.380 --> 00:02:56.580 +Basically, I just looked at the + +00:02:58.820 --> 00:02:58.980 +specification, and I knew Rust Analyzer was + +00:03:00.240 --> 00:03:00.740 +cool. And so I looked at Rust Analyzer, + +00:03:01.600 --> 00:03:02.100 +and I looked at PyRite. + +00:03:04.200 --> 00:03:04.700 +And I just went from there. + +00:03:07.920 --> 00:03:08.420 +I found out about all this because I already + +00:03:10.240 --> 00:03:10.440 +using Emacs, I already knew about it. + +00:03:12.160 --> 00:03:12.660 +I was like, this is going to be easier than + +00:03:15.020 --> 00:03:15.480 +something else. So yeah, + +00:03:17.720 --> 00:03:18.220 +there's the experience is fine. + +00:03:21.060 --> 00:03:21.300 +It's just a lot of wiring stuff up. + +00:03:24.100 --> 00:03:24.320 +It's not a lot of like hard thinking until + +00:03:26.200 --> 00:03:26.700 +you get to like performance heavy stuff. + +00:03:27.740 --> 00:03:28.080 +Like, so for some graph, + +00:03:30.760 --> 00:03:31.260 +like we're doing a ton of like code parsing + +00:03:32.980 --> 00:03:33.480 +and like analyzing. And so that's, + +00:03:35.760 --> 00:03:36.260 +it takes up like a ton of processing power. + +00:03:37.280 --> 00:03:37.600 +So like for stuff like that, + +00:03:39.620 --> 00:03:39.840 +like now you have to think about caching and + +00:03:43.980 --> 00:03:44.380 +like ordering things. So that part's hard, + +00:03:47.180 --> 00:03:47.420 +but that's more of a, like very much + +00:03:48.640 --> 00:03:49.140 +application specific thing. + +00:03:58.320 --> 00:03:58.620 +[Speaker 0]: Right. Anything in the IRC chat. + +00:04:01.840 --> 00:04:02.340 +I think not. It's nothing I can see. + +00:04:13.380 --> 00:04:13.520 +No questions, that's kind of odd to be + +00:04:17.440 --> 00:04:17.860 +honest. I cannot really ask questions + +00:04:18.680 --> 00:04:19.180 +concerning LSP specific. + +00:04:22.400 --> 00:04:22.900 +[Speaker 1]: Yeah, no worries. + +00:04:31.460 --> 00:04:31.960 +[Speaker 0]: Good question, what could be asked? + +00:04:35.740 --> 00:04:36.140 +Let's call, let's ask something very + +00:04:38.260 --> 00:04:38.680 +unspecific concerning the Emacs usage. + +00:04:39.340 --> 00:04:39.760 +And when have you started? + +00:04:41.580 --> 00:04:41.780 +How did you came through it and stuff like + +00:04:41.780 --> 00:04:42.280 +this? + +00:04:46.560 --> 00:04:46.960 +[Speaker 1]: Yeah. I like and when I was in high school, + +00:04:48.480 --> 00:04:48.980 +me and my friends just were like, + +00:04:51.820 --> 00:04:52.320 +got obsessed with Linux for whatever reason. + +00:04:53.940 --> 00:04:54.140 +And then like we traveled down like the, + +00:04:55.560 --> 00:04:56.060 +like the free software, + +00:04:57.700 --> 00:04:57.940 +like we just thought that was like very + +00:05:00.040 --> 00:05:00.160 +entertaining and like interesting to read + +00:05:01.200 --> 00:05:01.700 +about all the free software stuff. + +00:05:03.120 --> 00:05:03.480 +They were like, yeah, that's cool. + +00:05:04.540 --> 00:05:05.040 +And so we all started using Linux. + +00:05:06.960 --> 00:05:07.200 +And I'm like, well, if I'm using free + +00:05:08.300 --> 00:05:08.740 +software, I'm going to use Emacs. + +00:05:12.280 --> 00:05:12.440 +And so I started using Emacs just to try it + +00:05:13.940 --> 00:05:14.440 +out. And then I kind of got, + +00:05:16.880 --> 00:05:17.380 +I feel like, Stockholm syndrome into it. + +00:05:18.720 --> 00:05:19.220 +And now I've realized like, + +00:05:21.860 --> 00:05:22.360 +I don't know, now that I've done the like + +00:05:23.880 --> 00:05:24.340 +actual work to get into Emacs, + +00:05:26.280 --> 00:05:26.480 +it's just, there's so much more I can do with + +00:05:30.300 --> 00:05:30.800 +it. But yeah, it was somewhat unintentional. + +00:05:36.100 --> 00:05:36.420 +[Speaker 0]: I probably have the same course I've started + +00:05:37.780 --> 00:05:38.280 +like 2 years ago using Emacs. + +00:05:42.720 --> 00:05:42.940 +And also just, oh, there's at first some cool + +00:05:45.020 --> 00:05:45.340 +people on YouTube, so systems crafters and + +00:05:46.300 --> 00:05:46.800 +people like this. And also, + +00:05:49.440 --> 00:05:49.740 +ah, VS Code, I used a lot of VS Code + +00:05:53.560 --> 00:05:53.860 +beforehand and then VS Codium because open + +00:05:55.640 --> 00:05:55.860 +source and then oh are there any other + +00:05:58.020 --> 00:05:58.180 +alternatives and I came to like Neovim and + +00:06:01.160 --> 00:06:01.440 +Emacs and often switching around but I stick + +00:06:03.220 --> 00:06:03.720 +to Emacs at some point to be honest. + +00:06:07.180 --> 00:06:07.540 +[Speaker 1]: Yeah, I think Emacs also just looks really + +00:06:08.500 --> 00:06:09.000 +cool. I will say that. + +00:06:14.240 --> 00:06:14.640 +And also just like I like Vim. + +00:06:16.960 --> 00:06:17.240 +Vim is cool but like being able to like write + +00:06:19.240 --> 00:06:19.540 +lists and like modify your editor on the fly + +00:06:20.920 --> 00:06:21.420 +is just like very appealing to me. + +00:06:23.860 --> 00:06:24.140 +I don't know, Emacs was tough at first + +00:06:25.520 --> 00:06:25.680 +because like all the like default key + +00:06:28.380 --> 00:06:28.440 +bindings are just kind of like and then and + +00:06:29.860 --> 00:06:30.040 +then I read somewhere someone was like yeah + +00:06:33.220 --> 00:06:33.460 +well Richard Stallman uses evil mode so it's + +00:06:36.220 --> 00:06:36.460 +okay. I was like alright I can that's like + +00:06:38.000 --> 00:06:38.200 +blessing enough for me Like I'm just gonna + +00:06:39.520 --> 00:06:39.720 +switch to evil mode. And I was like, + +00:06:42.160 --> 00:06:42.360 +this is way, way better as far as key + +00:06:42.920 --> 00:06:43.420 +bindings go. + +00:06:46.720 --> 00:06:47.020 +[Speaker 0]: Kind of relates. So I switched for, + +00:06:49.900 --> 00:06:50.040 +I think, half a year to the default key + +00:06:51.300 --> 00:06:51.800 +bindings from Vim beforehand. + +00:06:54.960 --> 00:06:55.240 +I switched back to Evil and now I'm losing + +00:06:56.100 --> 00:06:56.600 +some kind of hybrid styles. + +00:07:01.000 --> 00:07:01.120 +It's kind of weird. But we have a question on + +00:07:03.260 --> 00:07:03.700 +the pad. So what are the corner cases, + +00:07:05.380 --> 00:07:05.880 +limitations, and other issues you encountered + +00:07:08.860 --> 00:07:09.020 +in implementing an LSP server with client in + +00:07:09.940 --> 00:07:10.440 +Emacs that were surprising? + +00:07:13.680 --> 00:07:13.860 +[Speaker 1]: Yeah, I would say the corner cases and + +00:07:15.280 --> 00:07:15.780 +limitations are definitely like, + +00:07:16.960 --> 00:07:17.220 +once again, they're going to be very + +00:07:18.960 --> 00:07:19.160 +application specific, but it's usually just + +00:07:22.420 --> 00:07:22.680 +the performance part. So like I was saying + +00:07:24.680 --> 00:07:24.900 +before, right, in general if you're doing + +00:07:26.120 --> 00:07:26.620 +language tooling, you're gonna be doing + +00:07:29.760 --> 00:07:30.080 +either parsing or interpreting or something + +00:07:31.560 --> 00:07:31.880 +like that, which is very just like + +00:07:34.740 --> 00:07:35.080 +computationally heavy and so if you're trying + +00:07:36.900 --> 00:07:37.060 +to like do that stuff while someone is + +00:07:38.520 --> 00:07:39.000 +editing a file right like every keystrokes + +00:07:42.660 --> 00:07:42.840 +every like 1 to 2 seconds if they have a fast + +00:07:44.240 --> 00:07:44.540 +computer that's great but a lot of people + +00:07:46.400 --> 00:07:46.560 +don't have like that fast of a computer that + +00:07:49.480 --> 00:07:49.740 +they can go and like do compilation every + +00:07:51.680 --> 00:07:52.180 +single keystroke. So like, + +00:07:54.080 --> 00:07:54.580 +I would say, I would say the like limitation + +00:07:56.920 --> 00:07:57.080 +is just how fast your computer is and how + +00:07:59.140 --> 00:07:59.340 +good you are at like implementing caching for + +00:08:01.020 --> 00:08:01.520 +like whatever you're doing. + +00:08:04.080 --> 00:08:04.280 +That's also just the main issues I've run + +00:08:08.080 --> 00:08:08.580 +into is just it's a constant uphill battle. + +00:08:12.120 --> 00:08:12.560 +People will somehow find larger and larger + +00:08:14.580 --> 00:08:15.080 +files. You'll end up with files that are like + +00:08:17.320 --> 00:08:17.680 +thousands, like tens of thousands of lines + +00:08:18.700 --> 00:08:18.940 +long and you think yeah, + +00:08:21.340 --> 00:08:21.840 +surely no 1 would expect like instantaneous + +00:08:25.440 --> 00:08:25.640 +response for like like editing a file that + +00:08:26.820 --> 00:08:27.040 +has like tens of thousands of lines, + +00:08:30.000 --> 00:08:30.180 +but then they do. As far as corner cases go, + +00:08:31.960 --> 00:08:32.459 +I would say the corner case is like, + +00:08:37.760 --> 00:08:37.919 +just in general is actually distributing the + +00:08:41.039 --> 00:08:41.200 +language server. Cause like writing the + +00:08:42.340 --> 00:08:42.840 +language server is fine. + +00:08:44.540 --> 00:08:44.900 +Like wiring everything up is fine. + +00:08:47.180 --> 00:08:47.300 +But then like, once you actually have to go + +00:08:47.960 --> 00:08:48.120 +and distribute it, well, + +00:08:49.200 --> 00:08:49.700 +now you're distributing in a binary. + +00:08:51.660 --> 00:08:52.160 +Like I was saying before with OCaml, + +00:08:53.940 --> 00:08:54.440 +doesn't have great cross compilation. + +00:08:58.840 --> 00:08:59.340 +So for some graph for our language server, + +00:09:01.560 --> 00:09:02.060 +we target Linux and Mac OS, + +00:09:03.840 --> 00:09:04.340 +and we have a ton of people who use Windows, + +00:09:06.960 --> 00:09:07.440 +but compiling OCaml for Windows is basically + +00:09:10.080 --> 00:09:10.440 +impossible. So our corner case there, + +00:09:11.980 --> 00:09:12.480 +the way we solved it was now we're + +00:09:14.160 --> 00:09:14.660 +transpiling OCaml to JavaScript, + +00:09:17.080 --> 00:09:17.560 +which is a huge can of worms. + +00:09:18.840 --> 00:09:19.040 +Like it's a lot of fun. + +00:09:19.400 --> 00:09:19.900 +It's very interesting, + +00:09:22.860 --> 00:09:23.360 +but like it's not ideal. + +00:09:24.340 --> 00:09:24.720 +And so that's what I was saying before. + +00:09:26.360 --> 00:09:26.580 +I recommend like Rust or TypeScript because + +00:09:29.580 --> 00:09:29.820 +those are way more portable and a lot easier + +00:09:31.280 --> 00:09:31.780 +to install. And you don't have to worry about + +00:09:33.600 --> 00:09:34.100 +any of that weird packaging stuff. + +00:09:37.600 --> 00:09:38.080 +So yeah, I would say that's like the main + +00:09:40.260 --> 00:09:40.760 +corner case and the main limitation is just + +00:09:41.720 --> 00:09:42.220 +speed and caching. + +00:09:47.160 --> 00:09:47.640 +[Speaker 0]: You mentioned this obscure large file so + +00:09:49.000 --> 00:09:49.160 +someone doesn't want to refactor or + +00:09:51.760 --> 00:09:52.200 +something. How did you start? + +00:09:54.480 --> 00:09:54.620 +So did you have any way to still be + +00:09:56.320 --> 00:09:56.580 +relatively performant when they have big + +00:09:58.020 --> 00:09:58.520 +files or is it just not supported? + +00:09:58.920 --> 00:09:59.420 +I don't care. + +00:10:03.140 --> 00:10:03.640 +[Speaker 1]: Yeah, no, we, so we support larger files now + +00:10:05.460 --> 00:10:05.960 +And the way we ended up doing that, + +00:10:11.480 --> 00:10:11.980 +so SemGrep is like you write this generic + +00:10:14.540 --> 00:10:14.900 +pattern. You kind of write the language, + +00:10:17.160 --> 00:10:17.320 +but then there's these other symbols and + +00:10:18.760 --> 00:10:19.160 +stuff that are included in that, + +00:10:19.760 --> 00:10:20.260 +this like meta language. + +00:10:22.420 --> 00:10:22.580 +And so what happens is, + +00:10:23.600 --> 00:10:24.100 +is most languages get, + +00:10:27.720 --> 00:10:27.900 +they get parsed and then into a syntax tree, + +00:10:29.180 --> 00:10:29.600 +right? Like whatever the language is syntax + +00:10:30.620 --> 00:10:31.120 +tree is, and then they get, + +00:10:33.800 --> 00:10:34.000 +the syntax tree gets converted into this, + +00:10:35.860 --> 00:10:36.360 +like, we call it like an abstract syntax + +00:10:38.080 --> 00:10:38.300 +tree, which is like abstract from like any, + +00:10:39.860 --> 00:10:40.360 +like languages specific syntax tree. + +00:10:41.940 --> 00:10:42.380 +And so then we can cache that, + +00:10:44.480 --> 00:10:44.760 +which is really good because like if someone + +00:10:47.700 --> 00:10:47.920 +types something like we don't have to go + +00:10:50.280 --> 00:10:50.440 +through and do like the full parsing and like + +00:10:51.560 --> 00:10:51.760 +converting, we only have to do it + +00:10:54.960 --> 00:10:55.200 +incrementally. And so that's, + +00:10:56.100 --> 00:10:56.420 +that's how we dealt with that. + +00:10:58.140 --> 00:10:58.640 +Or the other option is that we just, + +00:11:00.720 --> 00:11:01.180 +we just cache whatever the previous results + +00:11:03.460 --> 00:11:03.960 +are, and then run it asynchronously, + +00:11:04.960 --> 00:11:05.460 +and they might get it delayed. + +00:11:08.200 --> 00:11:08.700 +But we've ended up doing more AST caching, + +00:11:09.880 --> 00:11:10.380 +which is fun and cool. + +00:11:15.600 --> 00:11:15.900 +[Speaker 0]: Sounds good. So we have here a question from + +00:11:18.240 --> 00:11:18.540 +Blaine. If Eaglet is a subset of LSP mode, + +00:11:21.680 --> 00:11:21.840 +can EGLOT conflict with LSP mode if both are + +00:11:23.400 --> 00:11:23.900 +present in your initial .el + +00:11:24.280 --> 00:11:24.780 +file? + +00:11:27.740 --> 00:11:28.240 +[Speaker 1]: Yeah, so I haven't played around with EGLOT + +00:11:30.580 --> 00:11:30.960 +mode a ton, so I'm not 100% sure. + +00:11:33.920 --> 00:11:34.420 +I think all of the key bindings and commands, + +00:11:36.320 --> 00:11:36.820 +if you just install it out of the box, + +00:11:39.020 --> 00:11:39.520 +I Think they're different. + +00:11:41.440 --> 00:11:41.840 +So I don't think there's like any like + +00:11:44.760 --> 00:11:45.040 +overlap as far as that stuff goes but you + +00:11:47.520 --> 00:11:47.900 +will have the overlap of like you entered, + +00:11:49.780 --> 00:11:49.960 +like you started a major mode for like some + +00:11:51.500 --> 00:11:51.720 +language, like they'll both probably start + +00:11:53.040 --> 00:11:53.540 +the language server and provide diagnostics + +00:11:55.320 --> 00:11:55.580 +and everything. And so then now you're + +00:11:58.180 --> 00:11:58.320 +getting like, you're just like doubling the + +00:11:59.340 --> 00:11:59.680 +work your computer is doing. + +00:12:00.480 --> 00:12:00.980 +So there's that conflict. + +00:12:04.160 --> 00:12:04.360 +But if you prefer EGLOT mode or LSP mode for + +00:12:05.200 --> 00:12:05.700 +like 1 language or framework, + +00:12:09.060 --> 00:12:09.440 +like 1 major mode and LSP mode for the other, + +00:12:10.600 --> 00:12:11.100 +I think you should be fine. + +00:12:14.680 --> 00:12:14.860 +[Speaker 0]: All right. Just to let you know, + +00:12:20.460 --> 00:12:20.640 +we have like 1 minute on the stream and then + +00:12:22.540 --> 00:12:23.040 +we'll switch back and to the pre-recorded + +00:12:24.000 --> 00:12:24.500 +stuff I guess. + +00:12:27.440 --> 00:12:27.740 +[Speaker 2]: Yeah yeah yeah let's hi sorry for the rude + +00:12:29.440 --> 00:12:29.620 +interruption but I'm just doing a little bit + +00:12:31.700 --> 00:12:32.060 +of time keeping so thank you so much Austin + +00:12:34.340 --> 00:12:34.540 +sadly I wasn't able to follow the Q&A because + +00:12:36.280 --> 00:12:36.780 +I was in the other track answering questions. + +00:12:39.960 --> 00:12:40.360 +If, Austin, you want to stay and answer some + +00:12:41.580 --> 00:12:42.080 +more questions, feel free to do so. + +00:12:45.920 --> 00:12:46.220 +People tend to start talking as soon as we go + +00:12:48.400 --> 00:12:48.740 +off air, And I wouldn't be surprised with LSP + +00:12:49.540 --> 00:12:50.040 +that people would do the same. + +00:12:52.800 --> 00:12:53.040 +We're gonna move on for this track. + +00:12:54.840 --> 00:12:55.040 +We're gonna move on in 20 seconds to the next + +00:12:56.920 --> 00:12:57.420 +1. So Floey, thank you for hosting. + +00:12:58.680 --> 00:12:59.180 +Austin, thank you for all your answers. + +00:13:01.460 --> 00:13:01.960 +And We'll see you in a bit. + +00:13:04.740 --> 00:13:05.140 +[Speaker 1]: Cool. Thanks. See you. + +00:13:06.700 --> 00:13:07.200 +[Speaker 0]: Thanks for the Q&A. + +00:13:10.120 --> 00:13:10.440 +[Speaker 2]: All right. All right. You are now off air. + +00:13:11.400 --> 00:13:11.720 +Thank you so much, Austin. + +00:13:13.100 --> 00:13:13.200 +I'm going to go back running in the + +00:13:13.940 --> 00:13:14.100 +background. And thank you, + +00:13:14.700 --> 00:13:15.200 +Flowey, for everything. + +00:13:20.900 --> 00:13:21.400 +[Speaker 0]: And thanks. Yeah. Have a nice, + +00:13:23.160 --> 00:13:23.660 +probably a nice day at your work. + +00:13:24.140 --> 00:13:24.240 +[Speaker 1]: Yeah, no worries. Yeah. + +00:13:26.380 --> 00:13:26.680 +Yeah, it's still it's like lunchtime for me. + +00:13:28.100 --> 00:13:28.600 +[Speaker 0]: So okay, here, it's like, + +00:13:34.380 --> 00:13:34.700 +09:00. 9pm. Thanks for the talk. + +00:13:36.300 --> 00:13:36.600 +Sorry for the inconvenience was not having + +00:13:37.540 --> 00:13:38.040 +any, any questions, really. + +00:13:39.000 --> 00:13:39.380 +[Speaker 1]: So yeah. Oh yeah, no worries. + +00:13:41.100 --> 00:13:41.280 +It's like, there's like no documentation on + +00:13:42.940 --> 00:13:43.380 +any of this stuff. So I didn't really expect + +00:13:43.380 --> 00:13:43.880 +any. + +00:13:47.220 --> 00:13:47.560 +[Speaker 0]: Yeah, I was kind of interested when I jumped + +00:13:51.000 --> 00:13:51.140 +into NeoVim. I write it 1 or 2 things on my + +00:13:53.140 --> 00:13:53.320 +own, but never really got really deep into + +00:13:54.520 --> 00:13:54.960 +it. And you're gonna see with like compiler + +00:13:55.920 --> 00:13:56.140 +design and stuff like this, + +00:13:57.400 --> 00:13:57.900 +but not really specific. + +00:13:58.320 --> 00:13:58.820 +So I was + +00:14:00.860 --> 00:14:01.240 +[Speaker 1]: kind of- Yeah, that's the hard part. + +00:14:02.440 --> 00:14:02.880 +It's like, it's, LSP is cool, + +00:14:05.020 --> 00:14:05.200 +but then you have to like deal with all the + +00:14:06.760 --> 00:14:07.200 +like compiler stuff and programming language + +00:14:07.200 --> 00:14:07.700 +theory. + +00:14:10.600 --> 00:14:10.800 +[Speaker 0]: So yeah. So it's, it shouldn't be too + +00:14:13.280 --> 00:14:13.660 +complicated. I had not really a question, + +00:14:14.700 --> 00:14:15.140 +so, but it worked out fine. + +00:14:16.500 --> 00:14:17.000 +Thanks for the Q and A. + +00:14:18.560 --> 00:14:19.060 +And if I have any questions to Oak Hamill, + +00:14:20.640 --> 00:14:21.140 +Elderspeak will get an email from you. + +00:14:21.560 --> 00:14:22.060 +[Speaker 1]: Oh yeah, definitely. + +00:14:23.500 --> 00:14:24.000 +[Speaker 0]: Dan? diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt new file mode 100644 index 00000000..93edc9fb --- /dev/null +++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt @@ -0,0 +1,56 @@ +WEBVTT + + +00:00:00.000 --> 00:00:16.539 +Introduction + +00:00:16.540 --> 00:00:40.719 +What is Semgrep? + +00:00:40.720 --> 00:01:37.879 +How do we show security bugs early? + +00:01:37.880 --> 00:02:29.039 +What is the Language Server Protocol? + +00:02:29.040 --> 00:03:42.759 +Case study: Rust Analyzer + +00:03:42.760 --> 00:04:09.959 +Rust Analyzer in action + +00:04:09.960 --> 00:05:36.219 +Why is this useful? + +00:05:36.220 --> 00:06:40.699 +So what about Emacs? + +00:06:40.700 --> 00:07:58.759 +Technical part - Brief communication overview + +00:07:58.760 --> 00:08:03.379 +Example request + +00:08:03.380 --> 00:09:23.379 +LSP capabilities + +00:09:23.380 --> 00:11:03.479 +Tips on writing a LS + +00:11:03.480 --> 00:12:05.999 +Supporting a LS through LSP mode in Emacs + +00:12:06.000 --> 00:13:07.299 +Create a client + +00:13:07.300 --> 00:14:11.679 +Add to list of client packages + +00:14:11.680 --> 00:14:17.879 +Add documentation! + +00:14:17.880 --> 00:15:01.359 +Adding commands and custom capabilities + +00:15:01.360 --> 00:16:03.920 +Thanks for listening diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt new file mode 100644 index 00000000..cce4f460 --- /dev/null +++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt @@ -0,0 +1,1180 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:01.839 +Hi, I'm Austin Theriault, + +00:00:01.840 --> 00:00:04.159 +and this is writing a language server in OCaml + +00:00:04.160 --> 00:00:07.639 +for Emacs, fun, and profit. + +00:00:07.640 --> 00:00:08.919 +Real quick, who am I? + +00:00:08.920 --> 00:00:10.919 +Well, I'm a software engineer at Semgrep. + +00:00:10.920 --> 00:00:13.239 +I work on our editor integrations, + +00:00:13.240 --> 00:00:15.359 +and I love working on programming languages, editors, + +00:00:15.360 --> 00:00:16.539 +and cryptography. + +NOTE What is Semgrep? + +00:00:16.540 --> 00:00:17.799 +What is Semgrep? + +00:00:17.800 --> 00:00:20.039 +We're a small cybersecurity startup + +00:00:20.040 --> 00:00:21.919 +whose core product is a SaaS tool, + +00:00:21.920 --> 00:00:24.759 +which is static application security testing. + +00:00:24.760 --> 00:00:27.799 +You can think of it as like a security linter. + +00:00:27.800 --> 00:00:30.119 +Normal linters will say, hey, + +00:00:30.120 --> 00:00:31.919 +you wrote ugly code, fix it. + +00:00:31.920 --> 00:00:35.079 +We'll say, hey, you wrote a SQL injection, fix that. + +00:00:35.080 --> 00:00:36.959 +We support 30+ languages, + +00:00:36.960 --> 00:00:39.319 +and we have lots of customers all using different IDEs. + +00:00:39.320 --> 00:00:40.719 +Why does that matter? + +NOTE How do we show security bugs early? + +00:00:40.720 --> 00:00:42.779 +Well, our goal is to show security bugs + +00:00:42.780 --> 00:00:45.239 +as early as possible in the development cycle. + +00:00:45.240 --> 00:00:48.479 +In the industry, we call this shifting left. + +00:00:48.480 --> 00:00:52.959 +And so how far left can we shift? The editor. + +00:00:52.960 --> 00:00:53.619 +So that's why it matters + +00:00:53.620 --> 00:00:56.079 +that our customers have different editors. + +00:00:56.080 --> 00:00:58.919 +Our goal is to have Semgrep and the editor + +00:00:58.920 --> 00:01:01.319 +show up like other language tooling. + +00:01:01.320 --> 00:01:05.199 +And what I mean by that is I wrote some bad OCaml up here, + +00:01:05.200 --> 00:01:07.599 +and the editor gave me that red squiggly and said, + +00:01:07.600 --> 00:01:12.199 +fix your OCaml, and we want Semgrep to do something similar. + +00:01:12.200 --> 00:01:15.519 +And so our goal then is to provide a similar experience + +00:01:15.520 --> 00:01:16.919 +to normal language checking. + +00:01:16.920 --> 00:01:18.999 +And then since we're a small startup, + +00:01:19.000 --> 00:01:22.079 +and there's a ton of different IDEs that our customers use, + +00:01:22.080 --> 00:01:24.919 +ideally, we don't want to have to rewrite a plugin + +00:01:24.920 --> 00:01:27.559 +for every single type of editor out there. + +00:01:27.560 --> 00:01:29.159 +Our other goal is abstract away + +00:01:29.160 --> 00:01:32.119 +editing and language features for editors to one code base. + +00:01:32.120 --> 00:01:33.879 +Ideally, we write it once + +00:01:33.880 --> 00:01:35.799 +and then plug it into all of them. + +00:01:35.800 --> 00:01:37.879 +So how can we do that, though? + +NOTE What is the Language Server Protocol? + +00:01:37.880 --> 00:01:40.679 +Well, in the process of working on this stuff, + +00:01:40.680 --> 00:01:42.999 +I found out about + +00:01:43.000 --> 00:01:44.879 +the Language Server Protocol. + +00:01:44.880 --> 00:01:47.279 +And what's great about the Language Server Protocol is + +00:01:47.280 --> 00:01:50.319 +it's a specification that defines all the ways + +00:01:50.320 --> 00:01:52.679 +that these language tools might interact + +00:01:52.680 --> 00:01:56.879 +with a development tool. And by development tool, + +00:01:56.880 --> 00:02:01.599 +I mean like VS Code, Sublime, Emacs, any of those. + +00:02:01.600 --> 00:02:07.279 +And by language tool, I mean something like PyRight, MyPy. + +00:02:07.280 --> 00:02:09.319 +So what's cool about LSP is that + +00:02:09.320 --> 00:02:12.999 +you can separate out those tools into language servers + +00:02:13.000 --> 00:02:15.519 +and the development tools into language clients. + +00:02:15.520 --> 00:02:18.079 +And because they share this common specification, + +00:02:18.080 --> 00:02:20.359 +they can now interact without knowing each other. + +00:02:20.360 --> 00:02:22.799 +So it's this great abstraction that means + +00:02:22.800 --> 00:02:25.439 +all you have to do is go write one language server + +00:02:25.440 --> 00:02:27.439 +and you can hook it up to a bunch of language clients + +00:02:27.440 --> 00:02:29.039 +and it'll just work. + +NOTE Case study: Rust Analyzer + +00:02:29.040 --> 00:02:34.039 +So let's do a quick case study on language servers in LSP, + +00:02:34.040 --> 00:02:37.239 +just so you get an idea of why this is super cool. + +00:02:37.240 --> 00:02:40.439 +So there's this language server called Rust Analyzer. + +00:02:40.440 --> 00:02:42.879 +It's a language server for the Rust language. + +00:02:42.880 --> 00:02:44.119 +If you've ever developed in Rust, + +00:02:44.120 --> 00:02:46.959 +you'll know that takes a really long time to compile, + +00:02:46.960 --> 00:02:50.359 +but the compiler gives you fantastic feedback. + +00:02:50.360 --> 00:02:52.359 +Rust has a lot of advanced language features, + +00:02:52.360 --> 00:02:55.439 +so that feedback is super important for developing. + +00:02:55.440 --> 00:02:58.919 +And so Rust Analyzer will give you that feedback instantly. + +00:02:58.920 --> 00:03:01.119 +Here's a ton of things that it gives you. + +00:03:01.120 --> 00:03:05.079 +Code completion, fixes, compiler errors, warnings, + +00:03:05.080 --> 00:03:08.679 +type signatures. Rust has a pretty strong type system. + +00:03:08.680 --> 00:03:12.199 +It also has this thing called lifetimes. + +00:03:12.200 --> 00:03:15.079 +A bunch of advanced language features in Rust Analyzer + +00:03:15.080 --> 00:03:16.199 +helps you manage all that + +00:03:16.200 --> 00:03:17.439 +and gives you all that info + +00:03:17.440 --> 00:03:19.219 +without having to wait for it to compile. + +00:03:19.220 --> 00:03:21.519 +Developing with the Rust Analyzer + +00:03:21.520 --> 00:03:24.319 +is just orders of magnitude easier + +00:03:24.320 --> 00:03:26.519 +than just trying to write Rust straight. + +00:03:26.520 --> 00:03:30.919 +Rust Analyzer, fantastic. They went and they developed it, + +00:03:30.920 --> 00:03:33.639 +and now you can go use that in Emacs, NeoVim, + +00:03:33.640 --> 00:03:35.239 +VS Code, wherever. + +00:03:35.240 --> 00:03:39.079 +So you can develop Rust in a way that's relatively efficient + +00:03:39.080 --> 00:03:42.759 +without having to give up your favorite editor. + +NOTE Rust Analyzer in action + +00:03:42.760 --> 00:03:44.399 +So here's a quick little demo + +00:03:44.400 --> 00:03:46.319 +of all the cool things it can do. + +00:03:46.320 --> 00:03:48.119 +So you can see I typed an error. + +00:03:48.120 --> 00:03:50.719 +It tells me that I wrote an error. + +00:03:50.720 --> 00:03:52.519 +I used the incorrect lifetime, + +00:03:52.520 --> 00:03:54.159 +which is some advanced language feature, + +00:03:54.160 --> 00:03:55.159 +and it'll let me know that. + +00:03:55.160 --> 00:03:57.519 +I expanded a Rust macro just there, + +00:03:57.520 --> 00:03:59.239 +which is similar to Lisp macros, + +00:03:59.240 --> 00:04:01.359 +and then I ran a single unit test, + +00:04:01.360 --> 00:04:04.639 +and that's really cool because I ran a single unit test + +00:04:04.640 --> 00:04:05.439 +from my editor. + +00:04:05.440 --> 00:04:07.839 +I didn't have to go and type any commands or anything. + +00:04:07.840 --> 00:04:09.959 +It just worked. + +NOTE Why is this useful? + +00:04:09.960 --> 00:04:13.399 +So why is this just useful in general for a user? + +00:04:13.400 --> 00:04:15.799 +Well, you get the same experience across editors. + +00:04:15.800 --> 00:04:17.119 +Like I was saying, you don't have to give up + +00:04:17.120 --> 00:04:18.359 +one editor for another + +00:04:18.360 --> 00:04:21.719 +so you get some sort of cool language feature. + +00:04:21.720 --> 00:04:23.559 +You can easily set up and use language servers + +00:04:23.560 --> 00:04:24.599 +made for other editors + +00:04:24.600 --> 00:04:27.859 +if developers don't support your editor of choice. + +00:04:27.860 --> 00:04:31.239 +Performance is not dependent on the editor. + +00:04:31.240 --> 00:04:35.439 +That's fantastic because to do all that Rust stuff, + +00:04:35.440 --> 00:04:37.439 +it takes a lot of CPU power, + +00:04:37.440 --> 00:04:40.499 +and so that's going to be slow + +00:04:40.500 --> 00:04:43.679 +if your editor language is not great, not fast. + +00:04:43.680 --> 00:04:47.799 +And then bug fixes, updates, all that, + +00:04:47.800 --> 00:04:50.119 +it all comes out at the same time. + +00:04:50.120 --> 00:04:53.399 +And then from the developer perspective, well, + +00:04:53.400 --> 00:04:55.359 +adding new editors is quick and easy. + +00:04:55.360 --> 00:04:58.699 +For reference, when I wrote the Semgrep language server, + +00:04:58.700 --> 00:05:00.519 +it took me maybe two or three weeks, + +00:05:00.520 --> 00:05:03.999 +but then actually going and setting it up for VS Code, + +00:05:04.000 --> 00:05:06.439 +that took an hour. For Emacs, 30 minutes. + +00:05:06.440 --> 00:05:08.359 +IntelliJ, maybe another hour. + +00:05:08.360 --> 00:05:10.399 +So it took me a day to add support + +00:05:10.400 --> 00:05:11.879 +for three different editors, + +00:05:11.880 --> 00:05:14.799 +which was I think something like 75% of the market share + +00:05:14.800 --> 00:05:16.319 +or something crazy like that. + +00:05:16.320 --> 00:05:20.179 +So very quick. You only need one mental model. + +00:05:20.180 --> 00:05:21.079 +You don't have to figure out + +00:05:21.080 --> 00:05:23.959 +all these different extension mental models, + +00:05:23.960 --> 00:05:26.519 +how those editors work, anything like that. + +00:05:26.520 --> 00:05:28.639 +And another thing that's cool is + +00:05:28.640 --> 00:05:30.399 +you only have to write tests for the language server, + +00:05:30.400 --> 00:05:31.959 +not necessarily for the editor. + +00:05:31.960 --> 00:05:33.839 +It's great to have just one set of tests + +00:05:33.840 --> 00:05:36.219 +that you have to pass. + +NOTE So what about Emacs? + +00:05:36.220 --> 00:05:40.159 +So why does a language server protocol matter with Emacs? + +00:05:40.160 --> 00:05:42.379 +Well, like I was saying before, + +00:05:42.380 --> 00:05:45.479 +Emacs gets the benefit from work put into other editors. + +00:05:45.480 --> 00:05:47.759 +So we get all this language support, + +00:05:47.760 --> 00:05:51.119 +and no one actually has to go and write the list for it + +00:05:51.120 --> 00:05:53.199 +or write those tools specific to Emacs. + +00:05:53.200 --> 00:05:54.919 +You get the language tooling, + +00:05:54.920 --> 00:05:56.759 +the CPU-intensive part of the editors. + +00:05:56.760 --> 00:05:58.559 +It can be written in something else. + +00:05:58.560 --> 00:06:01.319 +Lisp is fast. It's not that fast. + +00:06:01.320 --> 00:06:04.719 +Having that speed is fantastic. It's all asynchronous. + +00:06:04.720 --> 00:06:06.439 +It won't slow down Emacs. + +00:06:06.440 --> 00:06:08.919 +And then there's this package called `lsp-mode`, + +00:06:08.920 --> 00:06:11.359 +which is an LSP client commonly included + +00:06:11.360 --> 00:06:13.319 +in popular Emacs distributions. + +00:06:13.320 --> 00:06:15.159 +So a lot of people already have that. + +00:06:15.160 --> 00:06:18.679 +If you're using Emacs 29 or greater, you have `eglot-mode`, + +00:06:18.680 --> 00:06:21.679 +which is a lighter weight version of `lsp-mode`. + +00:06:21.680 --> 00:06:24.239 +It's just another LSP client. + +00:06:24.240 --> 00:06:26.359 +When I wrote the Semgrep language server, + +00:06:26.360 --> 00:06:28.319 +Emacs 29 hadn't come out yet. + +00:06:28.320 --> 00:06:31.479 +I'm not going to talk too much about `eglot-mode` + +00:06:31.480 --> 00:06:33.299 +because I did everything in `lsp-mode`, + +00:06:33.300 --> 00:06:37.779 +but I would imagine a lot of this stuff is very similar. + +00:06:37.780 --> 00:06:40.699 +Here's a list of some supported languages. + +NOTE Technical part - Brief communication overview + +00:06:40.700 --> 00:06:42.639 +Now let's get into the technical part. + +00:06:42.640 --> 00:06:45.039 +How does LSP actually work? + +00:06:45.040 --> 00:06:47.159 +So let's go over how it communicates first. + +00:06:47.160 --> 00:06:49.759 +It uses JSONRPC, + +00:06:49.760 --> 00:06:51.959 +which is just kind of like HTTP, + +00:06:51.960 --> 00:06:54.619 +but instead of sending plain text, you're sending JSON. + +00:06:54.620 --> 00:06:56.439 +So it's just sending JSON back and forth. + +00:06:56.440 --> 00:06:58.539 +It's great because it's a way + +00:06:58.540 --> 00:06:59.959 +for two programs to communicate + +00:06:59.960 --> 00:07:02.839 +without sharing a common programming language. + +00:07:02.840 --> 00:07:04.959 +Transport platform agnostic, + +00:07:04.960 --> 00:07:07.079 +so it could be stdin, stdout, + +00:07:07.080 --> 00:07:09.399 +sockets, whatever. It's just JSON. + +00:07:09.400 --> 00:07:11.139 +You can send it over whatever. + +00:07:11.140 --> 00:07:12.719 +There's two different types of messages, + +00:07:12.720 --> 00:07:15.839 +a request, which requires a response from the other party, + +00:07:15.840 --> 00:07:19.259 +and a notification, which does not expect a response. + +00:07:19.260 --> 00:07:21.759 +So just a quick little example, + +00:07:21.760 --> 00:07:23.759 +a user might open a document, + +00:07:23.760 --> 00:07:28.079 +and then it'll send like a text document did open + +00:07:28.080 --> 00:07:30.199 +and what document it was to the language server, + +00:07:30.200 --> 00:07:31.079 +and then they'll change it. + +00:07:31.080 --> 00:07:35.079 +Maybe they edit some code and introduce a syntax error. + +00:07:35.080 --> 00:07:37.159 +The changes will be sent to the language server, + +00:07:37.160 --> 00:07:39.219 +and then the language server will publish diagnostics, + +00:07:39.220 --> 00:07:41.199 +which is those red squigglies + +00:07:41.200 --> 00:07:42.559 +I was talking about earlier, + +00:07:42.560 --> 00:07:45.459 +and say, hey, syntax error or whatever here, + +00:07:45.460 --> 00:07:46.919 +or maybe the user says, + +00:07:46.920 --> 00:07:49.159 +I want to go to the definition of this function, + +00:07:49.160 --> 00:07:51.239 +and then the language server will spit back, + +00:07:51.240 --> 00:07:53.799 +hey, this is where that function lives. + +00:07:53.800 --> 00:07:55.399 +All very useful, + +00:07:55.400 --> 00:07:57.719 +and the communication is relatively simple, + +00:07:57.720 --> 00:07:58.759 +which is great. + +NOTE Example request + +00:07:58.760 --> 00:08:01.239 +This is what it looks like, what a request looks like. + +00:08:01.240 --> 00:08:03.379 +Notifications look somewhat similar. + +NOTE LSP capabilities + +00:08:03.380 --> 00:08:05.879 +So now we know how LSP communication works, + +00:08:05.880 --> 00:08:09.859 +but how does the actual protocol work? + +00:08:09.860 --> 00:08:12.399 +Well, almost all of the protocol is opt-in, + +00:08:12.400 --> 00:08:15.839 +meaning you don't have to support the entire specification, + +00:08:15.840 --> 00:08:17.399 +you can just pick and choose. + +00:08:17.400 --> 00:08:19.839 +Servers and clients will then communicate + +00:08:19.840 --> 00:08:21.679 +what part of the protocol they both support, + +00:08:21.680 --> 00:08:22.679 +so they'll both say, hey, + +00:08:22.680 --> 00:08:26.359 +we support being notified when a user opens a document, + +00:08:26.360 --> 00:08:28.879 +or if they're looking for documentation. + +00:08:28.880 --> 00:08:33.799 +And so then once they agree upon what they'll both support, + +00:08:33.800 --> 00:08:35.199 +then they'll send that stuff, + +00:08:35.200 --> 00:08:38.579 +those notifications and requests back and forth. + +00:08:38.580 --> 00:08:41.319 +Things like opening and closing files, diagnostics, + +00:08:41.320 --> 00:08:46.039 +code completion, hovering over stuff, type signatures, + +00:08:46.040 --> 00:08:48.559 +all of that. And what's cool is + +00:08:48.560 --> 00:08:50.239 +even though the specification is huge + +00:08:50.240 --> 00:08:52.039 +and probably has everything you need, + +00:08:52.040 --> 00:08:54.479 +you can go ahead and add custom capabilities + +00:08:54.480 --> 00:08:55.519 +if you really want to. + +00:08:55.520 --> 00:08:57.979 +So you can just define a custom method, + +00:08:57.980 --> 00:09:01.359 +and then now that works for you, + +00:09:01.360 --> 00:09:03.519 +and now you can have that in all your editors. + +00:09:03.520 --> 00:09:04.559 +For example, Rust Analyzer + +00:09:04.560 --> 00:09:06.199 +has structural search and replace, + +00:09:06.200 --> 00:09:08.159 +which is like find and replace, + +00:09:08.160 --> 00:09:11.599 +but with respect to the structure of the code. + +00:09:11.600 --> 00:09:13.639 +And if you choose to go down this route + +00:09:13.640 --> 00:09:15.159 +with the custom capabilities, + +00:09:15.160 --> 00:09:16.659 +you do have to remember you're going to have to + +00:09:16.660 --> 00:09:18.699 +implement it in every client. + +00:09:18.700 --> 00:09:20.399 +And that's a little bit more work, + +00:09:20.400 --> 00:09:23.379 +but it's better than where we were without LSP. + +NOTE Tips on writing a LS + +00:09:23.380 --> 00:09:25.439 +So some quick tips on writing a language server. + +00:09:25.440 --> 00:09:27.479 +I'm not going to get too into this + +00:09:27.480 --> 00:09:30.799 +because it's very application-specific. + +00:09:30.800 --> 00:09:32.759 +I wrote Semgrep's in OCaml + +00:09:32.760 --> 00:09:35.119 +since our code base was almost all OCaml already, + +00:09:35.120 --> 00:09:36.599 +and I wanted to leverage that. + +00:09:36.600 --> 00:09:38.039 +Would not recommend + +00:09:38.040 --> 00:09:41.559 +unless you also have a code base all in OCaml. + +00:09:41.560 --> 00:09:43.639 +Structure is similar to a Rust server, + +00:09:43.640 --> 00:09:45.739 +so a bunch of independent endpoints. + +00:09:45.740 --> 00:09:48.639 +I would do everything functionally if I were you. + +00:09:48.640 --> 00:09:49.919 +This is EmacsConf. + +00:09:49.920 --> 00:09:53.399 +We're all hopefully used to writing functional Lisp. + +00:09:53.400 --> 00:09:56.239 +I would recommend TypeScript or Rust, though, + +00:09:56.240 --> 00:09:58.319 +depending on your level of performance + +00:09:58.320 --> 00:10:00.839 +that you really need or whatever language + +00:10:00.840 --> 00:10:02.254 +you're trying to support ideally. + +00:10:02.255 --> 00:10:03.399 +Most languages have + +00:10:03.400 --> 00:10:06.499 +some sort of language server protocol already. + +00:10:06.500 --> 00:10:09.199 +But if they don't, then it might be easier + +00:10:09.200 --> 00:10:10.159 +to do it in that language. + +00:10:10.160 --> 00:10:12.799 +TypeScript has a lot of support, a lot of documentation, + +00:10:12.800 --> 00:10:14.159 +a lot of examples out there + +00:10:14.160 --> 00:10:17.679 +because it was what Microsoft originally intended + +00:10:17.680 --> 00:10:20.919 +the language server protocol to be for, for VS Code, + +00:10:20.920 --> 00:10:22.079 +which is written in TypeScript. + +00:10:22.080 --> 00:10:24.439 +Rust is fast, it's going to take more effort, + +00:10:24.440 --> 00:10:28.519 +but it's very fast, and Rust Analyzer has a great library + +00:10:28.520 --> 00:10:30.279 +that they use and that they support. + +00:10:30.280 --> 00:10:32.799 +So support there, examples there are great. + +00:10:32.800 --> 00:10:35.839 +The hard part is not really the language server protocol, + +00:10:35.840 --> 00:10:38.999 +but the actual logic. So, like, if you're doing, like, + +00:10:39.000 --> 00:10:40.199 +language tooling, you're going to have to do + +00:10:40.200 --> 00:10:42.679 +analysis on the code, so you need to do parsing, + +00:10:42.680 --> 00:10:46.999 +possibly compiling, all these different advanced features, + +00:10:47.000 --> 00:10:48.959 +all these advanced different things. + +00:10:48.960 --> 00:10:52.519 +For example, Rust Analyzer will do incremental compilation, + +00:10:52.520 --> 00:10:54.319 +which is really, really cool, + +00:10:54.320 --> 00:10:58.119 +but that's, like, a whole separate talk. + +00:10:58.120 --> 00:11:00.319 +If you're adapting an existing language tool, + +00:11:00.320 --> 00:11:01.679 +this stuff is really easy. + +00:11:01.680 --> 00:11:03.479 +You're basically just wiring stuff up. + +NOTE Supporting a LS through LSP mode in Emacs + +00:11:03.480 --> 00:11:08.359 +But, yeah. So, now we know all about + +00:11:08.360 --> 00:11:10.799 +LSP and language servers. + +00:11:10.800 --> 00:11:11.879 +Say you want to actually + +00:11:11.880 --> 00:11:14.079 +add support for a language server in Emacs. + +00:11:14.080 --> 00:11:19.159 +How do you do that? Well, let's look at LSP mode, + +00:11:19.160 --> 00:11:21.519 +because, like I said, this is what I'm most familiar with. + +00:11:21.520 --> 00:11:24.259 +I'm sure `eglot-mode` is pretty similar. + +00:11:24.260 --> 00:11:27.479 +So, `lsp-mode`'s repository is on GitHub, + +00:11:27.480 --> 00:11:31.499 +like everything, and it has a ton of different clients + +00:11:31.500 --> 00:11:34.439 +for a ton of different languages and frameworks and tools, + +00:11:34.440 --> 00:11:37.039 +like Semgrep, and these are available + +00:11:37.040 --> 00:11:39.739 +to anyone who installs LSP mode. + +00:11:39.740 --> 00:11:42.239 +Alternatively, you can make a separate package + +00:11:42.240 --> 00:11:43.679 +and just use LSP mode as a library, + +00:11:43.680 --> 00:11:45.479 +but I'm not going to focus on this, + +00:11:45.480 --> 00:11:47.879 +because there's already a ton of resources out there + +00:11:47.880 --> 00:11:50.799 +on packaging and Emacs. + +00:11:50.800 --> 00:11:54.559 +So, our steps, very quickly, are going to look like + +00:11:54.560 --> 00:11:58.299 +adding an Emacs Lisp file that contains some logic, + +00:11:58.300 --> 00:12:01.319 +add an entry somewhere, so we added a new client + +00:12:01.320 --> 00:12:03.719 +to the list of clients, and then do some documentation, + +00:12:03.720 --> 00:12:05.999 +because documentation's great. + +NOTE Create a client + +00:12:06.000 --> 00:12:07.639 +First, creating a client. + +00:12:07.640 --> 00:12:09.639 +In the `clients/` folder in `lsp-mode/`, + +00:12:09.640 --> 00:12:12.919 +literally just add, like, `lsp-` whatever it is, + +00:12:12.920 --> 00:12:15.759 +`require` the library, and register a client. + +00:12:15.760 --> 00:12:18.039 +Registering a client just means, like, + +00:12:18.040 --> 00:12:19.559 +saying what kind of connection it is. + +00:12:19.560 --> 00:12:21.479 +It's most likely going to be standard I/O, + +00:12:21.480 --> 00:12:24.359 +because that's pretty easy to implement, + +00:12:24.360 --> 00:12:26.839 +and then you just pass it the executable + +00:12:26.840 --> 00:12:29.559 +that you actually want to run. + +00:12:29.560 --> 00:12:31.719 +Say what the activation function is, + +00:12:31.720 --> 00:12:33.319 +so this is when the client should start, + +00:12:33.320 --> 00:12:36.239 +so you can specify the language + +00:12:36.240 --> 00:12:38.279 +or the major mode or whatever, + +00:12:38.760 --> 00:12:43.099 +and now your client will start whenever that's triggered, + +00:12:43.100 --> 00:12:45.639 +and then finally provide just a server ID, + +00:12:45.640 --> 00:12:48.579 +so that way it's easy to keep track of, + +00:12:48.580 --> 00:12:52.759 +and then run this LSP consistency check function. + +00:12:52.760 --> 00:12:56.579 +This just makes sure everything up there is good. + +00:12:56.580 --> 00:12:59.519 +You can do more advanced stuff with making an LSP client + +00:12:59.520 --> 00:13:01.199 +that I'm not going to get into, + +00:13:01.200 --> 00:13:03.799 +but just know that these aren't your only options, + +00:13:03.800 --> 00:13:07.299 +and then finally provide your client. + +NOTE Add to list of client packages + +00:13:07.300 --> 00:13:09.799 +Next, you just have to add your client + +00:13:09.800 --> 00:13:12.159 +to the list of clients that `lsp-mode` supports, + +00:13:12.160 --> 00:13:15.639 +and now you've added support for a whole new language, + +00:13:15.640 --> 00:13:17.719 +whole new framework, whole new tool to Emacs, + +00:13:17.720 --> 00:13:20.219 +and it's taking you, what, like, what is that, + +00:13:20.220 --> 00:13:23.639 +20 lines of Lisp? No, not even, like, 15. + +00:13:23.640 --> 00:13:26.639 +15 lines of Lisp, whole new language for Emacs. + +00:13:26.640 --> 00:13:31.599 +It's really exciting. Now that you have your client, + +00:13:31.600 --> 00:13:35.119 +let's do some documentation. Go fill out this, like, name, + +00:13:35.120 --> 00:13:37.919 +where the repository, the source code is, + +00:13:37.920 --> 00:13:39.599 +because free software is great, + +00:13:39.600 --> 00:13:42.179 +and you should open source your stuff. + +00:13:42.180 --> 00:13:44.199 +Specify the installation command. + +00:13:44.200 --> 00:13:45.399 +What's cool about this is + +00:13:45.400 --> 00:13:48.059 +this can be run automatically from Emacs, + +00:13:48.060 --> 00:13:50.319 +so if it's, like, `pip install pyright`, right, + +00:13:50.320 --> 00:13:53.399 +you can put that there, and Emacs will ask you, + +00:13:53.400 --> 00:13:55.279 +do you want to install the language server, + +00:13:55.280 --> 00:13:56.199 +and you can hit yes + +00:13:56.200 --> 00:13:59.539 +and users will just have it installed for them, + +00:13:59.540 --> 00:14:01.879 +and then you can say whether or not it's a debugger. + +00:14:01.880 --> 00:14:03.159 +This is completely separate, + +00:14:03.160 --> 00:14:05.119 +so there's this thing called DAP, + +00:14:05.120 --> 00:14:07.319 +which is the debugger adapter protocol, + +00:14:07.320 --> 00:14:09.679 +and it's similar to LSP but for debuggers, + +00:14:09.680 --> 00:14:11.679 +which is very cool, + +NOTE Add documentation! + +00:14:11.680 --> 00:14:14.599 +and then finally link to your documentation. + +00:14:14.600 --> 00:14:17.879 +Please, please document your stuff. + +NOTE Adding commands and custom capabilities + +00:14:17.880 --> 00:14:20.479 +If you want to add, like, a custom Emacs function + +00:14:20.480 --> 00:14:22.679 +or custom capabilities, it's super easy. + +00:14:22.680 --> 00:14:27.639 +It's literally just, like, calling a normal Emacs function. + +00:14:27.640 --> 00:14:30.559 +For example, Semgrep normally only scans files + +00:14:30.560 --> 00:14:34.199 +when you open them, but we added a Emacs function + +00:14:34.200 --> 00:14:36.719 +that will scan your entire project, right, + +00:14:36.720 --> 00:14:40.959 +and so that was just a client notification. + +00:14:40.960 --> 00:14:44.119 +It was just `lsp-notify` and then a custom method, + +00:14:44.120 --> 00:14:46.719 +and it's great because now you can just scan your project + +00:14:46.720 --> 00:14:48.719 +from a simple Emacs function. + +00:14:48.720 --> 00:14:52.119 +Requests, very similar to notifications. + +00:14:52.120 --> 00:14:56.079 +You send it and then pass it a lambda + +00:14:56.080 --> 00:14:58.459 +and do something with the result, + +00:14:58.460 --> 00:15:01.359 +and so that's adding custom capabilities. + +NOTE Thanks for listening + +00:15:01.360 --> 00:15:04.319 +That's pretty much it. Thank you for listening. + +00:15:04.320 --> 00:15:05.639 +Some resources here. + +00:15:05.640 --> 00:15:08.239 +These links are clickable if you get the PDF, + +00:15:08.240 --> 00:15:10.919 +if you get the slides. Semgrep: we're hiring! + +00:15:10.920 --> 00:15:12.119 +If you want to work on, like, + +00:15:12.120 --> 00:15:13.719 +programming language theory stuff, + +00:15:13.720 --> 00:15:18.119 +compilers, parsers, editors, + +00:15:18.120 --> 00:15:22.119 +email me or go look at our jobs. + +00:15:22.120 --> 00:15:25.119 +The LSP specification, this is, like, the holy Bible. + +00:15:25.120 --> 00:15:28.339 +It has all the specs, all the types, everything. + +00:15:28.340 --> 00:15:30.419 +`lsp-mode` and the docs. + +00:15:30.420 --> 00:15:33.279 +`lsp-mode`, right, that's where you want to add your client. + +00:15:33.280 --> 00:15:36.099 +The docs are great, super useful. + +00:15:36.100 --> 00:15:38.079 +Rust Analyzer is just a great reference + +00:15:38.080 --> 00:15:39.919 +for language servers in general + +00:15:39.920 --> 00:15:42.119 +if you want to write one or if you just want to, like, + +00:15:42.120 --> 00:15:45.399 +see how they work. It's all just really well done. + +00:15:45.400 --> 00:15:47.039 +It's great code, very readable. + +00:15:47.040 --> 00:15:50.479 +And then down here is just a long video tutorial, + +00:15:50.480 --> 00:15:54.699 +a longer video tutorial, not by me, + +00:15:54.700 --> 00:15:58.439 +by someone else, on how to add a language client to Emacs, + +00:15:58.440 --> 00:16:00.679 +but hopefully this is sufficient for y'all, + +00:16:01.480 --> 00:16:03.920 +and now it's time for some Q&A. diff --git a/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt new file mode 100644 index 00000000..80483399 --- /dev/null +++ b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt @@ -0,0 +1,17 @@ +WEBVTT + + +00:00:00.000 --> 00:01:40.719 +Introduction + +00:01:40.720 --> 00:02:23.599 +What is an LLM? + +00:02:23.600 --> 00:05:11.700 +Using this library + +00:05:11.701 --> 00:08:00.159 +Further instructions + +00:08:00.160 --> 00:09:33.480 +Room for improvement diff --git a/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt new file mode 100644 index 00000000..a01ffd80 --- /dev/null +++ b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt @@ -0,0 +1,602 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:03.039 +Hi, my name is Abhinav and I'm going to talk about + +00:00:03.040 --> 00:00:06.199 +this tool that I've been working on called MatplotLLM. + +00:00:06.200 --> 00:00:09.519 +MatplotLLM is a natural language interface + +00:00:09.520 --> 00:00:12.479 +over matplotlib, which is a library I use a lot + +00:00:12.480 --> 00:00:14.439 +for making visualizations. + +00:00:14.440 --> 00:00:18.679 +It's a pretty common Python library used a lot everywhere + +00:00:18.680 --> 00:00:22.479 +where there's need of plotting and graphing. + +00:00:22.480 --> 00:00:25.359 +I usually use it in reports. + +00:00:25.360 --> 00:00:27.359 +Whenever I'm writing a report in org mode, + +00:00:27.360 --> 00:00:31.559 +I tend to write a code block which is in Python. + +00:00:31.560 --> 00:00:34.079 +And then that code block has usage of matplotlib + +00:00:34.080 --> 00:00:35.999 +to produce some reports. + +00:00:36.000 --> 00:00:38.319 +That works really well. + +00:00:38.320 --> 00:00:39.999 +But at times what happens is + +00:00:40.000 --> 00:00:43.959 +I have to make a very custom graph, let's say. + +00:00:43.960 --> 00:00:46.919 +And then while I'm writing a report, + +00:00:46.920 --> 00:00:50.679 +it's kind of a huge leap of abstraction + +00:00:50.680 --> 00:00:51.519 +when I'm working on text + +00:00:51.520 --> 00:00:54.879 +versus going into actual low-level matplotlib code + +00:00:54.880 --> 00:00:56.239 +to do that graphing. + +00:00:56.240 --> 00:00:59.679 +So that's something I don't want to do. + +00:00:59.680 --> 00:01:00.479 +Here's an example. + +00:01:00.480 --> 00:01:03.999 +This is a graph which is... I think it was made + +00:01:04.000 --> 00:01:05.839 +like five or six years back. + +00:01:05.840 --> 00:01:08.399 +And then there are some common things + +00:01:08.400 --> 00:01:09.959 +like scatter plot here, + +00:01:09.960 --> 00:01:12.239 +the dots that you can see here scattered. + +00:01:12.240 --> 00:01:16.279 +Then... But there are a few things which, to do them, + +00:01:16.280 --> 00:01:19.159 +to make them, you will actually have to go--at least me, + +00:01:19.160 --> 00:01:20.839 +I have to go to the documentation + +00:01:20.840 --> 00:01:24.119 +and figure out how to do it. Which is fine, + +00:01:24.120 --> 00:01:26.519 +but I don't want to do this, you know, + +00:01:26.520 --> 00:01:29.199 +spend so much time here, when I'm working on + +00:01:29.200 --> 00:01:32.319 +a tight deadline for a report. + +00:01:32.320 --> 00:01:33.919 +That's the motivation for this tool. + +00:01:33.920 --> 00:01:35.199 +This tool basically allows me + +00:01:35.200 --> 00:01:38.479 +to get rid of the complexity of the library + +00:01:38.480 --> 00:01:40.719 +by working via an LLM. + +NOTE What is an LLM? + +00:01:40.720 --> 00:01:43.399 +So an LLM is a large language model. + +00:01:43.400 --> 00:01:45.079 +These are models which are + +00:01:45.080 --> 00:01:49.399 +trained to produce text, generate text. + +00:01:49.400 --> 00:01:51.519 +And just by doing that, + +00:01:51.520 --> 00:01:55.079 +they actually end up learning a lot of common patterns. + +00:01:55.080 --> 00:01:56.799 +For example, if you ask a question, + +00:01:56.800 --> 00:01:58.919 +you can actually get a reasonable response. + +00:01:58.920 --> 00:02:00.759 +If you ask to write a code for something, + +00:02:00.760 --> 00:02:01.879 +you'll actually get code + +00:02:01.880 --> 00:02:04.759 +which can also be very reasonable. + +00:02:04.760 --> 00:02:06.599 +So this tool is basically a wrapper + +00:02:06.600 --> 00:02:10.999 +that uses an LLM. For the current version, + +00:02:11.000 --> 00:02:13.919 +we use GPT-4, which is OpenAI's model. + +00:02:13.920 --> 00:02:17.919 +It's not open in the sense of open source. + +00:02:17.920 --> 00:02:21.119 +So that's a problem that it has. + +00:02:21.120 --> 00:02:23.599 +But for this version, we are going to use that. + +NOTE Using this library + +00:02:23.600 --> 00:02:25.479 +Using this library is pretty simple. + +00:02:25.480 --> 00:02:27.399 +You basically require the library + +00:02:27.400 --> 00:02:30.719 +and then you set up your OpenAI API key here. + +00:02:30.720 --> 00:02:33.359 +Then you get a code block + +00:02:33.360 --> 00:02:35.759 +where you can specify the language as `matplotllm`. + +00:02:35.760 --> 00:02:38.279 +And then what you can do is, + +00:02:38.280 --> 00:02:40.799 +you can basically describe what you want + +00:02:40.800 --> 00:02:41.799 +in natural language. + +00:02:41.800 --> 00:02:45.279 +I'll take this example of this data set. + +00:02:45.280 --> 00:02:48.599 +It's called the Health and Wealth of Nations. + +00:02:48.600 --> 00:02:49.639 +I think that was + +00:02:49.640 --> 00:02:51.399 +the name of a visualization where it was used. + +00:02:51.400 --> 00:02:53.399 +This is basically life expectancy, + +00:02:53.400 --> 00:02:59.279 +GDP of various countries starting from 1800. + +00:02:59.280 --> 00:03:02.719 +I think it goes up to 2000 somewhere. + +00:03:02.720 --> 00:03:07.479 +So earlier, I would try to write code which reads this CSV + +00:03:07.480 --> 00:03:09.839 +and then does a lot of matplotlib stuff + +00:03:09.840 --> 00:03:11.679 +and then finally produces a graph. + +00:03:11.680 --> 00:03:13.879 +But with this tool, what I'll do is + +00:03:13.880 --> 00:03:17.679 +I'll just provide instructions in two forms. + +00:03:17.680 --> 00:03:18.879 +So the first thing I'll do is + +00:03:18.880 --> 00:03:21.359 +I'll just describe how the data looks like. + +00:03:21.360 --> 00:03:29.039 +So I'll say data is in a file called `data.csv`, + +00:03:29.040 --> 00:03:33.159 +which is this file, by the way, on the right. + +00:03:33.160 --> 00:03:39.799 +It looks like the following. + +00:03:39.800 --> 00:03:44.359 +I just pasted a few lines from the top, which is enough. + +00:03:44.360 --> 00:03:47.119 +Since it's a CSV, there's already a structure to it. + +00:03:47.120 --> 00:03:50.079 +But let's say if you have a log file + +00:03:50.080 --> 00:03:53.759 +where there's more complexities to be parsed and all, + +00:03:53.760 --> 00:03:55.039 +that also works out really well. + +00:03:55.040 --> 00:03:58.079 +You just have to describe how the data looks like + +00:03:58.080 --> 00:04:01.159 +and the system will figure out how to work with this. + +00:04:01.160 --> 00:04:06.404 +Now, let's do the plotting. So what I can do is... + +00:04:06.405 --> 00:04:09.559 +Let's start from a very basic plot + +00:04:09.560 --> 00:04:11.620 +between life expectancy and GDP per capita. + +00:04:11.621 --> 00:04:13.800 +I'll just do this. + +00:04:13.801 --> 00:04:17.280 +"Can you make a scatter plot + +00:04:17.281 --> 00:04:26.399 +for life expectancy and GDP per capita?" + +00:04:26.400 --> 00:04:29.639 +Now, you can see there are some typos, + +00:04:29.640 --> 00:04:31.719 +and probably there will be some grammatical mistakes + +00:04:31.720 --> 00:04:32.919 +also coming through. + +00:04:32.920 --> 00:04:37.119 +But that's all OK, because the models are supposed to + +00:04:37.120 --> 00:04:40.559 +handle those kinds of situations really well. + +00:04:40.560 --> 00:04:43.239 +So I send the request to the model. + +00:04:43.240 --> 00:04:47.119 +Since it's a large model--GPT-4 is really large-- + +00:04:47.120 --> 00:04:50.519 +it actually takes a lot of time to get the response back. + +00:04:50.520 --> 00:04:53.359 +So this specific response took 17 seconds, + +00:04:53.360 --> 00:04:54.239 +which is huge. + +00:04:54.240 --> 00:04:57.439 +It's not something you would expect + +00:04:57.440 --> 00:04:59.599 +in a local file running on a computer. + +00:04:59.600 --> 00:05:01.879 +But I've got what I wanted. Right. + +00:05:01.880 --> 00:05:04.119 +So there's a scatter plot here, as you can see below, + +00:05:04.120 --> 00:05:08.879 +which is plotting what I specified it to do, + +00:05:08.880 --> 00:05:11.700 +though it looks a little dense. + +NOTE Further instructions + +00:05:11.701 --> 00:05:12.640 +What I can do is + +00:05:12.641 --> 00:05:16.000 +I can provide further instructions as feedback. + +00:05:16.001 --> 00:05:18.400 +I try to feed back on this. So I can say, + +00:05:18.401 --> 00:05:30.599 +"Can you only show points where year is the multiple of 50?" + +00:05:30.600 --> 00:05:33.519 +So since it's starting from 1800, the data points, + +00:05:33.520 --> 00:05:34.719 +there are too many years, + +00:05:34.720 --> 00:05:37.239 +so I'll just try to thin them down a little. + +00:05:37.240 --> 00:05:40.199 +Now what's happening in the background + +00:05:40.200 --> 00:05:42.719 +is that everything below this last instruction + +00:05:42.720 --> 00:05:45.719 +is going out as the context to the model + +00:05:45.720 --> 00:05:47.399 +along with the code that it wrote till now. + +00:05:47.400 --> 00:05:50.079 +And then this instruction is added on top of it + +00:05:50.080 --> 00:05:53.079 +so that it basically modifies the code to make it work + +00:05:53.080 --> 00:05:55.079 +according to this instruction. + +00:05:55.080 --> 00:05:58.439 +As you can see now, the data points are much fewer. + +00:05:58.440 --> 00:06:01.519 +This is what I wanted also. + +00:06:01.520 --> 00:06:02.799 +Let's also do a few more things. + +00:06:02.800 --> 00:06:05.439 +I want to see the progression through time. + +00:06:05.440 --> 00:06:13.079 +So maybe I'll do something like, color more recent years + +00:06:13.080 --> 00:06:15.439 +with a darker shade of... + +00:06:15.440 --> 00:06:21.719 +Let's change the color map also. + +00:06:21.720 --> 00:06:24.159 +Now, this again goes back to the model. + +00:06:24.160 --> 00:06:26.799 +Again, everything below before this line + +00:06:26.800 --> 00:06:29.119 +is the context along with the current code, + +00:06:29.120 --> 00:06:31.799 +and then this instruction is going to the model + +00:06:31.800 --> 00:06:37.039 +to make the changes. So now this should happen, I guess. + +00:06:37.040 --> 00:06:41.319 +Once this happens. Yeah. So. OK. + +00:06:41.320 --> 00:06:44.599 +So we have this new color map, + +00:06:44.600 --> 00:06:46.599 +and there's also this change of color. + +00:06:46.600 --> 00:06:51.719 +And also there's this range of color from 1800 to 2000, + +00:06:51.720 --> 00:06:53.399 +which is a nice addition. + +00:06:53.400 --> 00:06:55.839 +Kind of smart. I didn't expect... + +00:06:55.840 --> 00:06:58.959 +I didn't exactly ask for it, but it's nice. + +00:06:58.960 --> 00:07:00.959 +So there's a couple more things. + +00:07:00.960 --> 00:07:07.759 +Let's make it more minimal. "Let's make it more minimal. + +00:07:07.760 --> 00:07:17.319 +Can you remove the bounding box?" + +00:07:17.320 --> 00:07:21.399 +Also, let's annotate a few points. + +00:07:21.400 --> 00:07:23.719 +So I want to annotate the point + +00:07:23.720 --> 00:07:25.839 +which has the highest GDP per capita. + +00:07:25.840 --> 00:07:33.599 +"Also annotate the point with highest GDP per capita + +00:07:33.600 --> 00:07:36.999 +with the country and year." + +00:07:37.000 --> 00:07:41.599 +So again, forget about the grammar. + +00:07:41.600 --> 00:07:43.599 +The language model works out well. + +00:07:43.600 --> 00:07:46.159 +Usually it takes care of + +00:07:46.160 --> 00:07:47.439 +all those complexities for you. + +00:07:47.440 --> 00:07:53.119 +This is what we have got after that. + +00:07:53.120 --> 00:07:55.719 +As you can see, there's the annotation, which is here. + +00:07:55.720 --> 00:07:56.679 +I think it's still overlapping, + +00:07:56.680 --> 00:07:58.559 +so probably it could be done better, + +00:07:58.560 --> 00:08:00.159 +but the box is removed. + +NOTE Room for improvement + +00:08:00.160 --> 00:08:03.359 +Now, as you can see, the system is... + +00:08:03.360 --> 00:08:04.879 +You will be able to see this + +00:08:04.880 --> 00:08:07.479 +that the system is not really robust. + +00:08:07.480 --> 00:08:10.079 +So the GitHub repository has some examples + +00:08:10.080 --> 00:08:12.119 +where it fails miserably, + +00:08:12.120 --> 00:08:13.679 +and you'll actually have to go into the code + +00:08:13.680 --> 00:08:14.999 +to figure out what's happening. + +00:08:15.000 --> 00:08:17.879 +But we do expect that to improve slowly, + +00:08:17.880 --> 00:08:21.039 +because the models are improving greatly in performance. + +00:08:21.040 --> 00:08:22.479 +This is a very general model. + +00:08:22.480 --> 00:08:24.479 +This is not even tuned for this use case. + +00:08:24.480 --> 00:08:26.639 +The other thing is that + +00:08:26.640 --> 00:08:29.639 +while I was trying to provide feedback, + +00:08:29.640 --> 00:08:32.199 +I was still using text here all the time, + +00:08:32.200 --> 00:08:34.559 +but it can be made more natural. + +00:08:34.560 --> 00:08:36.159 +So, for example, if I have to annotate + +00:08:36.160 --> 00:08:37.439 +this particular point, + +00:08:37.440 --> 00:08:42.239 +I actually can just point my cursor to it. + +00:08:42.240 --> 00:08:44.519 +Emacs has a way to figure out + +00:08:44.520 --> 00:08:45.799 +where your mouse pointer is. + +00:08:45.800 --> 00:08:49.620 +And with that, you can actually go back into the code + +00:08:49.621 --> 00:08:51.960 +and then see which primitive + +00:08:51.961 --> 00:08:54.480 +is being drawn here in Matplotlib. + +00:08:54.481 --> 00:08:55.719 +So that there is a way to do that. + +00:08:55.720 --> 00:08:58.439 +And then, if you do that, then it's really nice to + +00:08:58.440 --> 00:09:01.319 +just be able to say + +00:09:01.320 --> 00:09:04.279 +put your cursor here and then say something like, + +00:09:04.280 --> 00:09:04.999 +"Can you make this? + +00:09:05.000 --> 00:09:06.599 +Can you annotate this point?" + +00:09:06.600 --> 00:09:10.719 +Because text is, you know... There are limitations to text. + +00:09:10.720 --> 00:09:12.479 +And if you're producing an image, + +00:09:12.480 --> 00:09:13.959 +you should be able to do that, too. + +00:09:13.960 --> 00:09:16.399 +So I do expect that to happen soonish. + +00:09:16.400 --> 00:09:19.839 +If not, from the model side, the hack that I mentioned + +00:09:19.840 --> 00:09:21.359 +could be made to work. + +00:09:21.360 --> 00:09:24.439 +So that will come in in a later version, probably. + +00:09:24.440 --> 00:09:27.599 +Anyway, so that's the end of my talk. + +00:09:27.600 --> 00:09:29.759 +You can find more details in the repository link. + +00:09:29.760 --> 00:09:33.480 +Thank you for listening. Goodbye. diff --git a/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt new file mode 100644 index 00000000..3fc25b4e --- /dev/null +++ b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt @@ -0,0 +1,4486 @@ +WEBVTT + + +00:00:09.480 --> 00:00:09.880 +[Speaker 0]: 2 seconds. And I think we are live. + +00:00:10.760 --> 00:00:11.260 +Hi, Jeremy, how are you doing? + +00:00:11.840 --> 00:00:12.040 +[Speaker 1]: All right. I'm doing all right. + +00:00:12.380 --> 00:00:12.880 +How about you? + +00:00:14.759 --> 00:00:15.060 +[Speaker 0]: I'm doing great as well. + +00:00:16.480 --> 00:00:16.640 +I'm really happy to see all the talk that + +00:00:18.600 --> 00:00:19.100 +we're having. And I was particularly excited + +00:00:21.880 --> 00:00:22.240 +when I got your proposal for this talk + +00:00:24.080 --> 00:00:24.279 +because mentoring, as I was telling you + +00:00:25.040 --> 00:00:25.540 +during the check-in process, + +00:00:27.360 --> 00:00:27.779 +is a subject dear to my heart. + +00:00:28.700 --> 00:00:29.200 +So I'm really excited, + +00:00:30.640 --> 00:00:30.920 +not only for the talk that you've just done, + +00:00:32.200 --> 00:00:32.360 +but also for the question that people are + +00:00:32.880 --> 00:00:33.380 +going to ask you. + +00:00:35.760 --> 00:00:36.020 +[Speaker 1]: Yeah, I'm looking forward to answering some + +00:00:39.600 --> 00:00:39.880 +questions. Mentoring is also something near + +00:00:43.860 --> 00:00:44.320 +and dear. Something I did not mention is when + +00:00:45.620 --> 00:00:45.820 +folks would ask me, like, + +00:00:47.000 --> 00:00:47.460 +what was your most important class? + +00:00:48.920 --> 00:00:49.199 +Or I said, oh, easy, easy, + +00:00:50.180 --> 00:00:50.680 +easy, high school English. + +00:00:54.160 --> 00:00:54.480 +Like, it's my whatever your primary written + +00:00:56.320 --> 00:00:56.820 +and spoken languages I think is the most + +00:00:58.860 --> 00:00:59.360 +useful skill as a programmer + +00:01:05.379 --> 00:01:05.580 +[Speaker 0]: right so as usual people if you want to ask + +00:01:09.520 --> 00:01:09.660 +questions to Jeremy, feel free to find the + +00:01:11.440 --> 00:01:11.940 +link to the other pad either on the talk page + +00:01:15.440 --> 00:01:15.720 +or on IRC. We're also going to open the chat + +00:01:17.320 --> 00:01:17.720 +so that people can join us and ask questions. + +00:01:20.380 --> 00:01:20.660 +Let me just make sure that I tell Sasha can + +00:01:25.440 --> 00:01:25.580 +you open ID Mentor. All right so in the + +00:01:27.320 --> 00:01:27.520 +meantime what we'll do is that I'll be + +00:01:29.660 --> 00:01:29.860 +reading questions of the pad and Jeremy will + +00:01:31.400 --> 00:01:31.480 +be answering them whilst we wait for you to + +00:01:32.800 --> 00:01:33.280 +join. Now just to be clear with the time, + +00:01:34.640 --> 00:01:34.820 +we have a little bit of time now, + +00:01:36.040 --> 00:01:36.540 +a little more time than before. + +00:01:39.520 --> 00:01:39.720 +We have 22 minutes, so until 10 of the next + +00:01:41.260 --> 00:01:41.400 +hours to answer as many questions as + +00:01:42.520 --> 00:01:42.900 +possible. And believe me, + +00:01:45.040 --> 00:01:45.200 +if you people watching right now are not + +00:01:47.280 --> 00:01:47.440 +asking questions, I will be asking plenty of + +00:01:49.840 --> 00:01:50.340 +them. So please, save Jeremy from my + +00:01:53.800 --> 00:01:54.300 +[Speaker 1]: I look forward to it. + +00:01:55.320 --> 00:01:55.820 +[Speaker 0]: inquisitive mind. All right. + +00:01:56.960 --> 00:01:57.460 +Starting with the first question, + +00:01:59.240 --> 00:01:59.680 +a very trivial 1, perhaps, + +00:02:01.720 --> 00:02:01.920 +but always 1 that I ask myself when I look at + +00:02:03.840 --> 00:02:04.340 +a keyboard. Regarding super key, + +00:02:05.980 --> 00:02:06.480 +which key do you bind to super? + +00:02:09.620 --> 00:02:10.120 +[Speaker 1]: Yeah, so my left command, + +00:02:12.180 --> 00:02:12.680 +which is on a Mac keyboard, + +00:02:16.620 --> 00:02:17.120 +so the key right to the left of the space bar + +00:02:20.860 --> 00:02:21.000 +is super. And the key immediately to the + +00:02:23.000 --> 00:02:23.400 +right of spacebar, which is the right command + +00:02:24.320 --> 00:02:24.820 +key, is bound to hyper, + +00:02:28.140 --> 00:02:28.640 +which opens up a whole new suite of keys. + +00:02:31.080 --> 00:02:31.280 +And I thought it would take a little bit to + +00:02:33.160 --> 00:02:33.660 +get used to, but it's been amazing. + +00:02:37.800 --> 00:02:38.300 +So I definitely recommend having a hyper + +00:02:38.440 --> 00:02:38.940 +binding. + +00:02:42.440 --> 00:02:42.720 +[Speaker 0]: I will, yes. I was also going to say super + +00:02:43.860 --> 00:02:44.160 +binding. No, it's a hyper binding. + +00:02:44.800 --> 00:02:45.040 +We already have super. + +00:02:47.120 --> 00:02:47.280 +It's your Windows key or your Linux key or + +00:02:48.240 --> 00:02:48.740 +whatever you want to call it. + +00:02:51.140 --> 00:02:51.640 +But I will warn people though, + +00:02:57.720 --> 00:02:58.200 +it's the gateway into fancy keyboard setups + +00:03:00.900 --> 00:03:01.400 +because it starts, it's the Trojan horse of + +00:03:02.700 --> 00:03:03.140 +fancy keyboard setup. Just, + +00:03:04.320 --> 00:03:04.820 +oh I wish I could have another modifier. + +00:03:06.960 --> 00:03:07.280 +And then many years later, + +00:03:09.160 --> 00:03:09.280 +you find yourself with this little thing that + +00:03:11.260 --> 00:03:11.760 +I'm showing, which is a fully customized QMK + +00:03:12.100 --> 00:03:12.600 +keyboard. + +00:03:13.540 --> 00:03:14.040 +[Speaker 2]: All right. + +00:03:18.200 --> 00:03:18.700 +[Speaker 1]: Following on that, then meta is to the left + +00:03:21.880 --> 00:03:22.080 +of super, and then control is to the left of + +00:03:26.720 --> 00:03:26.940 +meta. And also, caps lock maps to control as + +00:03:31.380 --> 00:03:31.620 +well. Definitely tried a bunch of tap for + +00:03:35.460 --> 00:03:35.940 +this and that on a programmable keyboard, + +00:03:39.280 --> 00:03:39.520 +but I have settled on keep it simple and use + +00:03:41.580 --> 00:03:41.780 +something like carabiner elements to do most + +00:03:46.400 --> 00:03:46.640 +[Speaker 0]: Right. It's good that you were able to stop + +00:03:48.480 --> 00:03:48.760 +there. I wish I'd stopped there at some point + +00:03:50.940 --> 00:03:51.340 +[Speaker 1]: of the mapping. It was a terrible moment + +00:03:52.900 --> 00:03:53.000 +where I'm like, oh, what have I done when I + +00:03:53.760 --> 00:03:54.200 +was trying to type once? + +00:03:57.500 --> 00:03:58.000 +[Speaker 0]: in my life. All right, + +00:03:58.920 --> 00:03:59.420 +moving on to the next question. + +00:04:01.360 --> 00:04:01.560 +Great talk. What's the package you used to + +00:04:02.120 --> 00:04:02.620 +make the org slide? + +00:04:03.280 --> 00:04:03.740 +[Speaker 1]: So yeah, it's great. Yeah, + +00:04:13.680 --> 00:04:13.940 +so I am using Protz Logos and have, + +00:04:15.660 --> 00:04:16.160 +I think, like, Olivet mode. + +00:04:19.959 --> 00:04:20.140 +I'll post a link to the configuration for + +00:04:21.019 --> 00:04:21.260 +turning it on and off. + +00:04:24.280 --> 00:04:24.680 +But it's basically narrow region to an org + +00:04:27.940 --> 00:04:28.220 +heading, which is, I find that to be super + +00:04:30.300 --> 00:04:30.800 +helpful. Don't have to fiddle with it. + +00:04:32.900 --> 00:04:33.120 +[Speaker 0]: Right, just to be clear, + +00:04:34.920 --> 00:04:35.140 +it's Olivetti, right? I think that's the... + +00:04:36.460 --> 00:04:36.960 +[Speaker 1]: Oh yeah, Olivetti, yeah. + +00:04:39.960 --> 00:04:40.120 +[Speaker 0]: A typical Italian word that is really tough + +00:04:42.720 --> 00:04:42.880 +to pronounce between Europeans and people in + +00:04:46.080 --> 00:04:46.400 +[Speaker 1]: Yeah, I had a... For some reason I dropped + +00:04:48.940 --> 00:04:49.440 +the I at the end. So in my head + +00:04:52.660 --> 00:04:52.800 +[Speaker 0]: the US. Yeah, moving to the next question if + +00:04:54.440 --> 00:04:54.800 +people do get interested in picking up emacs + +00:04:56.520 --> 00:04:56.680 +because of what they see you do How do you + +00:04:58.260 --> 00:04:58.440 +recommend they say they get into it? + +00:04:58.440 --> 00:04:58.940 +Oh + +00:05:05.600 --> 00:05:06.020 +[Speaker 1]: Yeah, so I've been I think a lot of it comes + +00:05:09.620 --> 00:05:09.780 +down to what are the problems that they're + +00:05:11.600 --> 00:05:11.880 +trying to solve. And so I walked them through + +00:05:15.460 --> 00:05:15.660 +my journey. I worked in TextMate for a long + +00:05:16.980 --> 00:05:17.480 +time, then Sublime, then Atom. + +00:05:20.220 --> 00:05:20.720 +And then in 2020, I hopped over to Emacs, + +00:05:25.080 --> 00:05:25.580 +started writing in it and I chose Space Max + +00:05:26.680 --> 00:05:27.180 +and then I chose Doom. + +00:05:28.140 --> 00:05:28.640 +And then I was like, wait, + +00:05:33.080 --> 00:05:33.280 +start over, erase everything and just do the + +00:05:36.620 --> 00:05:36.760 +tutorial. So I did the tutorial and then I + +00:05:37.800 --> 00:05:38.000 +started writing and I was like, + +00:05:39.520 --> 00:05:40.020 +oh, I really want this functionality. + +00:05:43.380 --> 00:05:43.580 +And so I went and I looked for it and I + +00:05:44.060 --> 00:05:44.560 +installed the package. + +00:05:46.060 --> 00:05:46.560 +And then I got the functionality, + +00:05:47.960 --> 00:05:48.120 +went back to writing, and I'm like, + +00:05:49.920 --> 00:05:50.080 +oh, my editor should really be able to do + +00:05:52.000 --> 00:05:52.500 +this. And I thought about it. + +00:05:55.380 --> 00:05:55.520 +So a lot of it came down to the experience of + +00:05:56.320 --> 00:05:56.820 +what they're trying to accomplish. + +00:06:00.900 --> 00:06:01.260 +And really helping ask them that. + +00:06:04.600 --> 00:06:04.900 +I had 1 mentee had used Vim for a long time + +00:06:07.700 --> 00:06:07.940 +and then was exploring using Evil Mode and + +00:06:13.100 --> 00:06:13.260 +Emacs and we had conversations and it was + +00:06:16.840 --> 00:06:17.220 +like go back to Vim like you were using VS + +00:06:19.040 --> 00:06:19.280 +Code just go back to Vim and they went back + +00:06:20.980 --> 00:06:21.420 +to Vim and then they started writing, + +00:06:22.760 --> 00:06:23.260 +well, they went to NeoVim and they started + +00:06:27.620 --> 00:06:27.900 +writing Lua plugins for stuff and it just + +00:06:29.480 --> 00:06:29.980 +helped free them and they gained that + +00:06:31.320 --> 00:06:31.820 +ownership in their text editor. + +00:06:37.520 --> 00:06:37.660 +So I try to have them think through what are + +00:06:40.160 --> 00:06:40.440 +the common tasks that they're trying to + +00:06:44.180 --> 00:06:44.440 +accomplish and then thinking in terms of + +00:06:46.320 --> 00:06:46.480 +that. So instead of going and finding a + +00:06:48.340 --> 00:06:48.560 +solution, understand the problems they're + +00:06:52.180 --> 00:06:52.320 +experiencing, which tends to be what we + +00:06:53.360 --> 00:06:53.860 +should do in software development. + +00:06:57.720 --> 00:06:58.220 +Instead of implementing the solve a problem. + +00:07:02.000 --> 00:07:02.500 +Sometimes It's fun to implement an idea. + +00:07:04.840 --> 00:07:05.220 +[Speaker 0]: Yeah, I think it's really the crux, + +00:07:06.740 --> 00:07:07.120 +really, when it comes to software + +00:07:08.760 --> 00:07:09.060 +development, because what is at the crux of + +00:07:09.520 --> 00:07:09.960 +any kind of engineering? + +00:07:11.680 --> 00:07:11.840 +Well, it's the problem you're trying to + +00:07:13.480 --> 00:07:13.680 +solve. If you've got 2 islands and you need + +00:07:14.440 --> 00:07:14.860 +to join them up together, + +00:07:15.840 --> 00:07:16.340 +well, I need to build a bridge. + +00:07:17.160 --> 00:07:17.660 +Now, obviously with software, + +00:07:19.800 --> 00:07:19.940 +we have problems that defy the law of + +00:07:21.600 --> 00:07:21.840 +physics, which is great because we get very + +00:07:23.520 --> 00:07:23.720 +complex problems that are very exciting to + +00:07:26.380 --> 00:07:26.880 +solve. But when it comes to onboarding people + +00:07:28.180 --> 00:07:28.680 +into those ways of solving problems, + +00:07:29.540 --> 00:07:30.040 +well, I think mentoring, + +00:07:32.980 --> 00:07:33.480 +The key behind mentoring is that together, + +00:07:35.280 --> 00:07:35.460 +we're going to look at a problem and we're + +00:07:37.200 --> 00:07:37.680 +going to try to see how high would fix it. + +00:07:40.240 --> 00:07:40.740 +And you're going to try to appreciate whether + +00:07:42.280 --> 00:07:42.440 +this is something you would do as well or + +00:07:43.260 --> 00:07:43.760 +would like to do. + +00:07:50.080 --> 00:07:50.580 +[Speaker 1]: Yep, Absolutely. Yeah, + +00:07:54.340 --> 00:07:54.480 +it's really taking time to walk with them on + +00:07:56.500 --> 00:07:57.000 +the journey to understand what's frustrating + +00:07:59.700 --> 00:08:00.040 +them. I have a coworker we've been working + +00:08:01.240 --> 00:08:01.740 +together for a very long time. + +00:08:05.280 --> 00:08:05.780 +She is not a fast navigator of her editor, + +00:08:08.860 --> 00:08:09.200 +but as we've talked, that's not where she's + +00:08:09.960 --> 00:08:10.460 +looking to get better. + +00:08:17.380 --> 00:08:17.680 +She's looking to get better at asking the + +00:08:20.500 --> 00:08:20.740 +questions of the clients early so that we + +00:08:23.160 --> 00:08:23.660 +don't go down long paths of implementation. + +00:08:27.940 --> 00:08:28.320 +So it's been great because she's not looking + +00:08:29.820 --> 00:08:30.060 +to get better at her text editor. + +00:08:32.500 --> 00:08:33.000 +She's adequate for how she navigates. + +00:08:34.700 --> 00:08:34.900 +Other people look and they're like, + +00:08:35.740 --> 00:08:36.179 +man, I want to do it faster. + +00:08:36.820 --> 00:08:37.120 +I want to do it different. + +00:08:37.840 --> 00:08:38.340 +I want to do it better. + +00:08:39.480 --> 00:08:39.980 +And then we have a different conversation. + +00:08:44.480 --> 00:08:44.720 +[Speaker 0]: Right. All right. Moving on to the next + +00:08:46.960 --> 00:08:47.320 +question. I've been using Emacs for about 30 + +00:08:49.120 --> 00:08:49.240 +years and I find it really difficult to + +00:08:50.860 --> 00:08:51.200 +figure out how to help people get started + +00:08:54.400 --> 00:08:54.600 +with it So I guess my question is the same as + +00:08:55.680 --> 00:08:55.900 +the green question right about it. + +00:08:57.900 --> 00:08:58.100 +I think it's slightly different though You + +00:09:00.860 --> 00:09:01.360 +could it is more about well go on please. + +00:09:01.500 --> 00:09:02.000 +Yeah + +00:09:06.900 --> 00:09:07.400 +[Speaker 1]: so My wife a while ago, + +00:09:10.680 --> 00:09:11.180 +talked about the idea of, + +00:09:15.860 --> 00:09:16.260 +relative to anybody, I am an expert or + +00:09:19.020 --> 00:09:19.200 +slightly more informed on a topic than the + +00:09:20.380 --> 00:09:20.880 +person quote behind me. + +00:09:22.360 --> 00:09:22.600 +And there's a person ahead of me who's + +00:09:24.240 --> 00:09:24.740 +slightly more informed than I am. + +00:09:27.880 --> 00:09:28.120 +And so what we're looking at is perhaps with + +00:09:28.820 --> 00:09:29.320 +30 years of experience, + +00:09:32.580 --> 00:09:32.780 +introducing someone to Emacs might be + +00:09:35.780 --> 00:09:35.920 +difficult because you've you're too much of + +00:09:41.120 --> 00:09:41.320 +an expert. So maybe the there's a an idea of + +00:09:42.380 --> 00:09:42.880 +like what are the principles of pedagogy. + +00:09:45.180 --> 00:09:45.360 +I know we that was talked about yesterday in + +00:09:47.180 --> 00:09:47.300 +a presentation about like here's a + +00:09:49.160 --> 00:09:49.280 +constraint, you're using Emacs for the + +00:09:54.660 --> 00:09:54.880 +course. But so it's that idea of sharing what + +00:09:56.880 --> 00:09:57.380 +you have, where you're at, + +00:10:00.220 --> 00:10:00.720 +will, I think by nature, + +00:10:03.360 --> 00:10:03.860 +move the entire queue of people, + +00:10:04.940 --> 00:10:05.380 +like they don't really exist. + +00:10:06.380 --> 00:10:06.680 +I mean, they do, but they don't. + +00:10:08.600 --> 00:10:09.100 +Behind you, it'll help move them together + +00:10:10.320 --> 00:10:10.820 +forward just a little bit. + +00:10:13.440 --> 00:10:13.940 +And maybe we all move the condition together. + +00:10:17.760 --> 00:10:18.240 +So It's not a only 1 person kind of thing. + +00:10:22.120 --> 00:10:22.540 +It's a mindset of improving shared + +00:10:22.540 --> 00:10:23.040 +understanding. + +00:10:26.520 --> 00:10:26.640 +[Speaker 0]: Exactly, and I'd like to come back on + +00:10:28.180 --> 00:10:28.680 +something that you mentioned in your answer, + +00:10:30.940 --> 00:10:31.440 +because it's, you know, + +00:10:33.060 --> 00:10:33.460 +what the person asking the question + +00:10:35.240 --> 00:10:35.740 +mentioned, 30 years of advance, + +00:10:36.620 --> 00:10:36.860 +basically, on starting Emacs. + +00:10:37.900 --> 00:10:38.400 +You know, that's a lot of time, + +00:10:40.600 --> 00:10:41.020 +And you tend to equate this to a massive gap + +00:10:42.440 --> 00:10:42.940 +in terms of skills between the 2 people. + +00:10:47.600 --> 00:10:47.840 +And whilst it's obvious that would be a gap + +00:10:50.280 --> 00:10:50.460 +of skills. You know, I find that learning in + +00:10:54.960 --> 00:10:55.460 +terms of pedagogy works best when the person + +00:10:58.180 --> 00:10:58.320 +doing the teaching is very close in terms of + +00:11:00.380 --> 00:11:00.880 +skill levels to the person being taught. + +00:11:02.620 --> 00:11:03.120 +Why is it the case? It's because it's much + +00:11:05.660 --> 00:11:05.800 +fresher in their memory what are the + +00:11:08.100 --> 00:11:08.300 +different elements that they have to go + +00:11:09.440 --> 00:11:09.940 +through to acquire a particular skill. + +00:11:12.440 --> 00:11:12.940 +To go a little bit into the theory, + +00:11:14.640 --> 00:11:15.060 +I'm not sure if you're familiar with Vygotsky + +00:11:16.380 --> 00:11:16.860 +or at least the I plus 1. + +00:11:17.640 --> 00:11:17.860 +Are you familiar with this, + +00:11:20.540 --> 00:11:21.040 +[Speaker 1]: I am not, go on. + +00:11:22.600 --> 00:11:23.000 +[Speaker 0]: Jeremy? So I used to be a teacher before, + +00:11:24.520 --> 00:11:24.960 +and it's 1 of the things they taught us. + +00:11:26.920 --> 00:11:27.340 +It's about the fact that when you are trying + +00:11:28.900 --> 00:11:29.400 +to make someone acquire a skill, + +00:11:31.840 --> 00:11:32.340 +I represents the current knowledge, + +00:11:34.960 --> 00:11:35.160 +and plus 1 is the thing that you should be + +00:11:38.920 --> 00:11:39.060 +teaching them and the theory behind it is + +00:11:41.820 --> 00:11:42.040 +that it's much easier to teach someone to + +00:11:44.260 --> 00:11:44.500 +teach something to someone when they only + +00:11:46.100 --> 00:11:46.460 +have to focus on plus 1 i.e. + +00:11:48.460 --> 00:11:48.900 +Something that is very close nearby to them + +00:11:50.580 --> 00:11:50.840 +If you go with something that is I plus 2, + +00:11:53.240 --> 00:11:53.740 +I plus 3, or god forbid I plus 10, + +00:11:55.760 --> 00:11:55.960 +it's going to be much harder for them to get + +00:11:58.100 --> 00:11:58.360 +to the understanding because the distance is + +00:12:01.720 --> 00:12:01.960 +much greater. And that's why I think + +00:12:05.000 --> 00:12:05.320 +mentoring can be taken in 2 ways. + +00:12:07.740 --> 00:12:07.860 +It could be a mentor who's merely ahead of + +00:12:10.380 --> 00:12:10.760 +you by plus 1, or it could be a mentor that + +00:12:12.040 --> 00:12:12.440 +is ahead of you by plus 10, + +00:12:14.380 --> 00:12:14.640 +but who has the understanding of what plus 1, + +00:12:15.800 --> 00:12:16.300 +plus 2, and plus 3 is. + +00:12:22.680 --> 00:12:23.160 +[Speaker 1]: Yeah, and it can be very challenging to + +00:12:27.400 --> 00:12:27.540 +unwind that. I know if we think about all of + +00:12:33.540 --> 00:12:33.740 +our hands or input methods have a memory of + +00:12:35.920 --> 00:12:36.120 +something that I honestly couldn't tell you + +00:12:38.440 --> 00:12:38.940 +what it is. Right? Like, + +00:12:40.240 --> 00:12:40.740 +I know how to do it on a keyboard, + +00:12:43.480 --> 00:12:43.980 +right? We've internalized so much. + +00:12:47.900 --> 00:12:48.040 +And so, yeah, how to walk backward is a + +00:12:51.940 --> 00:12:52.200 +distinct challenge and being curious with + +00:12:55.600 --> 00:12:56.100 +them and close to them and not asking, + +00:13:00.300 --> 00:13:00.800 +trying to diffuse questions and not ask like + +00:13:03.120 --> 00:13:03.620 +leading, not overly leading. + +00:13:09.280 --> 00:13:09.780 +An example, early on in my mentoring career, + +00:13:11.260 --> 00:13:11.760 +I was working in a community project, + +00:13:14.280 --> 00:13:14.480 +and I really wanted to go in and say to + +00:13:18.000 --> 00:13:18.500 +everybody, why do we suck at sharing code? + +00:13:21.020 --> 00:13:21.520 +But instead I said, wait a minute, + +00:13:24.880 --> 00:13:25.080 +what would be the question I could ask the + +00:13:27.680 --> 00:13:28.180 +group in which I could then ask my question? + +00:13:30.320 --> 00:13:30.720 +So instead I went into the group and I said, + +00:13:32.560 --> 00:13:33.060 +how are we doing about sharing code? + +00:13:37.120 --> 00:13:37.620 +And collectively, we were able to establish + +00:13:39.200 --> 00:13:39.700 +we didn't feel very good about it. + +00:13:42.740 --> 00:13:43.240 +And that conversation now 9 years ago, + +00:13:47.020 --> 00:13:47.300 +helped move a process along for the last, + +00:13:50.220 --> 00:13:50.380 +like it gave it energy for 9 years of how + +00:13:51.560 --> 00:13:52.060 +we're sharing and how we're approaching + +00:13:58.260 --> 00:13:58.760 +stuff. So yeah, the curious questions are + +00:14:00.060 --> 00:14:00.560 +super helpful. + +00:14:04.440 --> 00:14:04.940 +[Speaker 0]: All right, lovely way to finish this point. + +00:14:06.940 --> 00:14:07.200 +We have about 10 more minutes so I'm glad + +00:14:08.600 --> 00:14:08.800 +that we have a little bit of extra time to + +00:14:10.640 --> 00:14:10.920 +answer the questions because we have a little + +00:14:13.740 --> 00:14:13.940 +more. All right, I'm gonna switch to the next + +00:14:15.160 --> 00:14:15.480 +question we can come back to people reacting + +00:14:16.720 --> 00:14:17.220 +to what you just said a little bit later. + +00:14:17.440 --> 00:14:17.640 +[Speaker 2]: Sure. + +00:14:20.640 --> 00:14:20.860 +[Speaker 0]: All right, have you encountered anyone that + +00:14:23.760 --> 00:14:24.000 +are being negative about the fact that you're + +00:14:26.400 --> 00:14:26.600 +using Emacs, assuming that they just don't + +00:14:28.740 --> 00:14:28.940 +know or have misconceptions about Emacs and + +00:14:30.340 --> 00:14:30.700 +nothing malicious? If so, + +00:14:32.220 --> 00:14:32.720 +how do you handle these kinds of people? + +00:14:40.640 --> 00:14:40.840 +[Speaker 1]: Sure, So at work, I get a gentle elbowing of + +00:14:42.720 --> 00:14:43.220 +like, oh, Jeremy's going to talk about Emacs + +00:14:45.900 --> 00:14:46.400 +again. So it's not entirely... + +00:14:50.600 --> 00:14:51.100 +Maybe it's a little dismissive, + +00:14:56.840 --> 00:14:57.340 +but I don't actually care because like it's + +00:15:00.160 --> 00:15:00.240 +like being, I don't know, + +00:15:02.360 --> 00:15:02.480 +it's like being made fun of for using a + +00:15:03.560 --> 00:15:04.060 +particular type of pen. + +00:15:05.680 --> 00:15:06.180 +Like goal is to write something, + +00:15:09.080 --> 00:15:09.580 +right? And I'm using a pen that gives me joy. + +00:15:11.740 --> 00:15:12.240 +When I talk with my mentees, + +00:15:14.240 --> 00:15:14.440 +like I want to meet them exactly where + +00:15:16.980 --> 00:15:17.200 +they're at with their code and like what + +00:15:20.860 --> 00:15:21.260 +they're comfortable with and help them remove + +00:15:23.100 --> 00:15:23.600 +any of that potential like inadequacy, + +00:15:27.800 --> 00:15:27.980 +sense of inadequacy or imposter syndrome or + +00:15:32.980 --> 00:15:33.480 +any of those things because The goal is to, + +00:15:36.380 --> 00:15:36.880 +for me, to be better at computering. + +00:15:39.800 --> 00:15:40.300 +Like hop on my computer. + +00:15:45.060 --> 00:15:45.220 +I want to be able to use it at a speed of + +00:15:47.680 --> 00:15:47.800 +thought that doesn't introduce a lot of + +00:15:50.660 --> 00:15:51.160 +friction. Another speaker talked about that + +00:15:54.000 --> 00:15:54.200 +using HyperBowl and a couple of plugins to + +00:15:55.260 --> 00:15:55.760 +write stream of consciousness. + +00:15:57.980 --> 00:15:58.480 +And that was an important consideration. + +00:16:01.060 --> 00:16:01.380 +I want my text editor to flow with me. + +00:16:02.160 --> 00:16:02.420 +And so I'm like, well, + +00:16:03.560 --> 00:16:04.060 +Emacs flows with me smooth. + +00:16:08.220 --> 00:16:08.720 +Like you can deride it all you want. + +00:16:09.960 --> 00:16:10.360 +It doesn't thread very well, + +00:16:12.080 --> 00:16:12.580 +but it's just me on this machine. + +00:16:14.120 --> 00:16:14.440 +I don't need it to overly thread, + +00:16:15.720 --> 00:16:16.220 +at least for my use cases. + +00:16:22.340 --> 00:16:22.600 +[Speaker 0]: Yeah, I can only agree 100% with what you've + +00:16:25.800 --> 00:16:26.300 +just said. And it's very easy to dismiss + +00:16:28.860 --> 00:16:29.160 +stuff like Vim or Emacs based on the very + +00:16:31.260 --> 00:16:31.760 +trite sentences that everyone use. + +00:16:32.440 --> 00:16:32.640 +But at the end of the day, + +00:16:33.540 --> 00:16:34.040 +I really like what you said. + +00:16:36.280 --> 00:16:36.780 +Those are just pencil that we're using to + +00:16:39.000 --> 00:16:39.280 +express ourselves. And we're doing something + +00:16:41.820 --> 00:16:42.080 +a little more fancy than just writing words + +00:16:43.680 --> 00:16:44.180 +on a page. But ultimately, + +00:16:46.480 --> 00:16:46.880 +It's just text at the very bottom. + +00:16:48.560 --> 00:16:49.060 +So whatever helps us write this test, + +00:16:50.540 --> 00:16:51.040 +this text more easily, + +00:16:52.960 --> 00:16:53.460 +you know, it's always good. + +00:16:56.680 --> 00:16:56.980 +Yeah. All right. Moving on to the next + +00:16:59.360 --> 00:16:59.820 +question. I love the attitudes and worldview + +00:17:02.980 --> 00:17:03.160 +that infuse your blog post and your talk this + +00:17:05.400 --> 00:17:05.900 +weekend. Learn something every week. + +00:17:08.400 --> 00:17:08.680 +It's cumulative. English class was the most + +00:17:11.319 --> 00:17:11.520 +important. What other advice do you have and + +00:17:13.680 --> 00:17:13.859 +how is it generalizable to those of us who + +00:17:14.440 --> 00:17:14.940 +are not devs? + +00:17:26.280 --> 00:17:26.780 +[Speaker 1]: Sure. So I think 1 of the really big changes + +00:17:29.140 --> 00:17:29.320 +for me, and I talked about this in the + +00:17:34.700 --> 00:17:35.200 +writing Q&A, is switching my blog from a + +00:17:38.160 --> 00:17:38.480 +topical 1 about role-playing games and board + +00:17:43.320 --> 00:17:43.480 +games into anything that I think I want to + +00:17:47.220 --> 00:17:47.440 +write. And that shift happened about the time + +00:17:50.380 --> 00:17:50.560 +that I was really exploring using Emacs for + +00:17:54.060 --> 00:17:54.560 +writing. And so previously I had, + +00:17:57.860 --> 00:17:58.360 +I would write blog posts in Markdown using, + +00:18:00.560 --> 00:18:01.060 +or I would write it in the web interface. + +00:18:06.820 --> 00:18:07.060 +And getting to the point where my writing was + +00:18:08.480 --> 00:18:08.980 +the same as my coding, + +00:18:12.040 --> 00:18:12.540 +was the same as my RSS consumption, + +00:18:15.060 --> 00:18:15.560 +was the same of a lot of these things, + +00:18:21.260 --> 00:18:21.560 +freed up my general interests so that they + +00:18:23.860 --> 00:18:24.360 +all can kind of play in that space. + +00:18:27.660 --> 00:18:27.940 +So and that's the, I think, + +00:18:33.080 --> 00:18:33.540 +Feynman said, like, his notes are his + +00:18:35.860 --> 00:18:36.360 +thoughts. It's not him thinking, + +00:18:38.480 --> 00:18:38.980 +I mean, they are him thinking as well. + +00:18:40.680 --> 00:18:41.180 +So it's really framing it that way. + +00:18:44.180 --> 00:18:44.680 +And then for not devs, + +00:18:49.060 --> 00:18:49.240 +My daughter has been doing screenwriting and + +00:18:53.180 --> 00:18:53.480 +she just had her school license for the tool + +00:18:54.720 --> 00:18:55.220 +that they use for writing screenplays. + +00:18:57.400 --> 00:18:57.660 +She had to pay for it on her own. + +00:18:59.540 --> 00:18:59.680 +And I was like, hey, let's take a look at + +00:19:01.000 --> 00:19:01.500 +Emacs. There's a package for this. + +00:19:03.320 --> 00:19:03.820 +Maybe it makes sense to you. + +00:19:09.520 --> 00:19:09.720 +So I think the, really to summarize it is + +00:19:12.280 --> 00:19:12.780 +like the broad curiosity in like, + +00:19:14.320 --> 00:19:14.820 +I have a liberal arts degree, + +00:19:20.920 --> 00:19:21.420 +I have barely any computer science classwork + +00:19:23.940 --> 00:19:24.400 +practice. I have a lot of practical + +00:19:26.200 --> 00:19:26.700 +experience doing software development, + +00:19:28.320 --> 00:19:28.820 +but theory is minimal. + +00:19:32.400 --> 00:19:32.520 +Instead, I look to things like Lord of the + +00:19:35.340 --> 00:19:35.840 +Rings or role-playing games or poetry or + +00:19:40.520 --> 00:19:41.020 +history or whatever and be curious and Then + +00:19:47.260 --> 00:19:47.760 +be playful The introduction of git locally + +00:19:51.060 --> 00:19:51.340 +where I can just have a Git repo means my + +00:19:56.960 --> 00:19:57.340 +text is recoverable. I don't, + +00:19:59.060 --> 00:19:59.320 +I can play. I'll just break it, + +00:20:00.320 --> 00:20:00.800 +I'll change it. It's software, + +00:20:02.860 --> 00:20:03.360 +let it be soft. It's not hard. + +00:20:05.740 --> 00:20:06.100 +It can be hard to work with it, + +00:20:08.080 --> 00:20:08.520 +but let it be soft. Let it be pruned, + +00:20:09.780 --> 00:20:10.120 +let it go away, let it die, + +00:20:11.200 --> 00:20:11.700 +let it come back. + +00:20:16.360 --> 00:20:16.800 +[Speaker 0]: Yeah, That's a lovely attitude to have. + +00:20:20.980 --> 00:20:21.160 +I mean, I've already talked about my past as + +00:20:23.680 --> 00:20:23.860 +an English major in 1 of the EmacsConf talks, + +00:20:26.520 --> 00:20:26.780 +but just like you, I don't have a comp sci + +00:20:30.140 --> 00:20:30.200 +education. I just started with needing a + +00:20:32.120 --> 00:20:32.620 +better pen, and that was about 10 years ago. + +00:20:36.660 --> 00:20:37.020 +And now I find myself hosting Emacs Cons, + +00:20:38.760 --> 00:20:39.140 +but it was a very incremental process, + +00:20:40.160 --> 00:20:40.660 +a very cumulative process, + +00:20:42.720 --> 00:20:43.220 +to reuse the word that we used before. + +00:20:48.480 --> 00:20:48.740 +And What I also like about people outside of + +00:20:49.640 --> 00:20:50.140 +CompSight using Emacs, + +00:20:53.300 --> 00:20:53.480 +and we've got plenty of such examples in the + +00:20:54.940 --> 00:20:55.320 +presentations we've had this year, + +00:20:57.720 --> 00:20:57.940 +but also last year, is that you get so many + +00:21:00.540 --> 00:21:00.920 +different windows into how people are using + +00:21:03.400 --> 00:21:03.480 +Emacs, and it kind of harks back to what I + +00:21:06.340 --> 00:21:06.560 +was saying before about Emacs being a + +00:21:08.380 --> 00:21:08.880 +platform with many horizontal packages + +00:21:10.560 --> 00:21:11.060 +permitting any kind of workflow imaginable + +00:21:13.580 --> 00:21:14.080 +and some people are going to gravitate + +00:21:16.280 --> 00:21:16.640 +towards old mode. I think it was your sister + +00:21:18.520 --> 00:21:19.020 +that you mentioned that was looking into + +00:21:20.760 --> 00:21:21.260 +packages for writing screenplays. + +00:21:23.220 --> 00:21:23.520 +Well, we've got such a thing in Emacs. + +00:21:26.260 --> 00:21:26.760 +I mean, a screenplay is just a monospace font + +00:21:27.900 --> 00:21:28.400 +with some fancy formatting. + +00:21:29.300 --> 00:21:29.800 +It's not very complicated. + +00:21:32.460 --> 00:21:32.960 +And if you can get behind, + +00:21:36.280 --> 00:21:36.720 +you know, someone using such a stable format + +00:21:38.480 --> 00:21:38.940 +for writing screenplay with many rules, + +00:21:40.680 --> 00:21:40.840 +but ultimately all the screenplay look the + +00:21:42.520 --> 00:21:42.780 +same, well, Emacs is kind of just the same. + +00:21:45.060 --> 00:21:45.480 +It's about standardizing the way you edit + +00:21:47.760 --> 00:21:48.000 +text. So I think your sister was already half + +00:21:51.420 --> 00:21:51.760 +[Speaker 1]: Yeah, it was my it was my my daughter. + +00:21:52.720 --> 00:21:52.840 +I'm trying to sell her on. + +00:21:53.320 --> 00:21:53.800 +[Speaker 0]: on the idea. Oh, no, sorry. + +00:21:56.200 --> 00:21:56.640 +[Speaker 1]: Yeah, she also picked up programming just 1 + +00:21:58.140 --> 00:21:58.640 +day and was like, I forget that. + +00:22:01.360 --> 00:22:01.860 +Like she was playing with a stage manager + +00:22:03.420 --> 00:22:03.580 +programming thing or like have a little + +00:22:04.640 --> 00:22:05.140 +avatars moving around. + +00:22:11.280 --> 00:22:11.480 +And so she's got a predisposition to like the + +00:22:15.620 --> 00:22:16.020 +craft of things. And I think that's another + +00:22:18.320 --> 00:22:18.820 +aspect is like, I'm not, + +00:22:21.080 --> 00:22:21.580 +I mean, I appreciate science. + +00:22:23.040 --> 00:22:23.540 +I'm here for a scientific approach, + +00:22:27.940 --> 00:22:28.440 +but I also Really enjoy the craft of things + +00:22:32.500 --> 00:22:33.000 +Playing with it Like this is my playground. + +00:22:36.000 --> 00:22:36.180 +I love kind of hacking on it and looking at + +00:22:39.160 --> 00:22:39.360 +packages and Seeing how I might use it pick + +00:22:42.120 --> 00:22:42.340 +it up for a little bit and then maybe I + +00:22:42.880 --> 00:22:43.380 +forget about it + +00:22:47.940 --> 00:22:48.440 +[Speaker 0]: Right, well Jeremy I think that was Lovely + +00:22:49.860 --> 00:22:50.180 +finish. Oh, sorry plasma. + +00:22:51.380 --> 00:22:51.760 +Oh, sorry. I thought he was someone on Mumble + +00:22:54.640 --> 00:22:54.780 +talking to me. I'm actually going to have to + +00:22:56.200 --> 00:22:56.600 +be sorry because we only have about 50 + +00:22:58.000 --> 00:22:58.320 +seconds until we move on to the next talk. + +00:22:59.600 --> 00:23:00.040 +But please, Plasma Strike, + +00:23:01.120 --> 00:23:01.560 +If you want to ask your question to Jeremy, + +00:23:02.720 --> 00:23:03.220 +by all means, stay in the room. + +00:23:04.120 --> 00:23:04.620 +[Speaker 1]: Yep, I'll be here. + +00:23:07.640 --> 00:23:07.900 +[Speaker 0]: And we'll be recording all of this and we'll + +00:23:09.440 --> 00:23:09.940 +put this later on the talk page. + +00:23:12.440 --> 00:23:12.560 +So Jeremy, I'll have to say bye now because I + +00:23:13.660 --> 00:23:14.160 +need to prepare the next room. + +00:23:16.320 --> 00:23:16.440 +But It was lovely talking with you and thank + +00:23:17.040 --> 00:23:17.540 +you for all your answers. + +00:23:19.040 --> 00:23:19.540 +[Speaker 1]: Absolutely. Thank you. + +00:23:21.220 --> 00:23:21.720 +[Speaker 0]: Bye-bye. Bye. + +NOTE Start of section to review + +00:23:26.400 --> 00:23:26.580 +[Speaker 2]: See you. Hello. One of the things with Emacs is + +00:23:28.740 --> 00:23:28.900 +it's not... It's like when you change the + +00:23:30.860 --> 00:23:31.260 +file management, you just change very, + +00:23:33.480 --> 00:23:33.980 +very small amounts of what exactly you need, + +00:23:38.040 --> 00:23:38.360 +you want to change. Like you go from text + +00:23:43.440 --> 00:23:43.860 +editing to your file manager, + +00:23:44.720 --> 00:23:45.220 +you're not changing your theme, + +00:23:46.680 --> 00:23:47.180 +you're not changing your font. + +00:23:49.940 --> 00:23:50.060 +[Speaker 3]: And you + +00:23:52.360 --> 00:23:52.500 +[Speaker 2]: use your bookmarks, you use your bookmarks in + +00:23:54.340 --> 00:23:54.840 +your emails, you use your bookmarks in your + +00:23:59.380 --> 00:23:59.880 +org-mod documents, you use it in E-dub, + +00:24:02.460 --> 00:24:02.960 +W-W buffers if you use that, + +00:24:06.760 --> 00:24:06.940 +but it's just the, Yeah, + +00:24:10.080 --> 00:24:10.580 +it's just the least amount of Incremental + +00:24:10.940 --> 00:24:11.440 +changes + +00:24:14.620 --> 00:24:14.900 +[Speaker 1]: yeah, you're when you were talking about like + +00:24:18.480 --> 00:24:18.980 +the Reducing friction like turn off editing + +00:24:22.280 --> 00:24:22.480 +or not editing, but auto correct while you're + +00:24:25.440 --> 00:24:25.940 +typing, it's absolutely spot on. + +00:24:29.800 --> 00:24:30.300 +You're wanting to get whatever is flowing + +00:24:31.280 --> 00:24:31.720 +needs to keep flowing, + +00:24:33.700 --> 00:24:34.200 +like as a programmer or as a creative, + +00:24:38.100 --> 00:24:38.600 +anytime I can hit flow is my goal. + +00:24:42.240 --> 00:24:42.740 +And so paying attention to what removes flow + +00:24:48.480 --> 00:24:48.980 +or hinders it or saps energy and that unified + +00:24:52.800 --> 00:24:53.080 +environment of Emacs is really helpful to + +00:24:57.260 --> 00:24:57.760 +maintain that. So yeah. + +00:25:02.300 --> 00:25:02.580 +[Speaker 2]: I think it's about speed and then once after + +00:25:04.040 --> 00:25:04.540 +you get some of that, then you're like, + +00:25:06.420 --> 00:25:06.920 +well, yeah, it's important, + +00:25:09.320 --> 00:25:09.820 +but this is like the last thing I care about. + +00:25:14.280 --> 00:25:14.780 +[Speaker 1]: Right. Speed is all like, + +00:25:19.700 --> 00:25:20.200 +Yeah, there's a quote that I love called, + +00:25:22.940 --> 00:25:23.440 +I forget the author. It's, + +00:25:30.060 --> 00:25:30.260 +there is a connection between slowness and + +00:25:33.960 --> 00:25:34.460 +remembering and fastness and forgetting. + +00:25:39.680 --> 00:25:40.180 +And the slowness is an interesting, + +00:25:43.520 --> 00:25:43.840 +like it's, I am moving fast in Emacs because + +00:25:46.020 --> 00:25:46.520 +I've forgotten how I'm doing it. + +00:25:47.920 --> 00:25:48.420 +I just do it now, right? + +00:25:52.120 --> 00:25:52.360 +And then the slowness of like being in my + +00:25:57.540 --> 00:25:57.720 +thought and staying on that stream is where I + +00:26:01.700 --> 00:26:02.200 +want to be and ride whatever that pathway is. + +00:26:07.540 --> 00:26:07.680 +And a text editor is still hard to do that + +00:26:10.260 --> 00:26:10.520 +because if I were using a pen and paper it's + +00:26:11.600 --> 00:26:12.100 +more cumbersome to auto-edit. + +00:26:18.620 --> 00:26:18.800 +But I can't get it out without losing my + +00:26:21.180 --> 00:26:21.440 +thinking. And so I ended up having to type + +00:26:21.440 --> 00:26:21.940 +it. + +00:26:25.440 --> 00:26:25.640 +[Speaker 3]: Something I've been experimenting with is + +00:26:26.600 --> 00:26:27.100 +using, well, recording. + +00:26:29.440 --> 00:26:29.700 +Some other people are using dictation for + +00:26:31.760 --> 00:26:32.260 +this to just get the blur out of the ideas + +00:26:35.280 --> 00:26:35.500 +and you can go back and glean some of that + +00:26:36.200 --> 00:26:36.700 +stuff out of it. + +00:26:41.320 --> 00:26:41.680 +[Speaker 1]: Yeah, what I will do when I'm capturing like + +00:26:44.760 --> 00:26:45.260 +quotes or epigraphs is I will almost always + +00:26:47.760 --> 00:26:47.960 +turn on dictation because I got a book in 1 + +00:26:52.020 --> 00:26:52.520 +hand. So I'm like, on goes the typing. + +00:26:56.640 --> 00:26:56.940 +And yeah, that is, there's a, + +00:26:59.900 --> 00:27:00.180 +I'm really thankful that that exists as well. + +00:27:01.260 --> 00:27:01.760 +Like my mother is blind. + +00:27:05.020 --> 00:27:05.520 +And so having that helps her and me + +00:27:08.560 --> 00:27:09.060 +communicate Through text because we're both + +00:27:12.900 --> 00:27:13.400 +able to appreciate it And use it in a way + +00:27:15.480 --> 00:27:15.980 +that is accessible for both of us + +00:27:19.120 --> 00:27:19.620 +[Speaker 3]: Go ahead + +00:27:23.100 --> 00:27:23.600 +[Speaker 2]: There's the L feet to package which will + +00:27:25.160 --> 00:27:25.200 +which will allow you to both of us. + +00:27:25.400 --> 00:27:25.440 +There's the ElfieTube package which will + +00:27:28.320 --> 00:27:28.820 +allow you to subscribe to a YouTube channel + +00:27:32.500 --> 00:27:33.000 +and then download the subtitles and give you + +00:27:36.760 --> 00:27:36.940 +remote control access to the MPV player to + +00:27:37.700 --> 00:27:38.200 +watch the YouTube thing. + +00:27:41.420 --> 00:27:41.920 +And considering you have a really big + +00:27:44.580 --> 00:27:44.680 +subtitle thing that you can click at the + +00:27:45.480 --> 00:27:45.660 +various different places, + +00:27:47.860 --> 00:27:48.280 +it's really surprising about how different + +00:27:49.300 --> 00:27:49.800 +that makes YouTube feel. + +00:27:50.680 --> 00:27:51.180 +[Speaker 1]: Yeah I've... + +00:27:54.140 --> 00:27:54.340 +[Speaker 2]: And then on top of that about how much like + +00:27:57.660 --> 00:27:57.800 +if you've used it why would you never have + +00:27:59.160 --> 00:27:59.660 +thought about that before because it's... + +00:28:00.720 --> 00:28:01.220 +Right. It's even better. + +00:28:04.840 --> 00:28:05.340 +[Speaker 1]: Right absolutely. Sasha? + +00:28:10.080 --> 00:28:10.440 +[Speaker 3]: Oh I would say I do use the caption slot also + +00:28:11.580 --> 00:28:12.040 +when I'm skimming through stuff for Emacs + +00:28:13.740 --> 00:28:14.240 +News. But for books specifically, + +00:28:18.420 --> 00:28:18.600 +I often use Google Lens to just capture the + +00:28:21.900 --> 00:28:22.200 +text and copy it so that I don't have to deal + +00:28:24.140 --> 00:28:24.640 +with recognition errors or whatever. + +00:28:25.760 --> 00:28:26.260 +really useful. + +00:28:31.780 --> 00:28:32.280 +[Speaker 1]: It's just So 1 of my hobbies is role-playing + +00:28:35.980 --> 00:28:36.100 +games and the tabular data that is in the + +00:28:38.940 --> 00:28:39.440 +role-playing books is never in correct, + +00:28:43.160 --> 00:28:43.380 +like copy it out. And so I was like this is + +00:28:46.260 --> 00:28:46.680 +really annoying And I ended up taking + +00:28:47.720 --> 00:28:48.220 +screenshots on my machine, + +00:28:50.280 --> 00:28:50.780 +running Tesseract to pipe it in, + +00:28:53.480 --> 00:28:53.980 +and then using Emacs to like edit it because + +00:28:57.940 --> 00:28:58.100 +Tesseract adheres to the column format that + +00:29:00.520 --> 00:29:00.680 +I'm looking for. And I'm really thankful that + +00:29:05.680 --> 00:29:06.100 +we're at a place where the OCR is in good + +00:29:09.720 --> 00:29:10.120 +shape. That's part of my day job is working + +00:29:14.180 --> 00:29:14.680 +on some old documents that OCR is good, + +00:29:18.100 --> 00:29:18.600 +but not great because of like their 19th + +00:29:23.720 --> 00:29:23.920 +century documents, but having that ability to + +00:29:28.080 --> 00:29:28.220 +me is really powerful because we're gonna be + +00:29:32.580 --> 00:29:32.900 +able to share that text And also then once + +00:29:35.860 --> 00:29:36.360 +it's understood in what it's ASCII or UTF-8 + +00:29:39.000 --> 00:29:39.500 +encoding is, it can be translated as well. + +00:29:41.960 --> 00:29:42.460 +So we can make it even more generally + +00:29:46.480 --> 00:29:46.720 +available, which I think is a nice thing to + +00:29:46.720 --> 00:29:47.220 +have. + +00:29:51.820 --> 00:29:52.320 +[Speaker 3]: I wanted to go back to the topic of mentoring + +00:29:54.000 --> 00:29:54.240 +since that's something that I'm very much + +00:29:55.940 --> 00:29:56.400 +interested in figuring out how to facilitate + +00:29:56.980 --> 00:29:57.480 +in the Emacs community. + +00:30:00.520 --> 00:30:00.720 +Other people have been working on kind of + +00:30:03.440 --> 00:30:03.900 +remote mentoring initiatives with Emacs + +00:30:07.640 --> 00:30:07.860 +Buddy. And there are meetups as well that + +00:30:09.140 --> 00:30:09.340 +kind of get that sense of like, + +00:30:10.680 --> 00:30:10.840 +you know, what people are doing things and + +00:30:12.040 --> 00:30:12.500 +then somebody can look over their shoulder + +00:30:14.060 --> 00:30:14.260 +and say, hey, have you ever thought about + +00:30:15.060 --> 00:30:15.560 +[Speaker 1]: Right. + +00:30:17.780 --> 00:30:18.040 +[Speaker 3]: this? Is there any things that you can can + +00:30:20.320 --> 00:30:20.820 +suggest specifically in the context of this + +00:30:23.180 --> 00:30:23.680 +kind of mentoring over a distance? + +00:30:25.680 --> 00:30:26.180 +Any chance you've thought about it? + +00:30:30.800 --> 00:30:30.920 +[Speaker 1]: I'm on the Emacs buddy repo and I've had a + +00:30:32.600 --> 00:30:33.100 +handful of people reach out to me. + +00:30:37.700 --> 00:30:37.920 +Most often we start with email and every so + +00:30:38.980 --> 00:30:39.320 +often it'll be like, hey, + +00:30:44.340 --> 00:30:44.840 +let's hop on some kind of video or audio, + +00:30:47.320 --> 00:30:47.820 +even just done phone calls. + +00:30:53.140 --> 00:30:53.480 +Yeah, I haven't done any of the like shared + +00:30:57.220 --> 00:30:57.500 +buffer stuff. I know like at work we have + +00:30:59.700 --> 00:31:00.200 +replit where we can use that. + +00:31:02.500 --> 00:31:03.000 +Seeing the presentation on CDRT, + +00:31:04.440 --> 00:31:04.940 +I was like, oh, that's really great. + +00:31:10.760 --> 00:31:11.140 +But what I found is being able to see + +00:31:15.280 --> 00:31:15.720 +someone, I don't get to see them typing, + +00:31:17.640 --> 00:31:17.840 +but I get to see the results of what they're + +00:31:18.840 --> 00:31:19.340 +doing on the computer. + +00:31:22.840 --> 00:31:23.040 +You know paying attention to that is the big + +00:31:26.040 --> 00:31:26.540 +1 to help them think of a different way. + +00:31:28.940 --> 00:31:29.160 +Depending on where they're at when they're + +00:31:32.960 --> 00:31:33.460 +writing if they are like at a pause point, + +00:31:35.160 --> 00:31:35.460 +if I'm at my best, I'll be like, + +00:31:37.920 --> 00:31:38.360 +so what are you thinking? + +00:31:40.640 --> 00:31:41.140 +Where are you stuck? Cause maybe they're + +00:31:43.040 --> 00:31:43.280 +trying to navigate somewhere and that starts + +00:31:46.500 --> 00:31:46.720 +to create a point for a conversation of like, + +00:31:48.280 --> 00:31:48.780 +how do I go from here to there? + +00:31:57.340 --> 00:31:57.520 +And so it's looking for those moments is + +00:31:58.840 --> 00:31:59.340 +where I try to operate. + +00:32:03.740 --> 00:32:04.240 +[Speaker 3]: And sometimes, you know, + +00:32:05.380 --> 00:32:05.600 +so there's kind of like, + +00:32:06.760 --> 00:32:07.120 +how do you go from here to there? + +00:32:08.000 --> 00:32:08.500 +And sometimes even the, + +00:32:12.380 --> 00:32:12.540 +what there should I be going for is a + +00:32:15.060 --> 00:32:15.160 +challenge, right? Because especially with + +00:32:16.480 --> 00:32:16.980 +Emacs newbies, they might not necessarily + +00:32:19.340 --> 00:32:19.540 +know what's possible or what's nearby in + +00:32:21.200 --> 00:32:21.700 +terms of what their current knowledge is. + +00:32:23.760 --> 00:32:24.120 +And that's an interesting thing to map out. + +00:32:25.960 --> 00:32:26.400 +Is that something that you've thought about + +00:32:29.020 --> 00:32:29.280 +and as you're conversing with all these + +00:32:29.280 --> 00:32:29.780 +people? + +00:32:37.680 --> 00:32:37.840 +[Speaker 1]: The main thing, the main function that I do + +00:32:38.720 --> 00:32:38.940 +talk, I talked about this, + +00:32:41.240 --> 00:32:41.740 +I think in the, I did in the talk where it's, + +00:32:46.320 --> 00:32:46.660 +I need to jump between the test and the + +00:32:50.900 --> 00:32:51.400 +implementation. And since 2005, + +00:32:56.200 --> 00:32:56.480 +I've had that. And I watch folks not have + +00:32:57.880 --> 00:32:58.100 +that. I'm just like, Oh, + +00:33:00.380 --> 00:33:00.540 +my goodness, like there's a convention in the + +00:33:02.500 --> 00:33:02.720 +language we work in. Let's get that + +00:33:04.080 --> 00:33:04.580 +installed. Let's get it going. + +00:33:07.600 --> 00:33:07.840 +Like that's 1 thing, that's 1 access I know + +00:33:11.740 --> 00:33:11.880 +they're gonna go to. Another 1 is the jump to + +00:33:14.280 --> 00:33:14.600 +definition. And I've never gotten like C + +00:33:16.680 --> 00:33:16.960 +tags. I haven't really spent time on that, + +00:33:18.600 --> 00:33:19.100 +but with the advent of LSP, + +00:33:21.040 --> 00:33:21.540 +it works a lot better. + +00:33:24.520 --> 00:33:25.020 +And so I try to get people to use that. + +00:33:30.200 --> 00:33:30.640 +And what I've noticed weirdly is like VS + +00:33:34.200 --> 00:33:34.400 +code, it doesn't work as well as I would have + +00:33:36.340 --> 00:33:36.500 +thought. And there's lots of like errors and + +00:33:38.100 --> 00:33:38.560 +warnings popping up in the bottom corner. + +00:33:41.120 --> 00:33:41.280 +So I'm like, well, you gotta pay attention to + +00:33:45.640 --> 00:33:46.140 +that. But I try not to get into anybody's + +00:33:47.720 --> 00:33:48.120 +business about like, I'm like, + +00:33:48.900 --> 00:33:49.120 +maybe we could fix that. + +00:33:50.020 --> 00:33:50.280 +Maybe we can clean it up, + +00:33:51.740 --> 00:33:52.240 +but it's your, you know, + +00:33:54.440 --> 00:33:54.940 +it's your car you're driving. + +00:33:56.320 --> 00:33:56.760 +I'm just long for a ride. + +00:33:57.620 --> 00:33:58.120 +It's safe, we're fine. + +00:34:01.360 --> 00:34:01.860 +So yeah, that jumped to definition. + +00:34:07.940 --> 00:34:08.440 +And then the, I mean, search in project, + +00:34:10.080 --> 00:34:10.580 +like everybody understanding that. + +00:34:15.219 --> 00:34:15.380 +But I feel that the, like I mentioned in the + +00:34:17.980 --> 00:34:18.480 +talk, the advent of orderless is just huge. + +00:34:21.400 --> 00:34:21.659 +I did not realize how much I loved it because + +00:34:24.159 --> 00:34:24.480 +I don't have to think about things and can + +00:34:28.080 --> 00:34:28.580 +have slightly more forgiving default + +00:34:34.340 --> 00:34:34.840 +searches. Yeah, it's hard. + +00:34:39.159 --> 00:34:39.440 +The principles of organizing 10 things versus + +00:34:41.040 --> 00:34:41.540 +100 versus 1,000 versus 10,000 + +00:34:44.440 --> 00:34:44.940 +are just, they're not the same. + +00:34:52.360 --> 00:34:52.540 +[Speaker 2]: A common hang up for, that would easily make + +00:34:54.320 --> 00:34:54.820 +you skip off of Emacs, + +00:35:00.920 --> 00:35:01.040 +Org Mode, Hyperbole is if you go into any of + +00:35:03.680 --> 00:35:04.040 +those with the mindset of I'm going to master + +00:35:05.080 --> 00:35:05.580 +it all before I use it. + +00:35:06.640 --> 00:35:07.140 +That's not going to work. + +00:35:13.660 --> 00:35:13.860 +[Speaker 1]: Absolutely. I was terrified of org mode when + +00:35:14.760 --> 00:35:15.060 +I started because I'm like, + +00:35:16.720 --> 00:35:17.040 +I don't need to organize my life. + +00:35:20.460 --> 00:35:20.960 +I need to like type. And then that, + +00:35:24.520 --> 00:35:25.020 +yes, incremental. What did I find helpful? + +00:35:28.580 --> 00:35:29.080 +[Speaker 2]: It's for the, for the Linux CLI toolbox, + +00:35:30.860 --> 00:35:31.360 +but you have to look at them as more of just, + +00:35:34.640 --> 00:35:35.140 +I have a whole bunch of tools available to me + +00:35:39.140 --> 00:35:39.360 +and I'll just pick them up as I have a + +00:35:42.480 --> 00:35:42.680 +problem and as I, and as the tool can be + +00:35:44.440 --> 00:35:44.940 +useful for this problem and incrementally. + +00:35:47.700 --> 00:35:48.200 +[Speaker 1]: Yeah. It's + +00:35:54.760 --> 00:35:55.080 +[Speaker 3]: actually, so, in fact, + +00:35:56.180 --> 00:35:56.400 +when when I'm mentoring people, + +00:35:58.440 --> 00:35:58.580 +I have to take a step back and say, + +00:36:00.520 --> 00:36:00.760 +OK, what are we with the note taking thing + +00:36:01.640 --> 00:36:02.140 +that you mentioned in your talk. + +00:36:03.120 --> 00:36:03.480 +How do you like to take notes? + +00:36:04.840 --> 00:36:05.140 +How do you like to keep track of the things + +00:36:06.480 --> 00:36:06.600 +that you want to work on when you have an + +00:36:07.540 --> 00:36:08.040 +idea? Where does it go? + +00:36:10.320 --> 00:36:10.820 +Because if you improve that practice, + +00:36:12.840 --> 00:36:13.180 +and especially if you can sneak some literate + +00:36:14.540 --> 00:36:15.040 +programming in without them really noticing, + +00:36:17.860 --> 00:36:18.160 +then it becomes the thing that they can use + +00:36:18.900 --> 00:36:19.400 +to learn more efficiently. + +00:36:23.200 --> 00:36:23.700 +[Speaker 1]: Yeah. I was presenting at, + +00:36:26.600 --> 00:36:27.100 +I wasn't presenting at this seminar, + +00:36:30.560 --> 00:36:30.920 +but I attended it and it was a crash course + +00:36:31.800 --> 00:36:32.300 +in command line tools. + +00:36:35.520 --> 00:36:36.020 +And I didn't, I mean, I went there to listen + +00:36:38.660 --> 00:36:38.800 +and there was a point where the people were + +00:36:40.560 --> 00:36:41.060 +like, I use this command line tool. + +00:36:42.360 --> 00:36:42.860 +I'm not a programmer, I'm a librarian, + +00:36:45.040 --> 00:36:45.060 +I'm an archivist. I use it, + +00:36:47.080 --> 00:36:47.580 +I'm like, great, I'm gonna remember this. + +00:36:49.640 --> 00:36:49.820 +And then I forget about it and I might use it + +00:36:54.340 --> 00:36:54.520 +6 months from now. And so I tried to + +00:36:56.880 --> 00:36:57.380 +encourage everybody, like come up with, + +00:37:00.580 --> 00:37:00.740 +like you have a degree in knowledge and + +00:37:02.320 --> 00:37:02.820 +information, management and organization, + +00:37:06.160 --> 00:37:06.660 +introspect, right? Spend some time on it. + +00:37:09.740 --> 00:37:10.240 +Think about what is a way that I can do this + +00:37:13.180 --> 00:37:13.360 +and ask questions to get to the point where + +00:37:18.960 --> 00:37:19.240 +you can create a discoverable inventory of + +00:37:22.500 --> 00:37:23.000 +the tools you've used and what that means. + +00:37:26.160 --> 00:37:26.660 +And my answer was, I use literate programming + +00:37:30.800 --> 00:37:31.300 +or I shove it in my bin directory in GitHub + +00:37:34.080 --> 00:37:34.300 +and like, I don't know if I'll remember it, + +00:37:35.860 --> 00:37:36.020 +but I can go there every now and then and be + +00:37:37.120 --> 00:37:37.620 +like, oh yeah, that command. + +00:37:44.220 --> 00:37:44.720 +So note taking is the most critical component + +00:37:46.620 --> 00:37:47.120 +of any number of work. + +00:37:51.960 --> 00:37:52.360 +[Speaker 3]: Sometimes I wonder if we can maybe + +00:37:54.000 --> 00:37:54.500 +externalize some of all this mentoring + +00:37:57.520 --> 00:37:57.720 +insight and kind of like this choose your own + +00:37:59.700 --> 00:37:59.920 +adventure thing, where the person says, + +00:38:01.200 --> 00:38:01.700 +OK, this is what I got at the moment. + +00:38:03.460 --> 00:38:03.960 +And then through a series of diagnostic + +00:38:05.740 --> 00:38:06.220 +questions, we can figure out what hurts, + +00:38:08.040 --> 00:38:08.220 +right? Where is the thing that they would + +00:38:08.980 --> 00:38:09.240 +like to learn more about? + +00:38:09.960 --> 00:38:10.460 +And then, okay, if that hurts, + +00:38:12.620 --> 00:38:13.120 +try this and keep that manageable. + +00:38:15.720 --> 00:38:15.880 +And if there's only a way to also be able to + +00:38:17.280 --> 00:38:17.720 +capture each person's state, + +00:38:19.360 --> 00:38:19.840 +the things that they know about and have + +00:38:20.980 --> 00:38:21.480 +absorbed into their habits. + +00:38:22.800 --> 00:38:23.200 +So you can say, right, + +00:38:25.440 --> 00:38:25.760 +you know, my recommendation for someone who's + +00:38:28.580 --> 00:38:28.940 +brand new to org is not the same as somebody + +00:38:30.060 --> 00:38:30.480 +who's like, okay, they've got their agendas + +00:38:31.400 --> 00:38:31.800 +and everything set up already. + +00:38:33.680 --> 00:38:34.180 +Just how do we represent that as like WISPs? + +00:38:39.520 --> 00:38:39.720 +[Speaker 1]: I've given up on trying to map that. + +00:38:43.180 --> 00:38:43.440 +I like the one-on-one conversations and + +00:38:47.480 --> 00:38:47.980 +discovery. And I think that's the part where + +00:38:51.980 --> 00:38:52.120 +you're looking at, you're asking about how do + +00:38:55.920 --> 00:38:56.320 +we make the process and like I heard, + +00:38:58.860 --> 00:38:59.040 +like how do we help equip those who want to + +00:39:01.560 --> 00:39:01.960 +mentor as well, right? + +00:39:05.900 --> 00:39:05.970 +Making that, reducing the barrier in a way. + +00:39:06.040 --> 00:39:06.180 +[Speaker 2]: I don't + +00:39:08.240 --> 00:39:08.740 +[Speaker 3]: know, I think what you said about enjoying + +00:39:10.440 --> 00:39:10.680 +the conversation and the fact that it is + +00:39:12.080 --> 00:39:12.580 +really unique for each person, + +00:39:14.760 --> 00:39:15.260 +each situation that comes up. + +00:39:18.480 --> 00:39:18.840 +I suspect what it just comes down to is more + +00:39:21.560 --> 00:39:22.020 +like capturing the good stuff of each + +00:39:23.160 --> 00:39:23.660 +mentoring session or whatever. + +00:39:25.840 --> 00:39:26.120 +Maybe it's getting the mentees to write very + +00:39:27.700 --> 00:39:27.900 +short blog posts about what they learned this + +00:39:28.780 --> 00:39:29.280 +week or whatever else. + +00:39:30.900 --> 00:39:31.400 +And then, oh, yeah, you know, + +00:39:33.700 --> 00:39:33.900 +we ran into the same problem 3 months ago. + +00:39:36.280 --> 00:39:36.440 +Let me go look it up. And then that becomes a + +00:39:37.080 --> 00:39:37.580 +reusable segment. + +00:39:41.280 --> 00:39:41.780 +[Speaker 1]: Yeah, when I worked at a coding bootcamp, + +00:39:46.420 --> 00:39:46.720 +they tried to encourage the mentors to say, + +00:39:49.320 --> 00:39:49.820 +like write a blog posts for the mentees. + +00:39:57.160 --> 00:39:57.380 +And that was, some of them did, + +00:40:01.980 --> 00:40:02.140 +but it was intimidating because like they + +00:40:03.260 --> 00:40:03.760 +didn't wanna, I don't know. + +00:40:06.900 --> 00:40:07.360 +Are we enculturated in an education system + +00:40:09.800 --> 00:40:09.920 +where we can't get it wrong or we need to + +00:40:11.760 --> 00:40:11.980 +look like we're more of an expert than we + +00:40:15.720 --> 00:40:16.220 +are? I don't know. I have a lot of like, + +00:40:17.720 --> 00:40:17.960 +I'm a middle aged white guy, + +00:40:20.140 --> 00:40:20.640 +I've got a lot of background and privilege in + +00:40:25.440 --> 00:40:25.680 +my career. So like, it's not as scary to put + +00:40:28.620 --> 00:40:28.860 +something forward for myself as it might be + +00:40:31.080 --> 00:40:31.240 +as like a woman in tech or a minority in + +00:40:35.400 --> 00:40:35.900 +tech, because that's a different place. + +00:40:38.900 --> 00:40:39.400 +And I want to really get done with that. + +00:40:40.760 --> 00:40:41.260 +I don't like that at all. + +00:40:43.820 --> 00:40:44.320 +And I would love our, like, + +00:40:46.640 --> 00:40:47.140 +just write. And it doesn't have to be public, + +00:40:48.540 --> 00:40:49.040 +right? You don't have to make it public, + +00:40:51.880 --> 00:40:52.380 +but if you make it discoverable to yourself, + +00:40:58.320 --> 00:40:58.820 +that's the big thing. And 1 of my coworkers, + +00:41:04.840 --> 00:41:05.020 +She doesn't blog, but she definitely has a + +00:41:07.200 --> 00:41:07.480 +large knowledge base of stuff that she + +00:41:08.980 --> 00:41:09.140 +references because she's pulling out all + +00:41:10.520 --> 00:41:10.760 +kinds of stuff and I'm like whatever you're + +00:41:11.120 --> 00:41:11.620 +doing is working. + +00:41:17.920 --> 00:41:18.420 +[Speaker 2]: I'm trying to have something. + +00:41:23.680 --> 00:41:24.180 +There's a good opportunity with the Emacs + +00:41:25.680 --> 00:41:26.180 +conference to accomplish this. + +00:41:28.420 --> 00:41:28.920 +So like if you make like a, + +00:41:31.640 --> 00:41:32.140 +because 1 of the things with it is, + +00:41:36.600 --> 00:41:37.080 +Sasha, you do a really good job of using all. + +00:41:38.800 --> 00:41:39.000 +You're the 1 who has the Emacs buffer with + +00:41:39.780 --> 00:41:40.080 +the time on it, right? + +00:41:41.820 --> 00:41:41.980 +Is that your screen that's being recorded for + +00:41:45.860 --> 00:41:46.360 +that? Because you have a really good example + +00:41:50.400 --> 00:41:50.600 +of a really consolidated emacs workflow that + +00:41:53.440 --> 00:41:53.920 +works really good with the Emacs conference + +00:41:56.520 --> 00:41:56.800 +so if you had like a page that described how + +00:42:00.100 --> 00:42:00.460 +you did all that stuff in the emacs + +00:42:04.280 --> 00:42:04.360 +conference like on that and then we then you + +00:42:06.140 --> 00:42:06.380 +did even more stuff with that. + +00:42:09.560 --> 00:42:10.060 +Like you do the org mode file that you can + +00:42:12.140 --> 00:42:12.340 +just put straight into your agenda for your + +00:42:14.720 --> 00:42:14.940 +time zone. I used that. + +00:42:17.540 --> 00:42:17.800 +That was really nice, just because it allowed + +00:42:19.600 --> 00:42:19.900 +me to reorganize and see how all the talks + +00:42:21.580 --> 00:42:21.880 +would work together, and which ones I wanted + +00:42:25.840 --> 00:42:26.060 +to do. You could add Org Mode to do tags with + +00:42:31.020 --> 00:42:31.520 +that, to say, plan to watch, + +00:42:36.080 --> 00:42:36.360 +I want to re-watch but I have to skip it + +00:42:37.540 --> 00:42:38.000 +because there's another talk I'm watching, + +00:42:40.760 --> 00:42:41.260 +you know, like a couple tags don't care about + +00:42:43.940 --> 00:42:44.200 +so that people can easily tag all the talks + +00:42:47.360 --> 00:42:47.860 +that they care about on top of that. + +00:42:52.660 --> 00:42:53.160 +And then with, I'm going to try to email + +00:42:54.660 --> 00:42:54.900 +these ideas on it too, + +00:42:57.980 --> 00:42:58.480 +but then you can also, + +00:43:00.940 --> 00:43:01.440 +you have the either pad questions, + +00:43:03.960 --> 00:43:04.440 +you could put all those in org-mode documents + +00:43:08.300 --> 00:43:08.760 +with crdt.el, post all those in the Emacs + +00:43:11.400 --> 00:43:11.600 +conference and then people could use that to + +00:43:13.820 --> 00:43:13.980 +edit all the documents at the same time so + +00:43:15.160 --> 00:43:15.660 +then everybody's actually collaboratively + +00:43:20.180 --> 00:43:20.440 +editing. And then people have all the + +00:43:24.520 --> 00:43:25.020 +scaffolding for if you do the Emacs meetings, + +00:43:27.760 --> 00:43:27.940 +buddy meetings, because they know exactly how + +00:43:29.820 --> 00:43:30.180 +to set it all up with that. + +00:43:34.040 --> 00:43:34.540 +And then you combine it with any number of + +00:43:38.040 --> 00:43:38.360 +whatever chat video program so that people + +00:43:39.780 --> 00:43:40.280 +can talk and watch each other. + +00:43:45.420 --> 00:43:45.920 +[Speaker 3]: I have a presentation later on EmacsConf + +00:43:48.920 --> 00:43:49.200 +infrastructure and I will capture the note + +00:43:51.380 --> 00:43:51.600 +And maybe I can include a mini tutorial in + +00:43:53.460 --> 00:43:53.800 +the schedule org so that people can be like, + +00:43:55.440 --> 00:43:55.680 +hey, by the way, you could refile these + +00:43:58.860 --> 00:43:59.120 +things into your own org files or tag them + +00:44:01.520 --> 00:44:01.720 +and here's a list thingy that filters your + +00:44:03.420 --> 00:44:03.740 +agenda by your tag or whatever, + +00:44:04.940 --> 00:44:05.200 +it'll be fine. But it's, + +00:44:06.100 --> 00:44:06.600 +you know, it's, it's kind of like, + +00:44:09.640 --> 00:44:09.800 +it is, you're right. It is an opportunity to + +00:44:12.440 --> 00:44:12.800 +expose people to more things that they could + +00:44:14.620 --> 00:44:15.120 +do in kind of a scaffolded way. + +00:44:16.600 --> 00:44:16.880 +That's interesting stuff, + +00:44:18.780 --> 00:44:19.040 +but I, your point actually driving also going + +00:44:21.180 --> 00:44:21.680 +back to previous parts of conversation about, + +00:44:24.340 --> 00:44:24.546 +it's difficult for people to share. + +00:44:26.420 --> 00:44:26.720 +When you realize, like I keep telling + +00:44:28.380 --> 00:44:28.880 +everyone, hey, if you blog about Emacs, + +00:44:30.720 --> 00:44:30.920 +you'll not only learn things for yourself and + +00:44:31.440 --> 00:44:31.920 +make things more searchable, + +00:44:33.520 --> 00:44:33.740 +other people will come by and tell you even + +00:44:34.840 --> 00:44:35.340 +better ways of doing things, + +00:44:36.940 --> 00:44:37.080 +which is something that always happens to me + +00:44:37.800 --> 00:44:37.960 +too, and I'm posting this. + +00:44:38.400 --> 00:44:38.900 +Has that ever happened? + +00:44:39.960 --> 00:44:40.460 +I'm sure that happens to you. + +00:44:45.020 --> 00:44:45.520 +[Speaker 1]: It's great. I love getting those things like, + +00:44:49.360 --> 00:44:49.700 +yeah, Howard's presentation on the game + +00:44:51.720 --> 00:44:52.000 +stuff. I'm like, I'm going to go explore that + +00:44:54.560 --> 00:44:55.060 +now. Because it's my little house. + +00:44:57.280 --> 00:44:57.780 +[Speaker 3]: You just have to make it less intimidating, + +00:45:00.600 --> 00:45:01.100 +right? And kind of change people's perception + +00:45:03.420 --> 00:45:03.540 +that, oh, blogging or sharing tutorials or + +00:45:05.460 --> 00:45:05.860 +whatever, that's then when you're an expert, + +00:45:06.340 --> 00:45:06.840 +when you're an experienced, + +00:45:09.480 --> 00:45:09.720 +to rather working out loud, + +00:45:11.520 --> 00:45:11.740 +thinking out loud, this is just that I'm + +00:45:12.800 --> 00:45:13.300 +learning along the way. + +00:45:15.840 --> 00:45:16.000 +And it might not be the most efficient way to + +00:45:17.720 --> 00:45:17.880 +do things, but this is what I'm doing right + +00:45:17.880 --> 00:45:18.380 +now. + +00:45:23.940 --> 00:45:24.180 +[Speaker 1]: Yeah. And I had a handful of times where I + +00:45:25.760 --> 00:45:26.000 +posted something and someone was like, + +00:45:27.620 --> 00:45:27.900 +Oh yeah, this is, this would have you tried + +00:45:30.060 --> 00:45:30.420 +this? Or I'm like, I didn't even know that + +00:45:32.440 --> 00:45:32.940 +existed. That makes this easier. + +00:45:37.540 --> 00:45:37.740 +[Speaker 3]: I've written this like little hack and I'm + +00:45:38.860 --> 00:45:39.140 +very proud of it because it's clever. + +00:45:39.760 --> 00:45:39.920 +And then someone's like, + +00:45:41.000 --> 00:45:41.240 +Oh yeah, there's a package for that. + +00:45:42.720 --> 00:45:43.220 +It's called this. Right? + +00:45:43.660 --> 00:45:44.160 +[Speaker 1]: Thank you. Right? Yeah. + +00:45:49.380 --> 00:45:49.880 +It's just it's Yeah, it the fantastic part + +00:45:54.140 --> 00:45:54.240 +it. I played Legos as a kid and me and my + +00:45:55.760 --> 00:45:56.260 +friends would play Legos at the house. + +00:46:00.800 --> 00:46:01.300 +And Emacs has this like feeling of playing + +00:46:04.360 --> 00:46:04.540 +Legos with a group of people across the + +00:46:06.120 --> 00:46:06.620 +world. In fact, 1 of my current, + +00:46:09.080 --> 00:46:09.580 +well, 1 of my best friends now, + +00:46:14.040 --> 00:46:14.540 +we met a year ago. And it turns out we both + +00:46:18.460 --> 00:46:18.620 +love Emacs. We talk every Thursday and we + +00:46:19.920 --> 00:46:20.420 +hang out and we talk poetry. + +00:46:23.500 --> 00:46:24.000 +We talk Tom Petty. We talk Emacs. + +00:46:24.920 --> 00:46:25.420 +We talk software development. + +00:46:26.840 --> 00:46:27.340 +He does Python. I do Ruby. + +00:46:29.860 --> 00:46:30.360 +Just anything and everything. + +00:46:36.660 --> 00:46:36.820 +And it's also we both are curious because we + +00:46:38.100 --> 00:46:38.600 +don't use it the same way. + +00:46:43.920 --> 00:46:44.420 +And we like how we accomplish a task. + +00:46:47.020 --> 00:46:47.220 +I think that's the fascinating part to me is + +00:46:50.140 --> 00:46:50.580 +we each get to explore our way to interact + +00:46:54.060 --> 00:46:54.560 +with the computer uniquely by whatever + +00:46:55.860 --> 00:46:56.360 +pathways are in our brain. + +00:46:58.340 --> 00:46:58.520 +We see stuff, we pick it up, + +00:47:00.060 --> 00:47:00.240 +and we're like, that doesn't quite work for + +00:47:01.960 --> 00:47:02.460 +me, or, oh, that worked really well. + +00:47:06.660 --> 00:47:07.160 +Fascinating, like, I don't know, + +00:47:08.200 --> 00:47:08.700 +shared art installation. + +00:47:13.740 --> 00:47:14.020 +[Speaker 3]: I think you're onto something that I also + +00:47:15.460 --> 00:47:15.640 +resonate with. 1 of the things that + +00:47:18.820 --> 00:47:19.060 +fascinates me about Emacs is all these + +00:47:21.220 --> 00:47:21.720 +people's configuration jobs are crystallized + +00:47:24.960 --> 00:47:25.080 +workflows. And it's really when you talk to + +00:47:26.580 --> 00:47:27.080 +them and you see how they're using it, + +00:47:29.200 --> 00:47:29.540 +and you understand a little bit of their + +00:47:32.140 --> 00:47:32.320 +story and things that they need, + +00:47:33.160 --> 00:47:33.660 +the ideas they've had, + +00:47:35.640 --> 00:47:36.140 +that's really fascinating. + +00:47:37.580 --> 00:47:37.800 +And I think that's 1 of the things that makes + +00:47:39.840 --> 00:47:40.080 +it possible to be perpetually curious about + +00:47:42.660 --> 00:47:43.160 +Emacs, because it's not just the, + +00:47:43.820 --> 00:47:44.060 +you know, this is the, + +00:47:45.520 --> 00:47:45.920 +these are all the Lego pieces there are, + +00:47:47.760 --> 00:47:47.920 +but you have this community of people who are + +00:47:50.320 --> 00:47:50.820 +using these Lego bricks in such fascinating + +00:47:53.440 --> 00:47:53.940 +ways and always inventing new things for it. + +00:47:56.100 --> 00:47:56.600 +[Speaker 1]: Yeah, new colors, new shapes, + +00:47:59.640 --> 00:48:00.140 +they show up. It's great. + +00:48:03.200 --> 00:48:03.400 +[Speaker 2]: It's like powered twice or something like + +00:48:06.040 --> 00:48:06.220 +that because it's like you can use Emacs with + +00:48:09.720 --> 00:48:10.220 +a thousand different customizations and then + +00:48:12.340 --> 00:48:12.720 +you can interact with people who can each + +00:48:16.540 --> 00:48:17.040 +also Use Emacs in a thousand different ways + +00:48:17.520 --> 00:48:17.800 +[Speaker 1]: Mm-hmm, Right, + +00:48:20.200 --> 00:48:20.280 +[Speaker 2]: Then you can both learn from each other and + +00:48:21.720 --> 00:48:22.040 +that can go a thousand different ways. + +00:48:24.000 --> 00:48:24.500 +So it's like, it's like powering your + +00:48:25.240 --> 00:48:25.680 +[Speaker 3]: Yep. + +00:48:27.400 --> 00:48:27.700 +[Speaker 2]: Something along those lines with each other + +00:48:30.720 --> 00:48:30.920 +and like how different and how much you can + +00:48:31.560 --> 00:48:32.060 +learn from it. + +00:48:38.480 --> 00:48:38.980 +[Speaker 1]: Yeah, the kind of touching back to the mentee + +00:48:41.920 --> 00:48:42.380 +that I have who went, he had originally + +00:48:44.480 --> 00:48:44.980 +started in Vim and then did VS code. + +00:48:47.420 --> 00:48:47.600 +And then we were talking and he was gonna go + +00:48:50.420 --> 00:48:50.860 +into Emacs and I didn't have a, + +00:48:52.000 --> 00:48:52.360 +I mean, sure, that'd be great. + +00:48:53.860 --> 00:48:54.060 +But he's like, I don't have a lot of time. + +00:48:56.120 --> 00:48:56.620 +And I'm like, well, go back to the place that + +00:48:57.840 --> 00:48:58.340 +you have that experience. + +00:49:01.000 --> 00:49:01.280 +And he did, And then he started writing Lua + +00:49:02.960 --> 00:49:03.340 +plugins. He was like, this is so much fun. + +00:49:05.380 --> 00:49:05.880 +I'm like, good, you're on the right path. + +00:49:10.840 --> 00:49:11.340 +Like maybe there'll be space like over time, + +00:49:13.860 --> 00:49:14.360 +how Lua plugins and Emacs, + +00:49:16.840 --> 00:49:17.260 +you know, who knows? I know that Lua, + +00:49:19.040 --> 00:49:19.540 +you can use Fennel to write Lisp. + +00:49:24.240 --> 00:49:24.740 +In you write Lisp and it will transpile + +00:49:29.060 --> 00:49:29.560 +Fennel to Lua. I forget how that plays out, + +00:49:31.880 --> 00:49:32.080 +but we're not too far away from those 2 + +00:49:34.480 --> 00:49:34.980 +things being able to play. + +00:49:39.020 --> 00:49:39.520 +But I guess the question is, + +00:49:41.980 --> 00:49:42.480 +does it need to? I don't know. + +00:49:44.540 --> 00:49:45.040 +[Speaker 3]: Yeah, I mean, even without direct code + +00:49:47.620 --> 00:49:48.120 +translation, the cross-pollination of ideas + +00:49:51.460 --> 00:49:51.960 +is certainly enough. I love the fact that + +00:49:54.720 --> 00:49:54.840 +people are borrowing ideas from VS Code and + +00:49:57.840 --> 00:49:58.040 +from Vim and people look at Emacs videos and + +00:49:58.840 --> 00:49:59.020 +other things and say, hey, + +00:49:59.860 --> 00:50:00.060 +that's a cool thing in Emacs, + +00:50:01.240 --> 00:50:01.680 +but I don't want to ever use Emacs. + +00:50:03.240 --> 00:50:03.740 +I'm going to do that whole thing in Vim. + +00:50:04.600 --> 00:50:05.100 +And I think that's fantastic. + +00:50:07.480 --> 00:50:07.820 +[Speaker 1]: Absolutely. Yeah. I mean, + +00:50:10.640 --> 00:50:11.140 +monocultures die. They just do. + +00:50:16.840 --> 00:50:17.340 +And computer software and computer industry + +00:50:24.120 --> 00:50:24.280 +pushes towards monoculture because of it + +00:50:26.660 --> 00:50:27.160 +wants the highest efficiency. + +00:50:31.440 --> 00:50:31.780 +And I'm like, I'm not, + +00:50:33.640 --> 00:50:34.140 +I mean, sometimes I'm here for that, + +00:50:35.600 --> 00:50:35.980 +but most of the time I'm like, + +00:50:37.120 --> 00:50:37.620 +I want the bumps and the warts. + +00:50:40.680 --> 00:50:41.180 +I want the art, the human interaction, + +00:50:42.720 --> 00:50:43.220 +the like, why are we trying to accomplish + +00:50:43.360 --> 00:50:43.860 +this? + +00:50:46.440 --> 00:50:46.620 +[Speaker 2]: It determines, It depends on how you + +00:50:49.640 --> 00:50:50.140 +determine efficiency because Emacs is far + +00:50:52.840 --> 00:50:53.240 +Even if Emacs isn't multi-threaded is far + +00:50:56.980 --> 00:50:57.480 +more efficient because because of the mental + +00:51:00.060 --> 00:51:00.220 +model shifts because you're able to play and + +00:51:04.440 --> 00:51:04.600 +tweak with it and then have as much of a + +00:51:07.160 --> 00:51:07.360 +mental model shift for each task change that + +00:51:10.760 --> 00:51:11.260 +you want. Like, yeah, I want my file manager + +00:51:16.260 --> 00:51:16.760 +to not be an editable text buffer. + +00:51:18.660 --> 00:51:19.120 +Although sometimes when I want to rename + +00:51:20.320 --> 00:51:20.820 +files, I want it to be that. + +00:51:23.800 --> 00:51:24.300 +[Speaker 1]: Right. Yeah, and really, + +00:51:26.640 --> 00:51:27.040 +like, to be clear, I like the idea of Emacs + +00:51:29.060 --> 00:51:29.340 +as a projection of, like, + +00:51:30.320 --> 00:51:30.660 +how I think about stuff. + +00:51:33.780 --> 00:51:33.960 +So it's that whatever my neurons have made a + +00:51:37.040 --> 00:51:37.280 +good pathway for, I can have Emacs flow with + +00:51:41.660 --> 00:51:42.160 +me. That efficiency side is I want a factory, + +00:51:43.080 --> 00:51:43.480 +I want to stamp out widgets, + +00:51:44.540 --> 00:51:44.720 +I want them to be the same, + +00:51:45.400 --> 00:51:45.650 +chop, chop, chop, chop, + +00:51:51.860 --> 00:51:52.360 +chop, chop. That emacs runs in its spirit + +00:51:57.180 --> 00:51:57.440 +along with vim contrary to that and I like + +00:51:57.440 --> 00:51:57.940 +that + +00:52:00.530 --> 00:52:00.720 +[Speaker 2]: emacs is a 1 of the things with the like the + +00:52:03.480 --> 00:52:03.680 +mental model of Emacs is you should look at + +00:52:06.180 --> 00:52:06.660 +Emacs like this is probably something that + +00:52:08.100 --> 00:52:08.320 +people should think about when they are + +00:52:10.440 --> 00:52:10.940 +introducing Emacs to other people is Emacs is + +00:52:15.720 --> 00:52:15.900 +a treasure trove of conflicting ways of + +00:52:18.080 --> 00:52:18.580 +solving the same problem so you get, + +00:52:22.040 --> 00:52:22.280 +so you can individuate yourself on how you + +00:52:23.520 --> 00:52:24.020 +actually want to solve that problem. + +00:52:25.440 --> 00:52:25.600 +[Speaker 3]: Do you + +00:52:26.700 --> 00:52:27.200 +[Speaker 2]: want Vim bindings or not? + +00:52:30.200 --> 00:52:30.580 +You get to choose. Or do you want Meow + +00:52:31.900 --> 00:52:32.400 +bindings? You can choose. + +00:52:34.780 --> 00:52:35.280 +[Speaker 1]: Yep. Absolutely. Yeah. + +00:52:38.780 --> 00:52:39.040 +I, I came, I'm, I consider my, + +00:52:42.380 --> 00:52:42.660 +I, I lament because in 2005 I almost picked + +00:52:46.100 --> 00:52:46.240 +up Emacs and it wasn't until 2020 that I + +00:52:49.040 --> 00:52:49.440 +picked it up. And fortunately I picked it up + +00:52:54.000 --> 00:52:54.500 +when I did because I was able to look at + +00:52:58.020 --> 00:52:58.520 +things I had previously accomplished and find + +00:53:05.140 --> 00:53:05.420 +analogs And things like Helm and Ivy were + +00:53:08.940 --> 00:53:09.440 +both 2 different ways of doing it and consult + +00:53:11.600 --> 00:53:12.100 +and then, or Selectrum and then consult, + +00:53:15.860 --> 00:53:16.060 +like they all had these different ways And it + +00:53:18.900 --> 00:53:19.400 +felt great because I could find the thing + +00:53:24.520 --> 00:53:25.020 +that worked for me. And they're close, + +00:53:27.680 --> 00:53:27.840 +but then they also like branch out and do + +00:53:30.360 --> 00:53:30.860 +things differently. And it was so fascinating + +00:53:34.860 --> 00:53:35.020 +to explore each of those and spend an hour or + +00:53:39.100 --> 00:53:39.360 +2 on a primary task in seeing where that + +00:53:42.040 --> 00:53:42.540 +little thread went. It's great. + +00:53:47.200 --> 00:53:47.600 +[Speaker 3]: So tell me a bit more about how you got into + +00:53:51.040 --> 00:53:51.300 +Emacs. What pulled you + +00:53:55.120 --> 00:53:55.620 +[Speaker 1]: in? Yeah, this is a great little moment. + +00:53:59.680 --> 00:54:00.180 +I started in TextMate, + +00:54:03.280 --> 00:54:03.420 +That's kind of where I would say the + +00:54:06.460 --> 00:54:06.660 +beginning for coding for open source and + +00:54:07.840 --> 00:54:08.340 +using open source software. + +00:54:11.760 --> 00:54:11.920 +Sorry, using open source frameworks and + +00:54:14.540 --> 00:54:15.040 +languages. So TextMate to Sublime, + +00:54:18.260 --> 00:54:18.580 +basically TextMate couldn't search very well + +00:54:20.740 --> 00:54:21.060 +at the time. It was getting bogged down. + +00:54:21.640 --> 00:54:22.080 +So I moved to Sublime, + +00:54:23.260 --> 00:54:23.760 +which solved it, felt well, + +00:54:27.900 --> 00:54:28.400 +carried the same UI look with me. + +00:54:30.680 --> 00:54:31.180 +And then when I was at a conference, + +00:54:34.540 --> 00:54:34.860 +there was a talk about using an open source + +00:54:36.600 --> 00:54:36.880 +editor. I was like, yeah, + +00:54:38.720 --> 00:54:39.220 +I need to do that. I really need to. + +00:54:43.080 --> 00:54:43.260 +And Adam was viable. I was like, + +00:54:44.320 --> 00:54:44.820 +Oh, this is really close. + +00:54:47.120 --> 00:54:47.360 +I'll use it. And I didn't think too much + +00:54:49.540 --> 00:54:49.680 +about it. And then the writing was on the + +00:54:51.120 --> 00:54:51.620 +wall, that Adam is going away. + +00:54:55.760 --> 00:54:56.040 +And I was like, I need to find an open source + +00:54:57.100 --> 00:54:57.600 +editor that speaks to me. + +00:54:59.200 --> 00:54:59.440 +And I said, all right, + +00:55:00.760 --> 00:55:01.260 +Vim, This is my fifth time. + +00:55:06.300 --> 00:55:06.800 +I will try. And I gave an earnest 2 weeks. + +00:55:09.060 --> 00:55:09.440 +And I'm just like, I cannot get this mental + +00:55:11.600 --> 00:55:11.840 +model in my head. So I'm like, + +00:55:12.800 --> 00:55:13.200 +all right, I set it down. + +00:55:14.540 --> 00:55:15.040 +I can use Vim, I'm comfortable. + +00:55:15.940 --> 00:55:16.360 +I think it's a great tool, + +00:55:19.000 --> 00:55:19.500 +but my mental model doesn't map well there. + +00:55:21.040 --> 00:55:21.420 +And I'm like, all right, + +00:55:24.780 --> 00:55:25.280 +here we go, VS code. All right, + +00:55:28.280 --> 00:55:28.520 +you're fine. But I feel like I might + +00:55:31.340 --> 00:55:31.500 +accidentally charge my credit card in the + +00:55:33.000 --> 00:55:33.500 +text editor on the default installation. + +00:55:38.680 --> 00:55:39.180 +And that was alluded to by in 1 of the talks, + +00:55:46.120 --> 00:55:46.620 +I forget who he German about mandating Emacs + +00:55:48.000 --> 00:55:48.500 +in his computer science classes. + +00:55:51.020 --> 00:55:51.220 +He mentioned like the Microsoft Office or + +00:55:54.060 --> 00:55:54.560 +Microsoft Marketplace felt like it was there. + +00:55:58.860 --> 00:55:59.060 +So that was 1, but the moment where I was + +00:56:02.380 --> 00:56:02.880 +like, oh, hell no, VS Code. + +00:56:08.520 --> 00:56:08.940 +Or I wanted to use a commit from the command + +00:56:12.280 --> 00:56:12.780 +palette, and it brought up an HTML text input + +00:56:15.060 --> 00:56:15.560 +area, and it was 30 characters. + +00:56:23.000 --> 00:56:23.500 +And in that moment, I saw several things. + +00:56:27.040 --> 00:56:27.140 +1, I'm like, no, that's terrible because I + +00:56:28.100 --> 00:56:28.600 +want to write something meaningful. + +00:56:33.640 --> 00:56:33.900 +2, this is the behavior that this tool is + +00:56:38.960 --> 00:56:39.240 +modeling. That tells me that history and like + +00:56:41.320 --> 00:56:41.820 +how it is built is not important. + +00:56:47.160 --> 00:56:47.320 +And yes, I can fix it and get around it. + +00:56:49.240 --> 00:56:49.740 +And I kind of did. And I was like, + +00:56:51.440 --> 00:56:51.860 +the principles are just, + +00:56:53.680 --> 00:56:54.180 +they're there. And then also understanding + +00:56:56.100 --> 00:56:56.600 +like there's a bunch of telemetry underneath + +00:56:58.860 --> 00:56:59.360 +it. So I used VS Codium, + +00:57:00.240 --> 00:57:00.740 +there's still telemetry. + +00:57:03.340 --> 00:57:03.840 +And I was like, all right, + +00:57:07.380 --> 00:57:07.880 +2005 Jeremy, let's go try Emacs, + +00:57:08.940 --> 00:57:09.440 +let's see if we can do it. + +00:57:13.860 --> 00:57:14.360 +And I hopped in, I grabbed Space Max. + +00:57:16.640 --> 00:57:17.020 +I was Like, yeah, this works pretty well. + +00:57:18.740 --> 00:57:18.960 +Like, I don't know how to use the keys very + +00:57:20.880 --> 00:57:21.380 +well. I'm figuring it out. + +00:57:26.040 --> 00:57:26.400 +And. And I was like, you know what? + +00:57:27.340 --> 00:57:27.840 +Why don't I do the tutorial? + +00:57:30.860 --> 00:57:31.360 +And it was the tutorial that hooked me. + +00:57:36.820 --> 00:57:37.320 +Not because everything made 100% sense + +00:57:42.440 --> 00:57:42.620 +because Emacs is old. It had a lot of + +00:57:45.420 --> 00:57:45.920 +language that was hard to internalize, + +00:57:50.500 --> 00:57:50.740 +but it presented it in a conversational I'm + +00:57:52.360 --> 00:57:52.600 +gonna meet you where you're at and we're + +00:57:53.440 --> 00:57:53.940 +gonna walk with it together. + +00:57:56.480 --> 00:57:56.980 +And then when I was done with the tutorial, + +00:57:58.420 --> 00:57:58.740 +I said, you know, Space Max, + +00:57:59.760 --> 00:58:00.060 +I don't understand it. + +00:58:00.920 --> 00:58:01.420 +And it's got some performance. + +00:58:04.180 --> 00:58:04.300 +It looks like there's like extra stuff that I + +00:58:08.420 --> 00:58:08.920 +may not need. So I went vanilla, + +00:58:11.780 --> 00:58:12.280 +nothing Emacs and just started working. + +00:58:14.060 --> 00:58:14.560 +I was like, well, how do you do this? + +00:58:17.280 --> 00:58:17.460 +[Speaker 2]: Although 5 minutes of Space Max or any of + +00:58:19.600 --> 00:58:20.100 +those Emacs distribution shows you + +00:58:22.360 --> 00:58:22.860 +unequivocally how different it can be. + +00:58:25.880 --> 00:58:26.380 +[Speaker 1]: It was, it was, it was so amazing, + +00:58:31.600 --> 00:58:32.100 +and it was so good. But I knew my nature was, + +00:58:34.780 --> 00:58:35.140 +I was frustrated in, like I wrote an Atom + +00:58:37.780 --> 00:58:38.280 +package, and that was awful. + +00:58:42.860 --> 00:58:43.360 +It was so terrible. But I knew what I wanted. + +00:58:48.280 --> 00:58:48.480 +And then I wrote, I started writing a VS code + +00:58:49.640 --> 00:58:49.840 +and I'm like, oh no, no, + +00:58:50.800 --> 00:58:51.300 +no, we're not here for this. + +00:58:55.520 --> 00:58:55.800 +And so, yeah, SpaceMax showed me like this + +00:59:00.600 --> 00:59:00.760 +can look and feel like a space that I used to + +00:59:03.920 --> 00:59:04.420 +be in. And then it has more functionality, + +00:59:07.440 --> 00:59:07.940 +more stuff. It's gonna be great. + +00:59:09.960 --> 00:59:10.380 +And then I just was like, + +00:59:11.880 --> 00:59:12.380 +I'm gonna go find my own. + +00:59:15.920 --> 00:59:16.200 +I'm really happy that I took the path because + +00:59:19.300 --> 00:59:19.640 +I just worked, wrote, and I'm like, + +00:59:21.000 --> 00:59:21.380 +I bet you this, I bet you the tool, + +00:59:22.540 --> 00:59:22.960 +I know it can do this because it, + +00:59:24.620 --> 00:59:25.120 +you know, text me, did this or Adam, + +00:59:27.800 --> 00:59:28.300 +I'm gonna go, I went on to Melpa and I found + +00:59:29.440 --> 00:59:29.940 +a couple different things. + +00:59:31.120 --> 00:59:31.440 +I'm like, all right, let's try them. + +00:59:32.320 --> 00:59:32.640 +I'm like, that's the 1, + +00:59:34.480 --> 00:59:34.980 +great. Roll it in, keep working. + +00:59:36.000 --> 00:59:36.500 +I know it can do this. + +00:59:39.800 --> 00:59:40.160 +Find a package. And so I built up this sense + +00:59:46.060 --> 00:59:46.160 +of the packages and my strategy was go to + +00:59:49.680 --> 00:59:49.940 +Melpa, look at, that was the 1 that showed + +00:59:52.540 --> 00:59:53.040 +up, look at the number of downloads. + +00:59:54.520 --> 00:59:54.960 +So I'm like, what's the high stuff? + +00:59:55.900 --> 00:59:56.400 +What really gets used? + +00:59:57.680 --> 00:59:58.180 +There's something there. + +01:00:00.320 --> 01:00:00.760 +And then also look at what was most recently + +01:00:03.420 --> 01:00:03.580 +updated. So kind of pivot on those along with + +01:00:06.960 --> 01:00:07.260 +a keyword search and I found the tools that + +01:00:17.780 --> 01:00:18.100 +worked well. But it really came down to like + +01:00:19.960 --> 01:00:20.460 +that VS Code I was almost in, + +01:00:24.400 --> 01:00:24.640 +but I've been around long enough to know what + +01:00:25.560 --> 01:00:26.060 +Microsoft will do. + +01:00:32.240 --> 01:00:32.540 +[Speaker 2]: For me, I was always like customizing things. + +01:00:34.600 --> 01:00:35.100 +I think I saw some interesting emacs videos. + +01:00:42.320 --> 01:00:42.720 +I wanted to try Well, I wanted to try working + +01:00:44.500 --> 01:00:44.720 +more with the keyboard and not need I think + +01:00:46.800 --> 01:00:47.300 +[Speaker 1]: mm-hmm + +01:00:51.180 --> 01:00:51.680 +[Speaker 2]: the mouse on a laptop And so I was looking + +01:00:54.380 --> 01:00:54.520 +explicitly for ways to just work on the + +01:00:56.920 --> 01:00:57.400 +keyboard only, which meant that I wasn't + +01:00:59.060 --> 01:00:59.560 +looking for programs that followed Cua, + +01:01:04.400 --> 01:01:04.900 +which really leaves you like 2 options, + +01:01:10.960 --> 01:01:11.380 +Vim and Emacs. And when I looked at the 2, + +01:01:13.940 --> 01:01:14.100 +I saw 1 of the big differentiating factors I + +01:01:15.660 --> 01:01:16.020 +saw was Tramp, which was, + +01:01:18.480 --> 01:01:18.600 +oh, you mean I get a SSH into a machine and + +01:01:19.840 --> 01:01:20.340 +have my customizations too? + +01:01:22.740 --> 01:01:23.240 +[Speaker 1]: Yep. Yeah. + +01:01:29.140 --> 01:01:29.540 +[Speaker 2]: And then I started using Emacs more and more. + +01:01:34.440 --> 01:01:34.860 +Eventually I combined that with a tiling + +01:01:36.400 --> 01:01:36.900 +window manager, NixOS, + +01:01:40.840 --> 01:01:41.040 +and started banishing as much of the GUI as I + +01:01:44.060 --> 01:01:44.560 +possibly could, running MPV or VLC, + +01:01:49.180 --> 01:01:49.400 +so I could edit so that my config files could + +01:01:53.720 --> 01:01:54.020 +be keyboard oriented. My settings config + +01:01:55.920 --> 01:01:56.420 +menus are now keyboard oriented. + +01:02:00.860 --> 01:02:01.080 +And yeah, that was the incremental process of + +01:02:04.400 --> 01:02:04.900 +just, yeah, making the computer nicer, + +01:02:06.680 --> 01:02:06.860 +more efficient, and then you figure out all + +01:02:08.080 --> 01:02:08.580 +the other advantages of the... + +01:02:13.440 --> 01:02:13.780 +[Speaker 1]: Yeah. How did you get in to it, + +01:02:18.940 --> 01:02:19.440 +[Speaker 2]: Oh, you're lost. + +01:02:21.840 --> 01:02:22.340 +[Speaker 1]: Sasha? Your sound is gone. + +01:02:27.345 --> 01:02:27.845 +[Speaker 3]: Sorry, my face mute button. + +01:02:29.600 --> 01:02:29.800 +Okay, I'll tell you that story, + +01:02:30.840 --> 01:02:31.080 +I get thought out of my head, + +01:02:32.780 --> 01:02:33.240 +so I forget it. But what you described, + +01:02:34.900 --> 01:02:35.080 +Jerry, about kind of starting with the + +01:02:37.340 --> 01:02:37.540 +distribution and then pulling back and + +01:02:39.140 --> 01:02:39.520 +starting with vanilla and building up, + +01:02:41.040 --> 01:02:41.320 +kind of close the stories that I've heard + +01:02:42.980 --> 01:02:43.480 +from a lot of people in the community where + +01:02:46.600 --> 01:02:46.800 +the distribution gives them kind of an end + +01:02:48.140 --> 01:02:48.640 +goal, at least work requirements, + +01:02:50.280 --> 01:02:50.600 +So get the stuff done and they're not + +01:02:52.260 --> 01:02:52.760 +slugging through the weeds around the start. + +01:02:55.440 --> 01:02:55.760 +I have a hard time modifying it because + +01:02:57.440 --> 01:02:57.720 +modifying the distribution itself is very + +01:02:59.140 --> 01:02:59.640 +different from the tools they see. + +01:03:01.520 --> 01:03:01.740 +They feel like they want to understand the + +01:03:02.320 --> 01:03:02.820 +different possible part. + +01:03:04.240 --> 01:03:04.540 +And so then they pull back and say, + +01:03:06.300 --> 01:03:06.800 +okay, I've got this thing that can use + +01:03:08.360 --> 01:03:08.680 +everything to just get some quick work done, + +01:03:10.380 --> 01:03:10.760 +but I have this thing that I can call, + +01:03:13.500 --> 01:03:13.680 +that's mine. And I understand because I'm + +01:03:15.960 --> 01:03:16.460 +building it up from the ground up. + +01:03:19.540 --> 01:03:19.640 +Okay, so that's like, oh, + +01:03:21.500 --> 01:03:21.660 +interesting, there's a lot of people who are + +01:03:23.940 --> 01:03:24.280 +like that, and it really helps them to both + +01:03:27.240 --> 01:03:27.620 +have that insight, which is see through + +01:03:29.540 --> 01:03:29.780 +distributions and also videos of other + +01:03:32.060 --> 01:03:32.220 +people's workflows and press kind of + +01:03:34.080 --> 01:03:34.500 +conference presentations often about + +01:03:35.140 --> 01:03:35.540 +completely different topics, + +01:03:37.540 --> 01:03:37.700 +right? So someone whizzing through Ruby on + +01:03:39.920 --> 01:03:40.420 +Rails or whatever else and doing all of this. + +01:03:43.580 --> 01:03:44.040 +But also having 1 help them break out, + +01:03:46.560 --> 01:03:46.760 +okay, well, there's a lot of work from where + +01:03:47.900 --> 01:03:48.160 +I am to where that is. + +01:03:49.740 --> 01:03:50.240 +How do I do it without being overwhelmed? + +01:03:51.400 --> 01:03:52.960 +Because if they try to learn everything, + +01:03:55.520 --> 01:03:55.760 +they'll go crazy. And then they'll fall. + +01:03:57.500 --> 01:03:58.000 +And the brain is super important. + +01:04:01.500 --> 01:04:01.860 +And how I got into this whole eMac thing was + +01:04:03.520 --> 01:04:03.780 +I was reading all the computer science books + +01:04:06.180 --> 01:04:06.480 +in the university library and 1 of the Unix + +01:04:09.160 --> 01:04:09.360 +power tools had a chapter on Emacs and had + +01:04:11.040 --> 01:04:11.320 +them you know well there's another type of + +01:04:14.440 --> 01:04:14.760 +whatever. Okay that's interesting so I went + +01:04:17.080 --> 01:04:17.320 +and tried it out But the reason I really got + +01:04:19.280 --> 01:04:19.780 +into it was because I was using John Wigley's + +01:04:23.520 --> 01:04:23.760 +Planner Mode. This was before Org Mode came + +01:04:25.320 --> 01:04:25.600 +about. So Planner Mode was a link. + +01:04:27.040 --> 01:04:27.540 +I said, hey, this is great. + +01:04:29.380 --> 01:04:29.880 +I'm looking for ways to help out. + +01:04:31.560 --> 01:04:32.060 +If you need help verifying any bugs, + +01:04:34.160 --> 01:04:34.660 +you know, send it to me and I'll do the + +01:04:37.540 --> 01:04:37.840 +figuring out. He's an author and an inventor. + +01:04:37.960 --> 01:04:38.100 +[Speaker 2]: And then + +01:04:39.480 --> 01:04:39.980 +[Speaker 3]: he made me the miniature for it. + +01:04:42.720 --> 01:04:42.880 +So I'm like, okay. And then that's how I got + +01:04:44.680 --> 01:04:45.140 +to know this wonderful community of people + +01:04:46.840 --> 01:04:47.340 +who customize emacs so much. + +01:04:51.680 --> 01:04:52.180 +And it just goes there because really, + +01:04:54.100 --> 01:04:54.240 +when you see all these different ways that + +01:04:55.860 --> 01:04:56.360 +people use in all these different stories + +01:05:00.060 --> 01:05:00.480 +that you get send off because they're using + +01:05:03.960 --> 01:05:04.460 +it to bake sourdough bread and do knitting + +01:05:06.700 --> 01:05:06.880 +and all the crazy things that people come up + +01:05:08.900 --> 01:05:09.400 +with. I've been using it as an audio editor. + +01:05:11.000 --> 01:05:11.500 +It's just weird. It's just fun. + +01:05:13.100 --> 01:05:13.600 +[Speaker 1]: Yeah, that's great. + +01:05:19.640 --> 01:05:20.020 +[Speaker 2]: Yeah. Every, Sasha, like 2 things that I was + +01:05:22.900 --> 01:05:23.040 +meaning to say is every time I see the on the + +01:05:26.140 --> 01:05:26.580 +EMAX conference the time that the scratch + +01:05:29.900 --> 01:05:30.400 +buffer with the big clock that is ticking + +01:05:34.980 --> 01:05:35.480 +down as and the multi multiple sized fonts As + +01:05:37.720 --> 01:05:37.900 +I always think wow, that's really cool. + +01:05:38.980 --> 01:05:39.280 +I didn't know Emacs could do that. + +01:05:40.440 --> 01:05:40.940 +Wait, no, I saw that last year. + +01:05:43.860 --> 01:05:44.060 +How do you do, now, how do I do that? + +01:05:45.360 --> 01:05:45.480 +Cause that's not, and that's not something I + +01:05:46.920 --> 01:05:47.420 +normally even think about Emacs doing. + +01:05:48.080 --> 01:05:48.580 +[Speaker 1]: Right. + +01:05:51.220 --> 01:05:51.720 +[Speaker 2]: I'll think about putting + +01:05:55.760 --> 01:05:56.260 +[Speaker 3]: There's an EmacsConf-stream.el + +01:05:59.760 --> 01:06:00.260 +in the EmacsConf-el repository. + +01:06:03.960 --> 01:06:04.160 +Grab the link and open but you can grab the + +01:06:07.940 --> 01:06:08.260 +code from there. It's basically the text + +01:06:08.260 --> 01:06:08.760 +property. + +01:06:15.020 --> 01:06:15.480 +[Speaker 2]: But it's a thought that has repeated multiple + +01:06:17.140 --> 01:06:17.460 +years. Like, I didn't know we could do that + +01:06:18.220 --> 01:06:18.720 +way. I thought about that. + +01:06:21.260 --> 01:06:21.600 +I had this exact thought last year when I saw + +01:06:21.600 --> 01:06:22.100 +it. + +01:06:28.260 --> 01:06:28.480 +[Speaker 1]: It's, we're like, I'm at the point where it's + +01:06:31.220 --> 01:06:31.620 +like I have memories of remembering doing + +01:06:34.540 --> 01:06:35.040 +something. I don't have memories of doing it. + +01:06:36.680 --> 01:06:37.180 +Like all of the things. + +01:06:40.560 --> 01:06:41.060 +Like so it's again, we, + +01:06:45.240 --> 01:06:45.740 +Emacs helps expose like the, + +01:06:48.640 --> 01:06:49.140 +like it's, anything's possible. + +01:06:53.300 --> 01:06:53.560 +And we see how it becomes possible through + +01:06:55.640 --> 01:06:56.120 +other people. And then it gets our brains + +01:06:57.780 --> 01:06:58.140 +thinking about other ways of doing stuff. + +01:06:59.920 --> 01:07:00.420 +And I think that's the exciting part. + +01:07:02.360 --> 01:07:02.860 +Dog who wants to go play Frisbee. + +01:07:07.900 --> 01:07:08.080 +[Speaker 3]: And that's actually 1 of the reasons why I + +01:07:11.060 --> 01:07:11.320 +want to encourage people to not only talk + +01:07:12.840 --> 01:07:12.980 +about Emacs and write Emacs blog posts, + +01:07:15.380 --> 01:07:15.520 +but also actually demonstrate Emacs in the + +01:07:16.560 --> 01:07:17.060 +sense of doing something else. + +01:07:20.220 --> 01:07:20.720 +So for example, we can match people at Emacs + +01:07:23.560 --> 01:07:24.000 +if you're presenting about Ruby on Rails and + +01:07:27.040 --> 01:07:27.440 +you're doing all of your and education and + +01:07:30.240 --> 01:07:30.480 +things while you're presenting Rails, + +01:07:32.900 --> 01:07:33.400 +you reach all these people who are interested + +01:07:34.400 --> 01:07:34.780 +in Rails, developer Rails, + +01:07:36.260 --> 01:07:36.760 +but might not have even considered Emacs. + +01:07:41.920 --> 01:07:42.420 +And here, you know, you probably would. + +01:07:44.860 --> 01:07:45.060 +I would probably have a hard time writing an + +01:07:47.040 --> 01:07:47.540 +entire talk about adding text properties, + +01:07:49.540 --> 01:07:49.760 +but the fact that there's a thing here that + +01:07:50.800 --> 01:07:51.300 +shows, hey, this is possible, + +01:07:53.000 --> 01:07:53.300 +Emacs can get people to think, + +01:07:54.880 --> 01:07:55.380 +okay, so how do I get from here to there? + +01:07:57.440 --> 01:07:57.940 +Just showing the possible. + +01:08:02.120 --> 01:08:02.360 +Yeah. Which source code is in the, + +01:08:02.360 --> 01:08:02.860 +whatchamacallit. + +01:08:04.600 --> 01:08:05.100 +[Speaker 1]: Right, yeah. Yeah, I just saw that. + +01:08:08.240 --> 01:08:08.740 +[Speaker 2]: There's a weird interesting thing how Emacs + +01:08:12.540 --> 01:08:12.720 +dovetails with people who are interested in + +01:08:15.940 --> 01:08:16.439 +making their own local first Zettelkasten, + +01:08:17.720 --> 01:08:18.220 +because look at how many Zettelkasten + +01:08:21.300 --> 01:08:21.600 +packages you have. Especially with how much, + +01:08:23.800 --> 01:08:24.100 +like it feels like, it seems like Emacs has + +01:08:27.439 --> 01:08:27.939 +more than Vim, but Vim is bigger or VS, + +01:08:30.140 --> 01:08:30.420 +feels like it has more than Vim or VS Code, + +01:08:31.920 --> 01:08:32.319 +and VS Code's bigger. I'm not sure, + +01:08:36.819 --> 01:08:37.319 +but it feels like it. Same thing with that + +01:08:39.920 --> 01:08:40.420 +HyperCore. That HyperCore felt more like a + +01:08:42.540 --> 01:08:43.040 +local first peer-to-peer system. + +01:08:48.240 --> 01:08:48.640 +So there's a weird dovetail where they want + +01:08:52.279 --> 01:08:52.779 +the knowledge bases that are local first, + +01:08:58.260 --> 01:08:58.359 +comprehensive, because 1 of the properties of + +01:09:03.500 --> 01:09:03.740 +the Zettelkasten or Org Mode agendas is that + +01:09:07.359 --> 01:09:07.819 +it's all your notes in 1 place. + +01:09:14.439 --> 01:09:14.760 +It's not, you know, your notes in either pad + +01:09:19.540 --> 01:09:20.040 +and your notes in Google Calendar, + +01:09:23.180 --> 01:09:23.680 +your notes in 20 different places, + +01:09:24.520 --> 01:09:25.020 +your notes in Evernote. + +01:09:28.700 --> 01:09:29.060 +It's your notes in 1 program in 1 place + +01:09:30.840 --> 01:09:31.080 +because you have to deal with them And + +01:09:32.600 --> 01:09:32.800 +they're going to be in files on your hard + +01:09:34.279 --> 01:09:34.779 +drive, and you're going to have packages + +01:09:37.080 --> 01:09:37.359 +there. That's the other weird thing too, + +01:09:40.240 --> 01:09:40.600 +is how many, like, you install an Emacs + +01:09:41.399 --> 01:09:41.899 +package, 1 of the guarantees, + +01:09:43.439 --> 01:09:43.640 +some of the guarantees you seem to get with + +01:09:46.260 --> 01:09:46.680 +it is if it does use an external program, + +01:09:48.399 --> 01:09:48.580 +it's going to have a lot of configuration in + +01:09:51.020 --> 01:09:51.520 +Emacs. It's going to be installed. + +01:09:53.760 --> 01:09:54.260 +It's going to be local first. + +01:09:56.780 --> 01:09:57.100 +Cause like you have flow bits, + +01:09:59.340 --> 01:09:59.840 +but how many programs like are, + +01:10:05.140 --> 01:10:05.280 +are cloud first. And it feels like most of + +01:10:06.820 --> 01:10:07.320 +those are like org Trello, + +01:10:10.160 --> 01:10:10.520 +where it's like, I want to use org mode, + +01:10:12.040 --> 01:10:12.540 +but other people use Trello. + +01:10:15.460 --> 01:10:15.780 +So I'm going to be grudgingly using this org + +01:10:17.400 --> 01:10:17.660 +Trello to be a bridge between the 2, + +01:10:19.200 --> 01:10:19.640 +not because I wanted to use org, + +01:10:21.240 --> 01:10:21.360 +not because I wanted to use Trello in the + +01:10:23.200 --> 01:10:23.320 +first place or I started off with Trello and + +01:10:24.280 --> 01:10:24.780 +now I wanna use org mode. + +01:10:27.680 --> 01:10:28.180 +[Speaker 1]: Right, no, you're that local first. + +01:10:37.020 --> 01:10:37.400 +The Thought I have is with the 2022 interest + +01:10:43.080 --> 01:10:43.580 +rates going up, the era of free money, + +01:10:46.520 --> 01:10:47.020 +or even like getting money for more, + +01:10:49.960 --> 01:10:50.180 +more money than it actually costs Like it was + +01:10:55.600 --> 01:10:56.100 +minting money. We are going to be seeing how + +01:10:59.440 --> 01:10:59.940 +these organizations that had financial + +01:11:01.840 --> 01:11:02.340 +runways, all of these cloud services, + +01:11:06.760 --> 01:11:07.020 +what's not gonna last because there's no + +01:11:12.440 --> 01:11:12.880 +funding. And like the durability of our local + +01:11:16.400 --> 01:11:16.900 +first plain text, free open source stuff. + +01:11:21.320 --> 01:11:21.820 +Like I won't have to do a content migration + +01:11:24.320 --> 01:11:24.740 +unless I get a B of my bonnet and want to + +01:11:27.700 --> 01:11:27.880 +like change from org mode to markdown for + +01:11:30.660 --> 01:11:30.920 +some reason. Like I have it and Then I can + +01:11:32.980 --> 01:11:33.480 +send it out. So there's also like that posse + +01:11:36.400 --> 01:11:36.900 +principle publish on-site syndicate + +01:11:41.660 --> 01:11:41.820 +everywhere Is what emacs and vim like they + +01:11:42.780 --> 01:11:43.280 +allow for us to do? + +01:11:46.440 --> 01:11:46.620 +[Speaker 2]: Well, that's part of the individuation is you + +01:11:48.900 --> 01:11:49.080 +have multiple options of doing something so + +01:11:51.580 --> 01:11:51.820 +you can choose something so you can take + +01:11:54.360 --> 01:11:54.860 +ownership of your data in the way you want. + +01:12:00.220 --> 01:12:00.380 +It all dovetails into each other and I think + +01:12:02.840 --> 01:12:03.260 +that's something worth thinking about, + +01:12:05.540 --> 01:12:05.800 +especially in relation with who should learn + +01:12:08.040 --> 01:12:08.440 +and how should you introduce Emacs to people, + +01:12:14.180 --> 01:12:14.420 +because like, with the idea of people should + +01:12:16.560 --> 01:12:16.800 +try an Emacs distribution and then start + +01:12:17.240 --> 01:12:17.740 +their own from scratch, + +01:12:18.880 --> 01:12:19.120 +just so that they, like, + +01:12:20.280 --> 01:12:20.640 +if you use it for 10 minutes, + +01:12:24.400 --> 01:12:24.820 +you'll gain so much because you use your 3 + +01:12:25.760 --> 01:12:26.260 +and then all of a sudden you realize, + +01:12:29.180 --> 01:12:29.440 +you also know how malleable Emacs can be. + +01:12:30.520 --> 01:12:30.960 +And then you start saying, + +01:12:32.000 --> 01:12:32.160 +now, how do I do that? + +01:12:33.240 --> 01:12:33.740 +So I get to make those choices? + +01:12:34.840 --> 01:12:35.340 +[Speaker 1]: Yeah. + +01:12:39.340 --> 01:12:39.520 +[Speaker 2]: Or you might say, this person did it well + +01:12:40.320 --> 01:12:40.820 +enough, I don't have to. + +01:12:43.500 --> 01:12:43.900 +[Speaker 3]: That reminded me of something that I also + +01:12:45.360 --> 01:12:45.860 +wanted to mention, shocking word, + +01:12:49.040 --> 01:12:49.280 +as in malleability. Another tip I came + +01:12:50.600 --> 01:12:50.900 +across, don't know from whom, + +01:12:51.500 --> 01:12:51.700 +might have been from you, + +01:12:53.440 --> 01:12:53.940 +I don't know, is to define aliases, + +01:12:56.320 --> 01:12:56.460 +because we use different words from what the + +01:12:58.680 --> 01:12:59.180 +functions are. It's 1 of those little meta + +01:13:00.420 --> 01:13:00.720 +things that, you know, + +01:13:02.080 --> 01:13:02.580 +If you keep calling it something else, + +01:13:05.900 --> 01:13:06.020 +just define it so that you can call it like + +01:13:06.760 --> 01:13:07.260 +commencing your words. + +01:13:12.440 --> 01:13:12.740 +[Speaker 1]: it's interesting. Anyway, + +01:13:14.020 --> 01:13:14.240 +[Speaker 3]: Yeah. Yeah, gotta go disappear and get ready + +01:13:17.220 --> 01:13:17.360 +for my dog. Okay, I'll listen to what you + +01:13:18.120 --> 01:13:18.280 +say. All right, I + +01:13:20.020 --> 01:13:20.520 +[Speaker 1]: I need to take my dogs out and play Frisbee. + +01:13:21.780 --> 01:13:22.280 +They have been so patient. + +01:13:26.040 --> 01:13:26.200 +So it was great talking with all of you and + +01:13:29.640 --> 01:13:30.040 +Sasha, thanks for the organizing energy + +01:13:31.680 --> 01:13:32.120 +you've put into this. Plasma Strike, + +01:13:32.800 --> 01:13:33.300 +thank you for your presentation. + +01:13:34.860 --> 01:13:35.360 +I love this conference. + +01:13:36.660 --> 01:13:37.160 +So thank you very much. + +01:13:41.760 --> 01:13:42.260 +And now have a good rest of your Sunday. + +01:13:43.100 --> 01:13:43.600 +Bye. diff --git a/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt new file mode 100644 index 00000000..fb2f1603 --- /dev/null +++ b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt @@ -0,0 +1,696 @@ +WEBVTT captioned by hannah, checked by sachac + +NOTE Introduction + +00:00:01.380 --> 00:00:06.319 +Hi everyone, my name is Jeremy Friesen, pronouns are he/him, + +00:00:06.320 --> 00:00:07.879 +and today I'll be talking about + +00:00:07.880 --> 00:00:11.519 +mentoring VS Coders as an Emacs-ian. + +00:00:11.520 --> 00:00:14.999 +A little bit of background, since 2015, I've mentored + +00:00:15.000 --> 00:00:16.559 +about 40 software developers, + +00:00:16.560 --> 00:00:19.239 +many of them in career-transitioning roles, + +00:00:19.240 --> 00:00:21.739 +oftentimes from boot camps. + +00:00:21.740 --> 00:00:26.739 +I've also managed a couple of small software development teams. + +NOTE Framing approaches + +00:00:26.740 --> 00:00:30.599 +So I want to think about mentoring and the framing approaches. + +00:00:30.600 --> 00:00:32.939 +We all don't know what we don't know. + +00:00:32.940 --> 00:00:36.419 +So while mentoring, I like to be curious---asking questions, + +00:00:36.420 --> 00:00:37.659 +I like to be visible, + +00:00:37.660 --> 00:00:41.939 +and I also like to pair so that we can share. + +NOTE What are you looking to learn? + +00:00:41.940 --> 00:00:45.299 +When I start, I like to ask the following type of question: + +00:00:45.300 --> 00:00:47.119 +"What have you been wanting to learn more of, + +00:00:47.120 --> 00:00:49.359 +get better at, and improve on?" + +00:00:49.360 --> 00:00:52.939 +Then I like to ask further questions to get an understanding + +00:00:52.940 --> 00:00:55.159 +of where they've been, where they're going, + +00:00:55.160 --> 00:00:57.279 +and what they'd like to achieve. + +00:00:57.280 --> 00:01:00.139 +Later I'll ask coaching questions, "what's going well," + +00:01:00.140 --> 00:01:01.419 +"where are you getting stuck," + +00:01:01.420 --> 00:01:05.999 +and "if you change one thing, what would it be?" + +NOTE Make the work visible + +00:01:06.000 --> 00:01:09.839 +So like many people, I shifted to remote work in 2020, + +00:01:09.840 --> 00:01:13.159 +and I've noticed a higher collaboration in remote work, + +00:01:13.160 --> 00:01:15.919 +when folks make their work visible. + +00:01:15.920 --> 00:01:18.199 +So to do that I host office hours, + +00:01:18.200 --> 00:01:20.679 +I try to attend other people's office hours, + +00:01:20.680 --> 00:01:23.439 +and I'll open up a Slack huddle and just code by myself, + +00:01:23.440 --> 00:01:29.319 +but let folks know, please hop in. + +NOTE Hop in and be curious + +00:01:29.320 --> 00:01:32.039 +I like to pay attention to other huddles that start. + +00:01:32.040 --> 00:01:35.239 +If they're going still for, like, 45 minutes or so, + +00:01:35.240 --> 00:01:36.799 +I'll hop in and say hello. + +00:01:36.800 --> 00:01:39.399 +It's even odds that they're moving along just fine + +00:01:39.400 --> 00:01:40.799 +or that they're stuck. + +00:01:40.800 --> 00:01:43.279 +So by hopping into the Slack huddle, + +00:01:43.280 --> 00:01:45.479 +I'm helping with a common problem. + +00:01:45.480 --> 00:01:47.199 +How do you know when you're stuck? + +00:01:47.200 --> 00:01:50.639 +This is something that---as a manager---folks want to know, + +00:01:50.640 --> 00:01:53.439 +how can I get unstuck faster? + +00:01:53.440 --> 00:01:57.119 +As a human, it can be frustrating to be stuck for a long time, + +00:01:57.120 --> 00:01:58.599 +but you also learn stuff + +00:01:58.600 --> 00:02:00.759 +when you're dealing with the hard things. + +00:02:00.760 --> 00:02:03.219 +So you really need to balance that time, + +00:02:03.220 --> 00:02:07.159 +and I find hopping in, just being a gentle presence, + +00:02:07.160 --> 00:02:10.359 +with yes... an agenda, but just to say hi, + +00:02:10.360 --> 00:02:15.879 +is crucial to help the team members move along. + +NOTE Pairing is for sharing + +00:02:15.880 --> 00:02:17.239 +Pairing is for sharing. + +00:02:17.240 --> 00:02:19.919 +When I pair, I like to let others drive. + +00:02:19.920 --> 00:02:22.239 +They're typing and working to resolve the problem. + +00:02:22.240 --> 00:02:24.599 +I'm giving guidance, asking questions, + +00:02:24.600 --> 00:02:27.119 +maybe thinking through a refactor. + +00:02:27.120 --> 00:02:31.159 +I'm also spending time observing how they interact with their editor. + +00:02:31.160 --> 00:02:35.839 +In the moment, I try to limit advice to, like, one concept. + +00:02:35.840 --> 00:02:37.799 +A lot of folks don't know that `Control-a` + +00:02:37.800 --> 00:02:39.719 +will take you to the beginning of line. + +00:02:39.720 --> 00:02:42.679 +Just sharing that is huge sometimes. + +00:02:42.680 --> 00:02:46.919 +Just gently do it and let it float there. + +00:02:46.920 --> 00:02:48.919 +And assuming we have a regular mentoring session, + +00:02:48.920 --> 00:02:50.399 +I'll make sure to ask how they're feeling + +00:02:50.400 --> 00:02:52.679 +about using their tools afterwards. + +00:02:52.680 --> 00:02:55.679 +I would love to get to the point where they ask, + +00:02:55.680 --> 00:02:58.759 +"You saw me using my editor, what is something + +00:02:58.760 --> 00:03:00.959 +I could learn?" + +00:03:00.960 --> 00:03:03.859 +I'm working on getting to that point. + +NOTE Editor functions + +00:03:03.860 --> 00:03:05.199 +While pairing, I like to pay attention + +00:03:05.200 --> 00:03:07.439 +to how folks handle the following. + +00:03:07.440 --> 00:03:08.559 +Where do they want to go? + +00:03:08.560 --> 00:03:10.759 +How do they get there? + +00:03:10.760 --> 00:03:12.079 +Here they are, now what? + +00:03:12.080 --> 00:03:13.599 +How do they summarize? + +00:03:13.600 --> 00:03:15.239 +I know what I can do in Emacs, + +00:03:15.240 --> 00:03:17.399 +and I assume that VS Code can do something similar. + +00:03:17.400 --> 00:03:23.239 +It's a matter of helping the mentees find those packages and plugins. + +NOTE Where do they want to go? + +00:03:23.240 --> 00:03:24.239 +Where to go? + +00:03:24.240 --> 00:03:25.759 +Search within a project. + +00:03:25.760 --> 00:03:27.999 +Everybody knows about this, but one thing + +00:03:28.000 --> 00:03:29.799 +that has been really critical for me + +00:03:29.800 --> 00:03:31.959 +has been the arrival of `Orderless`. + +00:03:31.960 --> 00:03:34.759 +A little quick demonstration. + +00:03:34.760 --> 00:03:40.719 +If I look, and I have this "chicken" and I do "spell", + +00:03:40.720 --> 00:03:42.200 +I have found one, and they don't have + +00:03:42.201 --> 00:03:43.380 +to be in the right order. + +00:03:43.381 --> 00:03:48.039 +In fact, I can go back, and "spell" is there. + +00:03:48.040 --> 00:03:52.759 +Super easy, helpful, so I don't have to think about it, the order. + +00:03:52.760 --> 00:03:54.719 +Search across projects. + +00:03:54.720 --> 00:03:59.519 +Cross-repository searching is super-simple in Emacs, + +00:03:59.520 --> 00:04:02.739 +and I've never seen anyone do it in VS Code. + +00:04:02.740 --> 00:04:05.639 +I'm also trying to introduce folks to command-line tools + +00:04:05.640 --> 00:04:07.959 +such as RipGrep and SilverSearcher, + +00:04:07.960 --> 00:04:10.639 +not just to look in the project, but to go one directory up + +00:04:10.640 --> 00:04:11.999 +and look across projects + +00:04:12.000 --> 00:04:15.059 +because sometimes when you're working on lots of different projects, + +00:04:15.060 --> 00:04:19.959 +there might be solutions or ideas that come from there. + +00:04:19.960 --> 00:04:23.239 +Also notice that a lot of people use directory trees to navigate, + +00:04:23.240 --> 00:04:25.599 +but I favor the fuzzy text. + +00:04:25.600 --> 00:04:27.759 +So I can do something like `Command-t` + +00:04:27.760 --> 00:04:31.279 +and start looking for things in there. + +00:04:31.280 --> 00:04:33.759 +I just type the name of the file. + +00:04:33.760 --> 00:04:35.319 +I use `consult-projectile`, + +00:04:35.320 --> 00:04:39.539 +which has a lot of really cool functionality. + +00:04:39.540 --> 00:04:43.079 +The big one being I can type `r`, recent file. + +00:04:43.080 --> 00:04:47.719 +I can type `p` and jump to a different project, + +00:04:47.720 --> 00:04:53.439 +so it's a quick navigation tool that I've not seen in VS Code. + +NOTE How do they get there? + +00:04:53.440 --> 00:04:56.519 +Next up is how do they get there? + +00:04:56.520 --> 00:04:58.959 +I like to use LSP for the languages, + +00:04:58.960 --> 00:05:02.879 +and I bound `M-.` to this + +00:05:02.880 --> 00:05:05.519 +and jump back and forth to definitions. + +00:05:05.520 --> 00:05:09.439 +I just showed `projectile` or `consult-projectile` + +00:05:09.440 --> 00:05:12.859 +and its super-amazing multifunction finder. + +00:05:12.860 --> 00:05:15.519 +Also another one that I am very avid about + +00:05:15.520 --> 00:05:19.519 +is the jump between definition and test. + +00:05:19.520 --> 00:05:22.839 +I bind that to `Super-.` + +00:05:22.840 --> 00:05:25.839 +and it helps me jump back and forth + +00:05:25.840 --> 00:05:28.519 +between my production code and my test code--- + +00:05:28.520 --> 00:05:32.119 +especially in Ruby, there's an idiom for that. + +00:05:32.120 --> 00:05:36.639 +There is plugins in VS Code that does this correctly. + +NOTE Here they are, now what? + +00:05:36.640 --> 00:05:39.399 +Next up, now I'm here, what do I do? + +00:05:39.400 --> 00:05:44.599 +Word completion, Emacs just knocks everything out of the park: + +00:05:44.600 --> 00:05:48.199 +`dabbrev`, `templates`, `hippie-expand`, `completion-at-point`. + +00:05:48.200 --> 00:05:52.079 +Sometimes it just hurts to watch people type stuff + +00:05:52.080 --> 00:05:54.319 +that they could quickly expand + +00:05:54.320 --> 00:05:56.299 +because there are words within the code. + +00:05:56.300 --> 00:05:57.919 +Another one is auto-formatting. + +00:05:57.920 --> 00:06:00.039 +Tree sitter...its arrival is great. + +00:06:00.040 --> 00:06:01.479 +I assume this is going to get better. + +00:06:01.480 --> 00:06:04.919 +I love highlighting a region, hitting `TAB`, and it's just formatted. + +00:06:04.920 --> 00:06:08.760 +I've seen a lot of VS Coders... that doesn't work for them. + +00:06:08.761 --> 00:06:11.079 +Don't know why, trying to get them to see it. + +00:06:11.080 --> 00:06:12.900 +Multi-cursor [`multiple-cursors`] and `iedit`... + +00:06:12.901 --> 00:06:14.799 +took me a long time to explore `iedit`, + +00:06:14.800 --> 00:06:17.839 +but the practice... but practicing was huge, + +00:06:17.840 --> 00:06:21.479 +and it has transformed my approach to coding and typing. + +00:06:21.480 --> 00:06:24.519 +Folks know about multi-cursor editing and editing-in-region + +00:06:24.520 --> 00:06:27.919 +but make sure that they are aware of it. + +00:06:27.920 --> 00:06:29.719 +It's important. + +00:06:29.720 --> 00:06:32.619 +Next up is inline searching. + +00:06:32.620 --> 00:06:35.199 +My beloved Textmate... it was the first thing. + +00:06:35.200 --> 00:06:38.439 +In fact, it was why I chose not to use Emacs in 2005 + +00:06:38.440 --> 00:06:41.679 +and went with Textmate. + +00:06:41.680 --> 00:06:43.759 +This is something quite simple. + +00:06:43.760 --> 00:06:49.999 +I can do `search` within here, and I can see "introduced", + +00:06:50.000 --> 00:06:52.239 +and it will show me the line. + +00:06:52.240 --> 00:06:54.119 +What I like about that is when I'm in code, + +00:06:54.120 --> 00:06:56.319 +I can see the neighborhood of other things + +00:06:56.320 --> 00:06:58.359 +and get a good idea of what's around. + +00:06:58.360 --> 00:07:01.639 +Yes, there is `occur-mode` that can be super useful, + +00:07:01.640 --> 00:07:03.839 +but I'm used to the Textmate in it. + +00:07:03.840 --> 00:07:06.639 +I just love it. + +NOTE How do they summarize? + +00:07:06.640 --> 00:07:08.679 +Next up is how they summarize. + +00:07:08.680 --> 00:07:11.719 +I've seen a lot of bootcamp graduates write commit messages + +00:07:11.720 --> 00:07:14.379 +by going to the command line. + +00:07:14.380 --> 00:07:17.039 +In my experience, commit messages written in the command line + +00:07:17.040 --> 00:07:18.199 +tend to be terse. + +00:07:18.200 --> 00:07:19.159 +They miss something. + +00:07:19.160 --> 00:07:23.479 +So I try to really quickly shift folks to use their text editor, + +00:07:23.480 --> 00:07:24.399 +encourage them and + +00:07:24.400 --> 00:07:28.039 +teach them about `$GIT_EDITOR` and `$EDITOR` for the environment variables + +00:07:28.040 --> 00:07:30.999 +so they can make their commits from the command line. + +00:07:31.000 --> 00:07:34.199 +And if not there, help them improve how they do VS Code. + +00:07:34.200 --> 00:07:35.919 +My little screed at the top: + +00:07:35.920 --> 00:07:38.959 +the interface for VS Code's commit is trash. + +00:07:38.960 --> 00:07:44.439 +It is why I stepped away from VS Code when I was exploring editors. + +NOTE General strategies + +00:07:44.440 --> 00:07:48.439 +Next up, my goal is to encourage folks to use editors for writing, + +00:07:48.440 --> 00:07:52.059 +to think about owning that tool. + +NOTE Commit to one item of learning each week + +00:07:52.060 --> 00:07:54.679 +I have them try to learn one thing a week. + +00:07:54.680 --> 00:07:55.919 +Maybe they aren't going to learn it, + +00:07:55.920 --> 00:07:57.799 +but just not to overwhelm them + +00:07:57.800 --> 00:07:59.879 +and find those high-value things. + +00:07:59.880 --> 00:08:03.719 +Jump to spec, jump to code... super-valuable + +00:08:03.720 --> 00:08:06.519 +because I see folks doing it a lot during the day, + +00:08:06.520 --> 00:08:10.079 +and it can really speed up the transition time + +00:08:10.080 --> 00:08:12.759 +and keep the focus between the test... + +00:08:12.760 --> 00:08:15.479 +what you're trying to test and what you're trying to define, + +00:08:15.480 --> 00:08:18.959 +which can get lost if you do the tree navigation. + +NOTE Practice within your knowledge domain + +00:08:18.960 --> 00:08:22.879 +Also I encourage people to practice their domain knowledge. + +00:08:22.880 --> 00:08:27.159 +I learned a lot about programming by doing a bunch of things + +00:08:27.160 --> 00:08:30.019 +related to RPGs---role-playing games. + +00:08:30.020 --> 00:08:33.119 +I did this previously in Ruby---dice rollers, note takers, + +00:08:33.120 --> 00:08:35.879 +random table lookups---and now I'm doing it in Emacs. + +00:08:35.880 --> 00:08:40.519 +Knowing the domain helps me set aside the problem space + +00:08:40.520 --> 00:08:41.999 +and then explore how I code + +00:08:42.000 --> 00:08:47.119 +and how I can implement things differently. + +NOTE Note-taking + +00:08:47.120 --> 00:08:51.239 +Note-taking: pay attention to how folks create a fleeting note. + +00:08:51.240 --> 00:08:54.639 +It can be excruciating as they try to figure out + +00:08:54.640 --> 00:08:55.599 +"where am I going to put this?" + +00:08:55.600 --> 00:08:56.159 +"What file?" + +00:08:56.160 --> 00:08:57.659 +"Where does it go?" + +00:08:57.660 --> 00:09:01.759 +Emacs, we have the *scratch* buffer or anything else, + +00:09:01.760 --> 00:09:07.119 +but ask them about their note-taking habits + +NOTE Help them navigate the proprietary software tar pits + +00:09:07.120 --> 00:09:11.639 +and help them navigate the proprietary software tar pits. + +00:09:11.640 --> 00:09:14.359 +We know that anything that is venture-capital funded + +00:09:14.360 --> 00:09:16.039 +will eventually collapse. + +00:09:16.040 --> 00:09:20.919 +We know that things that don't have a sustainable business model + +00:09:20.920 --> 00:09:22.399 +without surveillance capitalism + +00:09:22.400 --> 00:09:25.299 +is going to also have problems. + +00:09:25.300 --> 00:09:28.559 +Encourage folks to think about how they're owning their notes. + +00:09:28.560 --> 00:09:30.639 +Do they place true value on those, + +00:09:30.640 --> 00:09:33.119 +or are they things that are kind of ephemeral? + +00:09:33.120 --> 00:09:38.519 +And then help them find the thing that makes sense for them. + +NOTE Help show the joy of holisting computering + +00:09:38.520 --> 00:09:43.239 +Put another way, I want people to think holistically + +00:09:43.240 --> 00:09:47.739 +about their generalized "computering" environment. + +NOTE Playing is for staying + +00:09:47.740 --> 00:09:50.079 +And I also think about the reason why + +00:09:50.080 --> 00:09:53.679 +I've stayed a software developer for 25-years plus + +00:09:53.680 --> 00:09:57.999 +is because I approach all of this as play and storytelling. + +00:09:58.000 --> 00:10:02.439 +Sometimes happy byproduct is that I ship features and documentation + +00:10:02.440 --> 00:10:05.199 +and help people get stuff done. + +00:10:05.200 --> 00:10:07.959 +Yet I don't tell folks to use Emacs. + +00:10:07.960 --> 00:10:10.719 +Instead, I'm doing my best to show a myriad of reasons + +00:10:10.720 --> 00:10:14.899 +for why folks should consider Emacs. + +NOTE Conclusion + +00:10:14.900 --> 00:10:18.739 +In conclusion, ask questions. + +00:10:18.740 --> 00:10:22.399 +Find a person who is a VS Coder and just say, + +00:10:22.400 --> 00:10:23.879 +"hey, I learned something new." + +00:10:23.880 --> 00:10:26.719 +We play this game all the time, me and my coworker Kirk. + +00:10:26.720 --> 00:10:27.699 +I love it. + +00:10:27.700 --> 00:10:31.479 +Another goal is showing the malleability of Emacs, + +00:10:31.480 --> 00:10:34.399 +how easy it is to extend. + +00:10:34.400 --> 00:10:36.679 +And obviously there's so much more than what I've highlighted, + +00:10:36.680 --> 00:10:38.719 +but then again, that's Emacs. + +00:10:38.720 --> 00:10:44.200 +Thank you, and I look forward to your questions. diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt new file mode 100644 index 00000000..20053853 --- /dev/null +++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt @@ -0,0 +1,680 @@ +WEBVTT + + +00:00:03.560 --> 00:00:04.059 +[Speaker 0]: About 3 + +00:00:16.020 --> 00:00:16.400 +seconds. And I believe we are live. + +00:00:17.280 --> 00:00:17.780 +Hi Edmund, how are you doing? + +00:00:19.240 --> 00:00:19.540 +[Speaker 1]: Hi, how's it going Leo? + +00:00:20.279 --> 00:00:20.560 +I'm doing well, thanks. + +00:00:20.560 --> 00:00:21.060 +Yourself? + +00:00:24.480 --> 00:00:24.640 +[Speaker 0]: I'm also doing well. So Edmund doesn't have + +00:00:26.980 --> 00:00:27.259 +his webcam on but he will be able to answer + +00:00:29.960 --> 00:00:30.360 +questions that you ask inside of the Azure + +00:00:32.159 --> 00:00:32.659 +pad that I've shared again on IRC. + +00:00:35.440 --> 00:00:35.560 +By the way, we only have 1 question and we + +00:00:37.120 --> 00:00:37.620 +have about 40 minutes of question time, + +00:00:40.380 --> 00:00:40.520 +so feel free to add as many questions as you + +00:00:41.940 --> 00:00:42.340 +want and in the meantime, + +00:00:43.380 --> 00:00:43.660 +we'll get started on the first 1. + +00:00:45.020 --> 00:00:45.060 +Unless, Edmond, do you have anything to say + +00:00:45.920 --> 00:00:46.420 +after your presentation? + +00:00:48.280 --> 00:00:48.780 +[Speaker 1]: No, we can jump in. + +00:00:51.560 --> 00:00:52.060 +[Speaker 0]: Okay, lovely. So first question, + +00:00:54.940 --> 00:00:55.200 +is the index, sorry, does the index really + +00:00:57.840 --> 00:00:58.100 +matter here? I mean his colleague is also + +00:01:00.380 --> 00:01:00.560 +using some A4 paper and you think that the + +00:01:02.400 --> 00:01:02.900 +index card is the most important thing here? + +00:01:04.540 --> 00:01:04.920 +[Speaker 1]: That's a great question. + +00:01:08.000 --> 00:01:08.200 +I mean, I think you can do anything with a + +00:01:09.520 --> 00:01:09.720 +larger piece of paper that you can do with a + +00:01:10.240 --> 00:01:10.460 +smaller piece of paper. + +00:01:12.280 --> 00:01:12.479 +But I actually encourage you to try this out. + +00:01:14.820 --> 00:01:15.020 +I did, not for research for this talk, + +00:01:17.040 --> 00:01:17.160 +but just when I read about Nabokov and his + +00:01:18.160 --> 00:01:18.400 +index cards to begin with, + +00:01:20.380 --> 00:01:20.660 +I kind of tried it out a little bit and wrote + +00:01:22.480 --> 00:01:22.720 +some shorter things on index cards and so on + +00:01:24.640 --> 00:01:25.120 +and there really is something about the size + +00:01:27.940 --> 00:01:28.440 +and the kind of ability to manipulate them. + +00:01:30.200 --> 00:01:30.360 +You really can bundle them and move them + +00:01:33.420 --> 00:01:33.720 +around easier and I think that that I think + +00:01:35.800 --> 00:01:35.920 +he enjoyed that. So sure I mean I think you + +00:01:37.540 --> 00:01:37.660 +can do anything with a4 paper that you could + +00:01:38.860 --> 00:01:39.140 +do with index cards but I think there's + +00:01:40.760 --> 00:01:41.200 +something about that form that lends itself + +00:01:43.840 --> 00:01:44.160 +to the especially to the reorganization maybe + +00:01:45.540 --> 00:01:45.820 +to the focus as well just because it's + +00:01:47.060 --> 00:01:47.220 +smaller but but definitely to the + +00:01:47.220 --> 00:01:47.720 +reorganization. + +00:01:53.600 --> 00:01:53.940 +[Speaker 0]: Definitely So we have a lot more questions + +00:01:54.640 --> 00:01:54.960 +now. So thank you, everyone, + +00:01:56.479 --> 00:01:56.979 +for answering my plea for more questions. + +00:01:59.760 --> 00:02:00.060 +Next question. How do you explore the second + +00:02:01.880 --> 00:02:02.080 +level headings, i.e. The scenes in this + +00:02:03.600 --> 00:02:04.100 +example, without the heading itself, + +00:02:05.740 --> 00:02:06.240 +just the content? Is that clear enough? + +00:02:09.240 --> 00:02:09.740 +[Speaker 1]: Great question. Yeah, so I've tried 2 ways, + +00:02:13.280 --> 00:02:13.440 +sorry, 3 ways with this and landed on 1 that + +00:02:16.080 --> 00:02:16.480 +I like. Originally I used the OX package. + +00:02:20.080 --> 00:02:20.220 +There's an OX ignore thing in there where you + +00:02:23.240 --> 00:02:23.420 +can add an ignore tag to where you don't want + +00:02:24.720 --> 00:02:25.140 +the headings, but you do want the content + +00:02:26.920 --> 00:02:27.240 +exported. I found that a little bit annoying, + +00:02:27.940 --> 00:02:28.280 +just visually annoying, + +00:02:31.320 --> 00:02:31.820 +when I'm, again, My theme here is navigating + +00:02:34.840 --> 00:02:35.160 +100,000 word documents effectively and having + +00:02:36.900 --> 00:02:37.400 +that extra visual noise was kind of a pain. + +00:02:40.520 --> 00:02:40.760 +So I ended up, first I just did like a dumb + +00:02:43.040 --> 00:02:43.180 +ox script as part of my publication kind of + +00:02:47.720 --> 00:02:47.980 +pipeline that removed headlines at the scene + +00:02:48.940 --> 00:02:49.240 +level. And then actually, + +00:02:50.980 --> 00:02:51.220 +because I ended up leaning so heavily on + +00:02:53.680 --> 00:02:53.880 +Pandoc, and Pandoc, for those of you who have + +00:02:56.200 --> 00:02:56.700 +not looked at recent versions of Pandoc, + +00:03:00.920 --> 00:03:01.300 +they've got a really fantastic way to use Lua + +00:03:02.420 --> 00:03:02.920 +at this point to write filters. + +00:03:04.940 --> 00:03:05.140 +So you can kind of take the AST of your + +00:03:07.120 --> 00:03:07.400 +document and run these very simple Lua + +00:03:09.140 --> 00:03:09.620 +filters over it. They used to be in Haskell, + +00:03:11.780 --> 00:03:12.120 +which I'm not smart enough to write Haskell + +00:03:13.140 --> 00:03:13.500 +is 1 of the things that I've discovered. + +00:03:14.440 --> 00:03:14.760 +I keep bouncing off of it, + +00:03:16.360 --> 00:03:16.720 +but I'm just smart enough to write Lua. + +00:03:19.480 --> 00:03:19.840 +And so I use a Lua filter now, + +00:03:21.180 --> 00:03:21.380 +which I'm happy to publish to anyone who's + +00:03:22.880 --> 00:03:23.380 +interested. That basically lets me say, + +00:03:27.440 --> 00:03:27.560 +you know, what level headings to get rid of + +00:03:28.740 --> 00:03:29.120 +the heading, but publish the content. + +00:03:30.320 --> 00:03:30.480 +And part of the reason that's been useful is + +00:03:31.920 --> 00:03:32.040 +that some of the other novels I'm working on + +00:03:33.540 --> 00:03:33.680 +for example have different levels of + +00:03:35.640 --> 00:03:35.740 +hierarchy where maybe there's a part and then + +00:03:37.260 --> 00:03:37.640 +you know at the top level and then chapter + +00:03:39.160 --> 00:03:39.520 +and then scene and it's now the third level + +00:03:41.400 --> 00:03:41.580 +instead of the second and it's much easier in + +00:03:43.840 --> 00:03:44.060 +the Lua to just be like remove the third + +00:03:45.400 --> 00:03:45.700 +level headings or the second level headings + +00:03:47.680 --> 00:03:47.860 +or whatever it is so that's been that's been + +00:03:47.860 --> 00:03:48.360 +helpful. + +00:03:53.040 --> 00:03:53.540 +[Speaker 0]: Great, Moving on to the next question, + +00:03:58.120 --> 00:03:58.260 +slightly off topic, where can we see your + +00:03:58.260 --> 00:03:58.760 +novels? + +00:04:01.060 --> 00:04:01.560 +[Speaker 1]: Oh well yeah, you can, + +00:04:05.500 --> 00:04:05.560 +they're on Amazon, there's 2 of them and a + +00:04:06.160 --> 00:04:06.660 +book of short stories. + +00:04:10.120 --> 00:04:10.440 +I think the short stories and the second + +00:04:11.960 --> 00:04:12.280 +novel, which is called World Enough in Time, + +00:04:13.940 --> 00:04:14.160 +which is the 1 that kind of prompted this + +00:04:16.160 --> 00:04:16.660 +talk, are probably of more interest to this, + +00:04:18.320 --> 00:04:18.820 +to the Emacs focused group. + +00:04:20.380 --> 00:04:20.740 +The first one's like a philosophical murder + +00:04:25.240 --> 00:04:25.440 +mystery, but the World Enough in Time is a + +00:04:29.820 --> 00:04:30.320 +kind of Douglas Adams inspired sci-fi comedy + +00:04:34.440 --> 00:04:34.940 +about kind of hijinks on a relativistic speed + +00:04:37.360 --> 00:04:37.480 +space cruiser, which was a lot of fun to + +00:04:38.980 --> 00:04:39.480 +write. It has a lot of twisty subplots, + +00:04:42.500 --> 00:04:42.720 +which is where I developed that technique of + +00:04:46.560 --> 00:04:46.780 +being able to filter down to tags and see a + +00:04:47.840 --> 00:04:48.340 +reduced version of the novel, + +00:04:51.560 --> 00:04:51.960 +which was very handy when trying to juggle 13 + +00:04:53.520 --> 00:04:54.020 +subplots. So yeah, check it out. + +00:04:57.240 --> 00:04:57.340 +[Speaker 0]: Great, we'll make sure that you have the + +00:04:59.860 --> 00:05:00.360 +links available on the talk page afterwards. + +00:05:03.420 --> 00:05:03.740 +Right now I sadly have to host so I cannot + +00:05:05.680 --> 00:05:05.820 +look up the links but we'll make sure or if + +00:05:08.100 --> 00:05:08.600 +[Speaker 1]: I put it in there for you. + +00:05:09.020 --> 00:05:09.520 +[Speaker 0]: anyone in the chat... Oh you did? + +00:05:13.800 --> 00:05:13.940 +Yeah. In the meantime we'll move on to the + +00:05:16.560 --> 00:05:17.060 +next question. Have you looked at the Denote + +00:05:19.700 --> 00:05:20.080 +signature features? The hierarchical nature + +00:05:23.180 --> 00:05:23.520 +of Lumen's ideas and index cards works well + +00:05:24.100 --> 00:05:24.600 +with Denote signatures. + +00:05:26.120 --> 00:05:26.620 +So are you familiar with Denote first? + +00:05:28.740 --> 00:05:28.840 +[Speaker 1]: I am not. No, it sounds like something that I + +00:05:29.240 --> 00:05:29.740 +should check out. + +00:05:33.080 --> 00:05:33.420 +[Speaker 0]: Yeah, Denote is a way to work with slip + +00:05:35.460 --> 00:05:35.640 +boxes. We talked a little bit about it + +00:05:37.240 --> 00:05:37.740 +earlier today. We talked about Orgroam, + +00:05:40.600 --> 00:05:40.900 +we talked about Denote as well as a lighter + +00:05:41.580 --> 00:05:42.080 +alternative to Orgroam. + +00:05:45.520 --> 00:05:45.920 +And yeah, the organization with index cards + +00:05:47.360 --> 00:05:47.720 +feels like it's something that would highly + +00:05:50.740 --> 00:05:50.900 +benefit from linking and back links and any + +00:05:53.880 --> 00:05:54.380 +kind of UX functionality for relating pieces + +00:05:56.680 --> 00:05:56.980 +of information. So yeah, + +00:05:57.620 --> 00:05:58.120 +definitely look it up. + +00:06:00.040 --> 00:06:00.460 +[Speaker 1]: Yeah, I'm a heavy org-roam user. + +00:06:03.280 --> 00:06:03.680 +I use org-roam for a lot of different stuff + +00:06:05.740 --> 00:06:05.860 +and I would love, I will definitely check out + +00:06:06.740 --> 00:06:07.240 +Denote as an alternative. + +00:06:09.520 --> 00:06:09.960 +[Speaker 0]: Sure, I'm not particularly personally + +00:06:11.720 --> 00:06:12.180 +familiar with what Signature is within Denote + +00:06:13.940 --> 00:06:14.060 +and it'd be great if the person who asked the + +00:06:15.580 --> 00:06:15.980 +question could perhaps provide more details + +00:06:17.980 --> 00:06:18.180 +so that Edmund could get a little more + +00:06:20.000 --> 00:06:20.500 +information when he returns to the document. + +00:06:21.480 --> 00:06:21.980 +But yeah, if you're using Org-ROM, + +00:06:25.140 --> 00:06:25.280 +you're already within the mindset that you + +00:06:27.180 --> 00:06:27.500 +need, and perhaps you'd gain a little bit + +00:06:29.260 --> 00:06:29.760 +extra stuff from using Dino's signature, + +00:06:32.920 --> 00:06:33.240 +I assume. We have 8 minutes. + +00:06:34.040 --> 00:06:34.540 +We're still good on time. + +00:06:36.500 --> 00:06:36.980 +Next question, do you have a workflow + +00:06:39.020 --> 00:06:39.360 +combining handwritten index cards and org + +00:06:39.360 --> 00:06:39.860 +mode? + +00:06:42.400 --> 00:06:42.900 +[Speaker 1]: Great question. I do not. + +00:06:46.620 --> 00:06:47.120 +I do write by hand when I get, + +00:06:49.120 --> 00:06:49.280 +I don't know what a good term for it is, + +00:06:51.420 --> 00:06:51.580 +I'll call it like editorial paralysis or + +00:06:53.100 --> 00:06:53.320 +something when I find it very hard to move + +00:06:54.720 --> 00:06:54.880 +forward in something because I keep going + +00:06:56.940 --> 00:06:57.240 +back and tweaking. And I will handwrite stuff + +00:06:58.520 --> 00:06:58.660 +at that point and then type it in because + +00:07:02.120 --> 00:07:02.540 +it's so much harder to get stuck in editing + +00:07:04.480 --> 00:07:04.600 +mode when you have to move forward on the + +00:07:07.360 --> 00:07:07.860 +page. I don't use index cards. + +00:07:11.680 --> 00:07:12.080 +In the blog article that I link in my talk, + +00:07:14.400 --> 00:07:14.900 +the ewj.io slash emacs 1, + +00:07:18.240 --> 00:07:18.740 +I did try using handwritten or spreadsheet + +00:07:22.360 --> 00:07:22.720 +outlines at 1 point and found them very, + +00:07:27.640 --> 00:07:27.840 +very clumsy for novel writing just because I + +00:07:29.820 --> 00:07:30.320 +do so much, I mean, I do so much revision + +00:07:32.600 --> 00:07:32.720 +that moving things around meant that I had to + +00:07:34.480 --> 00:07:34.760 +keep 2 things in sync with each other, + +00:07:35.440 --> 00:07:35.660 +the pros and the outline. + +00:07:37.540 --> 00:07:38.040 +And that was what really led me to Org Mode + +00:07:39.800 --> 00:07:40.080 +as a way to keep the, again, + +00:07:42.040 --> 00:07:42.180 +I think part of the key for me is keeping the + +00:07:44.580 --> 00:07:45.060 +outline and the pros right next to each other + +00:07:46.440 --> 00:07:46.940 +in a way that they move around which is just + +00:07:48.800 --> 00:07:49.000 +really, I don't know, for me really really + +00:07:49.000 --> 00:07:49.500 +powerful. + +00:07:54.280 --> 00:07:54.480 +[Speaker 0]: Okay great, so we finished the list of + +00:07:55.840 --> 00:07:56.340 +questions available on the pad, + +00:07:58.260 --> 00:07:58.440 +but I see that some people have joined us on + +00:08:01.100 --> 00:08:01.300 +BBB, so hi everyone. If you have any + +00:08:03.340 --> 00:08:03.600 +questions feel free to unmute yourself and + +00:08:06.560 --> 00:08:06.820 +ask them. Otherwise, we might go on a break. + +00:08:08.360 --> 00:08:08.520 +So I'm going to give you about 10 seconds to + +00:08:14.480 --> 00:08:14.760 +unmute yourself. Or if you just want to add + +00:08:15.660 --> 00:08:15.860 +more questions on the pad, + +00:08:17.680 --> 00:08:17.920 +that's also fine. And that'll give you about + +00:08:19.540 --> 00:08:19.860 +30 seconds. Otherwise, + +00:08:20.660 --> 00:08:21.160 +we'll need to go on a break. + +00:08:24.020 --> 00:08:24.520 +And in the meantime, I'll thank you, + +00:08:25.600 --> 00:08:26.100 +Edmund, for your presentation, + +00:08:27.880 --> 00:08:28.100 +because it's always nice, + +00:08:31.400 --> 00:08:31.900 +you know, we The reason why we have 2 tracks, + +00:08:34.200 --> 00:08:34.280 +and we've been having 2 tracks for the last 2 + +00:08:36.039 --> 00:08:36.260 +or 3 editions of EmacsConf is because it's + +00:08:38.799 --> 00:08:39.299 +really nice to have those talks which are + +00:08:43.500 --> 00:08:43.840 +still related to Emacs and to far distance + +00:08:45.440 --> 00:08:45.700 +developments because we are obviously using + +00:08:48.160 --> 00:08:48.400 +packages. But it's really nice to see when we + +00:08:51.960 --> 00:08:52.200 +foray into other areas like writing or any + +00:08:53.400 --> 00:08:53.900 +kind of academia-based topics. + +00:08:55.440 --> 00:08:55.840 +So thank you, it's really nice. + +00:09:01.500 --> 00:09:01.720 +It brings different colors to the spectrum of + +00:09:03.580 --> 00:09:03.900 +what EmacsConf is and what ultimately Emacs + +00:09:04.680 --> 00:09:05.180 +is as well. Thank you. + +00:09:06.960 --> 00:09:07.200 +[Speaker 1]: Well thanks to everyone who tuned in and Leo + +00:09:08.160 --> 00:09:08.560 +thanks to you and all the other organizers + +00:09:09.060 --> 00:09:09.340 +for putting this together. + +00:09:09.720 --> 00:09:10.220 +Appreciate it. + +00:09:12.720 --> 00:09:12.840 +[Speaker 0]: Thank you. All right I think we're going to + +00:09:14.380 --> 00:09:14.540 +go on a little break for 5 minutes because I + +00:09:16.060 --> 00:09:16.560 +don't see other questions being asked. + +00:09:18.900 --> 00:09:19.160 +So everyone we'll see you again in 5 minutes + +00:09:19.900 --> 00:09:20.400 +and thank you again, Edmund. + +00:09:20.720 --> 00:09:21.220 +[Speaker 1]: Cheers. diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt new file mode 100644 index 00000000..0dc31572 --- /dev/null +++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt @@ -0,0 +1,17 @@ +WEBVTT + + +00:00:00.000 --> 00:00:45.759 +Introduction + +00:00:45.760 --> 00:02:24.079 +Nabokov's process of writing novels + +00:02:24.080 --> 00:04:46.559 +Three practical problems novelists face + +00:04:46.560 --> 00:08:55.599 +Org mode for writing novels + +00:08:55.600 --> 00:09:50.840 +Takeaways and next steps diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt new file mode 100644 index 00000000..9bf4de03 --- /dev/null +++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt @@ -0,0 +1,767 @@ +WEBVTT captioned by bhavin192, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:05.239 +Hello, fellow Emacs enthusiasts. + +00:00:05.240 --> 00:00:06.799 +My name is Edmund Jorgensen. + +00:00:06.800 --> 00:00:08.519 +I'm a software engineer by day, + +00:00:08.520 --> 00:00:10.599 +but by night I love to write novels, + +00:00:10.600 --> 00:00:11.774 +and I lean on Emacs heavily + +00:00:11.774 --> 00:00:13.759 +for both of these activities. + +00:00:13.760 --> 00:00:15.879 +Today, I would like to talk to you about how Emacs, + +00:00:15.880 --> 00:00:17.319 +specifically with Org mode, + +00:00:17.320 --> 00:00:18.440 +has helped me manage some of the practical + +00:00:18.840 --> 00:00:20.940 +difficulties of writing long-form prose, + +00:00:20.940 --> 00:00:22.039 +novels in my case, + +00:00:22.040 --> 00:00:24.319 +and I'd like to get at this by talking about how + +00:00:24.320 --> 00:00:26.439 +another, much more famous novelist managed + +00:00:26.440 --> 00:00:28.359 +some of those same difficulties in a way + +00:00:28.360 --> 00:00:30.874 +that makes me suspect he might well use Emacs + +00:00:30.874 --> 00:00:31.959 +and Org mode himself + +00:00:31.960 --> 00:00:34.519 +if he were still alive and writing today. + +00:00:34.520 --> 00:00:35.599 +This talk will probably be + +00:00:35.600 --> 00:00:36.959 +of the most interest to listeners + +00:00:36.960 --> 00:00:39.239 +who either already write long-form prose in Emacs + +00:00:39.240 --> 00:00:40.879 +or are considering doing so, + +00:00:40.880 --> 00:00:42.039 +but I think that anyone + +00:00:42.040 --> 00:00:44.079 +with an interest in literature or Emacs + +00:00:44.080 --> 00:00:45.759 +will find something to take away. + +NOTE Nabokov's process of writing novels + +00:00:45.760 --> 00:00:51.119 +So let's get to it. + +00:00:51.120 --> 00:00:53.919 +Here's a picture of a man lying on a bed, + +00:00:53.920 --> 00:00:55.999 +writing something on an index card. + +00:00:56.000 --> 00:00:57.519 +If we didn't know any better, + +00:00:57.520 --> 00:00:58.959 +we might think that he was just jotting down + +00:00:58.960 --> 00:01:01.679 +a recipe for beef stew or something like that. + +00:01:01.680 --> 00:01:03.839 +But in fact, this is not just any old man. + +00:01:03.840 --> 00:01:06.174 +This is Vladimir Nabokov, one of the most + +00:01:06.174 --> 00:01:08.079 +celebrated novelists of the 20th century, + +00:01:08.080 --> 00:01:09.279 +and he's not jotting down + +00:01:09.280 --> 00:01:11.479 +a recipe for beef stew in this picture. + +00:01:11.480 --> 00:01:12.759 +He's actually hard at work here, + +00:01:12.760 --> 00:01:15.007 +composing a classic of English literature + +00:01:15.007 --> 00:01:16.559 +on an index card. + +00:01:16.560 --> 00:01:18.799 +That's how he wrote all his novels, in fact, + +00:01:18.800 --> 00:01:20.159 +on index cards. + +00:01:20.160 --> 00:01:22.759 +I don't mean that he just took notes on these cards + +00:01:22.760 --> 00:01:24.159 +or wrote outlines on them. + +00:01:24.160 --> 00:01:25.679 +He did both of those things as well, + +00:01:25.680 --> 00:01:28.919 +but he also wrote the actual prose of his novels, + +00:01:28.920 --> 00:01:32.799 +word by word, sentence by sentence, on index cards. + +00:01:32.800 --> 00:01:37.359 +Let's see what that looked like at scale. + +00:01:37.360 --> 00:01:39.440 +This box you see here, + +00:01:39.440 --> 00:01:41.239 +full of groups of bundled cards, + +00:01:41.240 --> 00:01:43.919 +is what a novel in progress looked like for Nabokov. + +00:01:43.920 --> 00:01:46.079 +If you squint, you can see that these cards + +00:01:46.080 --> 00:01:47.639 +were from the composition of Lolita, + +00:01:47.640 --> 00:01:50.559 +probably his most famous novel. + +00:01:50.560 --> 00:01:53.719 +So why did he write novels on index cards? + +00:01:53.720 --> 00:01:56.039 +It's not necessarily an obvious choice. + +00:01:56.040 --> 00:01:58.999 +Yes, sadly, Emacs wasn't available to him at the time, + +00:01:59.000 --> 00:02:01.239 +but most writers in his day, + +00:02:01.240 --> 00:02:02.640 +if they weren't using typewriters, + +00:02:02.640 --> 00:02:03.919 +which were available, + +00:02:03.920 --> 00:02:05.999 +were using notebooks or loose-leaf sheets + +00:02:06.000 --> 00:02:07.359 +or something like that. + +00:02:07.360 --> 00:02:09.959 +Not these tiny little index cards. + +00:02:09.960 --> 00:02:11.919 +But Nabokov loved index cards. + +00:02:11.920 --> 00:02:14.359 +He swore by them because they represented + +00:02:14.360 --> 00:02:15.199 +an elegant solution + +00:02:15.200 --> 00:02:17.999 +to three of the most pressing practical problems + +00:02:18.000 --> 00:02:24.079 +that every novelist faces. + +NOTE Three practical problems novelists face + +00:02:24.080 --> 00:02:25.307 +Writing a good novel + +00:02:25.307 --> 00:02:27.479 +is artistically difficult, of course. + +00:02:27.480 --> 00:02:28.959 +You have to write something interesting + +00:02:28.960 --> 00:02:30.107 +with a good story, + +00:02:30.107 --> 00:02:31.919 +something that people want to read. + +00:02:31.920 --> 00:02:33.519 +But writing any novel at all, + +00:02:33.520 --> 00:02:34.999 +whether it's good or bad, + +00:02:35.000 --> 00:02:37.719 +is brutally, practically difficult. + +00:02:37.720 --> 00:02:39.919 +You're hacking something like 100,000 words + +00:02:39.920 --> 00:02:42.440 +into unified shape over a long period of time, + +00:02:42.440 --> 00:02:43.799 +months or years. + +00:02:43.800 --> 00:02:45.719 +There are organizational challenges + +00:02:45.720 --> 00:02:46.959 +inherent in that process, + +00:02:46.960 --> 00:02:48.919 +and each writer needs practical techniques + +00:02:48.920 --> 00:02:51.079 +to manage those challenges. + +00:02:51.080 --> 00:02:53.399 +The most basic challenge, of course, is that, + +00:02:53.400 --> 00:02:55.359 +unless you're trying to bring back + +00:02:55.360 --> 00:02:57.040 +the Homeric Bard tradition + +00:02:57.040 --> 00:02:59.599 +of reciting books from memory in firelit halls, + +00:02:59.600 --> 00:03:01.199 +you need to actually set down + +00:03:01.200 --> 00:03:03.319 +those 100,000 words on some medium. + +00:03:03.320 --> 00:03:05.839 +In Nabokov's case, index cards worked fine for this. + +00:03:05.840 --> 00:03:08.439 +A little cramped, maybe, but workable. + +00:03:08.440 --> 00:03:09.679 +Secondly, as you're writing, + +00:03:09.680 --> 00:03:11.719 +you're bound to think of little but important things + +00:03:11.720 --> 00:03:13.919 +about the story that you want to record. + +00:03:13.920 --> 00:03:16.207 +I'm not talking here about big thematic notes + +00:03:16.207 --> 00:03:19.039 +or research that can go in a separate document, + +00:03:19.040 --> 00:03:21.159 +but smaller, more contextual notes + +00:03:21.160 --> 00:03:23.879 +that belong right along the prose that they refer to. + +00:03:23.880 --> 00:03:26.639 +These might be reminders, like, + +00:03:26.640 --> 00:03:28.519 +"Remember to clean up this sentence," + +00:03:28.520 --> 00:03:29.707 +or questions for yourself + +00:03:29.707 --> 00:03:31.907 +to consider during rewrites, like, + +00:03:31.907 --> 00:03:33.239 +"Why does Shirley feel this way here?" + +00:03:33.240 --> 00:03:35.599 +Nabokov recorded these notes + +00:03:35.600 --> 00:03:37.559 +in the margins of his cards or on the backs. + +00:03:37.560 --> 00:03:39.999 +Paper, in general, is great for this kind of + +00:03:40.000 --> 00:03:41.039 +intertextual note-taking. + +00:03:41.040 --> 00:03:44.599 +That's not particular to index cards. + +00:03:44.600 --> 00:03:47.919 +But what Nabokov really loved about index cards + +00:03:47.920 --> 00:03:49.519 +was how they solved the novelist's + +00:03:49.520 --> 00:03:52.119 +third and most difficult practical problem, + +00:03:52.120 --> 00:03:54.279 +which is imposing some kind of structure + +00:03:54.280 --> 00:03:55.599 +on this mountain of words. + +00:03:55.600 --> 00:03:58.519 +To have any hope of wrangling a novel into being, + +00:03:58.520 --> 00:04:00.119 +you need some way to break it down + +00:04:00.120 --> 00:04:03.639 +into parts, chapters, scenes, snatches of dialogue. + +00:04:03.640 --> 00:04:05.839 +You need some kind of higher-level outline + +00:04:05.840 --> 00:04:07.999 +that you can read, navigate, and rearrange + +00:04:08.000 --> 00:04:09.919 +as you consider and reconsider your story. + +00:04:09.920 --> 00:04:11.919 +You need structure. + +00:04:11.920 --> 00:04:14.879 +Index cards gave Nabokov a really powerful way + +00:04:14.880 --> 00:04:16.239 +to impose this structure + +00:04:16.240 --> 00:04:18.559 +because they created small, independent + +00:04:18.560 --> 00:04:18.999 +chunks of prose + +00:04:19.000 --> 00:04:21.359 +that he could bundle together into groups, + +00:04:21.360 --> 00:04:22.759 +like we saw in the box. + +00:04:22.760 --> 00:04:31.959 +This let him navigate his novel in progress quickly. + +00:04:31.960 --> 00:04:33.799 +He could just flip through those bundles, + +00:04:33.800 --> 00:04:36.119 +bundle by bundle, instead of card by card. + +00:04:36.120 --> 00:04:38.240 +He could also impose on + +00:04:38.240 --> 00:04:40.079 +and modify the structure of his novel + +00:04:40.080 --> 00:04:41.999 +just by shuffling those bundles around. + +00:04:42.000 --> 00:04:45.307 +So that's why Nabokov loved index cards + +00:04:45.307 --> 00:04:46.559 +for writing novels. + +NOTE Org mode for writing novels + +00:04:46.560 --> 00:04:48.759 +Now I'd love to talk about + +00:04:48.760 --> 00:04:51.279 +why I love Org mode so much for writing novels + +00:04:51.280 --> 00:04:53.999 +and how it helps me tackle those same challenges. + +00:04:54.000 --> 00:05:01.759 +The first practical challenge, + +00:05:01.760 --> 00:05:03.759 +recording your words on some medium, + +00:05:03.760 --> 00:05:04.774 +is pretty simple. + +00:05:04.774 --> 00:05:06.439 +Org mode is a part of Emacs, + +00:05:06.440 --> 00:05:09.199 +a text editor, so you can just type in your text. + +00:05:09.200 --> 00:05:10.919 +We're not going to spend any more time on that. + +00:05:10.920 --> 00:05:13.439 +For the second practical challenge, + +00:05:13.440 --> 00:05:16.039 +recording small intertextual notes, + +00:05:16.040 --> 00:05:19.039 +Org mode offers comments, like this one here. + +00:05:19.040 --> 00:05:21.959 +The comment, "maybe I need to say which store?", + +00:05:21.960 --> 00:05:23.239 +with the leading pound sign there. + +00:05:23.240 --> 00:05:25.874 +I think that comments are generally + +00:05:25.874 --> 00:05:28.240 +underappreciated outside of coding. + +00:05:28.240 --> 00:05:29.799 +When writing fiction, for example, + +00:05:29.800 --> 00:05:32.359 +I love that Org mode lets me keep these comments + +00:05:32.360 --> 00:05:33.959 +close to the prose they refer to. + +00:05:33.960 --> 00:05:37.159 +I can see right here that I'm talking about + +00:05:37.160 --> 00:05:39.119 +saying which store in this first line, + +00:05:39.120 --> 00:05:40.599 +"One day, Bob went to the store." + +00:05:40.600 --> 00:05:43.999 +I get to keep these things close to + +00:05:44.000 --> 00:05:44.999 +the prose they refer to + +00:05:45.000 --> 00:05:46.519 +without ever having to worry that + +00:05:46.520 --> 00:05:48.479 +they'll accidentally be exported to a reader. + +00:05:48.480 --> 00:05:50.540 +That's great. + +00:05:50.540 --> 00:05:52.807 +So let's talk about how Org Mode handles the third + +00:05:52.807 --> 00:06:00.919 +and most brutal challenge of all, which is structure. + +00:06:00.920 --> 00:06:03.039 +Here we've taken the same text + +00:06:03.040 --> 00:06:04.879 +and we've imposed some structure on it. + +00:06:04.880 --> 00:06:07.807 +Like index cards, + +00:06:07.807 --> 00:06:09.639 +this is where Org mode really shines. + +00:06:09.640 --> 00:06:11.999 +Org mode extends outline mode, + +00:06:12.000 --> 00:06:14.359 +which is built around the concept of header lines, + +00:06:14.360 --> 00:06:15.959 +with different levels denoted by + +00:06:15.960 --> 00:06:18.079 +different numbers of leading asterisks (`*`). + +00:06:18.080 --> 00:06:20.674 +Personally, I tend to use top line headers + +00:06:20.974 --> 00:06:23.359 +as chapters and second line headers as scenes. + +00:06:23.360 --> 00:06:26.079 +You can see that here, where chapter one says + +00:06:26.080 --> 00:06:27.319 +"Bob and Shirley meet." + +00:06:27.320 --> 00:06:29.599 +Here's a scene, "Bob goes to the store." + +00:06:29.600 --> 00:06:32.639 +And here below is chapter two, yet unwritten, + +00:06:32.640 --> 00:06:34.319 +where Bob goes to work. + +00:06:34.320 --> 00:06:39.679 +Pretty exciting. Since Org mode supports folding, + +00:06:39.680 --> 00:06:42.159 +I can read quickly through a summary of my novel + +00:06:42.160 --> 00:06:44.079 +at either the chapter or the scene level + +00:06:44.080 --> 00:06:46.040 +just by flipping through different levels of + +00:06:46.240 --> 00:06:48.799 +visibility, just like Nabokov could flip through + +00:06:48.800 --> 00:06:51.307 +different bundles of cards. + +00:06:51.307 --> 00:06:52.599 +So here's the chapter level. + +00:06:52.600 --> 00:06:54.719 +I can see at a chapter level, + +00:06:54.720 --> 00:06:56.679 +"Bob and Shirley meet", "Bob goes to work." + +00:06:56.680 --> 00:06:59.079 +And then I can get one level more specific + +00:06:59.080 --> 00:07:01.159 +and see the various scenes in the chapter + +00:07:01.160 --> 00:07:02.959 +at the second header level. + +00:07:02.960 --> 00:07:03.999 +And I can, if I want, + +00:07:04.000 --> 00:07:10.359 +I can go all the way back to the prose level. + +00:07:10.360 --> 00:07:12.774 +And just like Nabokov shuffling + +00:07:12.774 --> 00:07:13.940 +his index cards around, + +00:07:14.040 --> 00:07:16.759 +I can move scenes around as logical units. + +00:07:16.760 --> 00:07:18.199 +Let's say, for example, + +00:07:18.200 --> 00:07:20.399 +that we wanted to move Bob's thoughts about life, + +00:07:20.400 --> 00:07:22.919 +which are down here, up further. + +00:07:22.920 --> 00:07:26.959 +Well, I can grab "Bob thinks about life," + +00:07:26.960 --> 00:07:30.479 +and I can move it up or down as a logical unit. + +00:07:30.480 --> 00:07:34.719 +But Org mode offers some even more powerful tricks + +00:07:34.720 --> 00:07:36.519 +for structuring and navigating your novel, + +00:07:36.520 --> 00:07:38.559 +beyond what even index cards can do. + +00:07:38.560 --> 00:07:41.974 +For example, you can use tags + +00:07:41.974 --> 00:07:44.479 +on your scene headings. You can see these here. + +00:07:44.480 --> 00:07:46.599 +They're the prominent colon separated words + +00:07:46.600 --> 00:07:47.559 +on the header lines. + +00:07:47.560 --> 00:07:49.839 +In this case, I'm using `bob` and `shirley`. + +00:07:49.840 --> 00:07:52.719 +These tags can represent characters + +00:07:52.720 --> 00:07:53.674 +who appear in the scene, + +00:07:53.674 --> 00:07:54.239 +which is what I'm doing here, + +00:07:54.640 --> 00:07:57.207 +or locations in which the scenes occur, + +00:07:57.207 --> 00:07:59.159 +or plot lines that the scenes further, + +00:07:59.160 --> 00:08:00.479 +really anything that you want. + +00:08:00.480 --> 00:08:04.239 +And you can then use Org mode's sparse view features + +00:08:04.240 --> 00:08:07.559 +to query a set of tags and trim your novel down to + +00:08:07.560 --> 00:08:09.519 +a subset of related scenes. + +00:08:09.520 --> 00:08:12.559 +For example, let's say we want to filter down to + +00:08:12.560 --> 00:08:14.799 +only the scenes in which Shirley appears. + +00:08:14.800 --> 00:08:25.759 +This could allow us to read quickly through + +00:08:25.760 --> 00:08:27.439 +just a subset of the prose, + +00:08:27.440 --> 00:08:29.599 +the prose that referred to Shirley in some way. + +00:08:29.600 --> 00:08:31.359 +Maybe we want to do that + +00:08:31.360 --> 00:08:33.279 +to check continuity for her character, + +00:08:33.280 --> 00:08:35.519 +or make sure that her character develops + +00:08:35.520 --> 00:08:36.999 +along a compelling arc, + +00:08:37.000 --> 00:08:38.319 +or even just to get a sense + +00:08:38.320 --> 00:08:40.399 +of how much airtime she gets in the novel. + +00:08:44.040 --> 00:08:49.759 +Thanks for listening to this whirlwind exploration + +00:08:49.760 --> 00:08:51.879 +of some of the practical challenges of writing + +00:08:51.880 --> 00:08:53.599 +novels and other long-form prose, + +00:08:53.600 --> 00:08:55.599 +and how Org mode can help tackle them. + +NOTE Takeaways and next steps + +00:08:55.600 --> 00:08:57.879 +I'd like to leave you with a couple takeaways + +00:08:57.880 --> 00:08:59.759 +and next steps for those who are interested. + +00:08:59.760 --> 00:09:01.907 +First, if you're writing a novel + +00:09:01.907 --> 00:09:02.840 +or other long-form prose, + +00:09:02.841 --> 00:09:04.874 +or even considering doing so, + +00:09:04.874 --> 00:09:06.107 +take a look at Org mode, + +00:09:06.108 --> 00:09:08.374 +especially if you're already familiar with Emacs. + +00:09:08.375 --> 00:09:10.474 +It won't solve the artistic problem + +00:09:10.475 --> 00:09:11.874 +of writing an interesting book for you, + +00:09:11.875 --> 00:09:13.907 +not even with a ChatGPT plugin, + +00:09:13.908 --> 00:09:15.874 +but it's a fantastic tool for managing + +00:09:15.875 --> 00:09:16.874 +some of the practical challenges + +00:09:16.875 --> 00:09:19.840 +that come with hacking 100,000 words into shape + +00:09:19.841 --> 00:09:22.740 +over the months or years that that process takes. + +00:09:22.741 --> 00:09:25.839 +Second, if you're interested in learning more + +00:09:25.840 --> 00:09:27.959 +about some of the advanced features of Org mode + +00:09:27.960 --> 00:09:29.519 +and how they can help in this process, + +00:09:29.520 --> 00:09:32.319 +I wrote a long blog post about my difficulties + +00:09:32.320 --> 00:09:34.879 +writing a novel with 13 interconnected subplots, + +00:09:34.880 --> 00:09:37.759 +and how Emacs and Org mode saved it from imploding. + +00:09:37.760 --> 00:09:43.999 +I'll put a link here below. [ewj.io/emacs] + +00:09:44.000 --> 00:09:50.840 +Thanks for listening, and Emacs on! diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt new file mode 100644 index 00000000..9a1888a0 --- /dev/null +++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt @@ -0,0 +1,1472 @@ +WEBVTT + + +00:00:00.459 --> 00:00:05.460 +[Speaker 0]: So, will you, when I'm looking at my, + +00:00:06.279 --> 00:00:08.480 +the other screen, I don't see the chat, + +00:00:08.480 --> 00:00:10.380 +so maybe someone can tell me. + +00:00:11.259 --> 00:00:12.360 +[Speaker 1]: It's fine, don't worry about it, + +00:00:12.360 --> 00:00:14.320 +and we are live. So hi again everyone. + +00:00:15.060 --> 00:00:16.140 +Hi Tony, how are you doing? + +00:00:17.040 --> 00:00:18.420 +[Speaker 0]: Really well, and you? + +00:00:19.440 --> 00:00:21.040 +[Speaker 1]: I am doing fantastically, + +00:00:21.380 --> 00:00:23.460 +as fantastically as I can be doing, + +00:00:24.099 --> 00:00:25.820 +having to put out fire in the background + +00:00:30.140 --> 00:00:30.640 +[Speaker 0]: Cool! + +00:00:25.840 --> 00:00:31.520 +[Speaker 1]: during MaxConf. But I'm doing great! Alright, + +00:00:31.640 --> 00:00:34.900 +Let me just try to set up everything so that + +00:00:34.960 --> 00:00:37.260 +I can show the questions and all this. + +00:00:37.260 --> 00:00:38.600 +Do you mind if I read you the question? + +00:00:38.600 --> 00:00:39.960 +It might be a little more interactive and + +00:00:39.960 --> 00:00:42.760 +this way you can focus on either presenting + +00:00:42.800 --> 00:00:43.760 +stuff on your end. + +00:00:44.059 --> 00:00:48.680 +[Speaker 0]: Yes, tell me what are the questions and what + +00:00:48.680 --> 00:00:50.940 +to do and I will do that. + +00:00:53.420 --> 00:00:56.400 +[Speaker 1]: Okay great so what I'll do, + +00:00:56.400 --> 00:00:58.580 +I'll invite people to go to the pad and ask + +00:00:58.580 --> 00:01:00.060 +questions because it was a very interesting + +00:01:00.060 --> 00:01:01.480 +talk and I'm sure you have plenty of + +00:01:01.480 --> 00:01:03.460 +questions but I only see 1 right now. + +00:01:03.460 --> 00:01:05.360 +Do we have people on BigBlueButton? + +00:01:05.640 --> 00:01:08.580 +Yes we do have people joining right now. + +00:01:11.000 --> 00:01:12.620 +So reading the first question then. + +00:01:12.620 --> 00:01:14.380 +So what's the main motivation for this new + +00:01:14.380 --> 00:01:16.100 +package? I used to use org.yugo + +00:01:16.280 --> 00:01:18.340 +and use GitHub Actions to build a blog. + +00:01:18.340 --> 00:01:20.600 +So can you go in a little bit of details on + +00:01:20.600 --> 00:01:21.100 +this? + +00:01:21.540 --> 00:01:25.780 +[Speaker 0]: Yes, OK. So the main goal, + +00:01:30.900 --> 00:01:33.570 +I didn't want to have, + +00:01:33.805 --> 00:01:37.440 +to, I will push that here. + +00:01:38.040 --> 00:01:44.940 +So my goal was to not have to rely on another + +00:01:45.060 --> 00:01:49.920 +static site generator to produce my website. + +00:01:49.920 --> 00:01:54.780 +So if you use a Yugo, that means that you + +00:01:54.780 --> 00:02:01.060 +take, so this is the website that we've seen + +00:02:01.960 --> 00:02:07.880 +in the talk, this 1. And I didn't want to + +00:02:07.880 --> 00:02:13.320 +have to use a piece of software in Emacs that + +00:02:13.320 --> 00:02:16.960 +translate to some other files to be feed to + +00:02:16.960 --> 00:02:20.680 +another statistic generator because this way + +00:02:20.680 --> 00:02:23.680 +I have 2 things to understand. + +00:02:23.680 --> 00:02:26.620 +I have to understand how that software + +00:02:26.780 --> 00:02:32.440 +translates my files into the other files and + +00:02:32.440 --> 00:02:36.960 +then I have to understand how Hugo works. + +00:02:37.060 --> 00:02:39.480 +So if I want to change something I need to + +00:02:39.480 --> 00:02:43.660 +understand Hugo. So at some point I need to + +00:02:43.660 --> 00:02:46.200 +work with Hugo. So if I need to work with + +00:02:46.200 --> 00:02:49.700 +Hugo, maybe I can work with it directly. + +00:02:51.800 --> 00:02:56.600 +And I wanted also something that was purely + +00:02:56.960 --> 00:03:03.080 +Emacs-centric and working on it, + +00:03:03.700 --> 00:03:05.560 +I found out about that solution. + +00:03:05.600 --> 00:03:10.740 +And I wanted also something that we have only + +00:03:11.780 --> 00:03:15.140 +1 file that have all the entries. + +00:03:15.560 --> 00:03:18.620 +And when I thought about that, + +00:03:19.140 --> 00:03:22.720 +finally I found a way that maybe we can just + +00:03:22.720 --> 00:03:30.360 +use 1 or 3 to pass it the information of the + +00:03:30.360 --> 00:03:33.405 +website. And if you look, + +00:03:33.405 --> 00:03:37.660 +If you just try to work with Gatsby, + +00:03:37.920 --> 00:03:40.020 +Ugo or all those websites, + +00:03:40.940 --> 00:03:45.680 +when you start, you download 10, + +00:03:46.240 --> 00:03:52.280 +20, 30, thousand for hundreds of dependencies + +00:03:53.440 --> 00:03:59.620 +to do. Just to me, I'm a small guy and I just + +00:03:59.620 --> 00:04:02.720 +want to have some documentation on the + +00:04:02.720 --> 00:04:05.200 +website like this 1. It just, + +00:04:05.460 --> 00:04:08.980 +it shouldn't need that much of a dependency. + +00:04:09.160 --> 00:04:11.460 +And if you look at the website, + +00:04:11.460 --> 00:04:13.180 +if you want to hack on something, + +00:04:13.540 --> 00:04:17.320 +you need a lot of to understand how the + +00:04:17.320 --> 00:04:19.459 +config files work. So you need to, + +00:04:19.459 --> 00:04:21.060 +how does it work this config file? + +00:04:21.060 --> 00:04:23.320 +But I want, it's always happened that you + +00:04:23.320 --> 00:04:26.420 +want to add 1 thing or to add that things. + +00:04:26.420 --> 00:04:27.760 +What do you have to do? + +00:04:27.780 --> 00:04:30.340 +You have to, you can't because it's not + +00:04:30.340 --> 00:04:34.040 +offered by the configuration file. + +00:04:34.380 --> 00:04:37.980 +With that solution that I built for me first, + +00:04:38.920 --> 00:04:41.580 +I don't care if I need something else. + +00:04:42.020 --> 00:04:47.600 +I just have to go in that file. + +00:04:49.840 --> 00:04:52.440 +It doesn't need to be that file because as I + +00:04:52.440 --> 00:04:55.980 +am in Emacs if the render functions are + +00:04:56.120 --> 00:04:58.940 +already evaluated they exist and I can use it + +00:04:58.940 --> 00:05:02.520 +but I just have to change that file so if I + +00:05:02.520 --> 00:05:07.860 +want something more I just I go there let's + +00:05:07.860 --> 00:05:10.920 +say so does it answer the question or I + +00:05:10.920 --> 00:05:12.780 +continue to show something? + +00:05:14.320 --> 00:05:16.060 +[Speaker 1]: It's up to you, I think you are answering the + +00:05:16.060 --> 00:05:17.600 +question. I think you veered off a little bit + +00:05:17.600 --> 00:05:19.940 +from just why not you go but then you kind of + +00:05:19.940 --> 00:05:21.840 +redid part of your presentation to justify + +00:05:23.480 --> 00:05:26.360 +[Speaker 0]: own system. But stop me if I go because I + +00:05:26.360 --> 00:05:29.920 +used to want to show more things than what + +00:05:29.920 --> 00:05:30.900 +there is in the question. + +00:05:21.940 --> 00:05:32.080 +[Speaker 1]: why you had to roll your Yeah that's fine. + +00:05:32.080 --> 00:05:33.340 +Just for people who do not know, + +00:05:33.340 --> 00:05:35.500 +we tend to restrict speakers when they submit + +00:05:35.500 --> 00:05:36.620 +a presentation. We tell them, + +00:05:36.620 --> 00:05:39.000 +oh, you can do a flash talk in 10 minutes or + +00:05:39.000 --> 00:05:41.100 +a bit of a longer talk in 20 minutes or 40 + +00:05:41.100 --> 00:05:43.180 +minutes. And usually, because we have a lot + +00:05:43.180 --> 00:05:46.260 +of speakers, we have to kind of coerce people + +00:05:46.260 --> 00:05:48.340 +into going to shorter formats and sometimes + +00:05:48.340 --> 00:05:50.260 +it's a lot about killing your darlings. + +00:05:51.100 --> 00:05:52.360 +But just to reassure you, + +00:05:52.360 --> 00:05:54.560 +we're just about to go on a launch break in + +00:05:54.560 --> 00:05:56.840 +about 10 minutes, so you've got the full 10 + +00:05:56.840 --> 00:05:58.320 +minutes to use however you want, + +00:05:58.320 --> 00:05:59.340 +but I'll just tell you, + +00:05:59.340 --> 00:06:01.080 +you have a lot of questions so you might want + +00:06:01.080 --> 00:06:03.400 +to perhaps move on to the next 1 as soon as + +00:06:03.400 --> 00:06:04.060 +you can. + +00:06:04.540 --> 00:06:08.240 +[Speaker 0]: Yes okay so tell me the next 1 and if people + +00:06:08.940 --> 00:06:13.160 +want to stay more I can also stay more. + +00:06:14.240 --> 00:06:17.220 +Right. I understand if people need to go to + +00:06:17.220 --> 00:06:19.020 +lunch, they can, but people that want to + +00:06:19.020 --> 00:06:20.240 +stay, if it's possible, + +00:06:20.340 --> 00:06:22.860 +I'm here to answer any question. + +00:06:24.060 --> 00:06:26.240 +[Speaker 1]: Splendid. All right, so moving on to the next + +00:06:26.240 --> 00:06:29.180 +question. Is it possible to include the + +00:06:29.180 --> 00:06:31.560 +include org tag to add content from other + +00:06:31.560 --> 00:06:33.620 +files. Do you see what I'm talking about? + +00:06:35.200 --> 00:06:39.060 +[Speaker 0]: Yes, so it's not included. + +00:06:39.380 --> 00:06:45.240 +So the idea was really to have only 1 file + +00:06:45.720 --> 00:06:49.760 +and have no options. So if you look at the, + +00:06:49.760 --> 00:06:52.240 +let's go into, so the answer is no, + +00:06:52.240 --> 00:06:56.320 +but if you want, you can write the code that + +00:06:56.320 --> 00:07:00.520 +do it. But let's just go into one.n, + +00:07:02.280 --> 00:07:07.900 +so that files. So this is the files where you + +00:07:07.900 --> 00:07:11.440 +have everything, and there is only 2 + +00:07:11.440 --> 00:07:13.980 +dependencies. Maybe we can see that at the + +00:07:13.980 --> 00:07:18.080 +top so which are htmlis on the Jack and the + +00:07:18.080 --> 00:07:19.840 +other are Augment. So for me, + +00:07:19.840 --> 00:07:21.760 +they're not dependencies because they come + +00:07:21.820 --> 00:07:25.440 +with Emacs. But the question is, + +00:07:25.440 --> 00:07:27.440 +can I add other things? + +00:07:27.440 --> 00:07:31.640 +If you look at that, you don't see the orange + +00:07:31.640 --> 00:07:33.220 +color which are viable, + +00:07:33.600 --> 00:07:38.080 +it's because I didn't want any configuration + +00:07:38.440 --> 00:07:41.060 +nor option. So there is no, + +00:07:41.960 --> 00:07:45.660 +if you think about, you are used to use org + +00:07:45.660 --> 00:07:49.540 +export normally and to use all the options + +00:07:49.540 --> 00:07:52.000 +that are possible on all the things they are + +00:07:52.000 --> 00:08:00.600 +not included. You can add them because when + +00:08:04.900 --> 00:08:06.500 +you are in a render function. + +00:08:07.060 --> 00:08:08.940 +So this is the render function that I showed + +00:08:08.940 --> 00:08:11.980 +in the theme. You have a page tree so you + +00:08:11.980 --> 00:08:18.358 +have the information but in the global I + +00:08:18.358 --> 00:08:20.440 +think, yes in global, you can pass anything + +00:08:21.020 --> 00:08:24.720 +you want and if you want you can pass the + +00:08:24.720 --> 00:08:27.540 +parse tree of the whole file. + +00:08:28.080 --> 00:08:30.840 +So if you pass the parse tree of the whole + +00:08:30.840 --> 00:08:34.580 +file, what you can do is that you can get it + +00:08:35.400 --> 00:08:38.659 +there. So I don't have it right now, + +00:08:38.659 --> 00:08:43.980 +but you might have your include stuff and you + +00:08:43.980 --> 00:08:48.040 +get it with a node property that target + +00:08:48.580 --> 00:08:50.940 +something in the global variable. + +00:08:50.940 --> 00:08:54.740 +So if we look just to be short but those 3 + +00:08:55.320 --> 00:08:57.180 +parts, the first 1 is page tree. + +00:08:57.180 --> 00:08:59.160 +So it's this page that you are on the right, + +00:08:59.160 --> 00:09:02.220 +pages are a list of all the pages and global + +00:09:02.840 --> 00:09:06.240 +is something that you can set and reset once + +00:09:06.580 --> 00:09:10.840 +and you have the whole part street. + +00:09:10.840 --> 00:09:13.400 +So anything that you add in your op-files + +00:09:15.040 --> 00:09:16.840 +could go in global if you want, + +00:09:16.840 --> 00:09:18.060 +but it's not included. + +00:09:20.600 --> 00:09:23.140 +[Speaker 1]: All right. I think that's also answering the + +00:09:23.140 --> 00:09:24.840 +question. Can this generate a single file + +00:09:24.840 --> 00:09:26.420 +from different sources like blog.org, + +00:09:26.880 --> 00:09:28.820 +videos.org? I think you've just answered + +00:09:30.040 --> 00:09:31.280 +[Speaker 0]: Yes, I think yes. + +00:09:28.820 --> 00:09:32.660 +[Speaker 1]: this, right? Right. Okay. + +00:09:32.660 --> 00:09:34.340 +So moving on to the other question. + +00:09:34.660 --> 00:09:37.200 +Do you have pre-made templates already along + +00:09:37.200 --> 00:09:38.820 +with the 1.el package? + +00:09:41.680 --> 00:09:47.940 +[Speaker 0]: So, yes and no. So, The answer is if we go to + +00:09:49.960 --> 00:09:55.520 +1.n, so this file, so the first are blah, + +00:09:55.520 --> 00:10:01.780 +blah, blah. How it works, + +00:10:01.780 --> 00:10:06.480 +so, okay, so you have the 1-hocs, + +00:10:07.200 --> 00:10:11.980 +which is what can translate the org parse + +00:10:11.980 --> 00:10:16.180 +tree into HTML. So this is for the content of + +00:10:16.260 --> 00:10:18.140 +each page. So this is very useful. + +00:10:18.480 --> 00:10:22.660 +Then we have a bunch of functions that help + +00:10:22.660 --> 00:10:24.360 +to render the function, + +00:10:26.040 --> 00:10:30.260 +each page. And you have a bunch of... + +00:10:31.360 --> 00:10:33.920 +Everything that starts with dash default is a + +00:10:33.920 --> 00:10:36.140 +render function. So there's no template, + +00:10:37.480 --> 00:10:40.520 +but each page that if you want, + +00:10:42.240 --> 00:10:46.400 +so that 1, the home, you can use 1 default + +00:10:46.400 --> 00:10:48.620 +home. So, if you want to list the page, + +00:10:48.740 --> 00:10:53.220 +you have that 1. For a page with no table of + +00:10:53.220 --> 00:10:55.840 +content, you use that thing. + +00:10:55.840 --> 00:10:58.260 +And if you go back to be short, + +00:10:58.260 --> 00:11:02.660 +if we go there, I put this like that. + +00:11:03.900 --> 00:11:09.880 +So this that we see here is the first inline + +00:11:09.960 --> 00:11:14.440 +of 1.org. By the way, it doesn't have to be + +00:11:14.440 --> 00:11:17.120 +called 1.org. It's just as you want, + +00:11:17.160 --> 00:11:19.380 +but maybe we can call it. + +00:11:20.740 --> 00:11:23.000 +So default, what was the other 1? + +00:11:23.220 --> 00:11:28.280 +Default with sidebar. Or is it default with + +00:11:28.280 --> 00:11:30.080 +sidebar or default? Yes, + +00:11:30.080 --> 00:11:35.380 +with sidebar. Sidebar, + +00:11:36.400 --> 00:11:37.740 +if it's worked correctly. + +00:11:39.140 --> 00:11:46.620 +Okay, so, okay, so I don't know why the CSS + +00:11:46.760 --> 00:11:49.700 +is not working correctly. + +00:11:50.740 --> 00:11:53.860 +[Speaker 1]: It's okay. It wouldn't be a live demo without + +00:11:53.860 --> 00:11:55.440 +problems occurring at some point. + +00:11:55.440 --> 00:11:55.940 +Okay. + +00:11:56.980 --> 00:12:01.240 +[Speaker 0]: But so maybe we can use this 1. + +00:12:02.940 --> 00:12:06.980 +Or we stuck. So we are going to use this 1, + +00:12:06.980 --> 00:12:16.020 +we've talked this 1, but maybe better in this + +00:12:16.020 --> 00:12:20.240 +1 that add something. So we build it again + +00:12:20.340 --> 00:12:32.180 +and now, oh, come on. We have it and we have + +00:12:32.180 --> 00:12:36.140 +the, sorry, if we have just default, + +00:12:37.820 --> 00:12:41.120 +we rebuild and now this is the default layer + +00:12:41.120 --> 00:12:44.360 +that if we do with table of content, + +00:12:46.060 --> 00:12:48.580 +you have it, you have the default content. + +00:12:48.620 --> 00:12:53.640 +So how to change, and they are not template. + +00:12:53.940 --> 00:12:57.760 +They are render functions that takes your + +00:13:00.300 --> 00:13:05.720 +page as a tree and render HTML string. + +00:13:06.260 --> 00:13:09.200 +So you can build any function that you want. + +00:13:10.600 --> 00:13:12.280 +So yes, I think that answers the question. + +00:13:12.280 --> 00:13:16.400 +There is no template like in other systems. + +00:13:17.780 --> 00:13:18.920 +[Speaker 1]: Cool, that makes sense. + +00:13:19.020 --> 00:13:21.000 +We have 2 more questions and then we'll need + +00:13:21.000 --> 00:13:22.200 +to go on a lunch break. + +00:13:22.200 --> 00:13:23.740 +I don't see anyone join the room. + +00:13:23.740 --> 00:13:25.640 +Remember, Tony has said that he would be + +00:13:25.640 --> 00:13:27.500 +willing to answer more questions during the + +00:13:27.500 --> 00:13:29.120 +lunch break, perhaps because it's not lunch + +00:13:29.120 --> 00:13:30.980 +break for you. Are you in Europe right now? + +00:13:32.360 --> 00:13:34.600 +So that's why for us, also for me it's very + +00:13:34.600 --> 00:13:37.660 +dark, but it's not lunch break for us, + +00:13:37.660 --> 00:13:39.440 +it's going to be dinner break soon actually. + +00:13:31.280 --> 00:13:42.840 +[Speaker 0]: Yes. Yes, exactly, so I'm just, + +00:13:44.020 --> 00:13:44.700 +I'm okay. + +00:13:45.580 --> 00:13:49.200 +[Speaker 1]: Right, Okay, so moving on to 1 of the last 2 + +00:13:49.200 --> 00:13:51.680 +questions. What additional features are there + +00:13:51.680 --> 00:13:53.660 +that you would like to add to 1.EL + +00:13:53.960 --> 00:13:54.780 +in the future? + +00:13:56.120 --> 00:14:00.440 +[Speaker 0]: Yes, there's only 1, which is a full text + +00:14:00.560 --> 00:14:05.500 +search done in a simple way. + +00:14:06.540 --> 00:14:10.020 +So I don't meet what simple way means, + +00:14:10.320 --> 00:14:12.380 +but when I see something complicated, + +00:14:12.620 --> 00:14:15.140 +it doesn't enter in 1 to me. + +00:14:15.400 --> 00:14:18.840 +So, but really, if you see that, + +00:14:19.120 --> 00:14:22.260 +I would like to have some way. + +00:14:22.300 --> 00:14:25.080 +So, this is the documentation and I would + +00:14:25.080 --> 00:14:27.480 +like to have some way to just have another + +00:14:27.500 --> 00:14:30.740 +function because we are not talking about + +00:14:31.300 --> 00:14:33.800 +those websites on the 1.L. + +00:14:34.440 --> 00:14:39.520 +It's not made for a big company or of your + +00:14:39.520 --> 00:14:42.440 +things, it's just for a random guy that have + +00:14:42.440 --> 00:14:46.200 +a blog or a few blogs and If you are a great + +00:14:46.200 --> 00:14:52.280 +blogger, maybe you are going to write 100 or + +00:14:53.040 --> 00:14:57.240 +200 or 300 pages in many years. + +00:14:57.240 --> 00:15:00.060 +So this enter in that category. + +00:15:00.060 --> 00:15:03.580 +So it's small. So I think it can, + +00:15:04.080 --> 00:15:07.580 +we could find a way to make a full text + +00:15:07.580 --> 00:15:10.160 +search. And that is simple. + +00:15:10.240 --> 00:15:12.780 +I don't need to, to go with, + +00:15:13.520 --> 00:15:16.620 +with solution like Algolia that is, + +00:15:16.620 --> 00:15:17.900 +that works super fine. + +00:15:17.900 --> 00:15:21.100 +But this is something that I don't control + +00:15:21.600 --> 00:15:26.200 +and I have to give them the data and I'm not + +00:15:26.200 --> 00:15:29.320 +against that but it's just that I think with + +00:15:29.320 --> 00:15:32.800 +a bit of work something can be done with full + +00:15:32.800 --> 00:15:35.600 +textile. But this is the only thing that I + +00:15:35.600 --> 00:15:36.980 +would like to add. + +00:15:38.720 --> 00:15:41.300 +[Speaker 1]: Very clear answer. Next question. + +00:15:41.580 --> 00:15:44.380 +Can you create navbars on a website and fancy + +00:15:44.380 --> 00:15:46.380 +things like carousels using 1.EL? + +00:15:46.800 --> 00:15:48.220 +Now carousels is just, + +00:15:48.260 --> 00:15:51.820 +I think, a fancy way to display pictures and + +00:15:51.820 --> 00:15:53.800 +please correct me whoever asked this + +00:15:53.800 --> 00:15:55.440 +question. Otherwise I see you taking notes + +00:15:55.440 --> 00:15:56.820 +for the answers, thank you very much. + +00:15:56.820 --> 00:15:58.740 +But if you could specify maybe carousels so + +00:15:58.740 --> 00:16:01.900 +that Tony and I may get a better idea. + +00:16:01.920 --> 00:16:03.340 +But still, first part of the question, + +00:16:03.340 --> 00:16:04.940 +can you create navbars on a website? + +00:16:05.980 --> 00:16:10.860 +[Speaker 0]: Yes. So if, for instance, + +00:16:10.900 --> 00:16:14.600 +you see there, to me, it's not a, + +00:16:14.600 --> 00:16:19.040 +it's a navbar. So you already have it. + +00:16:19.860 --> 00:16:23.080 +I didn't show that in the talk, + +00:16:23.080 --> 00:16:27.440 +but the CSS for the default function that + +00:16:27.440 --> 00:16:31.100 +works is responsive. So, + +00:16:31.720 --> 00:16:34.400 +out of the box, if you are using something, + +00:16:34.600 --> 00:16:37.540 +you will have an app bar done for you with + +00:16:37.540 --> 00:16:38.680 +all the pages that you have. + +00:16:38.680 --> 00:16:40.240 +So, if we go to install, + +00:16:40.920 --> 00:16:44.900 +we have that. And if we no longer have that, + +00:16:44.900 --> 00:16:49.960 +we have that sidebar there. + +00:16:50.220 --> 00:16:51.840 +And how it's done. So, + +00:16:52.660 --> 00:16:56.380 +the same way. I like simple fields that are + +00:16:56.380 --> 00:16:58.580 +flexible and I didn't want configuration + +00:16:58.860 --> 00:17:01.280 +because if you want to write the code to + +00:17:01.280 --> 00:17:03.480 +change something you just have to write code. + +00:17:03.480 --> 00:17:05.720 +So any function, render function, + +00:17:05.859 --> 00:17:08.760 +is yours. So you can do whatever you want and + +00:17:08.760 --> 00:17:11.520 +you enter the html that you want to render. + +00:17:11.520 --> 00:17:17.800 +So let's see how do we get that navigation + +00:17:17.920 --> 00:17:20.920 +bar that we have when we do that this is a + +00:17:20.920 --> 00:17:23.079 +CSS stuff. But when we click, + +00:17:23.099 --> 00:17:25.819 +this is a JS stuff that, + +00:17:27.040 --> 00:17:32.320 +so let's go to one.l And maybe this is a + +00:17:32.320 --> 00:17:35.660 +sidebar. Why that function because, + +00:17:36.300 --> 00:17:40.360 +okay. So when that function, + +00:17:40.680 --> 00:17:45.340 +so 1 default sidebar is 1 that is used to do + +00:17:45.340 --> 00:17:47.120 +some of the things at some point, + +00:17:47.120 --> 00:17:52.120 +what we return is a JackHTML that take a data + +00:17:52.120 --> 00:17:54.340 +structure and return a string. + +00:17:54.340 --> 00:17:57.280 +So this is your HTML. So you can see at the + +00:17:57.280 --> 00:18:00.780 +top you have the end, then you have the body, + +00:18:01.120 --> 00:18:06.080 +and if we go at the end we can add a script + +00:18:06.080 --> 00:18:08.640 +thing. So what we've seen with the sidebar + +00:18:08.920 --> 00:18:11.820 +it's just that much line of JavaScript. + +00:18:11.920 --> 00:18:17.440 +So this is the only JavaScript that there is + +00:18:17.440 --> 00:18:23.640 +to get what we have here when we do that. + +00:18:25.360 --> 00:18:29.500 +So you can add whatever you want. + +00:18:29.500 --> 00:18:33.420 +It's code and you're the master of that code. + +00:18:35.280 --> 00:18:38.600 +[Speaker 1]: Splendid, great. So to specify the carousel + +00:18:38.800 --> 00:18:39.860 +stuff that we mentioned before, + +00:18:39.860 --> 00:18:42.520 +it's pictures rolling or sliding from 1 to + +00:18:42.520 --> 00:18:44.620 +the other. It's kind of like having a + +00:18:44.620 --> 00:18:47.540 +gallery, imagine a fancy dynamic gallery + +00:18:47.540 --> 00:18:48.740 +where you can scroll pictures. + +00:18:48.740 --> 00:18:50.220 +Do you see what I'm talking about? + +00:18:50.380 --> 00:18:53.600 +[Speaker 0]: Yes, so that things would just be I think + +00:18:53.620 --> 00:18:57.620 +some javascript added somewhere and I can + +00:18:57.620 --> 00:18:59.280 +show you another website. + +00:18:59.440 --> 00:19:04.200 +So for instance if we go because there are + +00:19:04.200 --> 00:19:08.160 +not all the data of the website are not all + +00:19:08.160 --> 00:19:10.140 +public, but the website they are. + +00:19:10.140 --> 00:19:12.020 +So for instance, a mini-buffer, + +00:19:14.480 --> 00:19:18.880 +it's not a carousel, but at the home page, + +00:19:19.140 --> 00:19:20.900 +we can do whatever we want. + +00:19:22.660 --> 00:19:24.560 +Still those pages, still, + +00:19:24.560 --> 00:19:28.980 +this is only 1 file for each page. + +00:19:28.980 --> 00:19:31.580 +So if we click, we can get those things. + +00:19:31.720 --> 00:19:33.140 +It's just that when we, + +00:19:33.420 --> 00:19:35.040 +for the home page for instance, + +00:19:35.860 --> 00:19:38.040 +when we go back on that home page, + +00:19:38.160 --> 00:19:40.580 +we have the list at that point. + +00:19:40.580 --> 00:19:45.360 +So let's go back to that function that we're, + +00:19:45.540 --> 00:19:47.740 +so not that 1, maybe the 1, + +00:19:47.740 --> 00:19:50.760 +1 different, it's better because that 1 is + +00:19:50.760 --> 00:19:52.980 +simpler. So almost nothing happened. + +00:19:53.620 --> 00:19:55.520 +We have the list of the pages. + +00:19:56.240 --> 00:19:59.680 +So I can do whatever I want with that list. + +00:20:00.360 --> 00:20:05.400 +I can loop over and we can see that 1, + +00:20:06.340 --> 00:20:08.600 +that default home list of pages, + +00:20:08.600 --> 00:20:10.060 +so that list of the pages, + +00:20:10.260 --> 00:20:12.160 +and we see where is the list. + +00:20:13.200 --> 00:20:16.160 +Okay, so this is a, here we have a function + +00:20:17.680 --> 00:20:21.100 +that just, we want the pages, + +00:20:21.100 --> 00:20:24.100 +but I think we, but the home page, + +00:20:24.620 --> 00:20:28.120 +and we have that list, + +00:20:28.300 --> 00:20:33.020 +and then here we do that. + +00:20:37.740 --> 00:20:40.460 +And we get something listed, + +00:20:40.680 --> 00:20:44.060 +But then as you control everything that you + +00:20:44.060 --> 00:20:51.820 +do, you can pass any CSS class that you want + +00:20:51.820 --> 00:20:53.620 +to do those things. So, + +00:20:53.620 --> 00:20:55.020 +for instance, that div, + +00:20:55.260 --> 00:21:00.660 +add the class either. Yes, + +00:21:00.660 --> 00:21:02.840 +you can do. I don't remember the question, + +00:21:02.840 --> 00:21:05.660 +but I think I was answering the right 1. + +00:21:05.860 --> 00:21:07.260 +[Speaker 1]: No, no, you were answering it. + +00:21:07.260 --> 00:21:09.720 +It was about carousels and about having fancy + +00:21:09.720 --> 00:21:11.720 +display for image galleries. + +00:21:11.720 --> 00:21:12.660 +And I think you've answered. + +00:21:12.660 --> 00:21:14.120 +Basically, you just put your JavaScript, + +00:21:14.160 --> 00:21:16.100 +you embed it inside the code. + +00:21:16.620 --> 00:21:17.120 +[Speaker 0]: Exactly. + +00:21:18.620 --> 00:21:20.220 +[Speaker 1]: So, other question. Would there be an + +00:21:20.220 --> 00:21:22.860 +automated way to convert an existing HTML + +00:21:22.860 --> 00:21:24.880 +document into a JackHTML form? + +00:21:28.180 --> 00:21:32.060 +[Speaker 0]: Okay, so that 1, I don't have 1. + +00:21:32.200 --> 00:21:35.580 +It's another topic, but maybe there are some + +00:21:35.660 --> 00:21:37.940 +kind of session because some people that + +00:21:37.940 --> 00:21:41.620 +know, that are used to Lisp, + +00:21:43.080 --> 00:21:45.580 +common Lisp or Clojure or other, + +00:21:46.300 --> 00:21:49.460 +Jack-html, that function, + +00:21:50.740 --> 00:21:53.680 +is something classic, but I didn't find, + +00:21:53.680 --> 00:22:00.840 +So I wrote it because I didn't find it + +00:22:00.840 --> 00:22:04.520 +already done the way I want for Emacs. + +00:22:06.040 --> 00:22:08.980 +And this is something for E-cup closure. + +00:22:09.640 --> 00:22:13.260 +So really I take, it's not that I take my + +00:22:13.260 --> 00:22:15.060 +impression, just that when you have something + +00:22:15.060 --> 00:22:20.140 +that exists and you look at how it's done. + +00:22:20.640 --> 00:22:22.720 +So you have a eCup for Crusher, + +00:22:25.160 --> 00:22:26.640 +does the same thing that HTML. + +00:22:26.660 --> 00:22:32.140 +It's more that I do a Jack HTML do what eCup + +00:22:32.440 --> 00:22:37.160 +does, but maybe they do it a better way. + +00:22:37.800 --> 00:22:41.600 +So I think maybe in that community, + +00:22:42.320 --> 00:22:46.320 +it might already exist something that go from + +00:22:46.320 --> 00:22:52.440 +HTML to Jack. So you can see, + +00:22:53.640 --> 00:22:56.620 +is it big enough? I will make it big enough. + +00:22:57.626 --> 00:22:59.060 +[Speaker 1]: It's good enough, don't worry. + +00:22:56.820 --> 00:23:01.420 +[Speaker 0]: So if you see- So you have the hash HTML and + +00:23:01.420 --> 00:23:04.200 +you see those things. There are things that I + +00:23:04.200 --> 00:23:05.460 +couldn't do, for instance, + +00:23:05.460 --> 00:23:09.280 +for the ID, I couldn't use the hash in the + +00:23:09.280 --> 00:23:14.760 +name of, of how do we name that, + +00:23:14.760 --> 00:23:18.480 +of the keywords, because it's used for + +00:23:18.480 --> 00:23:21.180 +something else in a Emacs Lisp. + +00:23:21.180 --> 00:23:25.020 +So, I use... Anyway, so you see that you have + +00:23:25.520 --> 00:23:30.260 +that things but in Emacs we don't have the + +00:23:30.260 --> 00:23:34.960 +map with that syntax. We have a hash map but + +00:23:34.960 --> 00:23:37.120 +they are not with that syntax and I wanted + +00:23:37.120 --> 00:23:46.080 +that syntax so we use only list and Here we + +00:23:46.080 --> 00:23:48.660 +have an array with a hash map. + +00:23:49.200 --> 00:23:52.120 +So let me just say, so the question was, + +00:23:52.360 --> 00:23:54.100 +does it exist something? + +00:23:55.240 --> 00:23:58.680 +I think not, but it could be built or maybe + +00:23:58.680 --> 00:24:01.600 +exist for E-Cups, you are interested. + +00:24:03.240 --> 00:24:04.860 +[Speaker 1]: Okay, great. I think that answers the + +00:24:04.860 --> 00:24:07.840 +question perfectly. And our final question, + +00:24:08.440 --> 00:24:12.160 +does this or you use any other Emacs packages + +00:24:12.240 --> 00:24:14.180 +for your packages slash website, + +00:24:14.840 --> 00:24:16.740 +example, or publish? Like, + +00:24:17.020 --> 00:24:17.960 +rephrasing the question, + +00:24:17.960 --> 00:24:20.820 +do you use it for your own personal usage or + +00:24:20.820 --> 00:24:22.320 +do you interact with other packages? + +00:24:24.120 --> 00:24:26.180 +[Speaker 0]: I'm not sure I understand the question. + +00:24:26.640 --> 00:24:28.960 +Can you please repeat the question? + +00:24:29.820 --> 00:24:32.460 +[Speaker 1]: Yes, I will reread it as it is written and I + +00:24:32.460 --> 00:24:34.760 +will leave you interpret it however you want. + +00:24:34.760 --> 00:24:39.220 +Thank you. Does this or you use any other + +00:24:39.220 --> 00:24:43.060 +Emacs packages for your package slash website + +00:24:43.840 --> 00:24:45.100 +like org-publish? + +00:24:46.620 --> 00:24:49.340 +[Speaker 0]: No, no, no. I don't use nothing. + +00:24:49.660 --> 00:24:54.640 +I just accept dependency of 1.n. + +00:24:57.660 --> 00:25:01.000 +So, we are in 1.n and we go at the top and we + +00:25:01.000 --> 00:25:03.980 +see that those are the dependencies. + +00:25:04.820 --> 00:25:09.520 +I use nothing. So what I do is that I + +00:25:09.520 --> 00:25:12.420 +publish, I just generate the public + +00:25:12.620 --> 00:25:15.040 +directory. So if we go to public, + +00:25:16.500 --> 00:25:18.240 +this 1, no, I don't want this 1. + +00:25:18.240 --> 00:25:23.240 +I want to go to the website of the video. + +00:25:23.620 --> 00:25:27.400 +If we see here, everything is rendered in the + +00:25:27.400 --> 00:25:36.360 +public. Any services, if you use your own + +00:25:37.380 --> 00:25:39.280 +server and you save those files, + +00:25:39.280 --> 00:25:40.460 +you have your website. + +00:25:40.580 --> 00:25:42.580 +So I don't use anything else. + +00:25:42.580 --> 00:25:49.700 +I just git push and I'm using Netlify as a + +00:25:49.700 --> 00:25:52.320 +service to run to save my files, + +00:25:52.580 --> 00:25:54.860 +but you can use anything you want. + +00:25:55.900 --> 00:25:58.620 +Because your website is really what is into a + +00:25:58.620 --> 00:26:00.460 +public. So, this is another, + +00:26:01.360 --> 00:26:03.340 +It's not the concern of 1.L + +00:26:04.860 --> 00:26:07.180 +to answer. I'm not using org.publish. + +00:26:08.960 --> 00:26:10.900 +[Speaker 1]: Cool, great. Well, thank you. + +00:26:10.900 --> 00:26:13.000 +I think the question was also about other + +00:26:13.000 --> 00:26:16.500 +things, but I think If the person wants a + +00:26:16.500 --> 00:26:18.340 +more clear answer to their question, + +00:26:18.820 --> 00:26:21.260 +feel free to clarify the question and Tony + +00:26:21.260 --> 00:26:22.960 +might be able to answer it later on. + +00:26:22.960 --> 00:26:24.220 +Alright Tony, I think that's all the + +00:26:24.220 --> 00:26:25.760 +questions we had. Thank you so much for + +00:26:25.760 --> 00:26:27.680 +taking the time not only to present Adimax + +00:26:27.680 --> 00:26:29.240 +Kant, but also for answering all the + +00:26:29.240 --> 00:26:30.460 +questions people had. + +00:26:31.220 --> 00:26:34.080 +[Speaker 0]: Thank you to everybody participating, + +00:26:34.540 --> 00:26:38.000 +organizing and thank you for all those + +00:26:38.000 --> 00:26:42.180 +questions and you can send me any emails if + +00:26:42.180 --> 00:26:45.120 +you have a question and open the issues if + +00:26:45.180 --> 00:26:47.720 +it's not working the way it should work for + +00:26:47.720 --> 00:26:49.840 +you. Please send me those things. + +00:26:49.840 --> 00:26:50.900 +Thank you, everybody. + +00:26:51.940 --> 00:26:54.260 +[Speaker 1]: Splendid, thank you. And before, + +00:26:54.280 --> 00:26:56.140 +so right now we're gonna go on a lunch break. + +00:26:56.140 --> 00:26:58.660 +We'll be back in about 40 minutes for the + +00:26:58.660 --> 00:27:01.240 +talk called Emacs Turbocharges My Writing. + +00:27:01.300 --> 00:27:02.540 +And I will not tell you more. + +00:27:02.540 --> 00:27:04.280 +You can look at the talk page to see a little + +00:27:04.280 --> 00:27:06.340 +bit of a synopsis but otherwise keep the + +00:27:06.340 --> 00:27:08.900 +surprise. So have a good lunch or have a good + +00:27:08.900 --> 00:27:11.760 +dinner if you are in dinner-friendly times + +00:27:11.880 --> 00:27:13.180 +and I will see you afterwards. + +00:27:13.180 --> 00:27:14.180 +Thank you again, Tony. + +00:27:14.860 --> 00:27:15.600 +[Speaker 0]: See you. + +00:27:17.960 --> 00:27:20.320 +[Speaker 1]: All right. Let me just close everything. + +00:27:29.080 --> 00:27:30.480 +All right, got it. OK, + +00:27:30.480 --> 00:27:31.400 +so thank you so much, Tony. + +00:27:31.400 --> 00:27:33.520 +I just had to clear everything up on the + +00:27:33.520 --> 00:27:35.240 +stream. I'm going to need to... + +00:27:36.160 --> 00:27:39.000 +Sorry. I'm going to stop. diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt new file mode 100644 index 00000000..ce9fc468 --- /dev/null +++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt @@ -0,0 +1,38 @@ +WEBVTT + + +00:00:00.000 --> 00:00:23.999 +Introduction + +00:00:24.000 --> 00:02:02.199 +Documentation + +00:02:02.200 --> 00:02:27.399 +Starting a new project + +00:02:27.400 --> 00:03:19.759 +Building + +00:03:19.760 --> 00:04:32.159 +Side by side + +00:04:32.160 --> 00:05:44.679 +Writing a render function + +00:05:44.680 --> 00:06:41.719 +New page + +00:06:41.720 --> 00:08:39.999 +Linking between pages + +00:08:40.000 --> 00:10:23.159 +CSS + +00:10:23.160 --> 00:19:03.199 +How to write a render function + +00:19:03.200 --> 00:20:37.159 +Rendering content + +00:20:37.160 --> 00:22:17.840 +Rendering CSS diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt new file mode 100644 index 00000000..b6e0dfd6 --- /dev/null +++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt @@ -0,0 +1,1102 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.159 +Hi, everybody. Welcome to the EmacsConf 2023. + +00:00:04.160 --> 00:00:06.399 +I hope you're doing well and you're having fun. + +00:00:06.400 --> 00:00:08.359 +I'm Tony Aldon, and in this talk, + +00:00:08.360 --> 00:00:11.159 +we are going to see how to build a static website + +00:00:11.160 --> 00:00:14.519 +with the package one.el that I wrote. + +00:00:14.520 --> 00:00:17.599 +But before we start, I'd like to thank + +00:00:17.600 --> 00:00:20.559 +all the people who organized that conference, + +00:00:20.560 --> 00:00:23.999 +so thank you all for the great work. + +NOTE Documentation + +00:00:24.000 --> 00:00:27.719 +Now let's jump into the documentation of one.el, + +00:00:27.720 --> 00:00:31.679 +which is built with one.el. In the install page, + +00:00:31.680 --> 00:00:33.079 +we can see that we have a sidebar + +00:00:33.080 --> 00:00:35.559 +with all of the pages in the documentation, + +00:00:35.560 --> 00:00:39.039 +some buttons to switch between pages, + +00:00:39.040 --> 00:00:41.959 +and we also have a table of contents + +00:00:41.960 --> 00:00:45.119 +for some of the pages if we need it. + +00:00:45.120 --> 00:00:49.439 +Now let's jump into one.el repository + +00:00:49.440 --> 00:00:52.559 +and see why I like how it is implemented, + +00:00:52.560 --> 00:00:53.839 +because the website that we've seen, + +00:00:53.840 --> 00:00:55.959 +the documentation, is just one file. + +00:00:55.960 --> 00:01:00.719 +So this is that file, with the headline of level 1 + +00:01:00.720 --> 00:01:03.279 +being the web pages. + +00:01:03.280 --> 00:01:06.079 +There needs to be a web page to have the property, + +00:01:06.080 --> 00:01:09.239 +the Org property `:ONE:`, set to a render function. + +00:01:09.240 --> 00:01:11.799 +We are going to see how they work after. + +00:01:11.800 --> 00:01:14.639 +And the `:CUSTOM_ID:`, the value of the `:CUSTOM_ID:`, + +00:01:14.640 --> 00:01:17.519 +is the path of the page. So really, + +00:01:17.520 --> 00:01:20.079 +the website that we have on the left + +00:01:20.080 --> 00:01:24.639 +is this file. So to me, this is something simple like that + +00:01:24.640 --> 00:01:25.919 +that I wanted. + +00:01:25.920 --> 00:01:29.839 +And another thing is that when we want to + +00:01:29.840 --> 00:01:33.559 +change something with one.el, + +00:01:33.560 --> 00:01:36.679 +we don't change configuration + +00:01:36.680 --> 00:01:38.879 +or write JavaScript or anything else. + +00:01:38.880 --> 00:01:43.479 +We just write Emacs Lisp code or a bit of CSS. + +00:01:43.480 --> 00:01:45.919 +So this is what we have with a minibuffer website + +00:01:45.920 --> 00:01:47.959 +that is built with one.el, + +00:01:47.960 --> 00:01:50.279 +and the only thing that I had to do + +00:01:50.280 --> 00:01:51.919 +is to write Emacs Lisp code. + +00:01:51.920 --> 00:01:55.119 +So those are two things: the content in one file, + +00:01:55.120 --> 00:01:58.679 +and if we want to change the layout, CSS and Emacs Lisp. + +00:01:58.680 --> 00:02:02.199 +This is one.el. + +NOTE Starting a new project + +00:02:02.200 --> 00:02:03.879 +Now let's go to our node, + +00:02:03.880 --> 00:02:07.159 +and we are going to start a new project. + +00:02:07.160 --> 00:02:09.599 +How do we do that? + +00:02:09.600 --> 00:02:11.359 +In a new empty directory, + +00:02:11.360 --> 00:02:15.159 +so new project directory, + +00:02:15.160 --> 00:02:19.559 +we call the function `one-default-new-project`. + +00:02:19.560 --> 00:02:22.319 +We have that project, which is one file with the + +00:02:22.320 --> 00:02:25.759 +five default type of pages that we have, + +00:02:25.760 --> 00:02:27.399 +and one CSS file. + +NOTE Building + +00:02:27.400 --> 00:02:29.439 +How to build that website? + +00:02:29.440 --> 00:02:32.839 +Okay, so we call the function `one-build`. + +00:02:32.840 --> 00:02:33.959 +This builds the website. + +00:02:33.960 --> 00:02:36.799 +We jump into a terminal, and now if we run tree, + +00:02:36.800 --> 00:02:39.799 +we can see that the website + +00:02:39.800 --> 00:02:42.679 +has been built in the public directory + +00:02:42.680 --> 00:02:45.559 +with the information in the Org properties + +00:02:45.560 --> 00:02:50.159 +and the content of one.org files. Okay, cool. + +00:02:50.160 --> 00:02:53.919 +Now we are going to render that in the browser + +00:02:53.920 --> 00:02:58.079 +to serve that, and to do that + +00:02:58.080 --> 00:03:01.159 +we can use browser-sync utility, + +00:03:01.160 --> 00:03:02.559 +which is cool with that, + +00:03:02.560 --> 00:03:06.419 +in that each time we are going to... + +00:03:06.420 --> 00:03:07.860 +So we go into public... + +00:03:07.861 --> 00:03:11.759 +Each time we are going to change and rebuild the website, + +00:03:11.760 --> 00:03:14.319 +this will be reloaded in the browser. + +00:03:14.320 --> 00:03:19.759 +So one, this is that website, is now this one. + +NOTE Side by side + +00:03:19.760 --> 00:03:22.559 +So let's put them side by side. + +00:03:22.560 --> 00:03:26.319 +We go there, and we may do something like that. + +00:03:26.320 --> 00:03:30.239 +So one.el, the home page, so our custom ID + +00:03:30.240 --> 00:03:31.999 +with the value just a /, + +00:03:32.000 --> 00:03:36.079 +is rendered with that function `one-default-home`, + +00:03:36.080 --> 00:03:37.239 +which is a render function, + +00:03:37.240 --> 00:03:41.559 +and the first argument of that function is the headline, + +00:03:41.560 --> 00:03:45.599 +this current headline. So, parsed with the Org parser, + +00:03:45.600 --> 00:03:48.359 +and then we do the thing that we want to do, + +00:03:48.360 --> 00:03:52.079 +and the render function returns an HTML string + +00:03:52.080 --> 00:03:57.199 +that is used to build the pages at the custom ID. + +00:03:57.200 --> 00:04:03.279 +Now we can go to another web page, the second web page, + +00:04:03.280 --> 00:04:05.799 +and we see that there is a different value + +00:04:05.800 --> 00:04:10.119 +for the `:ONE:` property, so another render function, + +00:04:10.120 --> 00:04:13.999 +and the custom ID at the path of that page. + +00:04:14.000 --> 00:04:16.399 +So we can see that in the browser. + +00:04:16.400 --> 00:04:19.599 +So this is `/blog/default-home-list-pages`. + +00:04:19.600 --> 00:04:23.479 +So this is that. Now there are three other pages, + +00:04:23.480 --> 00:04:25.679 +but we can list that like that. + +00:04:25.680 --> 00:04:28.359 +We do a grep in that files, + +00:04:28.360 --> 00:04:32.159 +and we see the different default render function. + +NOTE Writing a render function + +00:04:32.160 --> 00:04:34.839 +In the second part of that talk, + +00:04:34.840 --> 00:04:38.399 +we are going to write a render function. + +00:04:38.400 --> 00:04:41.079 +So we are going to see that after. + +00:04:41.080 --> 00:04:47.079 +Now maybe we can go to the default page, + +00:04:47.080 --> 00:04:50.959 +and let's modify that default page. + +00:04:50.960 --> 00:04:54.639 +We see that this uses `one-default` render function, + +00:04:54.640 --> 00:04:56.999 +and now let's write "foo bar baz". + +00:04:57.000 --> 00:05:00.599 +We want to modify the content. We save. + +00:05:00.600 --> 00:05:10.439 +We call again one-build distribute, + +00:05:10.440 --> 00:05:16.199 +and we see here we have it: foo bar baz in the default page. + +00:05:16.200 --> 00:05:19.759 +Now we can use... When we use one-build, + +00:05:19.760 --> 00:05:23.799 +this also copies the files in the asset directory + +00:05:23.800 --> 00:05:25.919 +into the public directory. + +00:05:25.920 --> 00:05:28.039 +This is not always what we want to do. + +00:05:28.040 --> 00:05:29.879 +Sometimes we just change the content, + +00:05:29.880 --> 00:05:34.079 +and for that we can use `one-render-page-at-point`. + +00:05:34.080 --> 00:05:39.479 +If we use that one, this just renders the current page. + +00:05:39.480 --> 00:05:44.679 +So we see that we have again "foo bar baz" in the page. + +NOTE New page + +00:05:44.680 --> 00:05:47.919 +Now let's add a new page. To add a new page, + +00:05:47.920 --> 00:05:52.199 +we just have to copy one of them, maybe the default page. + +00:05:52.200 --> 00:05:58.319 +We are going to call it maybe emacsconf-2023. + +00:05:58.320 --> 00:06:01.839 +We still use one default render function to render it, + +00:06:01.840 --> 00:06:04.519 +but we want to change the path. + +00:06:04.520 --> 00:06:08.519 +So the custom ID, we are going to give it /blog + +00:06:08.520 --> 00:06:12.639 +and emacsconf-2023 with a slash at the end, + +00:06:12.640 --> 00:06:18.359 +and the content... We no longer want this one, + +00:06:18.360 --> 00:06:22.039 +but maybe "We're having a lot of fun". + +00:06:22.040 --> 00:06:28.599 +So we save that, we rebuild with `one-build` this, + +00:06:28.600 --> 00:06:33.599 +and now we can look at the top + +00:06:33.600 --> 00:06:39.279 +and pass it the path `/blog/emacsconf-2023/. + +00:06:39.280 --> 00:06:41.719 +So we have that new page. + +NOTE Linking between pages + +00:06:41.720 --> 00:06:44.159 +Now, how to link between pages? + +00:06:44.160 --> 00:06:46.079 +So we are going to write a link + +00:06:46.080 --> 00:06:47.999 +that links to the last page, + +00:06:48.000 --> 00:06:50.519 +so a page with the table of contents. + +00:06:50.520 --> 00:06:54.399 +To do that, we just have to use the value of the custom ID, + +00:06:54.400 --> 00:06:58.479 +and to link to a custom ID inside Org mode, + +00:06:58.480 --> 00:07:03.079 +we use the hashtag. We pass it here, + +00:07:03.080 --> 00:07:07.279 +then we pass it in the description, + +00:07:07.280 --> 00:07:09.799 +so TOC and sidebar, + +00:07:09.800 --> 00:07:12.799 +and now if we press RET inside Emacs, + +00:07:12.800 --> 00:07:15.839 +we jump to that page. So this is cool. + +00:07:15.840 --> 00:07:17.719 +Now we build again, + +00:07:17.720 --> 00:07:19.919 +and we see that we are going to have + +00:07:19.920 --> 00:07:22.279 +the link to the page in the browser. + +00:07:22.280 --> 00:07:26.999 +So this link to the default page with a table of contents, + +00:07:27.000 --> 00:07:29.879 +fine, but maybe what we want to do + +00:07:29.880 --> 00:07:32.999 +is to link to the "Headline foo" in that page. + +00:07:33.000 --> 00:07:34.679 +How do we do that? + +00:07:34.680 --> 00:07:36.919 +We do that by adding a custom id. + +00:07:36.920 --> 00:07:41.639 +We keep the first part, + +00:07:41.640 --> 00:07:43.759 +which is the page where we are, + +00:07:43.760 --> 00:07:46.359 +and we added hash with foo, + +00:07:46.360 --> 00:07:50.799 +so that Headline foo will have the ID "foo" + +00:07:50.800 --> 00:07:57.599 +in its H2 tag, HTML tag, + +00:07:57.600 --> 00:08:05.080 +and now we can link it here with still custom ID, so "foo", + +00:08:05.081 --> 00:08:10.539 +and now it's headline... headline with what? + +00:08:10.540 --> 00:08:14.799 +Headline foo in TOC page. So we have that. + +00:08:14.800 --> 00:08:19.159 +If we press RET, we jump to that headline in Emacs. + +00:08:19.160 --> 00:08:20.919 +So this is super cool. + +00:08:20.920 --> 00:08:23.559 +And now, if we call `one-build`, + +00:08:23.560 --> 00:08:25.799 +we see in the browser + +00:08:25.800 --> 00:08:26.799 +that we have a new link, + +00:08:26.800 --> 00:08:30.319 +and this link linked to that specific headline. + +00:08:30.320 --> 00:08:34.439 +So this is cool. So we have the link between pages + +00:08:34.440 --> 00:08:36.319 +that works inside Emacs + +00:08:36.320 --> 00:08:39.999 +and that works well also in the browser. + +NOTE CSS + +00:08:40.000 --> 00:08:44.519 +Now let's say that we want to change the CSS. + +00:08:44.520 --> 00:08:50.719 +So we've added a page with specific content, + +00:08:50.720 --> 00:08:51.719 +and we've done some links. + +00:08:51.720 --> 00:08:55.599 +Now we want to modify the CSS file + +00:08:55.600 --> 00:09:00.279 +which is in the asset directory, the one.css. + +00:09:00.280 --> 00:09:02.959 +Each time we change it, + +00:09:02.960 --> 00:09:05.199 +we want to have live reload + +00:09:05.200 --> 00:09:10.799 +that copy that file into the public directory, + +00:09:10.800 --> 00:09:14.659 +so the same. We go back here, + +00:09:14.660 --> 00:09:18.879 +and there is a utility called `entr`, e-n-t-r. + +00:09:18.880 --> 00:09:26.559 +Yes, this one, and using that, so a new terminal, + +00:09:26.560 --> 00:09:28.679 +we are at the beginning. + +00:09:28.680 --> 00:09:32.359 +This will watch the changing in what.css, + +00:09:32.360 --> 00:09:35.519 +and `entr` will copy it into the public directory + +00:09:35.520 --> 00:09:38.519 +each time this changes. Let's go back to Org mode, + +00:09:38.520 --> 00:09:43.319 +because I chose some color that is cool, + +00:09:43.320 --> 00:09:47.799 +and now we go back to the CSS files. + +00:09:47.800 --> 00:09:53.639 +We put them side by side, and maybe we go to the new page + +00:09:53.640 --> 00:09:55.639 +that we were changing, + +00:09:55.640 --> 00:10:00.999 +and we are going to change the body, + +00:10:01.000 --> 00:10:03.959 +the background color, and maybe we can change + +00:10:03.960 --> 00:10:06.119 +with the color that we've just taken. + +00:10:06.120 --> 00:10:10.219 +So we save, and we see the changing happening. + +00:10:10.220 --> 00:10:14.679 +We can do it again with the color + +00:10:14.680 --> 00:10:16.119 +that we have at the beginning, + +00:10:16.120 --> 00:10:18.879 +and this is the user experience + +00:10:18.880 --> 00:10:23.159 +that we have with one.el and the default function. + +NOTE How to write a render function + +00:10:23.160 --> 00:10:26.279 +Now that we've seen that, + +00:10:26.280 --> 00:10:30.460 +we've done all of that part, + +00:10:30.461 --> 00:10:31.919 +and now we are going to see + +00:10:31.920 --> 00:10:34.279 +how to write a render function. + +00:10:34.280 --> 00:10:36.759 +So let's go. The render function, + +00:10:36.760 --> 00:10:41.479 +so one.org, we remember these are the functions + +00:10:41.480 --> 00:10:43.399 +that are in the `:ONE:` Org property. + +00:10:43.400 --> 00:10:45.599 +So we are going to remove that part. + +00:10:45.600 --> 00:10:49.439 +We no longer want that one. We don't want this. + +00:10:49.440 --> 00:10:52.439 +We just keep that. `one-default`, + +00:10:52.440 --> 00:10:55.839 +we want this to be the home of our website. + +00:10:55.840 --> 00:10:57.659 +We have that. We rebuild, + +00:10:57.660 --> 00:11:05.079 +and now we just have one page, and we have that page. + +00:11:05.080 --> 00:11:10.679 +We are going to add another page that we call "foo", + +00:11:10.680 --> 00:11:15.519 +and here we pass it the render function foo + +00:11:15.520 --> 00:11:20.319 +that doesn't exist yet, and we are going to write it. + +00:11:20.320 --> 00:11:27.159 +So maybe with some content, and we copy, copy. + +00:11:27.160 --> 00:11:33.159 +We have that. We call it "bar" to have something to show. + +00:11:33.160 --> 00:11:39.959 +So here we are. If we build that, so we build it, + +00:11:39.960 --> 00:11:42.599 +and we see in the echo area at the bottom + +00:11:42.600 --> 00:11:43.719 +that we have an error "void", + +00:11:43.720 --> 00:11:46.799 +which is because the function foo doesn't exist. + +00:11:46.800 --> 00:11:48.799 +So now we are going to write that function, + +00:11:48.800 --> 00:11:53.359 +and we write it in the onerc.el + +00:11:53.360 --> 00:11:57.199 +where we put any Elisp code + +00:11:57.200 --> 00:11:58.359 +that we want to be run + +00:11:58.360 --> 00:12:03.479 +each time we build the website or render the pages. + +00:12:03.480 --> 00:12:06.519 +So we want a render function called foo. + +00:12:06.520 --> 00:12:09.999 +So that takes three arguments: page-tree, pages, and global. + +00:12:10.000 --> 00:12:16.639 +We are going to look at the page-tree in our case, + +00:12:16.640 --> 00:12:19.759 +and the render function return an HTML string. + +00:12:19.760 --> 00:12:22.319 +This is the thing that we want from them. + +00:12:22.320 --> 00:12:25.159 +So maybe foo, bar, and baz. + +00:12:25.160 --> 00:12:28.159 +Now this is something well-defined, + +00:12:28.160 --> 00:12:34.199 +and with one.org here, the file, we rebuild this, + +00:12:34.200 --> 00:12:39.619 +and we can see now in the browser, + +00:12:39.620 --> 00:12:42.959 +if we go to the page foo, that we have "foo bar baz". + +00:12:42.960 --> 00:12:45.459 +So this is exactly what we have rendered + +00:12:45.460 --> 00:12:47.879 +by the render function that is set, + +00:12:47.880 --> 00:12:51.599 +we see at the bottom in the one.org file, + +00:12:51.600 --> 00:12:56.119 +in the `:ONE:` property. Now this is HTML, so we can pass it, + +00:12:56.120 --> 00:13:00.879 +for instance, h1, the tag h1. + +00:13:00.880 --> 00:13:06.039 +We save that file. We go in the one.org file, + +00:13:06.040 --> 00:13:10.399 +we build again, and now we see that we have an h1. + +00:13:10.400 --> 00:13:14.839 +Okay, this is interesting, but if we would have to + +00:13:14.840 --> 00:13:18.119 +build this function with a string like that, + +00:13:18.120 --> 00:13:22.319 +this is boring and not the best way. + +00:13:22.320 --> 00:13:24.639 +So we can use the library Jack, + +00:13:24.640 --> 00:13:27.588 +which offers function `jack-html` + +00:13:27.589 --> 00:13:31.580 +that takes some data structure, + +00:13:31.581 --> 00:13:34.179 +for instance, an h1, a nested list + +00:13:34.180 --> 00:13:38.479 +that represents the HTML that we want to render, + +00:13:38.480 --> 00:13:41.039 +and transform it into an HTML string. + +00:13:41.040 --> 00:13:43.959 +So we have that, we saved, + +00:13:43.960 --> 00:13:48.279 +we rebuild in the one.org file with `one-build`, + +00:13:48.280 --> 00:13:55.399 +and we see now that this has been built using `jack-html`. + +00:13:55.400 --> 00:13:59.159 +Now what do we want to do? + +00:13:59.160 --> 00:14:01.999 +Okay, see, the thing that we want to do + +00:14:02.000 --> 00:14:04.999 +is to understand page-tree. So what is page-tree? + +00:14:05.000 --> 00:14:07.599 +page-tree is when we go to one.org, + +00:14:07.600 --> 00:14:09.479 +this is really for foo, + +00:14:09.480 --> 00:14:17.919 +this is the parsed data of that headline, that page. + +00:14:17.920 --> 00:14:23.119 +So this is done with, no, not this one, we use, + +00:14:23.120 --> 00:14:27.879 +so in the mini-buffer, we use `one-parse-buffer`, + +00:14:27.880 --> 00:14:29.999 +and we see this is the data + +00:14:30.000 --> 00:14:33.359 +that we have with that function, first headline, + +00:14:33.360 --> 00:14:34.439 +and the second headline, + +00:14:34.440 --> 00:14:38.199 +this is the parse tree that we have there. + +00:14:38.200 --> 00:14:40.719 +This is that data that is passed to + +00:14:40.720 --> 00:14:45.279 +the `foo` render function. One thing that is cool, + +00:14:45.280 --> 00:14:51.599 +so I see here, is that as we are dealing with data, + +00:14:51.600 --> 00:14:53.359 +we have all the data of the website, + +00:14:53.360 --> 00:14:57.360 +we can show them in the web page. Now, why not? + +00:14:57.361 --> 00:15:00.079 +It's great to write the website + +00:15:00.080 --> 00:15:02.839 +and also to debug if we need to debug at some point. + +00:15:02.840 --> 00:15:10.279 +So let's render page-tree directly in the page, one.org, + +00:15:10.280 --> 00:15:15.679 +and we rebuild, we reload, and we see this is what we have, + +00:15:15.680 --> 00:15:17.159 +this is the data that we have, okay? + +00:15:17.160 --> 00:15:20.599 +And we have, for instance, the `:raw-value` with this "foo", + +00:15:20.600 --> 00:15:22.519 +which is the headline, + +00:15:22.520 --> 00:15:27.039 +the content of the headline in a raw format, + +00:15:27.040 --> 00:15:29.719 +and we also have custom, + +00:15:29.720 --> 00:15:33.839 +so here we have the `:CUSTOM_ID: foo` and `:ONE: foo`, + +00:15:33.840 --> 00:15:34.999 +which are the properties, + +00:15:35.000 --> 00:15:40.359 +and when we are inside those render functions, + +00:15:40.360 --> 00:15:43.240 +we have access to this. + +00:15:43.241 --> 00:15:46.799 +So let's, what can we do now, is to, + +00:15:46.800 --> 00:15:48.639 +let's get the row value. + +00:15:48.640 --> 00:15:51.759 +So we no longer need that. + +00:15:51.760 --> 00:15:54.839 +Maybe we can do something like that. + +00:15:54.840 --> 00:16:03.999 +We create now HTML. In HTML, we want the body, + +00:16:04.000 --> 00:16:08.039 +we want an h1 tag, and we are going to pass it + +00:16:08.040 --> 00:16:10.559 +a title, and in the title, + +00:16:10.560 --> 00:16:13.839 +this is something that we let-bind here, + +00:16:13.840 --> 00:16:15.599 +so the value of the title, + +00:16:15.600 --> 00:16:24.719 +we get it with `org-element-property`, + +00:16:24.720 --> 00:16:29.759 +and the `:raw-value`, so this is the property that we want, + +00:16:29.760 --> 00:16:34.039 +so `raw-value`, and from which data we want that, + +00:16:34.040 --> 00:16:40.599 +to page-tree. So now, let's have one.org at the bottom, + +00:16:40.600 --> 00:16:46.039 +we build again, and now we reload, + +00:16:46.040 --> 00:16:50.839 +and we see that we get a foo. This is that title, + +00:16:50.840 --> 00:16:56.559 +the value of that variable in that data structure. + +00:16:56.560 --> 00:17:00.319 +Now, let's get those two properties. + +00:17:00.320 --> 00:17:03.039 +How do we get those two properties? + +00:17:03.040 --> 00:17:07.199 +The same way, `:ONE:` that we call one, so raw-value, + +00:17:07.200 --> 00:17:11.639 +we change that for `:ONE`, the other raw-value + +00:17:11.640 --> 00:17:19.359 +for `:CUSTOM_ID`, we change the title for `custom-id`, + +00:17:19.360 --> 00:17:23.559 +and what we want now is for instance, + +00:17:23.560 --> 00:17:30.159 +yes, h1 again, and org properties. + +00:17:30.160 --> 00:17:34.799 +We add the org properties, and let's do a list, + +00:17:34.800 --> 00:17:39.799 +another list, with li element, one, + +00:17:39.800 --> 00:17:43.159 +we want that value, and that value will be + +00:17:43.160 --> 00:17:45.759 +the value of the variable one. + +00:17:45.760 --> 00:17:52.479 +We can do that with also custom-id, + +00:17:52.480 --> 00:17:56.119 +and now, in the one that we have to save, + +00:17:56.120 --> 00:17:59.439 +and in one of our files, not like that, + +00:17:59.440 --> 00:18:03.199 +we rebuild that, and we see + +00:18:03.200 --> 00:18:05.799 +that we can get those properties. + +00:18:05.800 --> 00:18:06.999 +This is super cool. + +00:18:07.000 --> 00:18:09.159 +As we are dealing with data, + +00:18:09.160 --> 00:18:11.719 +and we have the information of the whole website, + +00:18:11.720 --> 00:18:14.039 +we can do whatever we want, + +00:18:14.040 --> 00:18:16.599 +because we have access to that data. + +00:18:16.600 --> 00:18:23.839 +Let's, for instance, add a date, the date of 2023, + +00:18:23.840 --> 00:18:28.319 +so I think this is 02, when there is the conference, see, + +00:18:28.320 --> 00:18:32.759 +and we can get access to that `one` again, + +00:18:32.760 --> 00:18:37.954 +here, so `date`, and we go, + +00:18:37.955 --> 00:18:42.359 +we change the `:CUSTOM_ID` with the `:DATE`, + +00:18:42.360 --> 00:18:46.639 +and in the list here, + +00:18:46.640 --> 00:18:53.359 +so we want in the list, this to be the date, + +00:18:53.360 --> 00:18:56.559 +and we build again that, + +00:18:56.560 --> 00:18:58.799 +and we have access to the date. + +00:18:58.800 --> 00:19:03.199 +Really, we can do whatever we want. + +NOTE Rendering content + +00:19:03.200 --> 00:19:06.759 +Now, we want the content. So far, + +00:19:06.760 --> 00:19:11.599 +we get the property, but what about the content, + +00:19:11.600 --> 00:19:17.039 +so h1, and now we put "Org content", + +00:19:17.040 --> 00:19:21.359 +and this is going to be something in the variable content, + +00:19:21.360 --> 00:19:25.079 +and we have to add that variable, + +00:19:25.080 --> 00:19:27.999 +so in the let binding, we write our content, + +00:19:28.000 --> 00:19:30.639 +we are going to have that content from the page-tree. + +00:19:30.640 --> 00:19:33.679 +To do that, we use `org-export`, + +00:19:33.680 --> 00:19:36.119 +so we need to export something into HTML, + +00:19:36.120 --> 00:19:37.599 +we export the data with the backend. + +00:19:37.600 --> 00:19:40.239 +So the data that we want is page-tree, + +00:19:40.240 --> 00:19:42.239 +but we don't want the first headline, + +00:19:42.240 --> 00:19:46.759 +so we use `org-element-contents`, + +00:19:46.760 --> 00:19:50.519 +and we pass it `page-tree`, so this is that. + +00:19:50.520 --> 00:19:53.119 +But for the exported, we need to pass it, + +00:19:53.120 --> 00:20:00.599 +and also, how do we call that, we call that an Org backend. + +00:20:00.600 --> 00:20:06.759 +So `one-ox` is our backend provided by one.el, + +00:20:06.760 --> 00:20:09.519 +and the last argument is nil. + +00:20:09.520 --> 00:20:14.079 +We are almost done. Now with one.org, + +00:20:14.080 --> 00:20:18.879 +we build the website, and we see that we have an error, + +00:20:18.880 --> 00:20:22.079 +it's because this is not a content, + +00:20:22.080 --> 00:20:27.039 +so there.. No, okay, + +00:20:27.040 --> 00:20:32.839 +there was this `org-element-contents`, I think, + +00:20:32.840 --> 00:20:37.159 +and now we build it, and we must see it here. + +NOTE Rendering CSS + +00:20:37.160 --> 00:20:39.959 +So we have the content, + +00:20:39.960 --> 00:20:43.319 +we have the Org values, + +00:20:43.320 --> 00:20:48.399 +and last thing that we can do maybe is to put some CSS. + +00:20:48.400 --> 00:20:51.919 +Let's have a look to `one-default` function. + +00:20:51.920 --> 00:20:56.399 +We can see in one.el file that we have a lot of + +00:20:56.400 --> 00:21:01.919 +default functions that we can use to take inspiration. + +00:21:01.920 --> 00:21:05.599 +The last thing that we need + +00:21:05.600 --> 00:21:07.999 +is to link to the one.css file, + +00:21:08.000 --> 00:21:14.919 +so we are going to do that `onerc` file. + +00:21:14.920 --> 00:21:20.319 +This is here, so `html` we don't need, + +00:21:20.320 --> 00:21:26.479 +we have that one, we want the head to be here, + +00:21:26.480 --> 00:21:37.319 +and we pass it a class, which is a title, + +00:21:37.320 --> 00:21:42.239 +a div with the class content. We have that. + +00:21:42.240 --> 00:21:46.159 +Now with one.org, we build it again, + +00:21:46.160 --> 00:21:50.599 +and we should see the website render with the CSS, + +00:21:50.600 --> 00:21:56.759 +the property, and all the content, + +00:21:56.760 --> 00:22:01.519 +and we've done that just with that Emacs Lisp file, + +00:22:01.520 --> 00:22:08.959 +so this is all I wanted to show you today with one.el, + +00:22:08.960 --> 00:22:14.879 +I hope you enjoyed the talk, and have a nice day, + +00:22:14.880 --> 00:22:17.840 +and a nice conference. diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt new file mode 100644 index 00000000..2f2e9a1a --- /dev/null +++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt @@ -0,0 +1,638 @@ +WEBVTT + + +00:00:02.899 --> 00:00:03.399 +[Speaker 0]: Out here or also you can continue discussing + +00:00:06.200 --> 00:00:06.700 +on IRC. + +00:00:23.200 --> 00:00:23.320 +So I see 2 questions coming in already on the + +00:00:24.400 --> 00:00:24.619 +pad. So the first question is, + +00:00:26.759 --> 00:00:27.040 +how did you draw the under braces and over + +00:00:38.360 --> 00:00:38.559 +braces? Sorry, Jeff, you're muted on the blue + +00:00:38.559 --> 00:00:39.059 +button. + +00:00:43.340 --> 00:00:43.680 +[Speaker 1]: I'm sorry for some reason I'm seeing + +00:00:45.960 --> 00:00:46.420 +everything twice. I'm hearing everything + +00:00:48.420 --> 00:00:48.600 +twice. So it's, it's about with about a 5 + +00:00:53.400 --> 00:00:53.900 +[Speaker 0]: Probably my stream turned on + +00:00:57.340 --> 00:00:57.620 +[Speaker 1]: second delay. It's straight Oh, + +00:01:03.820 --> 00:01:04.000 +you're right Thank you so much I MPB is + +00:01:07.340 --> 00:01:07.840 +showing the the big blue button Okay, + +00:01:09.060 --> 00:01:09.380 +sorry everyone. Okay now. + +00:01:12.180 --> 00:01:12.260 +I'm together now Let's see How did I draw the + +00:01:13.140 --> 00:01:13.640 +over braces and under braces? + +00:01:17.120 --> 00:01:17.620 +LaTeX. That is a, that's a, + +00:01:25.020 --> 00:01:25.380 +yeah, and a SVG, I think, + +00:01:29.160 --> 00:01:29.460 +produced by LaTeX through a separate file. + +00:01:31.960 --> 00:01:32.460 +I tried to do like a LaTeX code block and + +00:01:33.940 --> 00:01:34.160 +didn't get around to it. + +00:01:36.900 --> 00:01:37.260 +Also, the code to produce it in TickSet was + +00:01:39.800 --> 00:01:39.940 +really, really long. So I didn't put it in + +00:01:47.300 --> 00:01:47.540 +[Speaker 0]: The next question is, you've got a nice + +00:01:48.840 --> 00:01:49.340 +sounding keyboard. What kind is it? + +00:01:50.380 --> 00:01:50.600 +[Speaker 1]: the notes. GARY ILLYES-CHAKRABARTYTT I'm so + +00:01:55.960 --> 00:01:56.180 +sorry. It is an Ergodox split keyboard for my + +00:01:59.700 --> 00:02:00.180 +wrists. Sorry about the noise. + +00:02:01.020 --> 00:02:01.280 +[Speaker 0]: Awesome. Yeah, no worries. + +00:02:02.220 --> 00:02:02.440 +I mean, I like to hear it. + +00:02:03.900 --> 00:02:04.400 +We like to hear it. I think a lot of us do. + +00:02:07.080 --> 00:02:07.580 +[Speaker 1]: Do we have anything on IRC? + +00:02:15.880 --> 00:02:16.380 +Let's see. Someone's asking for ligatures. + +00:02:23.420 --> 00:02:23.860 +Do you have any questions, + +00:02:26.100 --> 00:02:26.600 +Ben? Charles? + +00:02:35.280 --> 00:02:35.440 +[Speaker 0]: I see a bunch on the path that I can read for + +00:02:36.980 --> 00:02:37.480 +[Speaker 1]: Oh, yeah, please do. + +00:02:39.960 --> 00:02:40.140 +[Speaker 0]: now. Sure. So next question is, + +00:02:41.580 --> 00:02:42.080 +do you find that the invasive, + +00:02:44.540 --> 00:02:44.680 +quote unquote, 3-formatting interferes with + +00:02:44.680 --> 00:02:45.180 +navigation? + +00:02:48.700 --> 00:02:49.200 +[Speaker 1]: Yes, it does. That is true. + +00:03:01.300 --> 00:03:01.800 +Let me see. Yeah, it's weird. + +00:03:04.120 --> 00:03:04.340 +The good news is that, + +00:03:06.260 --> 00:03:06.500 +oh, you know what? The first thing I did, + +00:03:07.600 --> 00:03:08.100 +my first attempt at this, + +00:03:11.140 --> 00:03:11.480 +I actually made all of the incoming text + +00:03:13.440 --> 00:03:13.660 +invisible and just replaced it with my own + +00:03:15.440 --> 00:03:15.940 +text. And that was actually a lot worse. + +00:03:21.420 --> 00:03:21.680 +The more of the input that is removed or made + +00:03:23.600 --> 00:03:23.960 +invisible, the harder the navigation becomes. + +00:03:26.520 --> 00:03:26.880 +So the fact that now I'm just inserting line + +00:03:29.440 --> 00:03:29.640 +breaks and spaces makes it a lot easier. + +00:03:30.540 --> 00:03:30.920 +And I can still search. + +00:03:34.600 --> 00:03:34.760 +And when I get to the destination of the + +00:03:38.300 --> 00:03:38.800 +search, I'm still in proper normal text. + +00:03:41.980 --> 00:03:42.160 +So it got a little better by changing my + +00:03:43.740 --> 00:03:43.940 +strategy a bit, but it's still a little bit + +00:03:50.180 --> 00:03:50.680 +of a problem. Let's see. + +00:03:51.720 --> 00:03:52.220 +I'll go look at the etherpad. + +00:03:55.080 --> 00:03:55.520 +Where is it? + +00:03:57.260 --> 00:03:57.440 +[Speaker 0]: I can read the questions from etherpad if + +00:04:00.660 --> 00:04:00.860 +you'd like me to. And then If at any point + +00:04:02.720 --> 00:04:03.180 +you want to take the questions from IRC, + +00:04:04.320 --> 00:04:04.820 +then feel free to do that as well. + +00:04:07.240 --> 00:04:07.600 +[Speaker 1]: I found it. Can you show us the key bindings + +00:04:08.940 --> 00:04:09.440 +of your minor map for editing overlays? + +00:04:15.860 --> 00:04:16.360 +Well, I have a minor mode key map for + +00:04:21.720 --> 00:04:22.220 +increasing or decreasing the level of detail. + +00:04:24.640 --> 00:04:25.140 +And the key bindings are like, + +00:04:31.840 --> 00:04:32.340 +I can't remember what it is. + +00:04:34.080 --> 00:04:34.200 +If you go and you look at the source on + +00:04:35.640 --> 00:04:36.140 +GitHub, you can see it there. + +00:04:37.600 --> 00:04:38.100 +I forgot what I bound them to. + +00:04:40.320 --> 00:04:40.820 +Something that I'm allowed to do. + +00:04:45.860 --> 00:04:46.220 +They have restrictions on what key bindings + +00:04:47.200 --> 00:04:47.700 +you can make in minor modes. + +00:04:49.300 --> 00:04:49.640 +And I carefully followed the directions. + +00:04:50.580 --> 00:04:50.820 +I don't remember what it was. + +00:04:54.220 --> 00:04:54.720 +It's like Control-C-P or something like that. + +00:05:00.600 --> 00:05:01.100 +Or yeah. Sorry. Your examples were with C++ + +00:05:02.640 --> 00:05:03.140 +if you experiment with any other languages. + +00:05:07.460 --> 00:05:07.960 +I haven't. I guess this is just a perennial + +00:05:10.440 --> 00:05:10.940 +pain point for C++ programmers. + +00:05:13.480 --> 00:05:13.860 +So that's kind of why my, + +00:05:15.680 --> 00:05:16.000 +and I am 1, and I guess that's why my focus + +00:05:17.880 --> 00:05:18.080 +was there. You probably have to rewrite some + +00:05:20.520 --> 00:05:21.020 +of the parsers to use something else. + +00:05:24.060 --> 00:05:24.160 +Would it be possible to include overlays in + +00:05:25.080 --> 00:05:25.580 +the source file itself? + +00:05:30.860 --> 00:05:31.360 +I actually don't understand this question. + +00:05:33.120 --> 00:05:33.440 +In the source file itself, + +00:05:35.160 --> 00:05:35.660 +there are language modes that do this. + +00:05:41.580 --> 00:05:41.740 +No, I'm not certain I understand that + +00:05:43.520 --> 00:05:43.700 +question. Maybe you could edit it a little + +00:05:45.360 --> 00:05:45.860 +bit more, overlays in the source file. + +00:05:48.840 --> 00:05:49.340 +What are your plans for TSP in the future? + +00:05:54.560 --> 00:05:55.060 +It's a little fragile. + +00:06:00.020 --> 00:06:00.520 +So it might be nice to investigate. + +00:06:02.600 --> 00:06:02.920 +I think you can get the compiler to output + +00:06:04.120 --> 00:06:04.620 +error messages in different formats, + +00:06:07.320 --> 00:06:07.800 +which might be more parsable or the parsing + +00:06:08.360 --> 00:06:08.860 +might be more maintainable. + +00:06:10.280 --> 00:06:10.520 +That might be an interesting thing to + +00:06:15.460 --> 00:06:15.960 +investigate. And the other thing is I have + +00:06:19.200 --> 00:06:19.700 +just 1 way of reformatting the output where + +00:06:21.360 --> 00:06:21.820 +everything on the same level is vertically + +00:06:23.920 --> 00:06:24.160 +aligned. But I think some people might want + +00:06:26.920 --> 00:06:27.040 +to make more use of the horizontal space on + +00:06:30.920 --> 00:06:31.260 +the screen and take the sort of sibling parts + +00:06:34.860 --> 00:06:35.360 +of the type and line them up straight across + +00:06:39.140 --> 00:06:39.640 +and take up a little bit less vertical space. + +00:06:47.560 --> 00:06:48.040 +Enriched mode. I don't know what enriched + +00:06:51.240 --> 00:06:51.500 +mode is. Interesting. Oh, + +00:06:52.720 --> 00:06:53.220 +what's my repository link? + +00:06:56.400 --> 00:06:56.900 +Let me get that then. I don't know how to + +00:07:00.620 --> 00:07:01.120 +format this properly, but it's just troll + +00:07:03.820 --> 00:07:04.320 +slash tspute. Yeah, it's on GitHub. + +00:07:14.820 --> 00:07:15.160 +Something like that. Let's see. + +00:07:16.120 --> 00:07:16.620 +This looks like the Etherpad. + +00:07:19.640 --> 00:07:20.140 +It looks like all the Etherpad questions. + +00:07:22.120 --> 00:07:22.620 +We have 1 here from Charles. + +00:07:24.960 --> 00:07:25.120 +Can overlays work as hypertext so you can + +00:07:26.680 --> 00:07:27.180 +link an error message back to the source? + +00:07:30.720 --> 00:07:30.920 +Yeah, actually, that's done by default in + +00:07:32.680 --> 00:07:33.120 +compilation mode. That's 1 of the features + +00:07:36.160 --> 00:07:36.660 +you get, which has been around for literally + +00:07:41.280 --> 00:07:41.520 +decades. Oh, yeah. Is it already there? + +00:07:42.240 --> 00:07:42.740 +Yes, it's already there. + +00:07:45.960 --> 00:07:46.460 +Let's see. Do we have anything on IRC? + +00:07:56.680 --> 00:07:56.880 +Let me see. OK, looks like it seems like + +00:07:58.000 --> 00:07:58.480 +we've run out of questions. + +00:07:58.860 --> 00:07:59.360 +Is that true? + +00:08:04.440 --> 00:08:04.640 +[Speaker 0]: Yeah, it seems so. It seems so, + +00:08:06.820 --> 00:08:07.200 +although we still have a couple more minutes, + +00:08:09.000 --> 00:08:09.480 +like maybe 3, 4 minutes on the stream. + +00:08:13.780 --> 00:08:14.240 +So yeah. And then, of course, + +00:08:15.800 --> 00:08:16.020 +once the stream does move on to the next + +00:08:19.120 --> 00:08:19.440 +talk. Folks are welcome to join Jeff here on + +00:08:22.340 --> 00:08:22.500 +BigBlueButton. If Jeff still has a few more + +00:08:24.640 --> 00:08:24.960 +minutes to just chat here or ask questions + +00:08:25.800 --> 00:08:26.300 +here, that works as well. + +00:08:26.920 --> 00:08:27.240 +[Speaker 1]: JEFF CROSSMAN-WILSONEY-PORTMAN Yeah, + +00:08:29.640 --> 00:08:30.140 +if anyone's excited about the tool. + +00:08:38.460 --> 00:08:38.880 +Are the notes are available online, + +00:08:42.100 --> 00:08:42.360 +right? I uploaded an org file that was my + +00:08:43.700 --> 00:08:43.940 +talk, and I actually included some + +00:08:48.900 --> 00:08:49.300 +references. Like at the end, + +00:08:50.860 --> 00:08:51.360 +there's some links and stuff like that. + +00:08:54.620 --> 00:08:54.820 +Whenever you see like a underlined thing in + +00:08:56.840 --> 00:08:56.980 +my presentation, it's like I was kind of + +00:08:58.520 --> 00:08:59.020 +thinking people would have access to the + +00:09:00.920 --> 00:09:01.160 +actual presentation itself so they could go + +00:09:04.640 --> 00:09:05.140 +and see what it was I was linking to some PDF + +00:09:07.540 --> 00:09:08.000 +somewhere. How annoying is this for multiple + +00:09:09.600 --> 00:09:09.960 +compilers? It's annoying, + +00:09:15.620 --> 00:09:15.860 +Ben. I basically have separate parsers for + +00:09:18.600 --> 00:09:18.760 +Clang and GCC, and I'm not supporting MSVC at + +00:09:23.540 --> 00:09:23.940 +the moment. So yeah, that's where I do worry + +00:09:26.520 --> 00:09:26.680 +about its fragility, about the way I'm kind + +00:09:27.720 --> 00:09:28.220 +of parsing these error messages, + +00:09:29.340 --> 00:09:29.840 +which are idiosyncratic. + +00:09:38.440 --> 00:09:38.680 +Oh, yeah, great. Thank you, + +00:09:49.060 --> 00:09:49.220 +Amin. That's good. Should just follow that + +00:09:49.600 --> 00:09:50.100 +link, I guess. + +00:09:56.420 --> 00:09:56.720 +[Speaker 0]: Well, yeah, it's so that you have to scroll + +00:09:59.020 --> 00:09:59.380 +down a little bit underneath the video + +00:10:00.460 --> 00:10:00.960 +embedding itself. There's timestamps. + +00:10:01.880 --> 00:10:02.380 +And then below the timestamps, + +00:10:03.240 --> 00:10:03.740 +I see a bunch of links, + +00:10:06.140 --> 00:10:06.640 +including 1 that says download.org. + +00:10:09.800 --> 00:10:10.020 +[Speaker 1]: Yeah, let's see what that is. + +00:10:13.080 --> 00:10:13.320 +Is that the right 1? Yeah, + +00:10:14.780 --> 00:10:15.280 +that's it. That's the 1. + +00:10:19.280 --> 00:10:19.540 +Yeah, you can also see all of my hacks to Org + +00:10:20.740 --> 00:10:21.240 +Present are in there as well. + +00:10:25.760 --> 00:10:25.920 +I followed the System Crafters thing and made + +00:10:27.160 --> 00:10:27.660 +a bunch of my own modifications. + +00:10:33.120 --> 00:10:33.420 +Org Present has this problem where every + +00:10:35.760 --> 00:10:36.060 +heading is a slide, which I don't like. + +00:10:37.080 --> 00:10:37.580 +I kind of want hierarchy. + +00:10:41.040 --> 00:10:41.540 +You know? Oh, no. Sorry. + +00:10:43.440 --> 00:10:43.940 +Every level 1 heading is a slide. + +00:10:46.360 --> 00:10:46.720 +And I kind of want hierarchy among the + +00:10:51.440 --> 00:10:51.640 +slides. And I had to sort of invent it in + +00:10:54.320 --> 00:10:54.820 +that system myself through navigation. + +00:11:03.800 --> 00:11:04.300 +It looks like things have quieted down. + +00:11:09.520 --> 00:11:10.020 +Shall we call it? + +00:11:14.020 --> 00:11:14.120 +[Speaker 0]: Yeah, sure. So yeah, thanks again for the + +00:11:17.780 --> 00:11:18.120 +great talk, Jeff. And also to the audience + +00:11:18.960 --> 00:11:19.460 +for questions and discussions. + +00:11:21.720 --> 00:11:21.900 +People are welcome to stay here on BBB if + +00:11:24.060 --> 00:11:24.160 +Jeff has time to continue the discussions and + +00:11:25.320 --> 00:11:25.520 +ask any questions they might have. + +00:11:26.820 --> 00:11:27.320 +Otherwise, yeah, we can wrap it. + +00:11:29.200 --> 00:11:29.380 +[Speaker 1]: Sure. Thank you so much. + +00:11:30.400 --> 00:11:30.880 +And I love this conference. + +00:11:33.900 --> 00:11:34.120 +I've been a happy attendee since like 2015 or + +00:11:36.760 --> 00:11:37.120 +something. So yeah, it's great. + +00:11:37.760 --> 00:11:38.260 +Thank you for your work. + +00:11:41.040 --> 00:11:41.260 +[Speaker 0]: Thank you. Cheers. I mean, + +00:11:43.080 --> 00:11:43.260 +in large part, thanks to awesome people like + +00:11:44.280 --> 00:11:44.540 +you who give these amazing talks. + +00:11:45.420 --> 00:11:45.920 +So Thank you as well. + +00:14:30.260 --> 00:14:30.460 +[Speaker 1]: You are currently the only person in this + +00:14:30.460 --> 00:14:30.960 +conference. + +00:21:15.260 --> 00:21:15.760 +You + +00:21:37.760 --> 00:21:38.260 +1 + +00:22:23.260 --> 00:22:23.760 +1 1 1 1 2 1 2 1 2 1 1 3 4 1 2 4 1 1 3 4 1 1 2 + +00:22:28.100 --> 00:22:28.600 +3 3 4 1 2 1 + +00:24:41.445 --> 00:24:41.945 +You diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt new file mode 100644 index 00000000..dfafd866 --- /dev/null +++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt @@ -0,0 +1,80 @@ +WEBVTT + + +00:00:00.000 --> 00:00:33.560 +Introduction + +00:00:33.560 --> 00:02:02.500 +Overlays and what they can do + +00:02:02.500 --> 00:02:35.700 +Simple overlay example - creating an overlay + +00:02:35.700 --> 00:03:10.940 +Adding properties + +00:03:10.940 --> 00:03:24.660 +Deleting an overlay + +00:03:24.660 --> 00:03:59.340 +Setting fonts the right way + +00:03:59.540 --> 00:04:12.580 +More properties + +00:04:12.580 --> 00:04:49.780 +Visibility + +00:04:49.780 --> 00:05:27.820 +Adding text + +00:05:27.820 --> 00:05:45.380 +Custom properties + +00:05:45.380 --> 00:06:36.100 +Notes on properties + +00:06:36.100 --> 00:08:17.680 +Improving C++ compiler output + +00:08:17.680 --> 00:08:30.240 +The problem with C++ error messages + +00:08:30.240 --> 00:08:47.520 +Many standard class templates have default arguments + +00:08:47.520 --> 00:09:20.960 +Some types are aliases for longer things, too + +00:09:20.960 --> 00:10:18.240 +Reporting type information accurately means long lines + +00:10:18.240 --> 00:11:49.320 +Emacs can help - Treat C++ type names as just another kind of balanced expression + +00:11:49.320 --> 00:12:22.400 +Add overlays to improve readability + +00:12:22.400 --> 00:12:59.500 +Create a minor mode that runs during compilation + +00:12:59.500 --> 00:14:16.100 +Parsing types as balanced expressions + +00:14:16.100 --> 00:14:52.260 +Indent and fill with overlays - Use ancient "pretty printing" algorithms" + +00:14:52.260 --> 00:15:14.520 +Overlays can mimic line breaks and indentation + +00:15:14.520 --> 00:17:12.660 +Hiding details - Marking depths with overlays + +00:17:12.660 --> 00:18:04.900 +Hiding to a target depth + +00:18:04.900 --> 00:20:10.220 +Demo + +00:20:10.220 --> 00:20:51.220 +Conclusion diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt new file mode 100644 index 00000000..772f4b59 --- /dev/null +++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt @@ -0,0 +1,1319 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00.000 --> 00:00:04.897 +Hi, I'm Jeff Trull, and today I'm going to talk to you + +00:00:04.898 --> 00:00:08.460 +about improving C++ compiler diagnostics + +00:08.460 --> 00:13.600 +using overlays and other features from Emacs. + +00:13.600 --> 00:15.840 +First an overview of my talk. + +00:15.840 --> 00:00:17.656 +I'm going to cover what overlays are + +00:00:17.657 --> 00:00:19.325 +and how you can use them in code, + +00:00:19.326 --> 00:00:21.478 +then I'm going to talk about C++ + +00:00:21.479 --> 00:00:24.480 +and why its compiler errors can be so onerous. + +00:24.480 --> 00:00:26.750 +Finally, we'll take that information + +00:00:26.751 --> 00:00:28.447 +and build a new minor mode + +00:00:28.448 --> 00:00:33.560 +using overlays and other Emacs features. + +NOTE Overlays and what they can do + +00:33.560 --> 00:35.520 +First of all, overlays. + +00:35.520 --> 00:36.680 +What are they? + +00:36.680 --> 00:00:39.124 +They are objects consisting of a buffer range + +00:00:39.125 --> 00:00:40.400 +and a set of properties. + +00:40.400 --> 00:43.120 +That means that they cover a region in a buffer. + +00:43.120 --> 00:00:45.533 +The properties can be a certain set + +00:00:45.534 --> 00:00:47.344 +of special property names, + +00:00:47.345 --> 00:00:50.288 +in which case they can be used to cause + +00:00:50.289 --> 00:00:52.569 +special effects in the buffer, + +00:00:52.570 --> 00:00:55.660 +but they never change the underlying text. + +00:55.660 --> 00:59.900 +You can use them for things like hiding things. + +00:59.900 --> 00:01:02.886 +So, for example, overlays are working right now + +00:01:02.887 --> 00:01:04.660 +in this window. `org-present`, + +00:01:04.661 --> 00:01:07.595 +the technology I'm using for this presentation, + +00:01:07.596 --> 00:01:10.031 +is hiding the asterisk before every headline, + +00:01:10.032 --> 00:01:12.520 +as well as the things called emphasis markers; + +00:01:12.521 --> 00:01:16.269 +that is, those things that make things look + +00:01:16.270 --> 00:01:20.700 +monospaced for verbatim, or italic, or bold. + +01:20.700 --> 00:01:24.421 +The special characters we use to mark off those sections + +00:01:24.422 --> 00:01:28.940 +are also hidden by `org-present` using overlays. + +01:28.940 --> 00:01:30.601 +But those things are still in the buffer + +00:01:30.602 --> 00:01:31.980 +and they're still visible to code. + +01:31.980 --> 00:01:34.921 +So if I run this little snippet of code down here, + +00:01:34.922 --> 00:01:37.403 +it's going to go up to the headline "Overlays + +00:01:37.404 --> 00:01:40.051 +and what they can do," and it's going to tell us + +00:01:40.052 --> 00:01:41.540 +what's there in the buffer. + +01:41.540 --> 01:45.100 +Let's go down and run this. + +01:45.100 --> 00:01:48.957 +So according to this code, the contents of the buffer + +00:01:48.958 --> 00:01:51.990 +to the left of the headline is a star in a space, + +00:01:51.991 --> 00:01:55.204 +which means that even though we can't see that star, + +00:01:55.205 --> 00:01:58.220 +it's still there, because it's hidden by an overlay. + +01:58.220 --> 02:02.500 +And that's kind of the essence of what overlays are. + +NOTE Simple overlay example - creating an overlay + +02:02.500 --> 02:04.780 +Let's do a simple overlay example. + +02:04.780 --> 00:02:06.719 +We have some text on the right here, + +00:02:06.720 --> 00:02:09.340 +which is a famous poem by William Carlos Williams, + +02:09.340 --> 02:12.180 +which has been the subject of many memes. + +02:12.180 --> 02:17.860 +Let's create an overlay that covers it. + +02:17.860 --> 02:20.700 +I'll go down here and use this snippet of code here. + +02:20.700 --> 00:02:25.918 +We'll go up to the top, and we'll mark everything + +00:02:25.919 --> 00:02:29.540 +between `#+BEGIN_VERSE` and `#+END_VERSE`. + +02:29.540 --> 00:02:33.276 +You can see we've created an overlay + +00:02:33.277 --> 00:02:35.700 +from position 74 to 224. + +NOTE Adding properties + +02:35.700 --> 00:02:38.063 +Now we can take that overlay that we already created + +00:02:38.064 --> 00:02:41.211 +and add a property, in this case a `face` property, + +00:02:41.212 --> 00:02:43.540 +to change the appearance of the text. + +02:43.540 --> 00:02:46.279 +This is a poem, and it's currently using + +00:02:46.280 --> 00:02:48.083 +a face that is monospaced, + +00:02:48.084 --> 00:02:50.491 +and so it looks like a computer program, + +00:02:50.492 --> 00:02:51.900 +even though it's a poem. + +02:51.900 --> 00:02:54.585 +I think it would be nicer to use something + +00:02:54.586 --> 00:02:57.980 +with variable-width font, maybe with some serifs. + +02:57.980 --> 03:01.140 +So let's give that a try. + +03:01.140 --> 03:03.700 +Now you can see that the poem looks quite a bit different. + +03:03.700 --> 03:10.940 +It looks more like what we'd see in a book. + +NOTE Deleting an overlay + +03:10.940 --> 03:13.100 +We can also delete overlays. + +03:13.100 --> 03:15.140 +So I've named this one. + +03:15.140 --> 00:03:17.765 +So we can just go down and run `delete-overlay` + +00:03:17.766 --> 00:03:20.048 +and get rid of it, and it'll go back to + +00:03:20.049 --> 00:03:22.660 +the appearance it had before. + +03:22.660 --> 03:23.660 +And there it is. + +03:23.660 --> 03:24.660 +It's back to normal. + +NOTE Setting fonts the right way + +03:24.660 --> 00:03:28.473 +Now, if you're interested in changing all of the verses + +00:03:28.474 --> 00:03:31.108 +inside an Org Mode file to a different face + +00:03:31.109 --> 00:03:32.785 +or a different font family, + +00:03:32.786 --> 00:03:35.060 +this isn't the way you'd really do it. + +03:35.060 --> 03:37.520 +I'll just show you that real quick. + +03:37.520 --> 00:03:43.471 +The right way is probably to change the `org-verse` face, + +00:03:43.472 --> 00:03:48.868 +which is the face used for all of the verse blocks + +00:03:48.869 --> 00:03:51.620 +inside your Org Mode file. + +03:51.620 --> 03:55.100 +And so this is how you do it here: + +03:55.100 --> 03:56.100 +`face-remap-add-relative`. + +03:56.100 --> 03:58.340 +Let's give it a try. + +03:58.340 --> 03:59.340 +It worked! + +NOTE More properties + +03:59.540 --> 00:04:01.805 +There are more advanced things that you can do + +00:04:01.806 --> 00:04:03.300 +other than just changing fonts. + +04:03.300 --> 00:04:05.543 +There's a whole long list of them in the manual, + +00:04:05.544 --> 00:04:12.580 +but let's talk about the ones we're going to use today. + +NOTE Visibility + +04:12.580 --> 04:17.380 +You can make text invisible, just like `org-present` did. + +04:17.380 --> 04:21.820 +The simplest way is to set the `invisible` property to true, + +04:21.820 --> 04:24.500 +so here's a code snippet that will do that. + +04:24.500 --> 00:04:26.159 +What we're going to do is + +00:04:26.160 --> 00:04:28.966 +go and find the word "plums" inside the poem, + +00:04:28.967 --> 00:04:31.284 +and then we're going to make it invisible + +00:04:31.285 --> 00:04:33.436 +by creating an overlay that covers it, + +00:04:33.437 --> 00:04:36.820 +and then setting the invisible property to true. + +04:36.820 --> 04:37.940 +Boom! + +04:37.940 --> 04:38.940 +It's gone. + +04:38.940 --> 04:39.940 +We've eaten the plums. + +04:39.940 --> 04:42.180 +Visibility is a huge topic and very complicated. + +04:42.180 --> 04:44.220 +There are powerful mechanisms for using it. + +04:44.220 --> 00:04:46.626 +I suggest reading the manual + +00:04:46.627 --> 00:04:49.780 +if you'd like to know more about that. + +NOTE Adding text + +04:49.780 --> 00:04:52.117 +Another thing we can do with properties + +00:04:52.118 --> 00:04:54.980 +is to add text either before or after an overlay. + +04:54.980 --> 00:04:57.347 +Since we've made the word "plums" invisible, + +00:04:57.348 --> 00:05:00.574 +or anything that you make invisible in the buffer, + +00:05:00.575 --> 00:05:02.662 +if you add text then afterwards, + +00:05:02.663 --> 00:05:05.700 +it looks like you've replaced the original words + +05:05.700 --> 05:08.220 +with new words. + +05:08.220 --> 00:05:12.046 +So let's add a property, a `before-string` property, + +00:05:12.047 --> 00:05:14.193 +to the overlay that we used before + +00:05:14.194 --> 00:05:17.137 +to make it seem as though we're eating cherries + +00:05:17.138 --> 00:05:18.180 +instead of plums. + +05:18.180 --> 05:19.180 +Boom! + +05:19.580 --> 05:22.020 +There it is. + +05:22.020 --> 05:27.820 +So that's how you can replace words using overlays. + +NOTE Custom properties + +05:27.820 --> 00:05:29.760 +You can also have custom properties + +00:05:29.761 --> 00:05:31.700 +that you name and then use yourself. + +05:31.700 --> 05:35.320 +For example, you can use it to mark regions in the buffer. + +05:35.320 --> 00:05:38.008 +You can also use it to add information + +00:05:38.009 --> 00:05:41.180 +to regions in the buffer for your own tracking + +05:41.180 --> 05:45.380 +in a minor mode or something like that, which we will use. + +NOTE Notes on properties + +05:45.380 --> 05:49.620 +Finally, two notes on properties. + +05:49.620 --> 00:05:51.950 +We've been talking about overlay properties, + +00:05:51.951 --> 00:05:54.540 +but there's also something called text properties. + +05:54.540 --> 05:57.460 +Text properties are attached to text in a buffer. + +05:57.460 --> 06:00.900 +When you copy that text, the properties come along with it. + +06:00.900 --> 00:06:03.056 +If you modify the properties, + +00:06:03.057 --> 00:06:05.500 +the buffer is considered modified. + +06:05.500 --> 06:08.460 +Org Mode makes heavy use of text properties, + +06:08.460 --> 00:06:11.677 +as we can see by running this little code snippet here, + +00:06:11.678 --> 00:06:14.060 +which is going to tell us the properties + +06:14.060 --> 00:06:16.565 +and the string attached + +00:06:16.566 --> 00:06:20.740 +to the "Some poetry" headline on the right. + +06:20.740 --> 06:23.660 +There's also some controversy regarding performance. + +06:23.660 --> 00:06:25.520 +It may be that text properties + +00:06:25.521 --> 00:06:27.860 +perform better than overlay properties, + +06:27.860 --> 00:06:28.892 +so do some research + +00:06:28.893 --> 00:06:31.060 +if you're going to make heavy use of them. + +06:31.060 --> 06:36.100 +I prefer overlays because they're just easier to use. + +NOTE Improving C++ compiler output + +06:36.100 --> 06:37.540 +C++ compiler output. + +06:37.540 --> 00:06:41.170 +So my day job is C++ programmer, + +00:06:41.171 --> 00:06:46.560 +and although I've been an Emacser for many years, + +00:06:46.561 --> 00:06:52.860 +it can be a little bit of a chore dealing with errors. + +06:52.860 --> 00:06:55.680 +The error messages that come out of the compiler + +00:06:55.681 --> 00:06:57.580 +can be pretty hard to understand. + +06:57.580 --> 00:07:00.537 +This has often been a barrier, + +00:07:00.538 --> 00:07:04.640 +particularly for people who are new to C++. + +07:04.640 --> 07:09.040 +So let's see what that's like. + +07:09.040 --> 00:07:10.559 +I have an example + +00:07:10.560 --> 00:07:14.780 +which is generously supplied by Ben Deane of Intel. + +07:14.780 --> 00:07:17.082 +So let's see what it looks like + +00:07:17.083 --> 00:07:19.313 +when you compile a C++ program + +00:07:19.314 --> 00:07:24.400 +that has a difficult error in it. + +07:24.400 --> 07:27.400 +Okay. + +07:28.400 --> 07:31.400 +Okay. + +07:31.400 --> 07:35.680 +So you see we have a lot of fairly verbose messages. + +07:35.680 --> 07:39.400 +The most verbose one I think is probably here. + +07:39.400 --> 07:41.000 +This one here. + +07:41.000 --> 07:42.000 +These are pretty bad. + +07:42.000 --> 07:43.000 +I think there might be bigger ones. + +07:43.000 --> 00:07:43.720 +Oh, yeah. Here we go. + +00:07:43.721 --> 00:07:44.960 +Here's my favorite one. + +00:07:44.961 --> 00:07:51.063 +You can see... Let's look for specialization... Basically, + +00:07:51.064 --> 00:07:55.178 +this whole section of the buffer here, + +00:07:55.179 --> 00:07:58.228 +that is specifying the specific types + +00:07:58.229 --> 00:08:02.000 +that a function template was instantiated with. + +08:02.000 --> 08:04.000 +And it's a lot there. + +08:04.000 --> 00:08:05.473 +So if you're trying to figure out + +00:08:05.474 --> 00:08:06.817 +what's wrong with your program + +00:08:06.818 --> 00:08:08.884 +and you're looking at something like this, + +00:08:08.885 --> 00:08:11.000 +it can be really, really hard to understand. + +08:11.000 --> 08:12.000 +Okay. + +08:12.000 --> 08:17.680 +Back to our presentation. + +NOTE The problem with C++ error messages + +08:17.680 --> 00:08:20.063 +So it's often this way in C++ + +00:08:20.064 --> 00:08:23.400 +because we compose types from other types. + +08:23.400 --> 00:08:26.216 +They can be long to begin with, + +00:08:26.217 --> 00:08:30.240 +but then a couple of other factors come into play. + +NOTE Many standard class templates have default arguments + +08:30.240 --> 08:33.280 +First of all, we can have default template arguments. + +08:33.280 --> 00:08:35.363 +These are arguments you didn't write, + +00:08:35.364 --> 00:08:37.008 +but that are implicitly there + +00:08:37.009 --> 00:08:38.325 +and can sometimes refer + +00:08:38.326 --> 00:08:40.300 +to the arguments that you did write, + +00:08:40.301 --> 00:08:42.440 +which causes them to get a bit bigger, + +00:08:42.441 --> 00:08:47.520 +such as these allocator arguments here and here. + +NOTE Some types are aliases for longer things, too + +08:47.520 --> 08:49.360 +Then there are type aliases. + +08:49.360 --> 00:08:54.014 +For example, `std::string` here expands to + +00:08:54.015 --> 00:08:58.320 +a type with three template arguments. + +08:58.320 --> 00:09:01.940 +So you can imagine, when we combine + +00:09:01.941 --> 00:09:04.733 +those two things together, + +00:09:04.734 --> 00:09:09.763 +our simple vector of maps from strings to ints + +00:09:09.764 --> 00:09:14.257 +becomes this humongous thing here, which... + +00:09:14.258 --> 00:09:17.360 +Let's run the comparison. + +09:18.360 --> 09:20.960 +Yeah. + +NOTE Reporting type information accurately means long lines + +09:20.960 --> 00:09:24.924 +So in summary, to properly understand an error + +00:09:24.925 --> 00:09:27.370 +when you're a C++ programmer + +00:09:27.371 --> 00:09:29.718 +requires knowing the exact types + +00:09:29.719 --> 00:09:32.280 +that were supplied to your function. + +09:32.280 --> 00:09:34.430 +And types are built recursively, + +00:09:34.431 --> 00:09:36.646 +and therefore the types can-- + +00:09:36.647 --> 00:09:40.513 +the correct exact name for the type + +00:09:40.514 --> 00:09:42.776 +can just be really huge + +00:09:42.777 --> 00:09:46.360 +and have many levels and layers to it. + +09:46.360 --> 00:09:48.113 +So when I was trying to understand + +00:09:48.114 --> 00:09:49.466 +the things I'd done wrong, + +00:09:49.467 --> 00:09:52.401 +especially when I was a newer C++ programmer, + +00:09:52.402 --> 00:09:54.570 +but honestly still even recently, + +00:09:54.571 --> 00:09:57.440 +if I was having a really intractable problem, + +09:57.440 --> 00:10:00.123 +I would just copy the entire error message out, + +00:10:00.124 --> 00:10:01.735 +stick it in the scratch buffer, + +00:10:01.736 --> 00:10:03.649 +and then manually reformat it + +00:10:03.650 --> 00:10:05.563 +so I could see what it was telling me + +00:10:05.564 --> 00:10:07.261 +I'd actually called the function + +00:10:07.262 --> 00:10:09.320 +or whatever it was with, the exact type. + +10:09.320 --> 00:10:11.311 +I had to sit there + +00:10:11.312 --> 00:10:13.240 +and go through the whole thing. + +10:13.240 --> 10:15.240 +But there's a better way. + +10:15.240 --> 10:18.240 +Now, anyway. + +NOTE Emacs can help - Treat C++ type names as just another kind of balanced expression + +10:18.240 --> 10:23.960 +So what can Emacs do to help us with this problem? + +10:23.960 --> 00:10:28.870 +First of all, if you think about a type name, + +00:10:28.871 --> 00:10:33.080 +it's a lot like what we call S-expressions + +10:33.080 --> 10:35.480 +or balanced expressions. + +10:35.480 --> 10:38.400 +Lisp code itself is an S-expression. + +10:38.400 --> 00:10:41.464 +It's basically things with parentheses + +00:10:41.465 --> 00:10:44.214 +and little atoms or symbols in it, + +00:10:44.215 --> 00:10:46.520 +or strings or numbers. + +10:46.520 --> 00:10:50.231 +But parenthesized balanced expressions + +00:10:50.232 --> 00:10:55.800 +are things that Emacs was actually built to deal with. + +10:55.800 --> 00:10:58.944 +They were... I found an old manual from 1981, + +00:10:58.945 --> 00:11:02.160 +and the two major modes that they recommended + +11:02.160 --> 00:11:05.765 +or that they actually documented in the manual were + +00:11:05.766 --> 00:11:08.400 +one, assembly language, and two, Lisp. + +11:08.400 --> 00:11:10.652 +They mentioned that there were other modes, + +00:11:10.653 --> 00:11:12.700 +but they didn't say anything about them. + +11:12.700 --> 00:11:14.625 +So Lisp is something + +00:11:14.626 --> 00:11:17.440 +with a really long history with Emacs. + +11:17.440 --> 00:11:19.976 +Balanced expressions and manipulating them + +00:11:19.977 --> 00:11:21.434 +and doing them efficiently + +00:11:21.435 --> 00:11:24.155 +is just a thing that Emacs knows how to do, + +00:11:24.156 --> 00:11:25.640 +and Emacs is good at it. + +11:25.640 --> 00:11:27.705 +There's just a legacy + +00:11:27.706 --> 00:11:31.320 +of algorithms and functions for doing it. + +11:31.320 --> 00:11:33.182 +So we take types, + +00:11:33.183 --> 00:11:37.839 +and we take the angle brackets in the types, + +00:11:37.840 --> 00:11:40.840 +and we get the symbols right. + +11:40.840 --> 00:11:41.814 +Then we can treat them + +00:11:41.815 --> 00:11:44.312 +as though they were balanced expressions or S-expressions, + +00:11:44.313 --> 00:11:49.320 +the same kind that Emacs is really good at handling. + +NOTE Add overlays to improve readability + +11:49.320 --> 00:11:51.979 +Secondly, we can use overlays + +00:11:51.980 --> 00:11:55.260 +to improve the readability of errors. + +11:55.260 --> 00:11:58.012 +We can take long lines and break and indent them + +00:11:58.013 --> 00:12:00.160 +using `before-string`s, so the same thing + +12:00.200 --> 12:03.440 +I used to add "cherries" into the poem. + +12:03.440 --> 00:12:06.611 +We can use that to insert new lines + +00:12:06.612 --> 00:12:08.725 +followed by indentation + +00:12:08.726 --> 00:12:15.160 +and produce a much nicer-looking listing of a type. + +12:15.160 --> 00:12:19.641 +We can also use the `invisible` property + +00:12:19.642 --> 00:12:22.400 +to hide unwanted detail. + +NOTE Create a minor mode that runs during compilation + +12:22.400 --> 12:24.960 +Last of all, we can create a minor mode. + +12:24.960 --> 00:12:27.854 +When we're compiling things in Emacs, + +00:12:27.855 --> 00:12:30.140 +we often use `compilation-mode`. + +12:30.140 --> 00:12:32.097 +`compilation-mode` allows you to install + +00:12:32.098 --> 00:12:33.553 +compilation filters that run + +00:12:33.554 --> 00:12:36.434 +when the compiler is producing output, + +00:12:36.435 --> 00:12:39.980 +and at that time, then, we can add our overlays. + +12:39.980 --> 00:12:42.868 +We can also add in minor-mode commands + +00:12:42.869 --> 00:12:45.757 +that do whatever we want to the keymap. + +00:12:45.758 --> 00:12:48.321 +In this case, we're going to show and hide + +00:12:48.322 --> 00:12:50.176 +lower-level details interactively + +00:12:50.177 --> 00:12:53.906 +so that we can see a simplified version + +00:12:53.907 --> 00:12:59.500 +or a more detailed version of a type, depending on our needs. + +NOTE Parsing types as balanced expressions + +12:59.500 --> 13:03.980 +First of all, parsing types as balanced expressions. + +13:03.980 --> 00:13:05.686 +We need to be able to quickly locate + +00:13:05.687 --> 00:13:07.162 +the boundaries and the contents + +00:13:07.163 --> 00:13:08.500 +of parenthesized expressions, + +13:08.500 --> 13:12.100 +or in this case, expressions in angle brackets. + +13:12.100 --> 00:13:14.995 +We use a syntax table inside Emacs + +00:13:14.996 --> 00:13:18.800 +to allow movement functions like `forward-list` + +00:13:18.801 --> 00:13:21.100 +to jump between matching angle brackets. + +13:21.100 --> 13:23.460 +By default, they're just parentheses. + +13:23.460 --> 13:25.900 +First of all, let's look at our syntax table. + +13:25.900 --> 00:13:29.189 +We're going to add here syntax entries + +00:13:29.190 --> 00:13:33.900 +to handle angle brackets as though they were parentheses. + +13:33.900 --> 00:13:37.247 +Then we have a lot of types + +00:13:37.248 --> 00:13:42.980 +that have colons in them, and those are namespaces in C++. + +13:42.980 --> 00:13:45.766 +By default, Emacs does not recognize them + +00:13:45.767 --> 00:13:49.134 +as parts of symbols, so we're going to tell Emacs + +00:13:49.135 --> 00:13:52.839 +that a colon is something called a symbol constituent, + +00:13:52.840 --> 00:13:54.860 +that it can be part of a name. + +13:54.860 --> 00:13:57.613 +Once we do that, then we can use our functions + +00:13:57.614 --> 00:13:59.442 +like `forward-list`, `backward-word`, + +00:13:59.443 --> 00:14:03.288 +all of the navigation and movement functions that we have + +00:14:03.289 --> 00:14:06.623 +that do things, that do more complicated things + +00:14:06.624 --> 00:14:08.707 +like S-expressions and so on, + +00:14:08.708 --> 00:14:11.485 +can be used now with our angle brackets + +00:14:11.486 --> 00:14:16.100 +and inside of our types. + +NOTE Indent and fill with overlays - Use ancient "pretty printing" algorithms" + +14:16.100 --> 00:14:18.462 +The next thing we can do is + +00:14:18.463 --> 00:14:21.540 +perform indent and fill with overlays. + +14:21.540 --> 00:14:23.735 +We're going to use `before-string` properties + +00:14:23.736 --> 00:14:25.630 +to break lines and create indentation + +00:14:25.631 --> 00:14:28.900 +to make the output look a little better. + +14:28.900 --> 14:35.320 +Today, we fill mostly text and we indent mostly code. + +14:35.320 --> 00:14:37.307 +We fill text in order to prevent it + +00:14:37.308 --> 00:14:39.902 +from running off the side of the right margin, + +00:14:39.903 --> 00:14:43.940 +and we indent code to line up syntactic elements. + +14:43.940 --> 14:47.080 +Back in the day, they had algorithms that could do both. + +14:47.080 --> 14:52.260 +Those are what we're going to leverage. + +NOTE Overlays can mimic line breaks and indentation + +14:52.260 --> 00:14:54.582 +We can use the `before-string` property + +00:14:54.583 --> 00:14:57.760 +to insert a new line in the correct number of spaces + +14:57.760 --> 15:00.240 +to emulate indentation. + +15:00.240 --> 00:15:03.525 +As a simplified example, here's some code + +00:15:03.526 --> 00:15:07.280 +that will indent 4 upon each open angle bracket. + +15:07.280 --> 15:14.520 +Let's give it a try. + +NOTE Hiding details - Marking depths with overlays + +15:14.520 --> 15:18.280 +The next thing we're going to need to do is hide details. + +15:18.280 --> 00:15:22.688 +So we have nested types, and the user is going to want to + +00:15:22.689 --> 00:15:27.371 +be able to reveal lower-level or hide lower-level parts + +00:15:27.372 --> 00:15:30.131 +of the nested type interactively + +00:15:30.132 --> 00:15:35.480 +once we've already reformatted the error messages. + +15:35.480 --> 15:40.440 +Let's see how we can do that using invisible properties. + +15:40.440 --> 00:15:43.992 +The first thing we're going to do is + +00:15:43.993 --> 00:15:46.680 +mark depths within the type. + +15:46.680 --> 00:15:49.328 +When we're originally analyzing and formatting + +00:15:49.329 --> 00:15:51.920 +and doing the indentation and the line breaks, + +15:51.920 --> 00:15:55.071 +at the same time, we're going to go through + +00:15:55.072 --> 00:15:58.817 +and mark the nested levels inside the type names, + +00:15:58.818 --> 00:16:00.840 +just as this diagram shows. + +16:00.840 --> 00:16:03.573 +So depth 1, for example, will be everything + +00:16:03.574 --> 00:16:06.120 +inside the first level of angle brackets. + +16:06.120 --> 00:16:09.038 +Depth 2 will be everything inside the second level, + +00:16:09.039 --> 00:16:09.600 +and so on. + +16:09.760 --> 00:16:12.070 +And then later on, when the users request it, + +00:16:12.071 --> 00:16:16.303 +we can go and look at the depth that they've selected + +00:16:16.304 --> 00:16:19.360 +and then mark those sections invisible. + +16:19.360 --> 16:20.520 +Let's see how that might work. + +16:20.520 --> 00:16:24.022 +First of all, let's delete the overlays + +00:16:24.023 --> 00:16:28.400 +that we already have that created the indentation. + +16:28.400 --> 00:16:32.419 +Now we're going to go and do that marking + +00:16:32.420 --> 00:16:35.740 +with the custom depth properties here. + +16:35.740 --> 00:16:38.760 +To prove that I didn't pull a fast one, + +00:16:38.761 --> 00:16:42.082 +let's go and see what `describe-char` tells us + +00:16:42.083 --> 00:16:44.660 +about the depths inside here. + +16:44.660 --> 16:46.460 +Let's start here. + +16:46.460 --> 16:52.820 +Okay, so inside this part here, `std::string`, + +16:52.820 --> 16:54.980 +There are two overlays. + +16:54.980 --> 00:16:57.780 +One of them is of depth 1, and the other is of depth 2, + +00:16:57.781 --> 00:17:00.601 +which makes sense, because depth 1 is going to be + +00:17:00.602 --> 00:17:02.011 +from about here to here, + +00:17:02.012 --> 00:17:07.660 +and depth 2 is going to be from about here to this area. + +17:07.660 --> 00:17:10.829 +So it's reasonable that there should be two, + +00:17:10.830 --> 00:17:12.660 +and that's what we expect. + +NOTE Hiding to a target depth + +17:12.660 --> 00:17:17.353 +Now that we've marked the nested types with their depths, + +00:17:17.354 --> 00:17:21.380 +let's experiment with hiding details. + +17:21.380 --> 00:17:26.773 +This fragment of code takes a user-supplied depth, + +00:17:26.774 --> 00:17:29.085 +in this case 2, and will hide, + +00:17:29.086 --> 00:17:30.875 +based on those markings + +00:17:30.876 --> 00:17:33.932 +that we've already made on the overlays, + +00:17:33.933 --> 00:17:36.020 +the custom depth properties. + +17:36.020 --> 17:40.020 +We'll take those and apply your requested level of detail. + +17:40.020 --> 17:42.020 +So let's try it out. + +17:42.020 --> 17:43.020 +Depth 2. + +17:43.020 --> 00:17:46.005 +All right, that hid everything under the `std::map`, + +00:17:46.006 --> 00:17:47.260 +so the deepest level. + +17:47.260 --> 17:52.140 +If we make it 1, we should get a level higher than that. + +17:52.140 --> 17:54.540 +So now level 1 and below are hidden. + +17:54.540 --> 17:59.660 +Now if we put it back to 3, it should reveal everything. + +17:59.660 --> 18:04.900 +So that's what we're going to use in our minor mode. + +NOTE Demo + +18:04.900 --> 18:05.900 +Let's have a demo. + +18:05.900 --> 00:18:08.538 +We're going to revisit the initial example + +00:18:08.539 --> 00:18:10.380 +with the minor mode installed. + +18:10.380 --> 00:18:12.101 +Now we're going to have a compilation filter + +00:18:12.102 --> 00:18:13.593 +that will run on every chunk of output + +00:18:13.594 --> 00:18:15.780 +produced by the compiler. + +18:15.780 --> 00:18:17.849 +It's going to add those overlays + +00:18:17.850 --> 00:18:20.420 +with the line breaks and the indentation. + +18:20.420 --> 00:18:22.206 +It's also going to add overlays + +00:18:22.207 --> 00:18:23.880 +that mark up the nested types + +00:18:23.881 --> 00:18:26.220 +with the depths for each region. + +18:26.220 --> 18:31.580 +Let's add the hook for `tspew-mode`. + +18:31.580 --> 18:37.220 +And now we can compile again. + +18:38.220 --> 00:18:41.503 +All right, we can already see + +00:18:41.504 --> 00:18:47.195 +that these things are formatted a little bit better + +00:18:47.196 --> 00:18:49.180 +than they were before. + +18:49.180 --> 18:50.180 +They're not all on one line. + +18:50.180 --> 18:53.580 +Things are getting kind of lined up here. + +18:53.580 --> 19:05.620 +Here's a good example. + +19:05.620 --> 00:19:08.637 +And here's our big ugly one from before + +00:19:08.638 --> 00:19:10.900 +with all the characters in it. + +19:10.900 --> 19:14.500 +Let's try hiding some of this information. + +19:14.500 --> 00:19:17.431 +We'll just slowly decrease the level of detail + +00:19:17.432 --> 00:19:19.740 +and you can see how it works. + +19:19.740 --> 00:19:22.333 +Over here, where there's these ellipses + +00:19:22.334 --> 00:19:25.460 +next to string constant, the "..." there, + +19:25.460 --> 00:19:30.386 +that's where we are starting to hide information + +00:19:30.387 --> 00:19:32.900 +and go to the next level. + +19:32.900 --> 19:36.460 +Hiding more, hiding more, hiding more. + +19:36.460 --> 19:38.220 +Now we can go back and start adding it back. + +19:38.220 --> 00:19:42.736 +You can see here now we just have about four layers, + +00:19:42.737 --> 00:19:45.540 +which is a lot easier to understand. + +19:45.540 --> 00:19:47.733 +And if we start understanding what it is + +00:19:47.734 --> 00:19:52.180 +and we need more detail, we can just increase detail again. + +19:52.180 --> 00:19:55.402 +And every time we increase or decrease detail, + +00:19:55.403 --> 00:19:58.900 +it reformats so it still stays kind of consolidated + +19:58.900 --> 19:59.900 +and nice looking. + +19:59.900 --> 20:01.980 +Let's increase it a little bit more. + +20:02.060 --> 20:04.540 +Okay, so you can see how that worked. + +20:04.540 --> 20:08.340 +Let's go back to our presentation. + +20:08.340 --> 20:10.220 +All right. + +NOTE Conclusion + +20:10.220 --> 00:20:12.996 +In conclusion, we saw how we could solve + +00:20:12.997 --> 00:20:15.367 +a real problem for C++ programmers + +00:20:15.368 --> 00:20:18.534 +by combining several Emacs features: overlays, + +00:20:18.535 --> 00:20:20.489 +compilation mode extensions, + +00:20:20.490 --> 00:20:25.700 +and balanced expression navigation using syntax tables. + +20:25.700 --> 00:20:27.978 +Emacs is often compared unfavorably + +00:20:27.979 --> 00:20:31.460 +to newer IDEs and editors with slicker user interfaces. + +20:32.220 --> 00:20:36.386 +What Emacs has that they don't is powerful abstractions, + +00:20:36.387 --> 00:20:38.862 +tons of libraries, and decades of work + +00:20:38.863 --> 00:20:42.100 +by some of the luminaries in the field of software. + +20:42.100 --> 00:20:45.343 +I think that this project would have been much harder to do + +00:20:45.344 --> 00:20:48.020 +in a prettier but less powerful environment. + +20:48.020 --> 20:50.860 +In short, there's plenty of hope for Emacs. + +20:50.860 --> 20:51.220 +Thank you. diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt new file mode 100644 index 00000000..0fc2d8ef --- /dev/null +++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt @@ -0,0 +1,767 @@ +WEBVTT + + +00:00:08.620 --> 00:00:09.120 +[Speaker 0]: And I think we are live. + +00:00:09.620 --> 00:00:09.960 +Hello again, everyone. + +00:00:10.940 --> 00:00:11.440 +And hi, Lovro. How are you doing? + +00:00:15.339 --> 00:00:15.839 +[Speaker 1]: Just a second. Should I join the other room? + +00:00:18.460 --> 00:00:18.740 +[Speaker 0]: Oh, no, no, you can stay here. + +00:00:20.860 --> 00:00:21.360 +[Speaker 1]: I can stay in the backstage. + +00:00:24.140 --> 00:00:24.320 +[Speaker 0]: Everything is fine. I don't think you are + +00:00:25.520 --> 00:00:25.760 +technically in the backstage right now you're + +00:00:26.750 --> 00:00:26.820 +just in Big Blue Button with us. + +00:00:30.040 --> 00:00:30.160 +[Speaker 1]: Oh thanks. Oh because I have 2 of them open I + +00:00:30.920 --> 00:00:31.280 +thought there were 2 different rooms. + +00:00:32.720 --> 00:00:33.220 +1 is the backstage and the other, + +00:00:38.239 --> 00:00:38.360 +[Speaker 0]: whichever, I can hear you and so can the + +00:00:39.840 --> 00:00:40.080 +stream, so don't worry too much about which + +00:00:41.140 --> 00:00:41.220 +is the backstage and which is the front page. + +00:00:41.540 --> 00:00:41.760 +[Speaker 1]: I have no idea. Well, great, + +00:00:43.660 --> 00:00:43.940 +great. Okay, yeah. Yeah, + +00:00:45.280 --> 00:00:45.480 +I'm doing great, just to answer your + +00:00:45.480 --> 00:00:45.980 +question. + +00:00:47.379 --> 00:00:47.640 +[Speaker 0]: Okay, great, great, Okay, + +00:00:49.900 --> 00:00:50.280 +well splendid. So, I've pasted a link again + +00:00:51.520 --> 00:00:51.760 +on IRC if you want to ask your questions, + +00:00:53.000 --> 00:00:53.200 +and I'd invite you to do so, + +00:00:54.620 --> 00:00:55.040 +because we have about 9 minutes of laborious + +00:00:56.580 --> 00:00:57.080 +time to answer as many of them as possible. + +00:00:58.360 --> 00:00:58.860 +And I'm going to start with the first 1. + +00:01:01.100 --> 00:01:01.600 +This looks great and was very well-presented. + +00:01:03.240 --> 00:01:03.420 +Do you have plans to upstream this + +00:01:04.239 --> 00:01:04.739 +functionality into Emacs? + +00:01:08.000 --> 00:01:08.200 +[Speaker 1]: That's a good idea. That's something we + +00:01:08.860 --> 00:01:09.360 +thought about as well. + +00:01:11.640 --> 00:01:12.140 +Currently, we haven't really contacted anyone + +00:01:16.160 --> 00:01:16.660 +to do this. Also, the current implementation, + +00:01:19.760 --> 00:01:20.080 +so as I mentioned in the presentation towards + +00:01:22.120 --> 00:01:22.300 +the end, so we use a little bit of advice to + +00:01:24.240 --> 00:01:24.520 +sort of patch some functionality of query + +00:01:26.479 --> 00:01:26.600 +replace because not everything was easy to + +00:01:28.680 --> 00:01:29.180 +implement. The core functionality luckily + +00:01:32.220 --> 00:01:32.340 +was, But there's a couple of fixes we need to + +00:01:34.200 --> 00:01:34.340 +apply to the message function in order to + +00:01:36.380 --> 00:01:36.820 +display a nice message in the echo buffer + +00:01:39.140 --> 00:01:39.320 +because this doesn't happen on its own when + +00:01:41.100 --> 00:01:41.580 +we're using this trick with this big regex + +00:01:45.360 --> 00:01:45.720 +and whatnot. So I don't think that the code + +00:01:47.080 --> 00:01:47.580 +as it is would be upstreamable. + +00:01:50.600 --> 00:01:51.100 +I think probably if we wanted to upstream it, + +00:01:54.140 --> 00:01:54.280 +we would have to do some proper work on + +00:01:57.180 --> 00:01:57.340 +refactoring query place itself in order to + +00:01:58.780 --> 00:01:58.979 +integrate all of this functionality just + +00:02:01.880 --> 00:02:02.380 +directly without any patching left and right. + +00:02:05.680 --> 00:02:06.120 +But yeah, definitely something I've given + +00:02:10.080 --> 00:02:10.259 +some thought, but so far no progress on it. + +00:02:11.640 --> 00:02:11.980 +I haven't actually started doing anything + +00:02:12.240 --> 00:02:12.740 +about it. + +00:02:17.440 --> 00:02:17.780 +[Speaker 0]: Right, So I'm curious now, + +00:02:19.640 --> 00:02:19.900 +you developed the feature and then you moved + +00:02:21.600 --> 00:02:21.740 +on to the presentation or did you want to do + +00:02:23.080 --> 00:02:23.200 +a presentation for EmacsConf and then you + +00:02:24.140 --> 00:02:24.640 +worked on something like this? + +00:02:26.360 --> 00:02:26.860 +Which was it first, the chicken or the egg? + +00:02:28.220 --> 00:02:28.720 +[Speaker 1]: Yeah, it was the former. + +00:02:31.320 --> 00:02:31.820 +So this is a problem I've been aware of for, + +00:02:33.340 --> 00:02:33.840 +I mean, probably a couple of years. + +00:02:35.280 --> 00:02:35.640 +And, you know, I talked to my friend + +00:02:37.600 --> 00:02:37.840 +Valentino about it and we had like a little + +00:02:39.240 --> 00:02:39.740 +discussion, you know, how would we do this? + +00:02:41.880 --> 00:02:42.380 +And then I remember back when I was + +00:02:44.140 --> 00:02:44.260 +researching about this problem and the + +00:02:45.100 --> 00:02:45.600 +various Emacs Lisp solutions, + +00:02:47.780 --> 00:02:47.960 +all I could find were these solutions that + +00:02:49.400 --> 00:02:49.600 +would, you know, just shy away from + +00:02:50.640 --> 00:02:50.920 +implementing the RegEx case, + +00:02:52.340 --> 00:02:52.840 +which is a really complicated 1. + +00:02:54.720 --> 00:02:55.220 +And, after some discussion, + +00:02:56.140 --> 00:02:56.580 +my friend and I decided, + +00:02:58.080 --> 00:02:58.320 +okay, what the hell? Let's, + +00:02:59.280 --> 00:02:59.480 +let's try and implement this. + +00:03:01.800 --> 00:03:02.300 +How hard can it be? And yeah, + +00:03:03.280 --> 00:03:03.780 +basically in 1 afternoon, + +00:03:06.300 --> 00:03:06.500 +the idea, our little trick and the whole + +00:03:07.440 --> 00:03:07.940 +implementation was born. + +00:03:11.480 --> 00:03:11.680 +And then I think that was maybe around a year + +00:03:12.540 --> 00:03:13.040 +ago, maybe a bit less. + +00:03:14.480 --> 00:03:14.680 +And then through the months, + +00:03:15.920 --> 00:03:16.420 +we just thought, oh yeah, + +00:03:17.420 --> 00:03:17.640 +maybe we could present this, + +00:03:18.960 --> 00:03:19.200 +maybe it would be interesting for people to + +00:03:20.660 --> 00:03:20.920 +see and that's how we came up with the idea + +00:03:22.440 --> 00:03:22.940 +to present at EmacsConf. + +00:03:27.900 --> 00:03:28.180 +[Speaker 0]: Okay, great. I don't see other people asking + +00:03:30.240 --> 00:03:30.540 +questions. So people, it's nice if I ask + +00:03:31.100 --> 00:03:31.600 +questions but you know, + +00:03:33.160 --> 00:03:33.340 +the point is kind of for you to ask the + +00:03:35.140 --> 00:03:35.280 +questions. I see someone who's joined us on + +00:03:36.780 --> 00:03:37.120 +BBB. Peter, would you like to ask a question + +00:03:41.720 --> 00:03:41.980 +maybe? Otherwise I see another person writing + +00:03:43.040 --> 00:03:43.260 +a question on the pad, + +00:03:44.540 --> 00:03:44.700 +so we can either move for this 1. + +00:03:46.640 --> 00:03:46.800 +So I'll leave Peter to figure out if they + +00:03:47.680 --> 00:03:47.960 +want to ask a question. + +00:03:49.160 --> 00:03:49.660 +So I'm moving on to the next question. + +00:03:57.900 --> 00:03:58.180 +[Speaker 2]: I can jump in. That's a really well done talk + +00:04:01.780 --> 00:04:02.120 +and you really clearly laid out the problem + +00:04:03.000 --> 00:04:03.500 +and the solution there. + +00:04:05.600 --> 00:04:05.740 +While I was watching it, + +00:04:10.740 --> 00:04:11.040 +I was thinking maybe the nice way to name it + +00:04:13.140 --> 00:04:13.440 +is just to name it query replace and query + +00:04:15.700 --> 00:04:16.019 +replace regext, you know, + +00:04:18.480 --> 00:04:18.980 +overloading the original functions and then + +00:04:23.000 --> 00:04:23.460 +using a prefix number, + +00:04:26.880 --> 00:04:27.380 +like control number to indicate how many + +00:04:29.280 --> 00:04:29.780 +replacements you're going to do. + +00:04:31.640 --> 00:04:32.140 +But maybe that doesn't work with the + +00:04:36.680 --> 00:04:37.120 +recursive editing stuff, + +00:04:37.960 --> 00:04:38.180 +which I don't use much. + +00:04:40.440 --> 00:04:40.940 +So I don't have a good method. + +00:04:43.260 --> 00:04:43.760 +[Speaker 1]: I think it would definitely work. + +00:04:46.260 --> 00:04:46.440 +Well, the question is, + +00:04:47.880 --> 00:04:48.380 +if we just overwrite the definitions, + +00:04:51.700 --> 00:04:52.200 +then, oh, well, I guess we could do that. + +00:04:53.410 --> 00:04:53.560 +Nothing stops us. I mean, + +00:04:54.800 --> 00:04:54.880 +we're in Emacs. We could definitely do that. + +00:04:55.680 --> 00:04:55.920 +And then if you give, like, + +00:04:57.540 --> 00:04:57.720 +a prefix argument, maybe it just drops you + +00:04:59.060 --> 00:04:59.560 +back to the original query replace. + +00:05:01.000 --> 00:05:01.160 +Yeah, that's an idea. For now, + +00:05:02.440 --> 00:05:02.920 +we decided, OK, let's just keep everything + +00:05:05.000 --> 00:05:05.240 +explicitly separate just to avoid any + +00:05:05.240 --> 00:05:05.740 +confusion. + +00:05:09.220 --> 00:05:09.400 +[Speaker 2]: Yeah, I think that's the right thing to do + +00:05:11.820 --> 00:05:12.320 +for now. What I'm actually thinking is that + +00:05:13.620 --> 00:05:13.940 +when you do query replace, + +00:05:15.600 --> 00:05:16.100 +it just does the regular query replace. + +00:05:17.220 --> 00:05:17.440 +And if you're going to do, + +00:05:20.140 --> 00:05:20.640 +say, 3 parallel replacements, + +00:05:21.340 --> 00:05:21.840 +then you do Control-U, + +00:05:25.580 --> 00:05:26.080 +query replace. Sorry. Control-3, + +00:05:28.580 --> 00:05:28.860 +query replace. And then that way you don't + +00:05:33.400 --> 00:05:33.760 +have The final prompt that you give nothing + +00:05:33.760 --> 00:05:34.260 +to. + +00:05:36.880 --> 00:05:37.380 +[Speaker 1]: Exactly, that's actually not a bad idea. + +00:05:39.720 --> 00:05:40.080 +I think I like that. Yeah, + +00:05:40.800 --> 00:05:41.300 +that's not a bad idea. + +00:05:44.760 --> 00:05:44.920 +[Speaker 0]: It's always a quagmire whether to ask for an + +00:05:47.080 --> 00:05:47.580 +argument or to use the universal argument. + +00:05:51.060 --> 00:05:51.380 +When you're working with Emacs and especially + +00:05:52.640 --> 00:05:52.960 +the UX side of things in the package, + +00:05:54.900 --> 00:05:55.020 +it's so complicated to figure out which 1 you + +00:05:56.880 --> 00:05:57.380 +want to do. In this particular case, + +00:06:00.340 --> 00:06:00.840 +I think it's the better option to use the + +00:06:02.800 --> 00:06:03.120 +universal argument or any kind of argument + +00:06:04.040 --> 00:06:04.540 +with a control number before. + +00:06:10.240 --> 00:06:10.440 +All right, we have about 3 more minutes of + +00:06:12.440 --> 00:06:12.720 +questions. Peter, if you don't mind, + +00:06:14.440 --> 00:06:14.940 +I'll keep reading the questions in the chat. + +00:06:19.440 --> 00:06:19.940 +Did you use pair programming while developing + +00:06:21.100 --> 00:06:21.600 +it, it being a package, + +00:06:22.440 --> 00:06:22.940 +or did you work independently, + +00:06:24.840 --> 00:06:25.340 +alternating and reviewing with Valentino? + +00:06:28.320 --> 00:06:28.440 +[Speaker 1]: It was definitely a pair programming kind of + +00:06:29.440 --> 00:06:29.940 +thing. So if I remember correctly, + +00:06:32.760 --> 00:06:33.260 +I was sitting at the computer and Valentino + +00:06:36.020 --> 00:06:36.520 +was in front of a whiteboard and we were just + +00:06:38.400 --> 00:06:38.900 +dissecting this regex and a bunch of examples + +00:06:41.680 --> 00:06:41.820 +and trying to get these capture groups and + +00:06:44.240 --> 00:06:44.440 +stuff that we have to remap internally to get + +00:06:46.560 --> 00:06:46.880 +these offsets right and avoid off by 1 error + +00:06:48.160 --> 00:06:48.420 +and stuff like that. So yeah, + +00:06:49.280 --> 00:06:49.780 +definitely a team effort. + +00:06:53.660 --> 00:06:54.160 +[Speaker 0]: Okay, great. Moving on to the next question. + +00:06:55.240 --> 00:06:55.740 +What is your background in programming? + +00:06:57.440 --> 00:06:57.620 +Was it difficult to implement following the + +00:06:59.700 --> 00:07:00.040 +same API and architecture as what is already + +00:07:00.200 --> 00:07:00.700 +in Emacs? + +00:07:05.400 --> 00:07:05.680 +[Speaker 1]: So maybe just a quick back story. + +00:07:06.960 --> 00:07:07.440 +Both Valentino and I are actually PhD + +00:07:08.300 --> 00:07:08.680 +students in computer science, + +00:07:09.960 --> 00:07:10.460 +and we literally share an office. + +00:07:12.960 --> 00:07:13.180 +So that's how we even started talking about + +00:07:14.480 --> 00:07:14.900 +this whole thing. And we both use Emacs, + +00:07:18.380 --> 00:07:18.640 +of course. But I don't think this was too + +00:07:20.740 --> 00:07:20.880 +hard to implement because luckily all of the + +00:07:22.300 --> 00:07:22.540 +interactive functionality like this + +00:07:23.600 --> 00:07:24.100 +complicated undo, skipping, + +00:07:25.680 --> 00:07:26.180 +execute until the end and so on, + +00:07:27.980 --> 00:07:28.380 +all of this is really just already provided + +00:07:29.860 --> 00:07:30.360 +by the Emacs queer replace implementation. + +00:07:34.160 --> 00:07:34.360 +So sort of what we do is we just invoke it as + +00:07:36.080 --> 00:07:36.220 +a function and delegate to it. + +00:07:37.800 --> 00:07:38.000 +And we came up with this clever trick to + +00:07:42.380 --> 00:07:42.560 +basically delegate this multi-replacement to + +00:07:45.160 --> 00:07:45.660 +this 1 single function that's already there. + +00:07:47.980 --> 00:07:48.480 +So it wasn't too complicated. + +00:07:54.780 --> 00:07:54.960 +[Speaker 0]: Alright. And we have about 2 minutes of time + +00:07:55.560 --> 00:07:56.040 +for the last question. + +00:07:58.040 --> 00:07:58.260 +What did you learn about Emacs programming or + +00:08:00.020 --> 00:08:00.100 +programming in general while working on this + +00:08:02.320 --> 00:08:02.820 +project? A very wide question for me. + +00:08:05.840 --> 00:08:06.340 +[Speaker 1]: Maybe 1 thing I would like to add to the + +00:08:09.220 --> 00:08:09.440 +previous just answer is I don't want to say + +00:08:10.160 --> 00:08:10.660 +like you know we're PhDs, + +00:08:12.780 --> 00:08:13.260 +a PhD is required for this or anything, + +00:08:15.800 --> 00:08:15.920 +not at all. It's mostly just for a little bit + +00:08:19.220 --> 00:08:19.720 +of context, but I think obviously, + +00:08:20.640 --> 00:08:21.020 +even if you're not a PhD, + +00:08:22.360 --> 00:08:22.540 +I mean, you don't even require like + +00:08:24.960 --> 00:08:25.460 +university, you know, education or anything. + +00:08:27.540 --> 00:08:28.040 +It wasn't overly difficult to implement, + +00:08:30.680 --> 00:08:31.080 +sort of just read some code that's already + +00:08:33.539 --> 00:08:34.039 +there and you know follow what you see and + +00:08:35.860 --> 00:08:36.020 +poke Emacs a little bit and do a little bit + +00:08:38.140 --> 00:08:38.320 +of debugging on the internals and you can + +00:08:40.280 --> 00:08:40.440 +definitely get it. So definitely not a + +00:08:42.240 --> 00:08:42.400 +prerequisite to have a degree or anything to + +00:08:45.480 --> 00:08:45.600 +do any of this stuff. Okay so Coming back to + +00:08:48.420 --> 00:08:48.560 +[Speaker 0]: Yeah, I'm going to amend a little bit the + +00:08:49.680 --> 00:08:49.960 +question because we only have 1 minute. + +00:08:51.600 --> 00:08:52.100 +So just 1 thing in 10 seconds, + +00:08:52.490 --> 00:08:52.540 +[Speaker 2]: what did you + +00:08:53.040 --> 00:08:53.540 +[Speaker 0]: learn about this? + +00:08:54.240 --> 00:08:54.380 +[Speaker 1]: your last question. What did I learn about + +00:08:56.420 --> 00:08:56.920 +Emacs programming? That Emacs is so flexible + +00:08:59.160 --> 00:08:59.360 +that I can go and I can patch literally its + +00:09:01.480 --> 00:09:01.880 +message function. And that is how we achieve + +00:09:03.680 --> 00:09:04.180 +the nice message function in the echo buffer. + +00:09:06.720 --> 00:09:06.980 +So I can literally go and patch something as + +00:09:07.560 --> 00:09:08.060 +crucial as message. + +00:09:09.920 --> 00:09:10.420 +[Speaker 0]: It's great. That's a lovely 1. + +00:09:12.260 --> 00:09:12.380 +And I think, again, we're going back to the + +00:09:13.660 --> 00:09:13.780 +philosophy of Emacs. Everything is + +00:09:15.200 --> 00:09:15.520 +programmable and even changing the message + +00:09:16.640 --> 00:09:16.800 +function is great. All right, + +00:09:17.440 --> 00:09:17.640 +well, thank you so much, + +00:09:19.540 --> 00:09:19.660 +Lovro, and thanks to Valentino as well, + +00:09:21.820 --> 00:09:21.960 +who's not here, but who's contributed to this + +00:09:23.900 --> 00:09:24.400 +talk. Any last word? + +00:09:29.540 --> 00:09:29.800 +[Speaker 1]: Well, just if you're gonna build any + +00:09:31.980 --> 00:09:32.160 +solutions, try to make them as foolproof and + +00:09:34.360 --> 00:09:34.540 +as 100% as possible so we get more of these + +00:09:36.280 --> 00:09:36.420 +goodies that are nice and robust for + +00:09:37.000 --> 00:09:37.500 +everybody to use. + +00:09:39.400 --> 00:09:39.620 +[Speaker 0]: All right, lovely. Well, + +00:09:40.240 --> 00:09:40.580 +thank you so much, Lover, + +00:09:41.940 --> 00:09:42.380 +for your presentation and your answer. + +00:09:44.340 --> 00:09:44.640 +We'll be moving on to the next talk in just + +00:09:47.260 --> 00:09:47.720 +about 5 seconds, and I'll see you after. + +00:09:47.900 --> 00:09:48.400 +Bye, Lovro! + +00:09:49.760 --> 00:09:50.260 +[Speaker 1]: Yep, bye bye! + +00:10:01.440 --> 00:10:01.560 +[Speaker 0]: So I'm just waiting to make sure my VNC is a + +00:10:02.840 --> 00:10:03.000 +little slow. Okay, we switch to the next + +00:10:03.480 --> 00:10:03.740 +talk. All right, Lover, + +00:10:04.960 --> 00:10:05.460 +I'm gonna need to go get ready now. + +00:10:09.060 --> 00:10:09.560 +Yep. Bye-bye, and thanks for your talk. + +00:10:11.160 --> 00:10:11.660 +[Speaker 1]: Bye, thank you, see you. + +00:10:15.060 --> 00:10:15.560 +[Speaker 2]: You diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt new file mode 100644 index 00000000..359a1228 --- /dev/null +++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt @@ -0,0 +1,49 @@ +WEBVTT + +00:00:00.000 --> 00:00:23.340 +Introduction + +00:00:23.440 --> 00:01:12.260 +Problem: Goal + +00:01:12.360 --> 00:01:34.100 +Problem: Naive Multi-pass + +00:01:34.200 --> 00:01:57.620 +Problem: Clever Multi-pass + +00:01:57.720 --> 00:03:03.340 +Problem: Terminology + +00:03:04.440 --> 00:03:54.820 +Problem: Scaling Multi-pass + +00:03:55.920 --> 00:04:17.140 +Solution: Single-pass + +00:04:18.240 --> 00:06:28.180 +Solution: Existing + +00:06:29.080 --> 00:06:54.140 +Solution: query-replace-parallel + +00:06:55.240 --> 00:07:51.020 +Demonstration: Swap + +00:07:53.970 --> 00:08:46.100 +Demonstration: LaTeX + +00:08:48.700 --> 00:09:31.220 +Demonstration: Regex + +00:09:36.320 --> 00:10:52.340 +Demonstration: Order + +00:10:54.440 --> 00:12:26.620 +Demonstration: Fun + +00:12:29.120 --> 00:14:17.140 +Implementation + +00:14:18.740 --> 00:14:45.560 +End diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt new file mode 100644 index 00000000..ba813a81 --- /dev/null +++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt @@ -0,0 +1,972 @@ +WEBVTT captioned by Lovro + +NOTE Introduction + +00:00:00.000 --> 00:00:01.540 +Hi everyone! + +00:00:01.640 --> 00:00:04.540 +Welcome to our talk on Parallel Text Replacement. + +00:00:04.640 --> 00:00:06.940 +My name is Lovro, and I'll be telling you about an + +00:00:07.040 --> 00:00:09.260 +interesting problem that my friend Valentino and I + +00:00:09.360 --> 00:00:11.660 +set out to solve one afternoon. + +00:00:11.760 --> 00:00:13.580 +We will describe the problem, take a look at some + +00:00:13.680 --> 00:00:16.780 +of the existing work and then present our solution. + +00:00:16.880 --> 00:00:18.980 +Afterwards, we will show some demos and conclude + +00:00:19.080 --> 00:00:21.420 +with a quick overview of the implementation. + +00:00:21.520 --> 00:00:23.340 +Let's get straight into it! + +NOTE Problem: Goal + +00:00:23.440 --> 00:00:25.700 +Here is a problem that most of us have dealt with + +00:00:25.800 --> 00:00:26.940 +at some point. + +00:00:27.040 --> 00:00:29.780 +Assume we have a piece of code such as the following. + +00:00:29.880 --> 00:00:32.420 +We use a code example here, but in general what we're + +00:00:32.520 --> 00:00:35.500 +about to discuss can be applied to any piece of text. + +00:00:35.600 --> 00:00:37.540 +After a bit of thinking, we decide that the names of + +00:00:37.640 --> 00:00:39.860 +the two variables, "foo" and "bar", should actually be + +00:00:39.960 --> 00:00:40.780 +swapped. + +00:00:40.880 --> 00:00:43.460 +That is, "foo" should be replaced with "bar", and "bar" + +00:00:43.560 --> 00:00:44.940 +should be replaced with "foo". + +00:00:45.040 --> 00:00:48.980 +The question is: what is a good way to achieve this? + +00:00:49.080 --> 00:00:51.660 +We could perform the edits manually if the code is + +00:00:51.760 --> 00:00:53.780 +small enough, and we might even be done reasonably + +00:00:53.880 --> 00:00:54.620 +quickly. + +00:00:54.720 --> 00:00:56.620 +However, consider two things. + +00:00:56.720 --> 00:00:58.860 +Imagine the usual case where there's just too much + +00:00:58.960 --> 00:01:00.660 +code to edit by hand. + +00:01:00.760 --> 00:01:03.580 +We have no other option than to automate the task. + +00:01:03.680 --> 00:01:06.020 +More importantly though, we have a whole programmable + +00:01:06.120 --> 00:01:08.180 +text editor right at our fingertips. + +00:01:08.280 --> 00:01:10.180 +We should object to doing things that the computer + +00:01:10.280 --> 00:01:12.260 +can do for us. + +NOTE Problem: Naive Multi-pass + +00:01:12.360 --> 00:01:15.460 +So, one way to automate it is by using our old friend + +00:01:15.560 --> 00:01:18.940 +query-replace (M-%) multiple times in a sequence. + +00:01:19.040 --> 00:01:22.140 +We first do a pass where we replace "foo" with "bar", + +00:01:22.240 --> 00:01:25.540 +then we do another pass where we replace "bar" with "foo". + +00:01:25.640 --> 00:01:26.860 +But that's clearly not right. + +00:01:26.960 --> 00:01:29.060 +We all know that this naive multi-pass approach + +00:01:29.160 --> 00:01:31.460 +doesn't work because it results in interference + +00:01:31.560 --> 00:01:34.100 +between the two replacements. + +NOTE Problem: Clever Multi-pass + +00:01:34.200 --> 00:01:36.700 +Instead, we have to be a bit more clever. + +00:01:36.800 --> 00:01:39.740 +We should first replace "foo" with a temporary string, + +00:01:39.840 --> 00:01:42.020 +in this case "oof", that we will call a "token". + +00:01:42.120 --> 00:01:45.380 +To avoid interference, we must be careful to ensure + +00:01:45.480 --> 00:01:48.020 +that the token does not contain whatever we're about + +00:01:48.120 --> 00:01:49.500 +to replace next. + +00:01:49.600 --> 00:01:52.620 +Then we do a second pass to replace "bar" with "foo", + +00:01:52.720 --> 00:01:55.980 +and finally a third pass to replace the token with "bar". + +00:01:56.080 --> 00:01:57.620 +This gives us the result we want. + +NOTE Problem: Terminology + +00:01:57.720 --> 00:02:01.820 +Putting the implementation aside for a moment, this style + +00:02:01.920 --> 00:02:05.500 +of text replacement, where we replace multiple sources + +00:02:05.600 --> 00:02:08.940 +with their targets, without running into interference + +00:02:09.040 --> 00:02:11.660 +issues between replacement pairs, is what we call + +00:02:11.760 --> 00:02:12.740 +a "parallel replacement". + +00:02:12.840 --> 00:02:16.260 +This is the essence of the problem we're trying to solve. + +00:02:16.360 --> 00:02:18.580 +The examples with swapping that we've shown so far + +00:02:18.680 --> 00:02:21.220 +are really just one of the many use cases that are + +00:02:21.320 --> 00:02:23.740 +supported by a general parallel replacement utility. + +00:02:25.040 --> 00:02:28.660 +To avoid confusion, let us clarify that the word "parallel" + +00:02:28.760 --> 00:02:31.660 +is not in reference to hardware parallelization, but + +00:02:31.760 --> 00:02:34.780 +rather comes from analogy with the Lisp let operator, + +00:02:34.880 --> 00:02:38.060 +where the bindings of variables are performed in parallel, + +00:02:38.160 --> 00:02:40.100 +rather than sequentially as in let*. + +00:02:40.200 --> 00:02:43.580 +Parallel in this context means that none of the bindings + +00:02:43.680 --> 00:02:46.780 +are in scope within any of the initial value forms. + +00:02:46.880 --> 00:02:50.100 +In other words, just like a let's initialization form + +00:02:50.200 --> 00:02:53.620 +cannot refer to any of the earlier bindings, a + +00:02:53.720 --> 00:02:56.660 +replacement pair's source should not be able to replace + +00:02:56.760 --> 00:03:00.100 +the previously substituted targets of any other pair. + +00:03:00.200 --> 00:03:03.340 +This is what we mean by "no interference". + +NOTE Problem: Scaling Multi-pass + +00:03:04.440 --> 00:03:07.900 +However, manually invoking multiple carefully chosen + +00:03:08.000 --> 00:03:11.420 +query-replace commands gets old very quickly. + +00:03:11.520 --> 00:03:14.100 +Say we scaled up the problem and wanted to perform n + +00:03:14.200 --> 00:03:18.220 +swaps instead of just two, e.g. to swap, or rather, + +00:03:18.320 --> 00:03:22.060 +rotate, "foo" to "bar", "bar" to "baz", "baz" to "quux" + +00:03:22.160 --> 00:03:23.700 +and "quux" to "foo". + +00:03:23.800 --> 00:03:26.260 +We would first have to perform n - 1 additional + +00:03:26.360 --> 00:03:29.140 +replacements to introduce the necessary tokens, + +00:03:29.240 --> 00:03:32.140 +effectively doubling the number of steps. + +00:03:32.240 --> 00:03:34.700 +Even if we tried to automate this, think about what + +00:03:34.800 --> 00:03:37.580 +tokens the code would have to generate if we had no + +00:03:37.680 --> 00:03:40.420 +prior knowledge of the replacement pairs given by the + +00:03:40.520 --> 00:03:41.460 +user. + +00:03:41.560 --> 00:03:44.060 +We would have to program defensively and use long + +00:03:44.160 --> 00:03:47.460 +randomly-generated strings that, one, hopefully do + +00:03:47.560 --> 00:03:50.180 +not interfere with any of the replacement pairs, + +00:03:50.280 --> 00:03:53.380 +and two, might slow down the search if they're overly long. + +00:03:53.480 --> 00:03:54.820 +Can we do better? + +NOTE Solution: Single-pass + +00:03:55.920 --> 00:03:56.740 +Yes we can! + +00:03:56.840 --> 00:03:59.580 +We can actually perform just a single pass. + +00:03:59.680 --> 00:04:02.180 +The trick is to alternate between the replacement + +00:04:02.280 --> 00:04:05.900 +pairs, replacing whichever source occurs the earliest, + +00:04:06.000 --> 00:04:08.340 +and making sure to continue scanning after the end + +00:04:08.440 --> 00:04:12.180 +of the substituted target in order to avoid interference. + +00:04:12.280 --> 00:04:14.420 +This interleaving of replacements is not something + +00:04:14.520 --> 00:04:17.140 +that's easy to do by hand with query-replace. + +NOTE Solution: Existing + +00:04:18.240 --> 00:04:20.860 +Since this is Emacs we're talking about, of course + +00:04:20.960 --> 00:04:23.460 +there already exist solutions that implement this idea. + +00:04:23.560 --> 00:04:25.860 +Here are few that we could find. + +00:04:25.960 --> 00:04:28.700 +The EmacsWiki has a page dedicated to this problem. + +00:04:28.800 --> 00:04:31.460 +Stack Overflow has an old post where a couple of + +00:04:31.560 --> 00:04:33.860 +users provided their solutions. + +00:04:33.960 --> 00:04:36.820 +Mastering Emacs also gives a method along with other + +00:04:36.920 --> 00:04:38.900 +interesting query-replace-regexp (C-M-%) patterns. + +00:04:39.000 --> 00:04:42.260 +More recently, Tony Zorman made a blogpost providing + +00:04:42.360 --> 00:04:44.980 +a solution with an interface based on query-replace. + +00:04:45.080 --> 00:04:47.540 +I encourage you to take a look at these solutions if + +00:04:47.640 --> 00:04:48.940 +you're interested in the details. + +00:04:50.040 --> 00:04:52.940 +But while a step in the right direction, these solutions + +00:04:53.040 --> 00:04:55.340 +are not satisfactory because they all lack one or + +00:04:55.440 --> 00:04:56.820 +more of the following. + +00:04:56.920 --> 00:04:59.900 +One, they are not completely automated and require + +00:05:00.000 --> 00:05:02.500 +the user to come up with a relatively complicated + +00:05:02.600 --> 00:05:05.380 +and verbose query-replace-regexp invocation. + +00:05:06.080 --> 00:05:08.940 +Two, they are restricted to performing only 2-element + +00:05:09.040 --> 00:05:11.780 +swaps rather than general parallel replacements. + +00:05:12.680 --> 00:05:15.060 +Three, they don't provide any sort of interactivity + +00:05:15.160 --> 00:05:17.820 +during replacement and instead perform it in one shot. + +00:05:18.620 --> 00:05:21.300 +Four, they don't attempt to integrate with the familiar + +00:05:21.400 --> 00:05:24.900 +query-replace interface, which supports skipping, undo, + +00:05:25.000 --> 00:05:28.340 +history and more advanced features like Lisp expressions + +00:05:28.440 --> 00:05:29.900 +and recursive query edits. + +00:05:30.700 --> 00:05:33.700 +Most importantly however, five, none of them were + +00:05:33.800 --> 00:05:36.380 +designed with regular expressions in mind and instead + +00:05:36.480 --> 00:05:38.460 +only ever consider literal strings. + +00:05:39.560 --> 00:05:43.060 +In fact, the only one that comes close is the + +00:05:43.160 --> 00:05:46.420 +half-automated solution that invokes query-replace-regexp + +00:05:46.520 --> 00:05:48.100 +with a specially crafted replacement. + +00:05:48.800 --> 00:05:51.660 +As an example, here's how you would use this technique + +00:05:51.760 --> 00:05:54.340 +to perform a 3-element parallel regex replacement. + +00:05:54.440 --> 00:05:57.740 +It uses the backslash-comma Lisp expression feature + +00:05:57.840 --> 00:06:01.180 +in order to choose the appropriate target to substitute. + +00:06:01.280 --> 00:06:03.700 +Aside from being very clumsy and tedious to write out, + +00:06:03.800 --> 00:06:06.860 +this approach makes it really hard to use more complex + +00:06:06.960 --> 00:06:09.260 +regular expressions that make use of capture groups + +00:06:09.360 --> 00:06:10.600 +themselves. + +00:06:10.800 --> 00:06:12.200 +This was the biggest limitation that we wanted + +00:06:12.200 --> 00:06:15.020 +to get rid of and the main motivation for our work. + +00:06:15.720 --> 00:06:19.820 +So, as an alternative to the existing zoo of 80% solutions, + +00:06:19.920 --> 00:06:24.140 +we aim to provide a 100% solution, one that handles + +00:06:24.240 --> 00:06:27.020 +regexes and consolidates all of the existing ideas + +00:06:27.120 --> 00:06:28.180 +into a single package. + +NOTE Solution: query-replace-parallel + +00:06:29.080 --> 00:06:31.260 +We call it query-replace-parallel. + +00:06:31.360 --> 00:06:34.060 +The package is free and open-source and can currently + +00:06:34.160 --> 00:06:37.300 +be found on GitHub under hokomo/query-replace-parallel. + +00:06:37.400 --> 00:06:40.140 +The name is not yet finalized and we're open to any + +00:06:40.240 --> 00:06:41.170 +suggestions. + +00:06:41.503 --> 00:06:43.180 +We hope to get it published on an Elisp + +00:06:43.280 --> 00:06:45.780 +package archive in the near future, but for now you + +00:06:45.880 --> 00:06:48.300 +can just download and load the main Elisp file manually. + +00:06:48.900 --> 00:06:51.300 +With all of that said, let's go through a few demos + +00:06:51.400 --> 00:06:54.140 +to illustrate some use cases and see how to use the package. + +NOTE Demonstration: Swap + +00:06:55.240 --> 00:06:57.460 +Our first demo is a simple swap, like the one we + +00:06:57.560 --> 00:06:59.140 +showed at the beginning of the presentation. + +00:06:59.240 --> 00:07:02.060 +This chunk of text is actually one of the tests + +00:07:02.160 --> 00:07:03.140 +from our package's code. + +00:07:03.840 --> 00:07:06.420 +Assuming we have loaded the package, we can execute + +00:07:06.520 --> 00:07:09.580 +the query-replace-parallel command, a parallel version + +00:07:09.680 --> 00:07:11.220 +of the standard query-replace. + +00:07:11.320 --> 00:07:13.940 +This command works with literal strings and will + +00:07:14.040 --> 00:07:15.900 +ask for each source and target in turn. + +00:07:16.000 --> 00:07:21.260 +Our goal is to replace "foo" with "bar" + +00:07:21.360 --> 00:07:22.180 +and "bar" with "foo". + +00:07:24.680 --> 00:07:26.940 +After inputting our replacements, we terminate the + +00:07:27.040 --> 00:07:29.060 +prompt by pressing enter with empty input. + +00:07:29.860 --> 00:07:32.500 +At this point, everything functions the same as in + +00:07:32.600 --> 00:07:34.380 +a standard query-replace invocation. + +00:07:35.280 --> 00:07:37.300 +The echo area shows the match and the replacement + +00:07:37.400 --> 00:07:38.603 +we're about to make. + +00:07:38.703 --> 00:07:40.220 +We can perform replacements, + +00:07:43.920 --> 00:07:46.403 +undo them, + +00:07:46.503 --> 00:07:49.103 +skip them, + +00:07:49.203 --> 00:07:50.140 +execute them until the end, + +00:07:50.240 --> 00:07:51.020 +and so on. + +NOTE Demonstration: LaTeX + +00:07:53.970 --> 00:07:56.180 +The second demo shows our first regex use case. + +00:07:56.280 --> 00:07:58.620 +Imagine we have the following LaTeX code. + +00:07:58.720 --> 00:08:01.380 +We realize that we haven't been completely consistent + +00:08:01.480 --> 00:08:03.940 +in our use and naming of macros, so we decide to + +00:08:04.040 --> 00:08:04.660 +fix the problem. + +00:08:05.536 --> 00:08:08.300 +This time we execute query-replace-parallel-regexp + +00:08:08.400 --> 00:08:10.900 +because we want to work with regex instead of literal + +00:08:11.000 --> 00:08:11.500 +strings. + +00:08:12.000 --> 00:08:13.420 +We want to achieve two things. + +00:08:13.520 --> 00:08:16.860 +First, we want to wrap all usages of the variable n + +00:08:16.960 --> 00:08:17.980 +with the natvar macro. + +00:08:18.080 --> 00:08:20.940 +Using the backslash-less-than and blackslash-greater-than + +00:08:21.040 --> 00:08:23.740 +constructs allows us to only match letters n not + +00:08:23.840 --> 00:08:25.260 +appearing as part of a larger word. + +00:08:25.360 --> 00:08:29.460 +Second, we want to rename natvar to intvar because + +00:08:29.560 --> 00:08:32.180 +the variables a, b and c are integers and not natural + +00:08:32.280 --> 00:08:32.700 +numbers. + +00:08:33.300 --> 00:08:35.660 +We enter empty input to terminate the prompt and can + +00:08:35.760 --> 00:08:37.180 +now perform the replacements. + +00:08:42.280 --> 00:08:44.380 +There we go, the fixes are done and we didn't have + +00:08:44.480 --> 00:08:46.100 +to think about in which order to apply them. + +NOTE Demonstration: Regex + +00:08:48.700 --> 00:08:50.900 +We now take a look at a more complicated regex + +00:08:51.000 --> 00:08:53.580 +example to demonstrate that even advanced query-replace + +00:08:53.680 --> 00:08:54.300 +features are supported. + +00:08:55.100 --> 00:08:57.340 +Each "foo" and "bar" in this example is followed by + +00:08:57.440 --> 00:08:57.740 +a number. + +00:08:58.440 --> 00:09:01.280 +The goal is to not only swap "foo" and "bar", but + +00:09:01.380 --> 00:09:03.620 +also increase or decrease the corresponding number. + +00:09:03.720 --> 00:09:06.500 +We first match "foo" and capture the number that + +00:09:06.600 --> 00:09:07.100 +follows it. + +00:09:07.200 --> 00:09:09.900 +For the target, we make use of the backslash-comma + +00:09:10.000 --> 00:09:12.500 +Lisp expression feature in order to replace the + +00:09:12.600 --> 00:09:14.940 +match with "bar" followed by the number's successor. + +00:09:15.540 --> 00:09:17.540 +We do the same thing for "bar", except that we + +00:09:17.640 --> 00:09:19.140 +replace the number with its predecessor. + +00:09:27.040 --> 00:09:29.020 +Performing the replacements, we can see how each + +00:09:29.120 --> 00:09:31.220 +number is incremented or decremented appropriately. + +NOTE Demonstration: Order + +00:09:36.320 --> 00:09:38.660 +We haven't covered it explicitly so some of you may + +00:09:38.760 --> 00:09:41.260 +be wondering how parallel replacement deals with + +00:09:41.360 --> 00:09:43.740 +overlapping matches and whether the order of the + +00:09:43.840 --> 00:09:45.380 +replacement pairs is significant. + +00:09:45.480 --> 00:09:47.860 +This demo will clarify the exact behavior. + +00:09:48.960 --> 00:09:51.700 +The first example has the sources "watch" and "stopwatch". + +00:09:57.500 --> 00:10:00.500 +Conceptually, the matches overlap, but the rule is + +00:10:00.600 --> 00:10:02.900 +that matches are always processed earliest first, + +00:10:03.000 --> 00:10:05.940 +regardless of their length or the ordering of the pairs. + +00:10:06.040 --> 00:10:08.980 +Therefore it is "stopwatch" that gets replaced, + +00:10:09.080 --> 00:10:10.940 +and not its substring "watch". + +00:10:16.040 --> 00:10:19.540 +The second example uses the sources "watch" and "watchword". + +00:10:19.640 --> 00:10:22.540 +Both of the matches now conceptually start at the same + +00:10:22.640 --> 00:10:23.020 +position. + +00:10:23.720 --> 00:10:26.300 +In situations like these the order of the pairs does + +00:10:26.400 --> 00:10:29.460 +matter, and ties are broken by prefering the pair that + +00:10:29.560 --> 00:10:32.180 +was entered first, which is behavior that is inherited + +00:10:32.280 --> 00:10:33.460 +from the Elisp regex engine. + +00:10:34.460 --> 00:10:37.380 +So, the substring "watch" in "watchword" is what gets + +00:10:37.480 --> 00:10:38.460 +replaced in this case. + +00:10:39.460 --> 00:10:41.740 +Situations where the order of the pairs is significant + +00:10:41.840 --> 00:10:44.740 +are not very common however, so the user generally + +00:10:44.840 --> 00:10:46.660 +doesn't have to worry about this edge case. + +00:10:46.760 --> 00:10:49.860 +The order only matters when two or more sources + +00:10:49.960 --> 00:10:52.340 +share the same prefix, as in this example. + +NOTE Demonstration: Fun + +00:10:54.440 --> 00:10:56.860 +The final demo tests the limits of the package and + +00:10:56.960 --> 00:10:59.660 +shows that it fully integrates with query-replace. + +00:10:59.760 --> 00:11:02.940 +It is really just for fun and can even serve as a + +00:11:03.040 --> 00:11:04.140 +small Emacs brainteaser. + +00:11:04.240 --> 00:11:05.460 +See if you can keep up! + +00:11:06.360 --> 00:11:09.060 +We open a directory and enter Writable Dired mode + +00:11:09.160 --> 00:11:11.780 +in order to rename the directories "foo" and "bar". + +00:11:11.880 --> 00:11:14.660 +Instead of doing it quickly by hand, we decide to + +00:11:14.760 --> 00:11:17.260 +show off and use query-replace-parallel-regexp. + +00:11:17.360 --> 00:11:19.900 +We enter our pairs and make use of the + +00:11:20.000 --> 00:11:22.380 +backslash-question-mark query edit feature. + +00:11:25.080 --> 00:11:27.820 +Now whenever we perform a replacement, the query + +00:11:27.920 --> 00:11:30.740 +edit makes Emacs stop and prompt us for additional + +00:11:30.840 --> 00:11:32.180 +input to use as the target. + +00:11:36.680 --> 00:11:39.140 +We confirm the renames and now enter the "bar-lib" + +00:11:39.240 --> 00:11:41.900 +directory in order to perform the same kind of + +00:11:42.000 --> 00:11:43.900 +replacement on "baz" and "quux". + +00:11:44.500 --> 00:11:47.820 +Rather than save time, we decide to be extra lazy + +00:11:47.920 --> 00:11:48.820 +and take the long route. + +00:11:48.920 --> 00:11:52.220 +We recall the first pair and initiate a recursive + +00:11:52.320 --> 00:11:54.460 +invocation of query-replace-parallel-regexp. + +00:11:54.560 --> 00:11:57.020 +We are now replacing the replacement. + +00:12:01.020 --> 00:12:04.540 +We apply our fixes and then do the same thing again + +00:12:04.640 --> 00:12:05.870 +with the second pair. + +00:12:05.970 --> 00:12:07.500 +Recall and recurse. + +00:12:16.300 --> 00:12:19.860 +We confirm the prompt and finally rename our directories. + +00:12:25.360 --> 00:12:26.620 +Wow, that really paid off. + +NOTE Implementation + +00:12:29.120 --> 00:12:31.380 +Before we finish, a few quick words about the + +00:12:31.480 --> 00:12:32.900 +implementation for the curious. + +00:12:33.300 --> 00:12:36.380 +Both query-replace-parallel and query-replace-parallel-regexp + +00:12:36.480 --> 00:12:39.140 +delegate to the complex perform-replace function + +00:12:39.240 --> 00:12:41.780 +which is the workhorse of query-replace's interactive + +00:12:41.880 --> 00:12:42.420 +mechanism. + +00:12:43.120 --> 00:12:45.420 +The way we achieve multiple interleaved replacements + +00:12:45.520 --> 00:12:49.020 +is by providing perform-replace with a big "matcher regex" + +00:12:49.120 --> 00:12:50.380 +and a special replacement function. + +00:12:50.480 --> 00:12:54.300 +Essentially, a complex parallel replacement like this + +00:12:54.400 --> 00:12:57.420 +is transformed into a standard replacement like this. + +00:12:57.520 --> 00:13:00.100 +This is similar to the trick shown earlier in the + +00:13:00.200 --> 00:13:00.780 +presentation. + +00:13:00.880 --> 00:13:03.820 +Each source is put in its own capture group to allow + +00:13:03.920 --> 00:13:06.340 +the replacement function to determine which one matched + +00:13:06.440 --> 00:13:08.380 +and return the appropriate target. + +00:13:08.980 --> 00:13:11.580 +However, we now take care to support arbitrary + +00:13:11.680 --> 00:13:13.380 +regular expressions as sources. + +00:13:13.480 --> 00:13:16.980 +We achieve this by converting each source regex into + +00:13:17.080 --> 00:13:19.820 +an equivalent one for which we can guarantee that its + +00:13:19.920 --> 00:13:22.820 +capture groups will not clash with our matcher regex. + +00:13:22.920 --> 00:13:25.900 +Information about this conversion is stored, and + +00:13:26.000 --> 00:13:28.220 +once the replacement function is called it has + +00:13:28.320 --> 00:13:30.260 +enough data to apply the replacement from the + +00:13:30.360 --> 00:13:32.020 +viewpoint of the original regex. + +00:13:32.720 --> 00:13:34.900 +The regex transformation is reliable because it + +00:13:35.000 --> 00:13:38.420 +uses the rx library, allowing us to treat regexes + +00:13:38.520 --> 00:13:41.940 +as s-expressions and avoid any nasty manual parsing. + +00:13:42.640 --> 00:13:46.540 +In fact, rx itself is based on one of Olin Shivers' + +00:13:46.640 --> 00:13:48.336 +100% solutions: + +00:13:48.436 --> 00:13:51.220 +SRE, or the S-expression regex notation. + +00:13:51.320 --> 00:13:54.340 +We all stand on the shoulders of many giants, so + +00:13:54.440 --> 00:13:56.500 +let's strive to design good solutions that we can + +00:13:56.600 --> 00:13:59.140 +all benefit from, many years into the future! + +00:13:59.240 --> 00:14:02.900 +Finally, because query-replace's core is not completely + +00:14:03.000 --> 00:14:06.060 +customizable, we did have to sprinkle in some advice + +00:14:06.160 --> 00:14:07.500 +to get certain things working. + +00:14:07.600 --> 00:14:11.060 +This concerns only minor cosmetic fixes and not the + +00:14:11.160 --> 00:14:13.940 +core replacement functionality, but we have nontheless + +00:14:14.040 --> 00:14:16.580 +tried to do it in the simplest and least intrusive way + +00:14:16.680 --> 00:14:17.140 +possible. + +NOTE End + +00:14:18.740 --> 00:14:21.580 +In conclusion, go download and play with the package. + +00:14:21.680 --> 00:14:24.460 +Even if you're not performing overlapping replacements, + +00:14:24.560 --> 00:14:26.780 +you can still use query-replace-parallel for the + +00:14:26.880 --> 00:14:29.620 +peace of mind knowing that things won't go wrong if + +00:14:29.720 --> 00:14:31.860 +you perform more than one replacement at a time. + +00:14:32.460 --> 00:14:34.540 +Feel free to let us know about any interesting or + +00:14:34.640 --> 00:14:37.460 +crazy use cases you might come up with, as well as + +00:14:37.560 --> 00:14:40.540 +improvements or bugs that make it only a 99% solution. + +00:14:40.640 --> 00:14:45.560 +Thanks for listening and have a great EmacsConf! diff --git a/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt b/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt new file mode 100644 index 00000000..8622eb0d --- /dev/null +++ b/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt @@ -0,0 +1,1973 @@ +WEBVTT + + +00:00:07.299 --> 00:00:07.799 +I think it's still going up. + +00:00:11.200 --> 00:00:11.700 +All right. I think we should be live now. + +00:00:12.900 --> 00:00:13.139 +So hi, everyone. And hi, + +00:00:13.780 --> 00:00:14.280 +Michael. How are you doing? + +00:00:18.080 --> 00:00:18.340 +Hi. Hello, EmacsConf. I'm pretty excited to + +00:00:22.420 --> 00:00:22.800 +be live at this year's EmacsConf and getting + +00:00:25.640 --> 00:00:25.960 +a chance to talk about my favorite program or + +00:00:29.140 --> 00:00:29.439 +our favorite program. Well, + +00:00:30.439 --> 00:00:30.820 +yeah, I'm doing pretty fine, + +00:00:32.680 --> 00:00:32.900 +and I'm excited. Well, + +00:00:35.020 --> 00:00:35.520 +so are we. So without further ado, + +00:00:37.640 --> 00:00:37.760 +the floor is yours. Present for as much as + +00:00:39.200 --> 00:00:39.700 +you want. We've already discussed the timings + +00:00:41.380 --> 00:00:41.880 +so I'll let you on your own. + +00:00:44.059 --> 00:00:44.380 +Okay so let's get started. + +00:00:46.560 --> 00:00:46.760 +The topic of the talk is the browser in a + +00:00:49.920 --> 00:00:50.420 +buffer or Poltus, a periodic web weaver. + +00:00:53.540 --> 00:00:53.700 +Poltus is a kind of spider and the name of + +00:00:55.680 --> 00:00:56.180 +the project I'm going to show you. + +00:01:01.400 --> 00:01:01.900 +But first let's set the stage for this + +00:01:04.940 --> 00:01:05.440 +project. Here we have Emacs I'm presenting + +00:01:07.240 --> 00:01:07.740 +from and here we have Firefox. + +00:01:09.600 --> 00:01:09.960 +I'm inside and there's a video. + +00:01:12.720 --> 00:01:13.220 +Okay, let's do this. Don't do the inception. + +00:01:14.900 --> 00:01:15.400 +Put it over there somewhere. + +00:01:17.940 --> 00:01:18.440 +Okay. So here's Firefox. + +00:01:20.760 --> 00:01:21.260 +It's not, it's, It's in a buffer, + +00:01:23.560 --> 00:01:24.060 +but it's pretty disconnected from Emacs. + +00:01:27.700 --> 00:01:28.200 +It's in an XWM buffer. + +00:01:30.880 --> 00:01:31.320 +So you can use it from inside Emacs, + +00:01:35.320 --> 00:01:35.440 +but they don't talk. Emacs doesn't talk to + +00:01:36.860 --> 00:01:37.120 +the browser and the browser doesn't talk + +00:01:40.320 --> 00:01:40.820 +back. And I'm going to show you something + +00:01:42.720 --> 00:01:43.220 +that changes this. But first, + +00:01:45.100 --> 00:01:45.280 +I think for many of you, + +00:01:47.080 --> 00:01:47.200 +it's the same, like there's Emacs and the + +00:01:49.120 --> 00:01:49.620 +other important program is the browser. + +00:01:55.340 --> 00:01:55.840 +So how do you do something? + +00:01:57.880 --> 00:01:58.180 +Let's continue with the stage. + +00:01:59.640 --> 00:02:00.140 +We have some research session. + +00:02:03.400 --> 00:02:03.680 +We have this EmacsConf we found this year and + +00:02:04.960 --> 00:02:05.460 +there are a lot of talks. + +00:02:07.500 --> 00:02:07.700 +This is the 1 we're watching right now and + +00:02:09.520 --> 00:02:10.020 +let's have a look. What else is interesting? + +00:02:11.980 --> 00:02:12.480 +Ah, this was yesterday. + +00:02:15.060 --> 00:02:15.560 +So have a look at today. + +00:02:17.980 --> 00:02:18.480 +There is a world of possibilities. + +00:02:20.320 --> 00:02:20.600 +That sounds great. Oh, + +00:02:23.340 --> 00:02:23.840 +that is right now. So greetings to you. + +00:02:27.800 --> 00:02:28.080 +Yes, the browser and the buffer and other + +00:02:30.200 --> 00:02:30.700 +stuff. So now we have a lot of talks, + +00:02:35.900 --> 00:02:36.080 +tabs open and we're going to go back to + +00:02:40.800 --> 00:02:41.300 +Emacs. I can't switch buffers in a dedicated + +00:02:43.580 --> 00:02:43.940 +window. So apparently I can't do that. + +00:02:50.500 --> 00:02:50.600 +Here's Emacs again. Now I'm in Emacs and I + +00:02:51.900 --> 00:02:52.400 +want to have something from my browser, + +00:02:56.080 --> 00:02:56.200 +maybe like the open tabs or I want to + +00:02:59.180 --> 00:02:59.380 +annotate them. I'm in org mode right now, + +00:03:02.400 --> 00:03:02.900 +so I would like to do it from Org Mode maybe. + +00:03:05.380 --> 00:03:05.740 +How do I get the tab? Okay, + +00:03:08.940 --> 00:03:09.440 +let's tap back. I want to annotate this page. + +00:03:11.860 --> 00:03:12.360 +Let's get the link, put it here. + +00:03:13.660 --> 00:03:13.940 +Oh, that wasn't a link. + +00:03:15.420 --> 00:03:15.920 +That was something totally different. + +00:03:19.540 --> 00:03:19.960 +So let's use the mouse. + +00:03:22.540 --> 00:03:23.040 +There's the link. Now we could put a title + +00:03:30.060 --> 00:03:30.560 +and so on. What I'm showing you here is it is + +00:03:34.160 --> 00:03:34.640 +pretty, no it's not too difficult, + +00:03:36.680 --> 00:03:36.820 +but it could be easier interacting with the + +00:03:40.380 --> 00:03:40.580 +browser. And there are helpers to do + +00:03:41.980 --> 00:03:42.480 +something like this. I had, + +00:03:46.440 --> 00:03:46.640 +for example, I used for a long time this + +00:03:50.400 --> 00:03:50.660 +extension. It's called export tabs URLs and + +00:03:53.000 --> 00:03:53.400 +you got a list of your tabs and you can just + +00:03:54.280 --> 00:03:54.780 +copy them to clipboard. + +00:03:55.900 --> 00:03:56.280 +So now we have the tabs, + +00:03:58.620 --> 00:03:58.940 +copy them to clipboard and there they are. + +00:04:00.640 --> 00:04:01.140 +So now we can do something with the tabs, + +00:04:03.240 --> 00:04:03.740 +rearrange them, take notes and so on. + +00:04:14.320 --> 00:04:14.640 +Okay. And there's even other stuff for while + +00:04:17.519 --> 00:04:18.019 +researching for this talk on this extension, + +00:04:21.060 --> 00:04:21.260 +I found this tab session manager where you + +00:04:23.080 --> 00:04:23.300 +can have a look at your tabs it does + +00:04:26.540 --> 00:04:27.040 +snapshots it exports it in Brazilian + +00:04:29.820 --> 00:04:30.320 +different formats and yeah that's even more + +00:04:35.600 --> 00:04:35.740 +luxurious no better but it's still not an + +00:04:41.380 --> 00:04:41.880 +emacs okay so how could we get it into Emacs? + +00:04:44.040 --> 00:04:44.540 +Maybe this thing called Pultus could help. + +00:04:49.000 --> 00:04:49.180 +The theme is from a browser extension and a + +00:04:52.440 --> 00:04:52.760 +manual workflow. As I showed you right now, + +00:04:54.400 --> 00:04:54.860 +we want to go to an interactive Emacs + +00:04:57.620 --> 00:04:57.800 +interface. How to deal with the browser and + +00:04:59.280 --> 00:04:59.780 +its tabs from inside Emacs. + +00:05:05.860 --> 00:05:06.360 +And we're gonna do just that right now. + +00:05:08.880 --> 00:05:09.340 +So we had this research session over there. + +00:05:10.320 --> 00:05:10.820 +So now it's demo time. + +00:05:12.620 --> 00:05:13.120 +We had this research session. + +00:05:14.620 --> 00:05:15.120 +Let's open it again. Here is it. + +00:05:18.340 --> 00:05:18.840 +And now we want to do it from inside Emacs. + +00:05:22.940 --> 00:05:23.300 +We say please Emacs insert this or please + +00:05:28.000 --> 00:05:28.200 +Poltis insert this. And now we have the + +00:05:30.020 --> 00:05:30.040 +browser session inside Emacs. + +00:05:35.280 --> 00:05:35.760 +It's a little bit roomy so you can see it + +00:05:40.200 --> 00:05:40.380 +over the internet. And we learned that + +00:05:44.120 --> 00:05:44.280 +BigBooplotten doesn't set a title or has a + +00:05:46.160 --> 00:05:46.360 +new line in it. I'm not actually sure what + +00:05:49.740 --> 00:05:50.120 +happened here. So let's have this browser + +00:05:51.940 --> 00:05:52.440 +session and what can we do with it? + +00:05:57.860 --> 00:05:58.320 +For once you can just copy stuff here, + +00:06:01.560 --> 00:06:01.720 +you can take notes and it updates with the + +00:06:03.900 --> 00:06:04.040 +browser. If you change something in the + +00:06:06.020 --> 00:06:06.420 +browser, maybe switch these tabs, + +00:06:07.720 --> 00:06:08.220 +they switch over there. + +00:06:12.340 --> 00:06:12.560 +Or you say, okay, I don't want to have + +00:06:17.340 --> 00:06:17.500 +HyperDrive in here. And I don't need the + +00:06:19.440 --> 00:06:19.540 +instructions for speakers because I'm not a + +00:06:22.500 --> 00:06:22.800 +speaker so I have a live sync to Emacs from + +00:06:29.440 --> 00:06:29.640 +the browser in this Org Mode interface and we + +00:06:31.180 --> 00:06:31.420 +can do more stuff with it, + +00:06:37.640 --> 00:06:37.800 +for example we could I already showed you how + +00:06:41.880 --> 00:06:42.380 +to rearrange stuff. We can open new tabs. + +00:06:46.220 --> 00:06:46.720 +We can have a look at let's say emacs-conf + +00:06:53.480 --> 00:06:53.680 +again and they're just updating and now it + +00:06:57.040 --> 00:06:57.540 +says a new tab, add another 1, + +00:07:02.000 --> 00:07:02.500 +okay. So I think you get the gist. + +00:07:05.220 --> 00:07:05.720 +Now let's take a note on this. + +00:07:11.460 --> 00:07:11.960 +This conference sounds interesting. + +00:07:20.820 --> 00:07:21.140 +Have a look. Maybe thumbs up. + +00:07:23.420 --> 00:07:23.920 +Okay I can do this. So now there's a link, + +00:07:30.920 --> 00:07:31.420 +not a link, a note. If I close it and reopen + +00:07:33.900 --> 00:07:34.400 +it, There's the note again. + +00:07:39.000 --> 00:07:39.500 +So we have persistent notes for browser tabs + +00:07:42.040 --> 00:07:42.400 +or not actually browser tabs, + +00:07:46.240 --> 00:07:46.560 +it's actually URLs. Use the browser tab. + +00:07:49.600 --> 00:07:50.100 +I'm gonna open another URL. + +00:07:51.500 --> 00:07:52.000 +Now it's not without a node. + +00:07:54.480 --> 00:07:54.980 +Going back, the node is back there. + +00:08:01.260 --> 00:08:01.760 +That's how far I can show you Politis because + +00:08:05.720 --> 00:08:06.220 +the interface isn't finished otherwise. + +00:08:11.680 --> 00:08:12.100 +But the backend is pretty cool and I'm gonna + +00:08:13.180 --> 00:08:13.580 +tell you more about that. + +00:08:15.360 --> 00:08:15.860 +The interface is right now just browser + +00:08:18.640 --> 00:08:18.940 +interaction 1 way from the browser into org + +00:08:22.240 --> 00:08:22.740 +mode, an org mode interface and it has nodes. + +00:08:25.080 --> 00:08:25.580 +But it's not too difficult to imagine, + +00:08:30.420 --> 00:08:30.920 +for example, adding tags or... + +00:08:32.020 --> 00:08:32.500 +I just remembered Or I just remembered + +00:08:39.400 --> 00:08:39.900 +something. Okay. So for example, + +00:08:45.060 --> 00:08:45.220 +adding texts or scheduling information or + +00:08:47.360 --> 00:08:47.720 +what else, all the stuff you do with org + +00:08:51.920 --> 00:08:52.420 +mode. Or go the other way around and sync + +00:08:54.920 --> 00:08:55.320 +from the org mode buffer to the browser. + +00:09:01.440 --> 00:09:01.560 +So I could delete this heading or rename it + +00:09:03.280 --> 00:09:03.420 +or stuff like that. So it's reflected in the + +00:09:04.840 --> 00:09:05.000 +browser. I'm not going to do it right now + +00:09:05.640 --> 00:09:06.140 +because it's not implemented. + +00:09:10.240 --> 00:09:10.440 +But just to give you an outlook of the + +00:09:14.960 --> 00:09:15.200 +possibilities. Good. So let's leave this + +00:09:24.000 --> 00:09:24.500 +browser session here. Browser session below. + +00:09:35.280 --> 00:09:35.500 +Okay. Change the outline structure or stuff + +00:09:39.380 --> 00:09:39.880 +like this. So get the browser back, + +00:09:43.420 --> 00:09:43.740 +debugging. Yep, this talks, + +00:09:44.800 --> 00:09:45.060 +I could change something here, + +00:09:47.920 --> 00:09:48.420 +go back to the talks page and still working. + +00:09:56.920 --> 00:09:57.120 +Now I showed you what it does and what can + +00:10:01.560 --> 00:10:01.720 +you use it for or What is it intended to be + +00:10:02.660 --> 00:10:03.040 +used for if it's finished, + +00:10:04.640 --> 00:10:05.140 +because it isn't finished as I said. + +00:10:07.240 --> 00:10:07.740 +Manage your open tabs. + +00:10:12.340 --> 00:10:12.840 +So for example my use case is I do something, + +00:10:16.080 --> 00:10:16.580 +have a big collection of tabs open And then I + +00:10:22.800 --> 00:10:22.940 +need RAM. This PC here has just 4 GB of it, + +00:10:25.080 --> 00:10:25.580 +so sometimes I need to close the browser too. + +00:10:27.260 --> 00:10:27.760 +I don't have to close the PC. + +00:10:32.540 --> 00:10:32.740 +And in this case I'd like to save the + +00:10:37.240 --> 00:10:37.740 +session. So far I just copied this clipboard + +00:10:40.380 --> 00:10:40.880 +thing I showed you earlier in an org mode and + +00:10:44.640 --> 00:10:44.900 +Captured it away and this should be the + +00:10:48.120 --> 00:10:48.300 +future for this workflow You just capture the + +00:10:49.520 --> 00:10:49.700 +browser session rearrange it. + +00:10:51.760 --> 00:10:51.860 +However, you like it and then you make make + +00:10:54.160 --> 00:10:54.520 +it offline. So this is the thing I didn't + +00:10:57.840 --> 00:10:58.340 +show you. You can, if you were looking here + +00:11:04.020 --> 00:11:04.160 +you can you see that this heading is open in + +00:11:08.560 --> 00:11:09.060 +tab 37, window 1. So if you would remove + +00:11:14.120 --> 00:11:14.480 +this, it's offline. And you keep just the org + +00:11:16.300 --> 00:11:16.700 +structure. It's a simple text file then. + +00:11:25.940 --> 00:11:26.100 +And the plan future feature is to go back to + +00:11:27.540 --> 00:11:28.040 +the online state. So you have a session, + +00:11:28.900 --> 00:11:29.400 +maybe a browser window, + +00:11:30.920 --> 00:11:31.420 +you save it to Org Mode, + +00:11:34.600 --> 00:11:34.960 +close the window and some days later or weeks + +00:11:38.080 --> 00:11:38.580 +later you return to this research session, + +00:11:40.240 --> 00:11:40.740 +maybe something about Emacs or whatever + +00:11:43.740 --> 00:11:44.180 +spikes your interest, and you can just reopen + +00:11:46.500 --> 00:11:46.920 +it from the browser, from Org Mode. + +00:11:48.820 --> 00:11:49.000 +So Org Mode becomes the controller of the + +00:11:50.320 --> 00:11:50.820 +browser. And it's not, + +00:11:52.440 --> 00:11:52.680 +it doesn't have to be Org Mode, + +00:11:53.860 --> 00:11:54.360 +but for the demo purpose, + +00:11:58.260 --> 00:11:58.760 +Org Mode was the most easy interface. + +00:12:02.540 --> 00:12:02.800 +That easy. I don't know if you're doing more + +00:12:05.600 --> 00:12:05.860 +complex interactive stuff in Org Mode, + +00:12:08.640 --> 00:12:09.140 +but there's some tricky edge cases. + +00:12:12.560 --> 00:12:12.920 +I just finished this demo half an hour ago, + +00:12:15.360 --> 00:12:15.520 +maybe an hour ago, and I'm really lucky that + +00:12:18.580 --> 00:12:19.080 +it worked in the end. Org mode, + +00:12:23.000 --> 00:12:23.400 +pretty great. So maybe you could do another + +00:12:25.200 --> 00:12:25.700 +interface, does not matter. + +00:12:29.760 --> 00:12:30.260 +Easy access to more info from inside Emacs. + +00:12:32.360 --> 00:12:32.580 +Yeah, Of course, you can imagine like we have + +00:12:34.700 --> 00:12:35.200 +just the title URL here, + +00:12:39.160 --> 00:12:39.360 +but you could even get at the text of the + +00:12:41.120 --> 00:12:41.280 +buffer. I'd show you in the, + +00:12:42.340 --> 00:12:42.840 +in the, how is it done section, + +00:12:44.540 --> 00:12:44.960 +manage and research session, + +00:12:48.460 --> 00:12:48.620 +tab groups. I already showed you this and + +00:12:49.240 --> 00:12:49.740 +browse all your links. + +00:12:54.780 --> 00:12:54.960 +I also showed you. So let's go over to how is + +00:12:57.340 --> 00:12:57.840 +it done. How is it done then? + +00:13:08.760 --> 00:13:08.940 +It should be quite apparent that somehow the + +00:13:11.660 --> 00:13:11.820 +browser has to sync its state to Emacs and + +00:13:13.680 --> 00:13:14.180 +Emacs has to know about the browser and + +00:13:15.660 --> 00:13:16.120 +there's like a bidirectional state + +00:13:17.560 --> 00:13:18.060 +synchronization going on here. + +00:13:21.480 --> 00:13:21.980 +And there's a browser side and an Emacs side. + +00:13:28.080 --> 00:13:28.580 +The browser side is a add-on, + +00:13:31.080 --> 00:13:31.580 +a web extension add-on. + +00:13:38.940 --> 00:13:39.380 +I first tried to use WebDriver by DIY. + +00:13:40.760 --> 00:13:41.040 +I don't know if you know it, + +00:13:43.440 --> 00:13:43.780 +you open a web socket and then you can talk + +00:13:47.460 --> 00:13:47.860 +to the browser, but It was so frustrating to + +00:13:50.440 --> 00:13:50.940 +actually get it to do what I wanted to do + +00:13:54.000 --> 00:13:54.280 +that I changed to the web extension and this + +00:13:55.580 --> 00:13:56.080 +wasn't that much better, + +00:13:58.520 --> 00:13:58.840 +but I finally had all the features I needed + +00:14:02.660 --> 00:14:02.780 +because WebDriver is like all in flux and you + +00:14:04.200 --> 00:14:04.540 +have to look at the Firefox bug tracker. + +00:14:05.860 --> 00:14:06.360 +Do they have implemented this already? + +00:14:09.900 --> 00:14:10.400 +And no, most often they don't. + +00:14:13.580 --> 00:14:13.940 +So now it's a web extension add-on and it + +00:14:16.280 --> 00:14:16.480 +just tells Emacs little facts about the + +00:14:20.060 --> 00:14:20.560 +browser. And for you to make, + +00:14:23.500 --> 00:14:23.720 +to, that this facts make more sense for you, + +00:14:27.180 --> 00:14:27.680 +I think I have to explain how the Emacs side + +00:14:31.560 --> 00:14:32.060 +of this works. So the Emacs side, + +00:14:37.160 --> 00:14:37.460 +at first I thought I make it quite simple and + +00:14:38.800 --> 00:14:39.300 +then I over engineered it. + +00:14:42.040 --> 00:14:42.540 +And now it's great, but also not finished. + +00:14:44.540 --> 00:14:45.040 +So the Emacs site is a database. + +00:14:52.580 --> 00:14:53.080 +It's a triple store or RDF database. + +00:14:57.800 --> 00:14:58.300 +It stores all information in triples. + +00:14:58.980 --> 00:14:59.480 +So you have a subject, + +00:15:04.280 --> 00:15:04.780 +subject, predicate, and an object. + +00:15:10.440 --> 00:15:10.940 +And you can query this database. + +00:15:14.920 --> 00:15:15.060 +For those of you who watched last year's talk + +00:15:19.740 --> 00:15:20.240 +of Andrew Hyatt about SQL in Emacs. + +00:15:23.100 --> 00:15:23.300 +He presented such a database if you want to + +00:15:24.960 --> 00:15:25.380 +have a closer look. And sorry, + +00:15:26.520 --> 00:15:27.020 +Andrew, I didn't use yours. + +00:15:29.540 --> 00:15:29.860 +I had to make my own. I'm not sure it's + +00:15:31.320 --> 00:15:31.820 +better, but it was fun. + +00:15:36.220 --> 00:15:36.720 +And it has some different design decisions. + +00:15:41.040 --> 00:15:41.200 +For those of you who don't know what's up + +00:15:42.440 --> 00:15:42.940 +with a database like this, + +00:15:47.020 --> 00:15:47.360 +maybe you know web apps like all this new Org + +00:15:51.960 --> 00:15:52.460 +Mode clones. How are they called? + +00:15:56.480 --> 00:15:56.820 +Obsidian, Roam, and so on and so on. + +00:15:58.260 --> 00:15:58.760 +All of these are possible because, + +00:16:01.300 --> 00:16:01.640 +I don't know if Obsidian too, + +00:16:04.360 --> 00:16:04.540 +but stuff like Roam is possible because they + +00:16:07.760 --> 00:16:08.000 +have a triple store in the browser and use + +00:16:10.520 --> 00:16:11.020 +this to power their knowledge base. + +00:16:14.280 --> 00:16:14.540 +And if you have had a look at Org Rome, + +00:16:17.160 --> 00:16:17.400 +you know it's uses a database too, + +00:16:19.340 --> 00:16:19.640 +because if this knowledge gets bigger, + +00:16:21.360 --> 00:16:21.860 +database is better to handle. + +00:16:27.860 --> 00:16:28.360 +And now here's a triplet store or a database + +00:16:31.920 --> 00:16:32.420 +to manage your browser session inside Emacs, + +00:16:34.240 --> 00:16:34.740 +but it's not limited to browser session. + +00:16:37.440 --> 00:16:37.940 +You could do nodes and stuff. + +00:16:40.900 --> 00:16:41.120 +I don't have a project for this, + +00:16:52.620 --> 00:16:53.120 +but you can look at this project from Andrew + +00:16:56.380 --> 00:16:56.880 +Hyatt. Has a pretty interesting notes + +00:16:59.620 --> 00:17:00.120 +project. So here is it in Emacs. + +00:17:03.960 --> 00:17:04.460 +There's the link. You can have a look. + +00:17:09.560 --> 00:17:10.060 +Okay. So now we have this database in Emacs. + +00:17:12.319 --> 00:17:12.440 +It's possible to do something like this in + +00:17:15.800 --> 00:17:16.300 +Emacs now because the database has Emacs + +00:17:21.220 --> 00:17:21.700 +SQLite integrated And the browser logs inside + +00:17:22.900 --> 00:17:23.359 +into this database via Emacs. + +00:17:26.579 --> 00:17:26.839 +It sends Emacs, it connects to Emacs via + +00:17:32.380 --> 00:17:32.580 +WebSocket. Emacs is a WebSocket server and + +00:17:35.580 --> 00:17:35.800 +then it sends little snippets like this + +00:17:46.420 --> 00:17:46.920 +window shows these tabs or this tab shows + +00:17:51.060 --> 00:17:51.300 +this URL And Emacs has triggers in this + +00:17:53.600 --> 00:17:53.760 +database. It can install Elisp triggers and + +00:17:58.420 --> 00:17:58.920 +the trigger powered the org mode frontend. + +00:18:06.040 --> 00:18:06.540 +Okay, so that's how it's done. + +00:18:08.780 --> 00:18:09.280 +It's not finished, but it does something. + +00:18:13.540 --> 00:18:13.820 +Now I want to do some closing remarks and + +00:18:14.440 --> 00:18:14.940 +maybe some more remarks. + +00:18:17.120 --> 00:18:17.400 +First off, an interesting concept I thought + +00:18:23.240 --> 00:18:23.680 +up while implementing this is cheesy garbage + +00:18:28.100 --> 00:18:28.580 +collect. For all you fans of dynamic + +00:18:31.000 --> 00:18:31.340 +languages, you know what garbage collect is. + +00:18:33.720 --> 00:18:34.220 +And Emacs users probably know it. + +00:18:38.060 --> 00:18:38.380 +Cleans up after you. You are using this Emacs + +00:18:40.280 --> 00:18:40.780 +and you are making lots of little objects and + +00:18:42.540 --> 00:18:42.920 +after some time Emacs says, + +00:18:45.260 --> 00:18:45.580 +okay, I'm doing some cleanup for you. + +00:18:46.260 --> 00:18:46.760 +That's garbage collect. + +00:18:49.040 --> 00:18:49.360 +And I thought why not have garbage collect + +00:18:52.000 --> 00:18:52.500 +for the browser? You're doing this browsing + +00:18:55.120 --> 00:18:55.320 +and opening all these tabs and after some + +00:18:58.020 --> 00:18:58.200 +time there are lots of tabs and someone has + +00:19:00.660 --> 00:19:01.160 +to close them. So there's the C programmers, + +00:19:03.160 --> 00:19:03.340 +they do all the closing themselves and + +00:19:03.960 --> 00:19:04.460 +they're really meticulous, + +00:19:06.060 --> 00:19:06.560 +but it takes some time. + +00:19:08.520 --> 00:19:09.020 +And there's like my style, + +00:19:12.880 --> 00:19:13.100 +I just let it collect stuff and after some + +00:19:16.220 --> 00:19:16.720 +time I close the browser and start a new 1. + +00:19:19.080 --> 00:19:19.280 +And now there's the garbage collect that + +00:19:20.800 --> 00:19:21.180 +says, let it collect the browser, + +00:19:22.640 --> 00:19:23.000 +let the browser collect and then garbage + +00:19:25.520 --> 00:19:25.960 +collect. Let's say every morning the browser + +00:19:28.140 --> 00:19:28.480 +closes, Emacs closes all the browser tabs, + +00:19:30.520 --> 00:19:30.860 +but it keeps the information And it keeps + +00:19:32.840 --> 00:19:33.340 +text. Maybe you said like a tag yesterday + +00:19:36.340 --> 00:19:36.840 +like reading. I want to read this. + +00:19:39.720 --> 00:19:39.960 +And next time and then after that it's in the + +00:19:42.720 --> 00:19:43.140 +reading list. So garbage collector + +00:19:45.020 --> 00:19:45.520 +compaction. However you want to know this. + +00:19:50.740 --> 00:19:51.240 +1 thing I thought of while doing this is + +00:19:57.380 --> 00:19:57.620 +also, oh my time's up, + +00:19:59.120 --> 00:19:59.620 +so we're almost at Q&A. + +00:20:04.120 --> 00:20:04.620 +1 last thing, this whole project or program + +00:20:06.360 --> 00:20:06.660 +works via the Emacs event loop. + +00:20:08.720 --> 00:20:08.880 +So there's a server listening for the + +00:20:11.840 --> 00:20:12.340 +browser, waiting for infos from it. + +00:20:16.320 --> 00:20:16.820 +It works quite fine. I wasn't sure how much + +00:20:20.940 --> 00:20:21.440 +performance it will cost the browser, + +00:20:23.120 --> 00:20:23.440 +Emacs, but it works fine. + +00:20:26.920 --> 00:20:27.240 +But I wonder what's the limits of Emacs event + +00:20:31.880 --> 00:20:32.280 +loop. Like, can I go on forever adding server + +00:20:34.440 --> 00:20:34.940 +stuff? How big a server can Emacs get? + +00:20:43.580 --> 00:20:44.080 +I don't know. So that's some open questions + +00:20:47.120 --> 00:20:47.620 +to ponder. With that, thank you for listening + +00:20:49.860 --> 00:20:50.360 +and for your interest. + +00:20:54.380 --> 00:20:54.640 +I'd be pretty delighted to take some + +00:20:57.740 --> 00:20:57.980 +questions now. Great! Well, + +00:20:58.680 --> 00:20:59.160 +thank you so much, Michael. + +00:21:01.280 --> 00:21:01.400 +Thanks for the talk. And also thanks for + +00:21:02.960 --> 00:21:03.460 +going a little more in depth at the end. + +00:21:05.800 --> 00:21:06.040 +Is that what the extra stuff that you wanted + +00:21:08.000 --> 00:21:08.500 +to mention? Is it what you've done just now? + +00:21:11.400 --> 00:21:11.900 +Sorry, I didn't understand your last, + +00:21:14.700 --> 00:21:14.860 +your question. When we were preparing for + +00:21:15.820 --> 00:21:16.320 +your presentation with Sliv, + +00:21:18.340 --> 00:21:18.420 +you told me that you wanted to go perhaps a + +00:21:20.380 --> 00:21:20.740 +little more in-depth into the garbage + +00:21:22.500 --> 00:21:22.640 +collection. Is it what you wanted to do or do + +00:21:24.080 --> 00:21:24.580 +you still have some more to tell us about? + +00:21:27.080 --> 00:21:27.580 +I could tell more in-depth. + +00:21:29.540 --> 00:21:30.040 +Yes, garbage collection is just an idea. + +00:21:35.740 --> 00:21:36.240 +It's maybe... I don't know. + +00:21:39.140 --> 00:21:39.480 +Are there questions? There are questions, + +00:21:41.720 --> 00:21:41.880 +that's why. We have about 13 minutes to + +00:21:43.380 --> 00:21:43.880 +answer as many questions as possible. + +00:21:46.960 --> 00:21:47.120 +By the way, Sorry for the people who were + +00:21:47.560 --> 00:21:48.040 +watching the presentation. + +00:21:49.040 --> 00:21:49.540 +There's been a little bit of manipulation + +00:21:51.820 --> 00:21:52.040 +trying to get all the screens in order, + +00:21:53.860 --> 00:21:54.360 +but it's because I've got a very shitty ping + +00:21:56.360 --> 00:21:56.600 +to the streaming server that we use + +00:21:59.380 --> 00:21:59.860 +currently. So everything is like composite + +00:22:00.360 --> 00:22:00.600 +everything, But don't worry, + +00:22:02.240 --> 00:22:02.440 +Michael, everything will be very clean once + +00:22:03.160 --> 00:22:03.660 +we publish it afterwards. + +00:22:05.140 --> 00:22:05.640 +So what I'm going to do... + +00:22:09.660 --> 00:22:10.160 +Sorry, could you repeat? + +00:22:13.020 --> 00:22:13.380 +So it was not at my end because my internet + +00:22:15.560 --> 00:22:16.060 +connection is not the best 1 either. + +00:22:17.800 --> 00:22:18.080 +No, absolutely not. Oh, + +00:22:19.640 --> 00:22:19.840 +by the way, this reminds me as I am + +00:22:20.740 --> 00:22:21.180 +compositing the windows, + +00:22:23.000 --> 00:22:23.300 +you might remember in the talk by Bob earlier + +00:22:25.380 --> 00:22:25.880 +today, I said, oh, there's a phone vibrating. + +00:22:28.680 --> 00:22:28.840 +I thought it was coming from the big blue + +00:22:30.600 --> 00:22:30.760 +button, like the room in which we are right + +00:22:32.960 --> 00:22:33.080 +now. And I wasn't hallucinating just to be + +00:22:34.440 --> 00:22:34.940 +clear. It's just that 1 of the co-organizers + +00:22:37.320 --> 00:22:37.820 +behind on mumble had their phone vibrating + +00:22:38.720 --> 00:22:39.160 +and I was very confused. + +00:22:41.440 --> 00:22:41.600 +Anyway that's for the Okay, + +00:22:42.440 --> 00:22:42.600 +so everything is set up now. + +00:22:43.280 --> 00:22:43.500 +So what I'm gonna do, Michael, + +00:22:44.760 --> 00:22:45.040 +I'm gonna... If you're okay with this, + +00:22:46.560 --> 00:22:46.960 +Can I read you the question from the pad and + +00:22:48.780 --> 00:22:48.960 +can you answer them? Yes, + +00:22:50.160 --> 00:22:50.660 +of course. I would love to. + +00:22:53.740 --> 00:22:53.940 +Okay, lovely. I'm going to try my best to + +00:22:56.380 --> 00:22:56.720 +display the questions on the stream. + +00:22:58.140 --> 00:22:58.440 +Give me just a second and in the meantime + +00:22:59.440 --> 00:22:59.940 +I'll read you the first 1. + +00:23:02.180 --> 00:23:02.680 +So, have you seen the next browser? + +00:23:05.020 --> 00:23:05.240 +It is the Emacs of web browsers and would + +00:23:07.540 --> 00:23:07.940 +probably be easier to work with as it matches + +00:23:08.900 --> 00:23:09.400 +a lot closer to Emacs. + +00:23:11.400 --> 00:23:11.640 +I think you can tag your browser tabs for + +00:23:16.880 --> 00:23:17.380 +example. I saw it, I never tried it. + +00:23:20.940 --> 00:23:21.360 +I think you can do all the stuff and I think + +00:23:23.620 --> 00:23:23.940 +it's pretty good idea to use it if you want + +00:23:26.480 --> 00:23:26.980 +because have a look at this. + +00:23:30.700 --> 00:23:31.200 +This lovely thing is JavaScript and it's the + +00:23:35.080 --> 00:23:35.320 +browser side. It was quite tricky to get + +00:23:40.180 --> 00:23:40.680 +working so maybe it's easier if you use Nixt + +00:23:47.460 --> 00:23:47.660 +but I like to use Firefox and yeah there has + +00:23:49.820 --> 00:23:50.000 +to be a solution for Firefox too, + +00:23:53.040 --> 00:23:53.480 +I think. So next question, + +00:23:55.900 --> 00:23:56.320 +please. Lovely. All right, + +00:23:59.480 --> 00:23:59.980 +so nice ideas. Needs a better name though, + +00:24:00.840 --> 00:24:01.280 +to attract people to it. + +00:24:02.920 --> 00:24:03.420 +What about Browsys or Webnote? + +00:24:08.400 --> 00:24:08.900 +Browsys spelled B-R-O-W-S-Y-S or Webnote? + +00:24:12.720 --> 00:24:13.220 +Clearer this 1. Webnote and Browsys? + +00:24:17.260 --> 00:24:18.300 +With a Y, yes. So instead of an IAY. + +00:24:21.140 --> 00:24:21.420 +Ah, okay. Yes, why not? + +00:24:25.240 --> 00:24:25.520 +I take note. The name is maybe a little bit + +00:24:28.020 --> 00:24:28.460 +confusing. It's the name of a spider. + +00:24:30.860 --> 00:24:31.160 +It's like a spider that does an orb web. + +00:24:31.920 --> 00:24:32.420 +I found it via Wikipedia. + +00:24:34.360 --> 00:24:34.480 +I just wanted to have like something with the + +00:24:37.640 --> 00:24:37.840 +web because it's weaving something and + +00:24:38.680 --> 00:24:39.180 +there's also the web involved. + +00:24:41.600 --> 00:24:41.980 +I'm not set on the name. + +00:24:44.640 --> 00:24:45.040 +I'm not even set on the project yet how it + +00:24:47.360 --> 00:24:47.520 +will turn out. So what you're seeing now is + +00:24:49.760 --> 00:24:49.940 +something else than what I imagined when I + +00:24:51.060 --> 00:24:51.560 +was planning this talk. + +00:24:54.880 --> 00:24:55.280 +Yeah. That's right. Keep an open mind. + +00:24:56.880 --> 00:24:57.140 +Next question. You know what I'm going to say + +00:24:58.900 --> 00:24:59.340 +about the marketing of project names? + +00:24:59.900 --> 00:25:00.400 +You know, they're not, + +00:25:01.640 --> 00:25:02.040 +they don't make sense and they're not popular + +00:25:02.880 --> 00:25:03.340 +until they actually are. + +00:25:06.040 --> 00:25:06.260 +Like what would have predestined maggots to + +00:25:07.680 --> 00:25:08.180 +work as a name? Perhaps nothing. + +00:25:10.940 --> 00:25:11.420 +I mean it felt close to magic or maggots + +00:25:12.540 --> 00:25:12.880 +depending on the people you ask. + +00:25:16.000 --> 00:25:16.160 +So you know maybe your name Pultis will be a + +00:25:18.160 --> 00:25:18.280 +household name give or take 6 months or a + +00:25:23.120 --> 00:25:23.260 +year? Yes, maybe. Because- All right, + +00:25:23.980 --> 00:25:24.340 +moving on to the next question. + +00:25:25.400 --> 00:25:25.900 +Oh, unless you wanna add something. + +00:25:28.740 --> 00:25:29.240 +To expand a little bit on this name, + +00:25:33.140 --> 00:25:33.640 +I'm not sure where it stops. + +00:25:35.460 --> 00:25:35.600 +Like, is it really, it's just about the + +00:25:37.740 --> 00:25:38.240 +browser, What I just built is something more? + +00:25:42.340 --> 00:25:42.580 +So I'm not sure if I should limit the name + +00:25:44.380 --> 00:25:44.880 +here. Okay, now let's go on. + +00:25:47.440 --> 00:25:47.700 +You know what? You know what they say about + +00:25:48.700 --> 00:25:49.180 +programming, there's only 1 fundamental + +00:25:50.720 --> 00:25:51.220 +problem, no sorry, 2 fundamental problems, + +00:25:53.400 --> 00:25:53.860 +garbage collection and naming things. + +00:25:55.200 --> 00:25:55.320 +So you're stuck in the second 1 and you + +00:25:56.200 --> 00:25:56.700 +mentioned the first 1 as well. + +00:25:59.580 --> 00:26:00.080 +Alright, moving on to the next question. + +00:26:01.860 --> 00:26:02.080 +Can you use browser extensions with this, + +00:26:03.700 --> 00:26:03.840 +for example uBlock, SponsorBlock or + +00:26:06.780 --> 00:26:07.120 +Darkreader? Yes, of course. + +00:26:09.020 --> 00:26:09.320 +I think someone was maybe a little bit + +00:26:11.140 --> 00:26:11.640 +confused that the browser is inside Emacs. + +00:26:14.540 --> 00:26:15.040 +This is something totally normal for us ex-WM + +00:26:18.040 --> 00:26:18.220 +users. It's like every program for me is + +00:26:21.040 --> 00:26:21.540 +inside Emacs. This is just a normal Firefox. + +00:26:24.320 --> 00:26:24.640 +It just doesn't have like the window + +00:26:26.580 --> 00:26:27.080 +decoration. So there's of course there's, + +00:26:31.360 --> 00:26:31.860 +no, This is the ad blocker. + +00:26:33.840 --> 00:26:34.340 +I don't know why it's not working here. + +00:26:38.560 --> 00:26:39.060 +But you can have all you have in Firefox. + +00:26:44.820 --> 00:26:44.920 +OK. OK, lovely. Are you ready to move on to + +00:26:45.920 --> 00:26:46.080 +the next question? Or do you want to add + +00:26:47.600 --> 00:26:48.100 +something else? Yes, next question please. + +00:26:51.100 --> 00:26:51.600 +All right. So are there any inherent security + +00:26:53.000 --> 00:26:53.500 +issues with this, like bidirectional + +00:26:55.640 --> 00:26:55.960 +synchronization? Sounds like a possible + +00:26:57.120 --> 00:26:57.620 +issue. How are they solved? + +00:27:00.660 --> 00:27:00.760 +Can a malicious website impact Emacs or the + +00:27:10.520 --> 00:27:11.020 +host system? No, the website has no intro. + +00:27:15.120 --> 00:27:15.620 +It can do little stuff. + +00:27:20.200 --> 00:27:20.700 +There's this, it's a web extension, + +00:27:22.880 --> 00:27:23.300 +it's a browser extension inside the browser + +00:27:24.800 --> 00:27:25.300 +and it has like a limited interface. + +00:27:27.440 --> 00:27:27.920 +It uses a web extension API, + +00:27:30.980 --> 00:27:31.480 +there's a tabs API, you can listen on tabs, + +00:27:33.820 --> 00:27:34.320 +here you can tabs, browser tabs, + +00:27:36.340 --> 00:27:36.820 +Please notify me if there's 1 created, + +00:27:37.600 --> 00:27:38.040 +updated, moved, detached, + +00:27:40.240 --> 00:27:40.520 +attached, removed. So the people I think + +00:27:44.020 --> 00:27:44.440 +working at Google Chrome put some thought + +00:27:49.540 --> 00:27:49.920 +into it and at least this part seems quite + +00:27:52.960 --> 00:27:53.300 +well designed. Okay, next question, + +00:27:56.880 --> 00:27:57.100 +please. All right. So when do you think + +00:27:57.880 --> 00:27:58.380 +you'll make a first release? + +00:28:00.220 --> 00:28:00.420 +I hate needing browser extensions and would + +00:28:01.680 --> 00:28:02.180 +love to control my tabs in Emacs. + +00:28:07.340 --> 00:28:07.540 +Yes, I don't know. I would like to do it + +00:28:09.400 --> 00:28:09.900 +soon, but I have stuff to do. + +00:28:13.260 --> 00:28:13.760 +This is not the simplest project. + +00:28:18.660 --> 00:28:19.020 +What I can tell you, I will put the code + +00:28:20.480 --> 00:28:20.980 +online in the next days, + +00:28:25.080 --> 00:28:25.360 +maybe even next week, because it's not + +00:28:27.980 --> 00:28:28.080 +pretty, but it's also not bad and there's a + +00:28:28.940 --> 00:28:29.440 +lot of stuff there already. + +00:28:32.120 --> 00:28:32.620 +And For those who don't mind looking at + +00:28:35.500 --> 00:28:36.000 +unfinished things for inspiration or maybe + +00:28:39.320 --> 00:28:39.820 +their own work, I want to put it online. + +00:28:43.620 --> 00:28:44.020 +And if it's released, I will do some bigger + +00:28:46.560 --> 00:28:46.860 +announcement. And if it's getting released, + +00:28:48.840 --> 00:28:49.040 +can you write it back in Emacs console or + +00:28:51.760 --> 00:28:51.940 +conf, of course? Well, + +00:28:53.440 --> 00:28:53.600 +no pressure. Next year you need to have it + +00:28:55.320 --> 00:28:55.580 +released and you'll need to give us a GitHub + +00:28:59.900 --> 00:29:00.060 +page. Alright, moving on to the next + +00:29:01.560 --> 00:29:01.880 +question. What happened to the Sway + +00:29:03.040 --> 00:29:03.540 +compositor you showed last year? + +00:29:06.720 --> 00:29:07.220 +Yeah, that's like, this is the perfect + +00:29:10.680 --> 00:29:11.180 +question for like after the last 1. + +00:29:12.600 --> 00:29:13.100 +It's also not finished. + +00:29:16.960 --> 00:29:17.120 +And it's also not finished Because while I + +00:29:19.160 --> 00:29:19.660 +did a tech demo like I did this time, + +00:29:20.740 --> 00:29:21.220 +I'm sorry it's not finished, + +00:29:23.480 --> 00:29:23.600 +but I don't have that big a need for it and + +00:29:25.080 --> 00:29:25.580 +it's a lot of work to get it finished. + +00:29:28.140 --> 00:29:28.640 +Because it's a similar architecture, + +00:29:31.940 --> 00:29:32.440 +like this different server clients + +00:29:35.640 --> 00:29:35.980 +architecture stuff and Emacs is still in the + +00:29:42.140 --> 00:29:42.640 +callback hell time as you call it. + +00:29:46.260 --> 00:29:46.440 +So it's not that easy to get it working and I + +00:29:49.540 --> 00:29:49.920 +don't have that much need for a valent window + +00:29:52.720 --> 00:29:52.920 +manager because the other 1 still works and + +00:29:54.520 --> 00:29:55.020 +there's more interesting stuff to do. + +00:29:58.020 --> 00:29:58.180 +But also I know it has a lot of potential if + +00:30:00.840 --> 00:30:01.000 +it works and if it is released And I know a + +00:30:02.320 --> 00:30:02.520 +lot of people are waiting for it, + +00:30:04.200 --> 00:30:04.700 +so I have it in the back of my mind. + +00:30:06.720 --> 00:30:07.220 +And if someone else feels compelled, + +00:30:10.460 --> 00:30:10.680 +please take a look at the code and do + +00:30:12.980 --> 00:30:13.340 +something. Yeah, whoever asked the question, + +00:30:14.120 --> 00:30:14.620 +this is your task now. + +00:30:17.580 --> 00:30:17.900 +All right, moving on to the last question. + +00:30:18.900 --> 00:30:19.140 +We have about 4 minutes left, + +00:30:20.160 --> 00:30:20.660 +so it looks like we are... + +00:30:22.660 --> 00:30:22.760 +By the way, Michael was worried that he + +00:30:24.200 --> 00:30:24.700 +wouldn't have many questions to answer, + +00:30:27.380 --> 00:30:27.560 +and I am very proud to say and to prove you + +00:30:29.540 --> 00:30:30.040 +wrong. All right, next question. + +00:30:31.920 --> 00:30:32.080 +Does the browser have to be Firefox for + +00:30:33.480 --> 00:30:33.980 +syncing or is there a choice there? + +00:30:39.020 --> 00:30:39.340 +I think it's not. There's a choice. + +00:30:42.180 --> 00:30:42.440 +You can use any browser who supports web + +00:30:43.940 --> 00:30:44.440 +extensions. I think it's like a standardized + +00:30:49.900 --> 00:30:50.080 +interface. You can use any browser who does + +00:30:52.440 --> 00:30:52.640 +it. Chrome does it. But they're moving to a + +00:30:55.260 --> 00:30:55.760 +new web extension API to block ad blockers. + +00:30:59.680 --> 00:31:00.040 +I don't know if that does any turmoil for my + +00:31:02.860 --> 00:31:03.360 +extension and I frankly don't care that much. + +00:31:05.680 --> 00:31:06.180 +All right, fair answer. + +00:31:09.960 --> 00:31:10.280 +I don't see anyone who's joined us on BBB, + +00:31:11.940 --> 00:31:12.080 +by the way, we're going to move on with the + +00:31:13.020 --> 00:31:13.480 +stream to the next talk. + +00:31:15.380 --> 00:31:15.660 +But if you've got any questions for Michael, + +00:31:17.320 --> 00:31:17.480 +Feel free to join on BBB and ask your + +00:31:19.280 --> 00:31:19.440 +questions. I've said before that people tend + +00:31:22.420 --> 00:31:22.860 +to be shy and only join when the stream goes + +00:31:25.900 --> 00:31:26.040 +to a next talk. But I like to remind those + +00:31:27.720 --> 00:31:27.880 +people, eventually those talks are going to + +00:31:28.280 --> 00:31:28.620 +be published. Obviously, + +00:31:30.480 --> 00:31:30.680 +we'll make sure that nothing private was + +00:31:31.720 --> 00:31:32.220 +divulged during these discussions. + +00:31:34.640 --> 00:31:34.760 +But, you know, it's, if you can muster up the + +00:31:35.580 --> 00:31:35.740 +courage to go on the scene, + +00:31:38.940 --> 00:31:39.160 +it's always nice to have people join and ask + +00:31:41.100 --> 00:31:41.400 +questions. Michael, we have about 3 minutes + +00:31:43.080 --> 00:31:43.580 +left. Do you have any last words on perhaps + +00:31:45.860 --> 00:31:46.240 +anything to add on what you've presented + +00:31:49.780 --> 00:31:50.160 +today? Yeah, I just thought about maybe I + +00:31:55.260 --> 00:31:55.760 +show something. But there's this portals. + +00:32:00.140 --> 00:32:00.380 +Another thing, if someone has some more + +00:32:02.540 --> 00:32:02.920 +names, I would be quite interested because + +00:32:03.900 --> 00:32:04.400 +naming stuff is difficult. + +00:32:11.600 --> 00:32:12.100 +And this defines the database. + +00:32:14.200 --> 00:32:14.700 +There's the database definition. + +00:32:16.440 --> 00:32:16.920 +I call the database thingy, + +00:32:19.600 --> 00:32:19.760 +it's called Sponti. So I don't know what + +00:32:20.840 --> 00:32:21.340 +you're thinking about this name. + +00:32:23.220 --> 00:32:23.720 +So I think I want to have a database, + +00:32:25.360 --> 00:32:25.860 +it's called, it's this database. + +00:32:28.360 --> 00:32:28.740 +And then I define the database and I define + +00:32:29.820 --> 00:32:30.060 +the subject predicate object. + +00:32:31.060 --> 00:32:31.560 +So I have a browser session, + +00:32:32.520 --> 00:32:33.020 +browser session has tabs, + +00:32:36.820 --> 00:32:37.320 +a tab has, it comes from another tab maybe, + +00:32:39.860 --> 00:32:40.360 +or it shows an URL. A window, + +00:32:42.180 --> 00:32:42.680 +a session can also have a window, + +00:32:44.600 --> 00:32:44.760 +a window shows tabs. And then you can + +00:32:46.120 --> 00:32:46.380 +annotate stuff. You can say, + +00:32:49.920 --> 00:32:50.100 +okay, I have a node or a URL and I can tag it + +00:32:51.600 --> 00:32:52.100 +with a title, date, tag, + +00:32:54.940 --> 00:32:55.440 +or with another node or with body text. + +00:32:58.640 --> 00:32:58.780 +And I have an environment that's like a + +00:33:01.420 --> 00:33:01.840 +machine, the PC that's running on or Emacs + +00:33:03.640 --> 00:33:03.840 +itself. And then you have stuff about the + +00:33:04.900 --> 00:33:05.280 +machine and you have a client, + +00:33:06.660 --> 00:33:07.160 +this is the process session actually. + +00:33:08.680 --> 00:33:09.180 +So maybe I should change this. + +00:33:17.680 --> 00:33:18.180 +Okay. And 1 last thing. + +00:33:20.020 --> 00:33:20.220 +I have something I wanted to show you, + +00:33:21.600 --> 00:33:22.100 +but it didn't finish in time. + +00:33:23.240 --> 00:33:23.480 +Okay, Michael, just to be clear, + +00:33:24.720 --> 00:33:25.220 +you've got only 1 minute left. + +00:33:27.880 --> 00:33:28.380 +Yes, it's not that difficult. + +00:33:30.140 --> 00:33:30.640 +I wanted to integrate highlight. + +00:33:32.300 --> 00:33:32.780 +You just go to a web page, + +00:33:35.660 --> 00:33:35.800 +highlight stuff, do a right click and then it + +00:33:39.320 --> 00:33:39.820 +says save to Emacs. And you saved it to Emacs + +00:33:42.500 --> 00:33:42.940 +and it's there inside the node. + +00:33:45.400 --> 00:33:45.900 +But no, this 1 is not finished yet. + +00:33:47.960 --> 00:33:48.240 +You could do it live but there's no time + +00:33:49.540 --> 00:33:50.040 +left. So thank you for watching. + +00:33:51.960 --> 00:33:52.180 +Yes, and thank you so much, + +00:33:54.000 --> 00:33:54.280 +Michael, for taking the time to present and + +00:33:54.960 --> 00:33:55.460 +to answer the questions. + +00:33:57.340 --> 00:33:57.540 +The stream is going to move to the next talk + +00:34:00.680 --> 00:34:01.080 +in about 45 seconds. It's a talk by Wasem + +00:34:02.680 --> 00:34:03.180 +Masa, which I'm very excited about. + +00:34:05.740 --> 00:34:06.240 +And other than that, Michael, + +00:34:08.239 --> 00:34:08.460 +I'm looking forward to seeing you again next + +00:34:10.760 --> 00:34:11.000 +year with new GitHub repositories to share + +00:34:12.500 --> 00:34:13.000 +with us. Right? No pressure. + +00:34:17.500 --> 00:34:17.900 +And on that note, I wish you a very good day + +00:34:19.400 --> 00:34:19.600 +and I'll see you next time, + +00:34:21.820 --> 00:34:22.199 +I suppose. Yes, of course. + +00:34:24.080 --> 00:34:24.580 +I would like to do it next time again. + +00:34:25.679 --> 00:34:26.179 +It's a lot of fun. All right. + +00:34:27.280 --> 00:34:27.780 +Okay. Bye-bye, Michael. + +00:34:33.580 --> 00:34:34.080 +Bye-bye and thanks. All right. + +00:34:35.540 --> 00:34:35.880 +I think, yes. Okay. We finished. + +00:34:36.460 --> 00:34:36.600 +So, thank you so much, + +00:34:38.199 --> 00:34:38.400 +Michael. I need to get ready for the next + +00:34:39.340 --> 00:34:39.840 +talk. So I'll see you later. + +00:34:40.920 --> 00:34:41.420 +I'll see you later, sorry. + +00:34:45.060 --> 00:34:45.560 +Yes, see you. Bye-bye. + +00:34:47.280 --> 00:34:47.560 +You are currently the only person in this + +00:34:47.560 --> 00:34:48.060 +conference. diff --git a/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt new file mode 100644 index 00000000..a61c9cd3 --- /dev/null +++ b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt @@ -0,0 +1,20 @@ +WEBVTT + + +00:00:00.000 --> 00:02:06.040 +Introduction + +00:02:06.040 --> 00:03:14.919 +Tip about completion frameworks + +00:03:14.920 --> 00:05:39.320 +References file overview + +00:05:39.320 --> 00:08:02.719 +The Emacs Lisp code + +00:08:02.720 --> 00:11:41.539 +Example reference to Elfeed article + +00:11:41.540 --> 00:15:04.320 +Searching the references diff --git a/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt new file mode 100644 index 00000000..f678c7ed --- /dev/null +++ b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt @@ -0,0 +1,808 @@ +WEBVTT captioned by bhavin192, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.940 +Hello, this is Christopher Howard, + +00:00:04.940 --> 00:00:06.520 +and welcome to my talk, + +00:00:06.520 --> 00:00:08.800 +"Informal Reference Tracking." + +00:00:08.800 --> 00:00:10.574 +This is a workflow talk, + +00:00:10.574 --> 00:00:12.240 +so I need to explain a little bit about + +00:00:12.240 --> 00:00:14.840 +what my needs were. + +00:00:14.840 --> 00:00:18.760 +I am not a professional scholar or academic, + +00:00:18.760 --> 00:00:20.200 +but there are a number of subjects + +00:00:20.200 --> 00:00:21.607 +that I'm interested in, + +00:00:21.607 --> 00:00:23.240 +and I occasionally like to write + +00:00:23.240 --> 00:00:25.600 +gemlog posts about them. + +00:00:25.600 --> 00:00:28.680 +So I needed some way to keep track of references. + +00:00:28.680 --> 00:00:32.960 +References to webpage articles, references to books, + +00:00:32.960 --> 00:00:37.280 +pages in books, and notes about them. + +00:00:37.280 --> 00:00:39.480 +Something that was searchable, + +00:00:39.480 --> 00:00:42.440 +but also something that was quick and easy to use, + +00:00:42.440 --> 00:00:45.200 +and something that I could set up quickly. + +00:00:45.200 --> 00:00:47.360 +And the approach I took, it only took me + +00:00:47.360 --> 00:00:49.520 +about an hour or two to figure out + +00:00:49.520 --> 00:00:52.160 +how to put it together. + +00:00:52.160 --> 00:00:53.840 +I do want to emphasize + +00:00:53.840 --> 00:00:56.520 +that there are better ways to do this. + +00:00:56.520 --> 00:00:58.960 +I'm not recommending you use my code + +00:00:58.960 --> 00:01:02.120 +or follow my exact approach. + +00:01:02.120 --> 00:01:05.940 +In particular, what I'm doing was meant to be done + +00:01:05.940 --> 00:01:09.240 +with Org's built-in capture + +00:01:09.240 --> 00:01:11.800 +and templates functionality, + +00:01:11.800 --> 00:01:14.907 +so that's something that's more flexible, + +00:01:14.907 --> 00:01:21.440 +programmable, and there's also a lot of add-ins + +00:01:21.440 --> 00:01:23.960 +that can be tied into that. + +00:01:23.960 --> 00:01:31.320 +For example, tools that allow you to search for, + +00:01:31.320 --> 00:01:34.480 +you know, feed in a URL, and it automatically + +00:01:34.480 --> 00:01:38.240 +pulls all the reference data for you. + +00:01:38.240 --> 00:01:39.760 +And there's tools out there + +00:01:39.760 --> 00:01:43.120 +that are really meant for scientific writing, + +00:01:43.120 --> 00:01:46.760 +so if you do this professionally, + +00:01:46.760 --> 00:01:49.960 +you may need to keep track of dozens of details + +00:01:49.960 --> 00:01:51.080 +for each reference + +00:01:51.080 --> 00:01:55.320 +and then have some fancy system to generate that + +00:01:55.320 --> 00:02:00.800 +into your, or output that into your paper. + +00:02:00.800 --> 00:02:02.440 +So there are better systems, + +00:02:02.440 --> 00:02:06.040 +but this is what worked for me and what was easy. + +NOTE Tip about completion frameworks + +00:02:06.040 --> 00:02:11.320 +I do want to emphasize that if you haven't, + +00:02:11.320 --> 00:02:14.640 +you really want to learn how to use helm-mode + +00:02:14.640 --> 00:02:20.440 +H-E-L-M, or one of the similar systems in Emacs + +00:02:20.440 --> 00:02:26.440 +that does fuzzy search on Emacs commands. + +00:02:26.440 --> 00:02:29.340 +For example, in Helm here, + +00:02:29.340 --> 00:02:39.007 +I input one keychord, and then I just have to remember + +00:02:39.007 --> 00:02:40.720 +a few characters of some command, + +00:02:40.720 --> 00:02:43.479 +and they don't even have to be right next to each other, + +00:02:43.480 --> 00:02:47.640 +like H-O-C will bring up `helm-occur`. + +00:02:47.640 --> 00:02:51.360 +That's based on its algorithms + +00:02:51.360 --> 00:02:53.000 +of what I most likely meant + +00:02:53.000 --> 00:02:55.160 +and the ones that I've used in the past. + +00:02:55.160 --> 00:02:57.920 +So it usually brings up the command that I want, + +00:02:57.920 --> 00:02:59.579 +or the one that I want + +00:02:59.580 --> 00:03:03.080 +is one or two spots away in the entry. + +00:03:03.080 --> 00:03:05.074 +That just saves me a lot of time + +00:03:05.074 --> 00:03:06.960 +[and] a lot of memorization. + +00:03:06.960 --> 00:03:09.120 +So if you haven't learned Helm + +00:03:09.120 --> 00:03:14.919 +or a similar system for Emacs, you really want to. + +NOTE References file overview + +00:03:14.920 --> 00:03:18.240 +So what is my approach? + +00:03:18.240 --> 00:03:24.880 +Well, basically, what it comes down to is really + +00:03:24.880 --> 00:03:27.307 +fundamentally nothing more than just a list + +00:03:27.307 --> 00:03:30.640 +of Org entries in a file. + +00:03:30.640 --> 00:03:35.579 +And there's one entry per reference. + +00:03:35.580 --> 00:03:37.207 +Fundamentally, that's all it is. + +00:03:37.207 --> 00:03:39.207 +But I'll go over the parts. + +00:03:39.207 --> 00:03:43.080 +You can see there's the title for the entry, + +00:03:43.080 --> 00:03:44.800 +and that's not necessarily + +00:03:44.800 --> 00:03:47.400 +the title of the book or the article, + +00:03:47.400 --> 00:03:50.840 +but that's my perspective on it, + +00:03:50.840 --> 00:03:52.720 +that's what I want to remember about it, + +00:03:52.720 --> 00:03:54.560 +and what I'll be looking for later + +00:03:54.560 --> 00:03:56.560 +when I do a search on my references. + +00:03:56.560 --> 00:04:06.659 +There's also in here the use of Org's tags + +00:04:06.660 --> 00:04:08.274 +here to the right of the title, + +00:04:08.274 --> 00:04:12.040 +very handy for searching for entries later. + +00:04:12.040 --> 00:04:18.160 +I use some Org properties attached to each entry. + +00:04:18.160 --> 00:04:21.740 +I automatically add in here an ID + +00:04:21.740 --> 00:04:24.074 +that can be useful if you want to + +00:04:24.074 --> 00:04:27.800 +link entries together later. + +00:04:27.800 --> 00:04:30.400 +I automatically add in here the date + +00:04:30.400 --> 00:04:31.840 +that the entry was created, + +00:04:31.840 --> 00:04:35.699 +which can be useful to me if things + +00:04:35.700 --> 00:04:38.360 +got sorted in a different order at some point, + +00:04:38.360 --> 00:04:39.940 +I could still look through + +00:04:39.940 --> 00:04:42.507 +the most recent entries that I had made + +00:04:42.507 --> 00:04:45.040 +if I wanted to do that for some reason. + +00:04:45.040 --> 00:04:48.640 +And sometimes I add in this publication year field + +00:04:48.640 --> 00:04:52.720 +with the idea that one day I might want to do + +00:04:52.720 --> 00:04:55.840 +a search for entries based on the publication year + +00:04:55.840 --> 00:04:57.360 +of the book or the article, + +00:04:57.360 --> 00:05:00.774 +say, only to use recent references + +00:05:00.774 --> 00:05:03.080 +or something like that. + +00:05:03.080 --> 00:05:05.360 +And then down here below the properties + +00:05:05.360 --> 00:05:10.080 +is where I paste in the URL to the webpage, or + +00:05:10.080 --> 00:05:13.007 +type in the title and author of the book + +00:05:13.007 --> 00:05:16.959 +on the pages, maybe the pages that were relevant, + +00:05:16.960 --> 00:05:21.640 +the pages of the periodical, or something like that. + +00:05:21.640 --> 00:05:23.920 +And I could put anything that I want down here, + +00:05:23.920 --> 00:05:25.840 +some other notes about what's important + +00:05:25.840 --> 00:05:29.939 +about this article to me. + +00:05:29.940 --> 00:05:32.200 +So fundamentally, that's all it is. + +00:05:32.200 --> 00:05:35.240 +Of course, I've added in a bit of convenience code + +00:05:35.240 --> 00:05:37.080 +to make this go a lot faster + +00:05:37.080 --> 00:05:39.320 +rather than typing all this out. + +NOTE The Emacs Lisp code + +00:05:39.320 --> 00:05:45.879 +For that, I'll switch back to my init.el file. + +00:05:45.880 --> 00:05:49.480 +There's really just five functions. + +00:05:49.480 --> 00:05:52.840 +The first two here are ones + +00:05:52.840 --> 00:05:54.560 +that I've adapted off the Internet. + +00:05:54.560 --> 00:05:56.160 +Honestly, I can't remember + +00:05:56.160 --> 00:05:58.239 +exactly where that I got them from, + +00:05:58.240 --> 00:06:00.240 +but basically, they're just some functions + +00:06:00.240 --> 00:06:04.240 +for making a block of text writable or readable. + +00:06:04.240 --> 00:06:09.299 +Writable or not writable, I should say. + +00:06:09.300 --> 00:06:12.200 +The idea there is that + +00:06:12.200 --> 00:06:13.480 +when I'm creating a new entry, + +00:06:13.480 --> 00:06:16.307 +I don't want to accidentally delete + +00:06:16.307 --> 00:06:18.960 +or write over some earlier entries that I've made. + +00:06:18.960 --> 00:06:24.880 +So I use a little bit of Emacs functionality for that. + +00:06:24.880 --> 00:06:29.440 +And then here are the three reference functions + +00:06:29.440 --> 00:06:32.440 +that I've actually written. + +00:06:32.440 --> 00:06:35.040 +Really trivial, basic stuff here. + +00:06:35.040 --> 00:06:41.800 +The core of it is the `new-reference` function. + +00:06:41.800 --> 00:06:44.840 +Basically, what that does is + +00:06:44.840 --> 00:06:47.560 +it opens up the references file, + +00:06:47.560 --> 00:06:52.040 +jumps to the end of the reference file, + +00:06:52.040 --> 00:06:57.440 +starts a new entry, inserts the asterisk. + +00:06:57.440 --> 00:07:01.520 +It jumps back to the previous text, + +00:07:01.520 --> 00:07:03.474 +and whatever previous text there is, + +00:07:03.474 --> 00:07:04.880 +it makes that read-only. + +00:07:04.880 --> 00:07:08.120 +Again, so that I don't accidentally delete that, + +00:07:08.120 --> 00:07:10.800 +or cut, or type over it, or something + +00:07:10.800 --> 00:07:14.579 +when I'm making a new reference. + +00:07:14.580 --> 00:07:17.680 +Then it goes back to the new reference, + +00:07:17.680 --> 00:07:21.339 +automatically adds in a unique ID for that, + +00:07:21.340 --> 00:07:25.360 +and then automatically stamps it with + +00:07:25.360 --> 00:07:28.999 +the date the entry was created — today's date. + +00:07:29.000 --> 00:07:32.760 +Now, I've got two other functions here. + +00:07:32.760 --> 00:07:34.540 +One is `view-references`, + +00:07:34.540 --> 00:07:37.807 +which does nothing but open up the reference file + +00:07:37.807 --> 00:07:39.400 +and switch to that buffer + +00:07:39.400 --> 00:07:42.539 +if you're not already on it. + +00:07:42.540 --> 00:07:45.880 +And then there's one other here, `edit-references`, + +00:07:45.880 --> 00:07:50.159 +which does the exact same thing except for + +00:07:50.160 --> 00:07:53.560 +it also goes over all the text in the buffer + +00:07:53.560 --> 00:07:55.040 +and makes it writable. + +00:07:55.040 --> 00:07:58.120 +So if I really do want to edit those other references, + +00:07:58.120 --> 00:08:02.719 +I've got a function to quickly make that possible. + +NOTE Example reference to Elfeed article + +00:08:02.720 --> 00:08:07.499 +Let me give an example of this. + +00:08:07.500 --> 00:08:13.979 +I type in here, new reference. + +00:08:13.980 --> 00:08:16.440 +Now I've jumped to the end of my references file. + +00:08:16.440 --> 00:08:19.080 +See, it's ready to take the title. + +00:08:19.080 --> 00:08:21.720 +Well, I guess I need to have something, + +00:08:21.720 --> 00:08:23.659 +some content, to put in here. + +00:08:23.660 --> 00:08:28.879 +Let's say I was looking through Elfeed, + +00:08:28.880 --> 00:08:31.600 +and let's say I found this interesting article + +00:08:31.600 --> 00:08:38.219 +about Mars earthquakes. + +00:08:38.220 --> 00:08:40.007 +Let's say I open it up [and] + +00:08:40.007 --> 00:08:41.159 +I read through the article. + +00:08:41.160 --> 00:08:43.840 +First, I'd figure out what it is + +00:08:43.840 --> 00:08:47.259 +that I find interesting about this, what it is that + +00:08:47.260 --> 00:08:51.579 +I'm going to want to remember and look up later. + +00:08:51.580 --> 00:08:57.479 +So I come up with a quick title based on that. + +00:08:57.480 --> 00:09:01.899 +Let's go back to the references with `view-reference`. + +00:09:01.900 --> 00:09:05.674 +And, let's just call it + +00:09:05.674 --> 00:09:13.879 +"Study of Mars Earthquake." + +00:09:13.880 --> 00:09:18.199 +Now I'm going to also want to put in some tags. + +00:09:18.200 --> 00:09:21.107 +On my system, that's done with + +00:09:21.107 --> 00:09:23.639 +Control C, Control Q (`C-c C-q`). + +00:09:23.640 --> 00:09:25.520 +And I can put in some tags. + +00:09:25.520 --> 00:09:29.160 +I like to go ahead and insert the colons. + +00:09:29.160 --> 00:09:30.799 +You can leave those out, + +00:09:30.800 --> 00:09:32.560 +but they're going to get added anyway, + +00:09:32.560 --> 00:09:36.779 +so I'm in the habit of using them. + +00:09:36.780 --> 00:09:41.120 +Let's say we'll call this 'Astronomy' as one tag, + +00:09:41.120 --> 00:09:47.059 +and the next tag could be 'Planets'. + +00:09:47.060 --> 00:09:48.400 +If I wanted to use a tag + +00:09:48.400 --> 00:09:50.400 +that was more than one word in the tag, + +00:09:50.400 --> 00:09:53.540 +I'd need to use underscores or something like that. + +00:09:53.540 --> 00:10:00.499 +If I wanted a tag that was 'Mars Earthquakes', + +00:10:00.500 --> 00:10:05.059 +I could do it like that, but that's kind of silly. + +00:10:05.060 --> 00:10:08.659 +Now I try not to be too clever with the tags. + +00:10:08.660 --> 00:10:10.600 +I don't spend a lot of time thinking about them. + +00:10:10.600 --> 00:10:13.107 +I just come up with some general buckets + +00:10:13.107 --> 00:10:15.019 +to throw things in. + +00:10:15.020 --> 00:10:16.880 +You can see the tags were added there, + +00:10:16.880 --> 00:10:19.379 +to the right of the title. + +00:10:19.380 --> 00:10:23.399 +Now you can see down here under PROPERTIES, + +00:10:23.400 --> 00:10:25.320 +the ID has already been added, + +00:10:25.320 --> 00:10:27.040 +the Date_Created has been added. + +00:10:27.040 --> 00:10:30.200 +Sometimes, I'll like to put in the publication year, + +00:10:30.200 --> 00:10:38.139 +and for that, I use the `org-set-property` command. + +00:10:38.140 --> 00:10:43.439 +Publication_Year, this year in this case. + +00:10:43.440 --> 00:10:46.679 +And then I just need to paste in the URL. + +00:10:46.680 --> 00:10:48.080 +I do that manually. + +00:10:48.080 --> 00:10:53.480 +I use Org's bracket format for that. + +00:10:53.480 --> 00:10:57.639 +So I start that, go back to the article, + +00:10:57.640 --> 00:11:02.099 +copy the URL, paste that in. + +00:11:02.100 --> 00:11:04.480 +If I want, I can add it in the title + +00:11:04.480 --> 00:11:07.459 +with the second pair of brackets here. + +00:11:07.460 --> 00:11:14.200 +Don't have to, but often like to. + +00:11:14.200 --> 00:11:18.560 +Close that off, and there it is. + +00:11:18.560 --> 00:11:20.879 +That was really it. + +00:11:20.880 --> 00:11:22.120 +I add a return on the end here, + +00:11:22.120 --> 00:11:26.619 +just so the next entry comes out with the right spacing. + +00:11:26.620 --> 00:11:28.307 +But really, that's it, + +00:11:28.307 --> 00:11:31.000 +and typically, when I'm not explaining it, + +00:11:31.000 --> 00:11:37.499 +that only takes 20 seconds or so, or 30 seconds. + +00:11:37.500 --> 00:11:41.539 +Pretty quick. Pretty easy. + +NOTE Searching the references + +00:11:41.540 --> 00:11:45.539 +What about searching later? + +00:11:45.540 --> 00:11:50.474 +Well, often the easiest thing is just do a simple, + +00:11:50.474 --> 00:11:54.639 +boring incremental search. + +00:11:54.640 --> 00:11:55.880 +I usually know roughly + +00:11:55.880 --> 00:11:58.499 +what it is that I'm looking for already. + +00:11:58.500 --> 00:12:02.379 +If I was looking for that wildflower article, + +00:12:02.380 --> 00:12:06.000 +I could just do an incremental search for wildflowers + +00:12:06.000 --> 00:12:07.920 +and jump through that. It's pretty simple. + +00:12:07.920 --> 00:12:13.200 +Not very impressive, but honestly, most of the time + +00:12:13.200 --> 00:12:16.439 +that gets me there pretty quick. + +00:12:16.440 --> 00:12:20.360 +Sometimes I find it useful to do an Occur search, + +00:12:20.360 --> 00:12:23.240 +more specifically a Helm Occur search. + +00:12:23.240 --> 00:12:31.259 +If I use the `helm-occur` command, + +00:12:31.260 --> 00:12:34.680 +then I like to use this to search by tag. + +00:12:34.680 --> 00:12:36.760 +That's where it really becomes handy. + +00:12:36.760 --> 00:12:39.207 +Let's say I want to narrow it down + +00:12:39.207 --> 00:12:42.640 +to all my astronomy references + +00:12:42.640 --> 00:12:50.039 +and then narrow it down a little bit more to planets. + +00:12:50.040 --> 00:12:54.119 +I can put spaces in between and it still works. + +00:12:54.120 --> 00:12:57.199 +You can see here in one window, + +00:12:57.200 --> 00:13:00.239 +it gives me the bottom window there. + +00:13:00.240 --> 00:13:03.479 +It's giving…, just because of the way + +00:13:03.480 --> 00:13:06.440 +the tags are formatted with the title, it gives me + +00:13:06.440 --> 00:13:09.519 +a list of all the titles that have those tags. + +00:13:09.520 --> 00:13:11.520 +And I usually find what I want pretty quick + +00:13:11.520 --> 00:13:13.400 +by just tapping through here. + +00:13:13.400 --> 00:13:16.499 +Once I find the one that I think I want, + +00:13:16.500 --> 00:13:24.139 +I press enter, and now I'm focused on just that entry. + +00:13:24.140 --> 00:13:26.960 +There is some advanced functionality, I believe, + +00:13:26.960 --> 00:13:29.960 +that I used in the past where you could search + +00:13:29.960 --> 00:13:33.119 +based on the property fields. + +00:13:33.120 --> 00:13:37.880 +So do something like search for publication — + +00:13:37.880 --> 00:13:42.439 +the most recent publications in the last 10 years. + +00:13:42.440 --> 00:13:46.200 +There's some kind of advanced syntax for that, + +00:13:46.200 --> 00:13:48.219 +which I used once or twice. + +00:13:48.220 --> 00:13:51.400 +Honestly, I use that so infrequently + +00:13:51.400 --> 00:13:54.840 +that I have to go back to the Emacs manual + +00:13:54.840 --> 00:13:57.739 +and figure it out each time, and figure out again + +00:13:57.740 --> 00:13:59.880 +how I did that the last time. + +00:13:59.880 --> 00:14:02.000 +But since I do it only once + +00:14:02.000 --> 00:14:06.679 +every three or four months, it's not a problem. + +00:14:06.680 --> 00:14:11.519 +So I'm not going to go over that today. + +00:14:11.520 --> 00:14:16.479 +That's pretty much it in a nutshell. + +00:14:16.480 --> 00:14:19.974 +Again, the code that I wrote, this specific approach + +00:14:19.974 --> 00:14:24.279 +is not really what I'm recommending. + +00:14:24.280 --> 00:14:31.160 +But here it is if you really do want to use it. + +00:14:31.160 --> 00:14:36.239 +Maybe I can make a link to the URL + +00:14:36.240 --> 00:14:40.059 +and share that in the chat room or something. + +00:14:40.060 --> 00:14:46.759 +But I consider this to be trivial code. + +00:14:46.760 --> 00:14:49.799 +So just use that if you want to use it. + +00:14:49.800 --> 00:14:53.440 +I should be signing off here now. + +00:14:53.440 --> 00:14:58.259 +I should be in the chat room, in the IRC chat room, + +00:14:58.260 --> 00:15:01.920 +or you can reach out to me by email if you'd like. + +00:15:01.920 --> 00:15:04.320 +Thank you very much. diff --git a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt new file mode 100644 index 00000000..1179c72e --- /dev/null +++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt @@ -0,0 +1,44 @@ +WEBVTT + + +00:00:00.000 --> 00:00:21.560 +Intro + +00:00:21.560 --> 00:01:02.560 +Diagrams + +00:01:03.320 --> 00:02:51.360 +eev + +00:02:51.360 --> 00:08:52.560 +Another figure + +00:08:52.560 --> 00:10:44.240 +eev-wconfig, magic, and black boxes + +00:10:44.240 --> 00:16:10.960 +Lua + +00:16:10.960 --> 00:19:19.822 +Object orientation in Lua + +00:19:19.823 --> 00:20:31.000 +My init file + +00:20:31.000 --> 00:25:28.280 +LaTeX and LuaLaTeX + +00:25:28.280 --> 00:26:30.879 +Manim + +00:26:30.880 --> 00:31:03.240 +Generating diagrams from REPLs + +00:31:03.240 --> 00:39:03.200 +Parsers + +00:39:03.200 --> 00:50:04.160 +ELpeg1.lua + +00:50:04.160 --> 00:59:26.040 +Building lists diff --git a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt new file mode 100644 index 00000000..723fc45a --- /dev/null +++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt @@ -0,0 +1,3324 @@ +WEBVTT captioned by eduardo +Kind: captions +Language: en-GB + +NOTE Intro + +00:00:00.000 --> 00:00:03.079 +Hi! My name is Eduardo Ochs + +00:00:03.080 --> 00:00:05.519 +and the title of this talk is: REPLs + +00:00:05.520 --> 00:00:09.399 +in strange places - Lua, LateX, LPeg, LPegRex, + +00:00:09.400 --> 00:00:12.119 +and TikZ. I'm the author of an Emacs + +00:00:12.120 --> 00:00:14.879 +package called eev, and this is a talk + +00:00:14.880 --> 00:00:18.479 +at the EmacsConf 2023, that is happening in + +00:00:18.480 --> 00:00:22.519 +December 2023, at the internets. + +NOTE Diagrams + +00:00:22.520 --> 00:00:23.079 +This is one of the + +00:00:23.080 --> 00:00:24.919 +examples of diagrams that we are + +00:00:24.920 --> 00:00:27.639 +going to see - let me show how I generate + +00:00:27.640 --> 00:00:30.599 +it... one second, + +00:00:30.600 --> 00:00:35.799 +I have to use a smaller font here... + +00:00:35.800 --> 00:00:39.159 +this is a file called ParseTree2.lua... + +00:00:39.160 --> 00:00:42.919 +let me go back to this block of tests again... + +00:00:42.920 --> 00:00:43.879 +and now if I run + +00:00:43.880 --> 00:00:47.759 +this... + +00:00:47.760 --> 00:00:50.159 +we get these outputs here at the + +00:00:50.160 --> 00:00:53.959 +right, and then in this line here it + +00:00:53.960 --> 00:00:58.119 +generates a PDF, and if I type f8 here it + +00:00:58.120 --> 00:01:03.919 +shows the PDF in the lower right window. + +NOTE eev + +00:01:03.920 --> 00:01:06.079 +Let me start by explaining + +00:01:06.080 --> 00:01:09.839 +briefly what is eev. + +00:01:09.840 --> 00:01:12.239 +First: it is something that + +00:01:12.240 --> 00:01:14.759 +appeared by accident in the mid-90s - I + +00:01:14.760 --> 00:01:16.799 +explained this story in my + +00:01:16.800 --> 00:01:20.159 +presentation at the EmacsConf 2019... + +00:01:20.160 --> 00:01:23.159 +it's a package... it's an Emacs + +00:01:23.160 --> 00:01:26.519 +package that is part of ELPA... it has at + +00:01:26.520 --> 00:01:29.679 +least 10 users - those are the ones + +00:01:29.680 --> 00:01:32.559 +that I know by name... + +00:01:32.560 --> 00:01:38.439 +eev means `emacs-execute-verbosely'... + +00:01:38.440 --> 00:01:40.959 +eev is something that treats eval-last-sexp + +00:01:40.960 --> 00:01:43.999 +as the central feature of Emacs... + +00:01:44.000 --> 00:01:45.599 +eev blurs the distinction between + +00:01:45.600 --> 00:01:48.919 +programmers and users, and it replaces + +00:01:48.920 --> 00:01:51.679 +the slogan "users should not be forced to + +00:01:51.680 --> 00:01:53.679 +see Lisp", that is something that Richard + +00:01:53.680 --> 00:01:57.559 +Stallman told me once, by "users should see + +00:01:57.560 --> 00:02:00.479 +Lisp instead of buttons" and "new users + +00:02:00.480 --> 00:02:03.999 +should see Lisp in the first 5 minutes"... + +00:02:04.000 --> 00:02:05.279 +I'm going to show + +00:02:05.280 --> 00:02:08.959 +some examples of that soon. + +00:02:08.960 --> 00:02:11.959 +Eev uses code in comments a lot, + +00:02:11.960 --> 00:02:15.119 +and also tests in comments... + +00:02:15.120 --> 00:02:17.679 +I changed my way of presenting it + +00:02:17.680 --> 00:02:19.679 +and it became very REPL-centric + +00:02:19.680 --> 00:02:22.319 +in the last few years, in the + +00:02:22.320 --> 00:02:24.399 +sense that I start by explaining its + +00:02:24.400 --> 00:02:28.679 +main features by its support for REPLs... + +00:02:28.680 --> 00:02:31.079 +eev supposes + +00:02:31.080 --> 00:02:32.639 +that we want to keep + +00:02:32.640 --> 00:02:35.199 +executable notes of everything - I'm also + +00:02:35.200 --> 00:02:37.159 +going to show examples of this in a + +00:02:37.160 --> 00:02:40.479 +second... eev has lots of "videos for + +00:02:40.480 --> 00:02:43.559 +people who hate videos", and it tries to + +00:02:43.560 --> 00:02:46.159 +do everything with very little magic and + +00:02:46.160 --> 00:02:48.839 +without black boxes - I'm going to explain + +00:02:48.840 --> 00:02:50.319 +many of these things very soon. + +NOTE Another figure + +00:02:50.320 --> 00:02:52.799 +This is a figure that that I'm going + +00:02:52.800 --> 00:02:57.119 +to show in details soon, that is + +00:02:57.120 --> 00:02:59.959 +about something important about Lua... + +00:02:59.960 --> 00:03:03.959 +the font is very bad now, so let me + +00:03:03.960 --> 00:03:07.559 +change the font... the figure is this one... + +00:03:07.560 --> 00:03:08.239 +and... + +00:03:08.240 --> 00:03:12.519 +what most people do when they + +00:03:12.520 --> 00:03:14.479 +visit a file with something + +00:03:14.480 --> 00:03:16.479 +interesting on it is that they just go + +00:03:16.480 --> 00:03:18.679 +there and they set a bookmark there, or + +00:03:18.680 --> 00:03:21.959 +they put the position in a register... + +00:03:21.960 --> 00:03:26.959 +but I prefer to keep + +00:03:26.960 --> 00:03:29.199 +links to everything that is interesting + +00:03:29.200 --> 00:03:32.119 +as elisp hyperlinks. So, for example, this is + +00:03:32.120 --> 00:03:35.079 +an elisp hyperlink to a file, that goes + +00:03:35.080 --> 00:03:37.599 +to this anchor here, and to this string + +00:03:37.600 --> 00:03:41.439 +after this anchor... this is a variant + +00:03:41.440 --> 00:03:44.239 +that opens that file in the window + +00:03:44.240 --> 00:03:45.479 +at the right - + +00:03:45.480 --> 00:03:48.879 +here... and this is + +00:03:48.880 --> 00:03:53.279 +a sexp that changes the font. I + +00:03:53.280 --> 00:03:56.679 +have a command with a very short name + +00:03:56.680 --> 00:03:59.439 +that does that, but I + +00:03:59.440 --> 00:04:02.959 +prefer to keep that as a one-liner. + +00:04:02.960 --> 00:04:06.919 +About the videos... we can see + +00:04:06.920 --> 00:04:10.079 +the list of first-class videos of eev + +00:04:10.080 --> 00:04:14.759 +by executing this, M-x find-1stclassvideos, + +00:04:14.760 --> 00:04:18.639 +or by running this alias here, M-x 1c... + +00:04:18.640 --> 00:04:20.679 +and then what we see is this... + +00:04:20.680 --> 00:04:24.239 +the first sexp here + +00:04:24.240 --> 00:04:26.959 +regenerates this buffer - so we can make a + +00:04:26.960 --> 00:04:29.399 +mess here and then run this and the + +00:04:29.400 --> 00:04:33.519 +original buffer is regenerated again in + +00:04:33.520 --> 00:04:34.959 +a clean way... + +00:04:34.960 --> 00:04:36.919 +each of these things here + +00:04:36.920 --> 00:04:40.879 +opens a buffer with information about + +00:04:40.880 --> 00:04:43.999 +a video... let me take a specific + +00:04:44.000 --> 00:04:49.159 +example here... this video here is about + +00:04:49.160 --> 00:04:51.039 +one of the ancestors of this talk, that + +00:04:51.040 --> 00:04:53.479 +is a library that I wrote + +00:04:53.480 --> 00:04:58.479 +for creating diagrams in LaTeX using + +00:04:58.480 --> 00:05:03.519 +a package called Pict2e using REPLs... + +00:05:03.520 --> 00:05:03.959 +anyway... + +00:05:03.960 --> 00:05:06.599 +the thing is that if we + +00:05:06.600 --> 00:05:11.599 +run a sexp like this one and we don't + +00:05:11.600 --> 00:05:14.679 +have a local copy of the video eev + +00:05:14.680 --> 00:05:17.599 +will try to download to the local copy - + +00:05:17.600 --> 00:05:20.119 +and instead of doing that by asking + +00:05:20.120 --> 00:05:21.719 +something like "do you want me + +00:05:21.720 --> 00:05:23.999 +to download the local copy? Blah + +00:05:24.000 --> 00:05:27.999 +blah blah blah blah..." it simply opens a + +00:05:28.000 --> 00:05:30.719 +buffer like this, I mean, if we don't + +00:05:30.720 --> 00:05:33.359 +have a local copy yet it will open a + +00:05:33.360 --> 00:05:36.359 +buffer like this one, in which these + +00:05:36.360 --> 00:05:39.199 +things here in comments are links to the + +00:05:39.200 --> 00:05:43.839 +documentation... I mean, this thing here + +00:05:43.840 --> 00:05:46.159 +explains the idea of local copies + +00:05:46.160 --> 00:05:48.759 +of files from the internet... + +00:05:48.760 --> 00:05:54.759 +there are more details here, and here... + +00:05:54.760 --> 00:05:57.159 +and this is a script that we + +00:05:57.160 --> 00:06:00.519 +can execute line by line, so instead of + +00:06:00.520 --> 00:06:02.359 +this script being hidden behind the + +00:06:02.360 --> 00:06:06.119 +button that we just press after a + +00:06:06.120 --> 00:06:08.399 +question like "Do you want me to do + +00:06:08.400 --> 00:06:10.239 +something blah blah blah? Yes or no?" + +00:06:10.240 --> 00:06:13.639 +the script is visible here and we can + +00:06:13.640 --> 00:06:17.599 +execute it step by step... it creates a + +00:06:17.600 --> 00:06:20.799 +terminal with a shell here in the + +00:06:20.800 --> 00:06:24.799 +right window, and when we type f8 in + +00:06:24.800 --> 00:06:26.839 +one of these lines here the lines are + +00:06:26.840 --> 00:06:29.119 +sent... (...) so this is going + +00:06:29.120 --> 00:06:31.759 +to download a copy of the video... the + +00:06:31.760 --> 00:06:36.639 +wget says that I already have a copy of + +00:06:36.640 --> 00:06:39.479 +the video and its subtitles... and so on. + +00:06:39.480 --> 00:06:43.879 +And after getting a copy of the video + +00:06:43.880 --> 00:06:48.159 +we can run this sexp here and it displays + +00:06:48.160 --> 00:06:49.919 +the video. + +00:06:49.920 --> 00:06:55.399 +I said that eev has lots of + +00:06:55.400 --> 00:06:58.399 +"videos for people who hate videos", and + +00:06:58.400 --> 00:06:59.679 +the idea is that very few + +00:06:59.680 --> 00:07:02.039 +people are going to watch the videos in + +00:07:02.040 --> 00:07:06.559 +real time... and most of the people that + +00:07:06.560 --> 00:07:08.279 +I know - or: most of the people that + +00:07:08.280 --> 00:07:10.639 +are interested in eev in some + +00:07:10.640 --> 00:07:13.479 +way... they are going to watch just + +00:07:13.480 --> 00:07:16.319 +small sections of the video, and most of + +00:07:16.320 --> 00:07:17.559 +the time they're just going to read the + +00:07:17.560 --> 00:07:20.799 +subtitles of the video. So, for each + +00:07:20.800 --> 00:07:23.479 +one of the videos we have a page + +00:07:23.480 --> 00:07:27.039 +about the video... let me see if I + +00:07:27.040 --> 00:07:29.999 +have internet here... yes. This is a + +00:07:30.000 --> 00:07:32.879 +page... + +00:07:32.880 --> 00:07:38.999 +and usually these pages have a link + +00:07:39.000 --> 00:07:40.759 +to another page that + +00:07:40.760 --> 00:07:43.239 +has all the subtitles of the + +00:07:43.240 --> 00:07:46.639 +video... uh, wherever... in this one + +00:07:46.640 --> 00:07:48.319 +it's not so visible... + +00:07:48.320 --> 00:07:50.599 +but anyway, there are several + +00:07:50.600 --> 00:07:52.479 +ways of accessing the subtitles of the + +00:07:52.480 --> 00:07:56.239 +video, and one of the ways is by running + +00:07:56.240 --> 00:07:57.519 +this sexp here, + +00:07:57.520 --> 00:08:01.559 +that opens a file in Lua that is + +00:08:01.560 --> 00:08:03.319 +what I use to generate the + +00:08:03.320 --> 00:08:04.479 +subtitles. + +00:08:04.480 --> 00:08:08.519 +Anyway... by the way, these things... each + +00:08:08.520 --> 00:08:12.039 +one of these things here is a hyperlink + +00:08:12.040 --> 00:08:15.239 +to a position of the video, so if I type + +00:08:15.240 --> 00:08:18.879 +this the right way it goes to that + +00:08:18.880 --> 00:08:24.119 +position. Anyway, let me go back... + +00:08:24.120 --> 00:08:27.279 +also, the tutorials of eev... the + +00:08:27.280 --> 00:08:31.359 +"intros" of eev, that start with "find-" and + +00:08:31.360 --> 00:08:34.279 +end with "-intro", they have lots of blocks + +00:08:34.280 --> 00:08:39.039 +that say "[Video links:]", like this one, and + +00:08:39.040 --> 00:08:41.359 +these blocks have links to positions + +00:08:41.360 --> 00:08:43.879 +in videos, and if we don't have a local + +00:08:43.880 --> 00:08:47.919 +copy of the video yet the thing shows + +00:08:47.920 --> 00:08:49.799 +us a script that lets us download the + +00:08:49.800 --> 00:08:50.599 +local copy. + +00:08:50.600 --> 00:08:54.399 +Anyway, I said that I was going + +00:08:54.400 --> 00:08:58.759 +to explain what I mean by "magic" and + +00:08:58.760 --> 00:08:59.639 +"black boxes". + +00:08:59.640 --> 00:09:03.119 +this is something that I've been + +00:09:03.120 --> 00:09:05.119 +trying to explain for a long time, and I + +00:09:05.120 --> 00:09:07.319 +think that I got a very good explanation + +00:09:07.320 --> 00:09:09.839 +about that in a video that I made + +00:09:09.840 --> 00:09:13.199 +about something called eev-wconfig, that + +00:09:13.200 --> 00:09:14.999 +is a tool for configuring eev on + +00:09:15.000 --> 00:09:19.199 +Windows without "magic" - without buttons + +00:09:19.200 --> 00:09:22.479 +that do things without explaining what + +00:09:22.480 --> 00:09:22.879 +they're doing. + +00:09:22.880 --> 00:09:25.799 +This is a part of the subtitles + +00:09:25.800 --> 00:09:28.039 +of the video, let me read that... + +00:09:28.040 --> 00:09:32.319 +eev-wconfig is an attempt to solve the + +00:09:32.320 --> 00:09:35.039 +problem of how to install these things + +00:09:35.040 --> 00:09:37.279 +on Windows both without magic and with + +00:09:37.280 --> 00:09:37.879 +very little + +00:09:37.880 --> 00:09:41.679 +magic. Remember this slogan: "any + +00:09:41.680 --> 00:09:44.359 +sufficiently advanced technology is + +00:09:44.360 --> 00:09:45.399 +indistinguishable from + +00:09:45.400 --> 00:09:49.679 +magic". Here in this video I'm going to + +00:09:49.680 --> 00:09:52.199 +use the term magic as a shorthand + +00:09:52.200 --> 00:09:55.239 +for sufficiently advanced technology, + +00:09:55.240 --> 00:09:57.799 +that is something that is complex and + +00:09:57.800 --> 00:10:00.199 +non-obvious and that is + +00:10:00.200 --> 00:10:02.119 +indistinguishable from magic in the + +00:10:02.120 --> 00:10:04.119 +sense of being almost impossible to + +00:10:04.120 --> 00:10:07.439 +understand. And I'm also going to use a + +00:10:07.440 --> 00:10:10.279 +the term "black box" as a near-synonym for + +00:10:10.280 --> 00:10:13.079 +magic, and sometimes the term + +00:10:13.080 --> 00:10:16.039 +"black box" is more convenient even though + +00:10:16.040 --> 00:10:17.919 +it's a bit longer - it has more + +00:10:17.920 --> 00:10:20.159 +letters - because when I use the term + +00:10:20.160 --> 00:10:22.599 +black box it invites us to use + +00:10:22.600 --> 00:10:25.479 +expressions like "opening the black box", + +00:10:25.480 --> 00:10:26.639 +and I'm going to use that + +00:10:26.640 --> 00:10:28.039 +expression a lot. + +00:10:28.040 --> 00:10:37.399 +Now let me try to explain what is... + +00:10:37.400 --> 00:10:41.039 +sorry, let me change the font... + +00:10:41.040 --> 00:10:45.479 +what is Lua. Lua is a minimalistic + +00:10:45.480 --> 00:10:49.999 +language, in the sense of + +00:10:50.000 --> 00:10:53.679 +"batteries not included"... it uses + +00:10:53.680 --> 00:10:55.999 +associative tables for most of its data + +00:10:56.000 --> 00:10:56.799 +structures... + +00:10:56.800 --> 00:11:00.239 +and it is so minimalistic + +00:11:00.240 --> 00:11:03.999 +that its default print function, when + +00:11:04.000 --> 00:11:06.679 +we tell... when we create an associative + +00:11:06.680 --> 00:11:09.559 +table and we ask it to print... + +00:11:09.560 --> 00:11:13.319 +when we ask "print" to print an + +00:11:13.320 --> 00:11:15.719 +associative table it just prints the + +00:11:15.720 --> 00:11:17.879 +address of the table. Here are some + +00:11:17.880 --> 00:11:21.599 +examples... here is a table, and when we + +00:11:21.600 --> 00:11:24.679 +ask "print" to print it it just says + +00:11:24.680 --> 00:11:26.839 +that it's the table at this address here. + +00:11:26.840 --> 00:11:30.119 +So, one of things that that most + +00:11:30.120 --> 00:11:32.919 +people do when they start using Lua is + +00:11:32.920 --> 00:11:35.239 +that either they download a package with + +00:11:35.240 --> 00:11:37.079 +a pretty-printing function or they write + +00:11:37.080 --> 00:11:39.359 +their own pretty-printing functions. My + +00:11:39.360 --> 00:11:41.519 +own pretty-printing function is called + +00:11:41.520 --> 00:11:46.159 +PP, with upper case letters, and it works + +00:11:46.160 --> 00:11:47.679 +like this... + +00:11:47.680 --> 00:11:50.279 +and it prints associative tables + +00:11:50.280 --> 00:11:53.839 +in a way like this. It says that for + +00:11:53.840 --> 00:11:57.479 +the key 1 the the value associated to + +00:11:57.480 --> 00:12:00.039 +it is 2, for the key 2 the value is + +00:12:00.040 --> 00:12:04.959 +3, and for the key 3 the value is 5. + +00:12:04.960 --> 00:12:11.079 +When I started using Lua one of my + +00:12:11.080 --> 00:12:13.839 +favorite languages was also a language + +00:12:13.840 --> 00:12:15.639 +that used associative tables a lot - + +00:12:15.640 --> 00:12:16.839 +it was called Icon... + +00:12:16.840 --> 00:12:21.039 +and I had to write my own + +00:12:21.040 --> 00:12:23.839 +pretty-printing functions for Icon, so + +00:12:23.840 --> 00:12:27.319 +I just had to port my pretty-printing + +00:12:27.320 --> 00:12:29.719 +functions to Lua... and my first + +00:12:29.720 --> 00:12:32.239 +version looked at something like this... it + +00:12:32.240 --> 00:12:35.999 +just had some some global functions... lots + +00:12:36.000 --> 00:12:39.639 +of them, actually... + +00:12:39.640 --> 00:12:42.279 +and after a while I rewrote it, and I + +00:12:42.280 --> 00:12:44.599 +rewrote it again, and again, and again, and + +00:12:44.600 --> 00:12:47.279 +this is one of the versions of that, + +00:12:47.280 --> 00:12:49.879 +is not even the default at this + +00:12:49.880 --> 00:12:51.559 +point... + +00:12:51.560 --> 00:12:54.119 +"Tos" is for "to string"... + +00:12:54.120 --> 00:12:58.279 +and this is a demo... + +00:12:58.280 --> 00:13:01.919 +it's very modular, so it's easy to replace + +00:13:01.920 --> 00:13:05.639 +parts of it, or to toggle flags... and this + +00:13:05.640 --> 00:13:08.119 +is an example. If I try to print the + +00:13:08.120 --> 00:13:09.999 +table of methods for a certain + +00:13:10.000 --> 00:13:14.359 +class... I will need a smaller font... + +00:13:14.360 --> 00:13:16.799 +it prints the table like this, with the + +00:13:16.800 --> 00:13:20.039 +names of the methods and then links to + +00:13:20.040 --> 00:13:21.719 +the source code of the functions... + +00:13:21.720 --> 00:13:25.399 +these links only make sense in Emacs and + +00:13:25.400 --> 00:13:25.959 +in eev... + +00:13:25.960 --> 00:13:30.359 +and when we run a link like this one... + +00:13:30.360 --> 00:13:32.039 +it shows the source code in the + +00:13:32.040 --> 00:13:35.079 +window at the right. So, for some + +00:13:35.080 --> 00:13:37.879 +functions the source code is three lines, + +00:13:37.880 --> 00:13:39.999 +for other ones it's one line... and + +00:13:40.000 --> 00:13:44.879 +whatever. Anyway, let me go + +00:13:44.880 --> 00:13:47.039 +back... Lua can be used in many different + +00:13:47.040 --> 00:13:50.359 +styles... most people hate other people's + +00:13:50.360 --> 00:13:53.839 +styles... when I started using it in the + +00:13:53.840 --> 00:13:57.679 +year 2000 I learned most of the basic + +00:13:57.680 --> 00:13:59.839 +language in a single day - it was very + +00:13:59.840 --> 00:14:02.119 +similar to things that I was already + +00:14:02.120 --> 00:14:05.639 +using... and then I rewrote the the mini- + +00:14:05.640 --> 00:14:10.279 +language that I was using to + +00:14:10.280 --> 00:14:13.559 +generate the HTML for my pages + +00:14:13.560 --> 00:14:16.199 +in Lua... actually I had to rewrite it + +00:14:16.200 --> 00:14:18.079 +many times, but the first version I + +00:14:18.080 --> 00:14:21.519 +certainly did in my first weeks or first + +00:14:21.520 --> 00:14:22.519 +months using Lua... + +00:14:22.520 --> 00:14:27.279 +In the beginning I was just using + +00:14:27.280 --> 00:14:30.159 +it for writing programs that either + +00:14:30.160 --> 00:14:32.759 +didn't take any input at all - because + +00:14:32.760 --> 00:14:35.079 +the input was already in the source file - + +00:14:35.080 --> 00:14:40.599 +or that worked as Unix programs, + +00:14:40.600 --> 00:14:43.199 +that would read files + +00:14:43.200 --> 00:14:45.279 +and process these files in some way + +00:14:45.280 --> 00:14:48.999 +and output something. + +00:14:49.000 --> 00:14:52.319 +I mentioned the "basic language" here... + +00:14:52.320 --> 00:14:54.719 +I only learned how to use closures, + +00:14:54.720 --> 00:14:58.479 +metatables, and coroutines many years later... + +00:14:58.480 --> 00:15:02.399 +in the beginning, when I started using Lua, + +00:15:02.400 --> 00:15:04.199 +it didn't have a package manager... + +00:15:04.200 --> 00:15:06.799 +it appeared later, it is called + +00:15:06.800 --> 00:15:10.119 +Luarocks... it has had this package + +00:15:10.120 --> 00:15:13.279 +manager for several years, most + +00:15:13.280 --> 00:15:15.719 +of the rocks for Luarocks are poorly + +00:15:15.720 --> 00:15:18.959 +documented and hacker-unfriendly, + +00:15:18.960 --> 00:15:21.199 +so you can't rely just on the + +00:15:21.200 --> 00:15:23.679 +documentation and you can't rely just on the + +00:15:23.680 --> 00:15:26.719 +source code, because, I mean... if you are + +00:15:26.720 --> 00:15:29.159 +a genius of course you can, but for + +00:15:29.160 --> 00:15:31.479 +people who are either lazy, or dumb, or + +00:15:31.480 --> 00:15:34.279 +whatever, like me, or unfocused... + +00:15:34.280 --> 00:15:36.759 +the source code is hard to + +00:15:36.760 --> 00:15:38.959 +understand and hard to tinker with. + +00:15:38.960 --> 00:15:43.319 +Some rocks are excellent. The + +00:15:43.320 --> 00:15:46.599 +best rocks are well documented + +00:15:46.600 --> 00:15:48.719 +but they are hacker-unfriendly + +00:15:48.720 --> 00:15:50.999 +in a sense that I hope that + +00:15:51.000 --> 00:15:52.879 +I'll be able to explain soon. + +00:15:52.880 --> 00:15:54.999 +The best rocks use local + +00:15:55.000 --> 00:15:58.799 +variables and metatables a lot - + +00:15:58.800 --> 00:16:02.519 +so if you are beginner + +00:16:02.520 --> 00:16:03.799 +learning Lua you're not going to + +00:16:03.800 --> 00:16:06.159 +understand what their source code do... + +00:16:06.160 --> 00:16:08.519 +they use lots of dirty tricks. + +NOTE Object orientation in Lua + +00:16:08.520 --> 00:16:12.479 +Let me talk a bit about object + +00:16:12.480 --> 00:16:14.959 +orientation in Lua. It can be done in + +00:16:14.960 --> 00:16:15.879 +many ways... + +00:16:15.880 --> 00:16:18.999 +the main book about Lua, called + +00:16:19.000 --> 00:16:21.439 +"Programming in Lua", by one of the authors + +00:16:21.440 --> 00:16:23.959 +of the language, Roberto Ierusalimschy, + +00:16:23.960 --> 00:16:26.679 +presents several ways of doing + +00:16:26.680 --> 00:16:29.279 +object orientation in Lua... I hated all + +00:16:29.280 --> 00:16:33.199 +of these ways - and also the ways that I + +00:16:33.200 --> 00:16:34.519 +tried from the rocks. + +00:16:34.520 --> 00:16:38.559 +And then I wrote my own way + +00:16:38.560 --> 00:16:40.639 +of doing object orientation in Lua... it's + +00:16:40.640 --> 00:16:43.559 +very minimalistic, it's in this file here, + +00:16:43.560 --> 00:16:48.679 +eoo.lua... the main code is just this five + +00:16:48.680 --> 00:16:49.639 +lines here... + +00:16:49.640 --> 00:16:53.439 +and here's an example of how it works. + +00:16:53.440 --> 00:16:58.439 +Here we define the class Vector, + +00:16:58.440 --> 00:17:02.719 +with some metamethods... + +00:17:02.720 --> 00:17:05.959 +this metamethod here will tell Lua + +00:17:05.960 --> 00:17:08.319 +what to do when the + +00:17:08.320 --> 00:17:12.639 +user asks to add two vectors, this one + +00:17:12.640 --> 00:17:15.919 +here tells Lua what to do when the user + +00:17:15.920 --> 00:17:18.479 +asks Lua to convert a vector to a string, + +00:17:18.480 --> 00:17:21.439 +and... whatever, this one is + +00:17:21.440 --> 00:17:24.039 +something that I'm going to explain in a + +00:17:24.040 --> 00:17:27.479 +second. So, here we create a vector with + +00:17:27.480 --> 00:17:30.279 +these coordinates, 3 and 4... here we create + +00:17:30.280 --> 00:17:33.319 +another Vector... if we "print" here then Lua + +00:17:33.320 --> 00:17:36.439 +uses this function here, in the __tostring... + +00:17:36.440 --> 00:17:39.759 +if we add the two vectors it uses this + +00:17:39.760 --> 00:17:43.479 +function here, in the __add metamethod, and + +00:17:43.480 --> 00:17:45.359 +if we run the method :norm... + +00:17:45.360 --> 00:17:49.959 +it is defined here, in the table __index. + +00:17:49.960 --> 00:17:57.999 +Anyway... + +00:17:58.000 --> 00:18:02.439 +Even this thing being so small I used + +00:18:02.440 --> 00:18:04.719 +to forget how its innards worked all + +00:18:04.720 --> 00:18:08.119 +the time. Actually I always forget how + +00:18:08.120 --> 00:18:09.759 +things work and I have to remember them + +00:18:09.760 --> 00:18:12.479 +somehow... and I have to have + +00:18:12.480 --> 00:18:15.959 +tricks for remembering, and tricks for + +00:18:15.960 --> 00:18:18.719 +summarizing things, and diagrams, and so + +00:18:18.720 --> 00:18:22.199 +on. And every time that I forgot how this + +00:18:22.200 --> 00:18:24.799 +thing worked I went back to the + +00:18:24.800 --> 00:18:26.879 +source code, and then I looked at the + +00:18:26.880 --> 00:18:29.039 +diagrams... or, of course, in the + +00:18:29.040 --> 00:18:31.719 +first times I had to draw the diagrams... + +00:18:31.720 --> 00:18:35.239 +and I run the examples, and of course in + +00:18:35.240 --> 00:18:36.479 +in the beginning I thought that the code + +00:18:36.480 --> 00:18:39.119 +was clear and my examples were very + +00:18:39.120 --> 00:18:41.559 +brief, and so I had to rewrite the + +00:18:41.560 --> 00:18:44.719 +examples many times until they became, + +00:18:44.720 --> 00:18:45.639 +let's say... + +00:18:45.640 --> 00:18:47.759 +perfect. + +00:18:47.760 --> 00:18:52.599 +I was saying that Lua can be used in + +00:18:52.600 --> 00:18:56.359 +many ways, and in my way of using Lua - in + +00:18:56.360 --> 00:18:59.439 +my favorite way - everything can be + +00:18:59.440 --> 00:19:02.159 +inspected and modified from REPLs, + +00:19:02.160 --> 00:19:06.319 +like we can do in Emacs and in SmallTalk, + +00:19:06.320 --> 00:19:08.519 +or sort of. So, in my + +00:19:08.520 --> 00:19:10.239 +favorite way of using Lua there's no + +00:19:10.240 --> 00:19:12.679 +security at all, everything can be + +00:19:12.680 --> 00:19:14.919 +changed at all times. + +00:19:14.920 --> 00:19:19.119 +Of course most people hate that... + +NOTE My init file + +00:19:19.120 --> 00:19:22.599 +My init file has lots of classes... by the + +00:19:22.600 --> 00:19:26.079 +way, instead of keeping many small files + +00:19:26.080 --> 00:19:29.639 +with many things I put lots of stuff + +00:19:29.640 --> 00:19:31.279 +in just one big init file. + +00:19:31.280 --> 00:19:34.599 +My init file has lots of classes, + +00:19:34.600 --> 00:19:37.959 +and lots of global functions, and + +00:19:37.960 --> 00:19:41.799 +lots of cruft - and people hate that, + +00:19:41.800 --> 00:19:44.559 +of course. This is an example... + +00:19:44.560 --> 00:19:46.439 +this is the index at the top + +00:19:46.440 --> 00:19:48.359 +of my init file, + +00:19:48.360 --> 00:19:53.119 +the classes start here, and then + +00:19:53.120 --> 00:19:59.119 +we have some functions, and + +00:19:59.120 --> 00:20:01.199 +then we have functions that load + +00:20:01.200 --> 00:20:03.839 +certain packages, and then we have... cruft. + +00:20:03.840 --> 00:20:04.919 +Whatever. + +00:20:04.920 --> 00:20:08.119 +Most people think that my style + +00:20:08.120 --> 00:20:10.279 +of using Lua is dirty, and dangerous... + +00:20:10.280 --> 00:20:12.959 +and they wouldn't touch my Lua code + +00:20:12.960 --> 00:20:15.479 +with a 10 feet pole... but most of the + +00:20:15.480 --> 00:20:18.599 +things that I'm going to present here in + +00:20:18.600 --> 00:20:23.199 +this presentation are ideas that should + +00:20:23.200 --> 00:20:28.159 +be easy to port to other environments + +00:20:28.160 --> 00:20:32.279 +and other languages, especially the + +00:20:32.280 --> 00:20:35.279 +diagrams... so the code is not so important. + +NOTE LaTeX and LuaLaTeX + +00:20:35.280 --> 00:20:39.039 +Now let me talk a bit about LuaLaTeX, + +00:20:39.040 --> 00:20:41.359 +that is LaTeX with a Lua interpreter + +00:20:41.360 --> 00:20:44.559 +embedded inside, and two ways + +00:20:44.560 --> 00:20:48.839 +of generating pictures in LaTeX: TikZ, + +00:20:48.840 --> 00:20:54.439 +that is very famous, and Pict2e, that is not + +00:20:54.440 --> 00:20:57.359 +very famous and that is very low level... + +00:20:57.360 --> 00:21:02.359 +and I think that not many people use it. + +00:21:02.360 --> 00:21:04.119 +I said before that when I + +00:21:04.120 --> 00:21:06.919 +learned Lua I realized that it was + +00:21:06.920 --> 00:21:09.199 +very good for writing little + +00:21:09.200 --> 00:21:14.919 +languages. I was doing my PhD at the + +00:21:14.920 --> 00:21:19.839 +time and typesetting the diagrams for + +00:21:19.840 --> 00:21:24.039 +my PhD thesis was very boring, so + +00:21:24.040 --> 00:21:29.879 +one of the things that I did was that I + +00:21:29.880 --> 00:21:34.439 +created a little language for typesetting + +00:21:34.440 --> 00:21:36.359 +the diagrams for me. it was + +00:21:36.360 --> 00:21:38.879 +called Dednat because initially + +00:21:38.880 --> 00:21:41.039 +it only generated diagrams for + +00:21:41.040 --> 00:21:43.759 +Natural Deduction, and then it had + +00:21:43.760 --> 00:21:45.119 +several versions... + +00:21:45.120 --> 00:21:46.679 +these are the slides for my + +00:21:46.680 --> 00:21:52.159 +presentation about Dednat6... "Dednat6 is + +00:21:52.160 --> 00:21:56.159 +an extensible semi-preprocessor for + +00:21:56.160 --> 00:22:01.159 +LuaLaTeX that understands diagrams in + +00:22:01.160 --> 00:22:05.359 +ASCII art"... in the sense that when I have + +00:22:05.360 --> 00:22:11.399 +a .tex file that has this, and when + +00:22:11.400 --> 00:22:13.279 +Dednat6 is loaded, + +00:22:13.280 --> 00:22:15.039 +when I give the right commands + +00:22:15.040 --> 00:22:19.559 +Dednat6 interprets this block here as + +00:22:19.560 --> 00:22:22.559 +something that defines this + +00:22:22.560 --> 00:22:28.239 +diagram... oops, sorry, it interprets this + +00:22:28.240 --> 00:22:30.599 +diagram here, this diagram in + +00:22:30.600 --> 00:22:34.879 +comments here, as something that defines + +00:22:34.880 --> 00:22:39.759 +a diagram called foo... a deduction called + +00:22:39.760 --> 00:22:41.439 +foo, and it generates this code here... + +00:22:41.440 --> 00:22:44.239 +so that we can just invoke + +00:22:44.240 --> 00:22:45.519 +the definition of the + +00:22:45.520 --> 00:22:47.719 +deduction by typing \ded{foo}. + +00:22:47.720 --> 00:22:50.759 +And Dednat6 also + +00:22:50.760 --> 00:22:57.159 +supports another language for typesetting + +00:22:57.160 --> 00:22:59.639 +bidimensional diagrams with + +00:22:59.640 --> 00:23:05.399 +arrows and stuff for category Theory and + +00:23:05.400 --> 00:23:08.519 +blah blah blah... the specifications of + +00:23:08.520 --> 00:23:12.039 +these diagrams look like this... + +00:23:12.040 --> 00:23:14.559 +here is a... sorry, here is a very good + +00:23:14.560 --> 00:23:16.719 +example, this is a huge diagram... + +00:23:16.720 --> 00:23:18.599 +sorry, one second... + +00:23:18.600 --> 00:23:20.399 +so, the source code that generates + +00:23:20.400 --> 00:23:25.119 +this diagram here is just this thing at + +00:23:25.120 --> 00:23:32.039 +the left, so it's very visual... we can + +00:23:32.040 --> 00:23:35.679 +typeset the diagram in ASCII art here and + +00:23:35.680 --> 00:23:38.759 +then in this part here we tell how + +00:23:38.760 --> 00:23:41.279 +the nodes are to be joined, which + +00:23:41.280 --> 00:23:43.799 +arrows have to to have annotations, and + +00:23:43.800 --> 00:23:45.039 +so on... + +00:23:45.040 --> 00:23:46.799 +and this language is extensible in + +00:23:46.800 --> 00:23:48.679 +the sense that... uh, where's that... + +00:23:48.680 --> 00:23:52.559 +here: comments that start with "%:" + +00:23:52.560 --> 00:23:54.119 +are interpreted as + +00:23:54.120 --> 00:23:56.079 +definitions for tree diagrams, + +00:23:56.080 --> 00:23:58.559 +lines that start with "%D" + +00:23:58.560 --> 00:24:00.639 +define 2D diagrams with arrows and + +00:24:00.640 --> 00:24:04.279 +stuff, and lines that start with "%L" + +00:24:04.280 --> 00:24:06.759 +contain blocks of Lua code + +00:24:06.760 --> 00:24:09.479 +that we can use to extend the interpreter + +00:24:09.480 --> 00:24:10.439 +on-the-fly... + +00:24:10.440 --> 00:24:12.679 +anyway, here are some recent + +00:24:12.680 --> 00:24:15.319 +examples of diagrams that I used + +00:24:15.320 --> 00:24:19.839 +Dednat6 to typeset... this diagram + +00:24:19.840 --> 00:24:21.919 +here was generated by this + +00:24:21.920 --> 00:24:22.879 +specification here... + +00:24:22.880 --> 00:24:27.239 +and this diagram here with the + +00:24:27.240 --> 00:24:30.719 +curved arrows was generated by this + +00:24:30.720 --> 00:24:32.719 +specification here. + +00:24:32.720 --> 00:24:39.079 +So, Dednat6 was very easy to extend, + +00:24:39.080 --> 00:24:41.879 +and at some point I started to use it + +00:24:41.880 --> 00:24:44.679 +to generate diagrams using Pict2e - + +00:24:44.680 --> 00:24:47.359 +mainly for the classes that I give + +00:24:47.360 --> 00:24:50.079 +at the University... I teach mathematics and + +00:24:50.080 --> 00:24:57.239 +whatever... in a bad place. Whatever... + +00:24:57.240 --> 00:25:00.039 +Let me show an animation... here is a + +00:25:00.040 --> 00:25:02.479 +diagram that I generated with Dednat6, + +00:25:02.480 --> 00:25:06.319 +and it is a flip book animation, like... we + +00:25:06.320 --> 00:25:09.279 +type PgUp and PgDn and we go + +00:25:09.280 --> 00:25:11.119 +to the next page of the book and to the + +00:25:11.120 --> 00:25:12.439 +previous page of the book... + +00:25:12.440 --> 00:25:16.279 +and here is the source code that generates + +00:25:16.280 --> 00:25:19.159 +that. This source code is not very visual, + +00:25:19.160 --> 00:25:22.559 +so it's quite clumsy to edit that + +00:25:22.560 --> 00:25:27.519 +diagram directly in the .tex file like + +00:25:27.520 --> 00:25:28.079 +that... + +NOTE Manim + +00:25:28.080 --> 00:25:30.199 +These diagrams were inspired + +00:25:30.200 --> 00:25:33.039 +by something called my Manim, that... + +00:25:33.040 --> 00:25:37.559 +I forgot the name of the guy, but + +00:25:37.560 --> 00:25:41.479 +it's a guy that makes many videos about + +00:25:41.480 --> 00:25:44.839 +Mathematics, and he created this library + +00:25:44.840 --> 00:25:48.599 +called Manim for generating his + +00:25:48.600 --> 00:25:51.839 +animations, and other people adapted + +00:25:51.840 --> 00:25:55.919 +his library to make it more accessible... + +00:25:55.920 --> 00:25:59.359 +I tried to learn it, but + +00:25:59.360 --> 00:26:01.199 +each animation, even an animation + +00:26:01.200 --> 00:26:03.679 +that has very few frames... each + +00:26:03.680 --> 00:26:07.319 +animation took ages to render, so it + +00:26:07.320 --> 00:26:11.159 +wasn't fun... and animations in PDFs can + +00:26:11.160 --> 00:26:13.639 +be rendered in seconds. So these + +00:26:13.640 --> 00:26:18.679 +things were fun for me, because my laptop + +00:26:18.680 --> 00:26:24.359 +is very very slow, and my Manim was not fun. + +NOTE Generating diagrams from REPLs + +00:26:24.360 --> 00:26:27.359 +Anyway, writing code like this + +00:26:27.360 --> 00:26:32.719 +inside a .tex file was not very + +00:26:32.720 --> 00:26:35.519 +fun because it was hard to + +00:26:35.520 --> 00:26:38.719 +debug... so in 2022 I started to play + +00:26:38.720 --> 00:26:41.319 +with ways of generating these + +00:26:41.320 --> 00:26:43.839 +diagrams from REPLs, and I found a + +00:26:43.840 --> 00:26:47.319 +way for Pict2e and a way for TikZ... + +00:26:47.320 --> 00:26:50.159 +each one of these ways became a video... + +00:26:50.160 --> 00:26:53.679 +if you go to the list of first-class + +00:26:53.680 --> 00:26:57.719 +videos of eev you're going to see + +00:26:57.720 --> 00:26:59.919 +that there's a video about Pict2e here + +00:26:59.920 --> 00:27:03.399 +here and a video about TikZ... + +00:27:03.400 --> 00:27:05.759 +here you have some some information + +00:27:05.760 --> 00:27:09.839 +like length, an explanation, etc... + +00:27:09.840 --> 00:27:11.719 +and here are the pages for these videos. + +00:27:11.720 --> 00:27:15.999 +My page about the video about Pict2e + +00:27:16.000 --> 00:27:20.079 +looks like this, it has some diagrams... + +00:27:20.080 --> 00:27:23.919 +whatever... and this one is much + +00:27:23.920 --> 00:27:26.679 +nicer, and a lot of people + +00:27:26.680 --> 00:27:30.599 +watched that video... I mean, I think + +00:27:30.600 --> 00:27:33.719 +that 250 people watched it - for me that's + +00:27:33.720 --> 00:27:35.599 +a million of people... + +00:27:35.600 --> 00:27:39.159 +and this video is about how to + +00:27:39.160 --> 00:27:44.079 +extract diagrams from the manual... from + +00:27:44.080 --> 00:27:46.599 +the TikZ manual and how to run those + +00:27:46.600 --> 00:27:49.759 +examples in a REPL and modify + +00:27:49.760 --> 00:27:53.159 +them bit by bit... this is a a + +00:27:53.160 --> 00:27:57.439 +screenshot... but let me go back. + +00:27:57.440 --> 00:28:00.959 +At that point these things were just + +00:28:00.960 --> 00:28:03.239 +prototypes, the code was not very nice... + +00:28:03.240 --> 00:28:07.519 +and in this year I wrote... I was able + +00:28:07.520 --> 00:28:12.399 +to unify those two ways of generating PDFs, + +00:28:12.400 --> 00:28:16.039 +the one for TikZ and the one for Pict2e, + +00:28:16.040 --> 00:28:18.719 +and I unified them with many other + +00:28:18.720 --> 00:28:20.879 +things that generated diagrams. + +00:28:20.880 --> 00:28:24.279 +The basis of these things is + +00:28:24.280 --> 00:28:29.319 +something called Show2.lua... I'm not going + +00:28:29.320 --> 00:28:35.759 +to show its details now, but its + +00:28:35.760 --> 00:28:39.079 +extension that generates TikZ code + +00:28:39.080 --> 00:28:43.039 +is just this, so we can specify a + +00:28:43.040 --> 00:28:45.799 +diagram with just a block like this, + +00:28:45.800 --> 00:28:49.079 +and then uh if we + +00:28:49.080 --> 00:28:54.239 +run :show00() it returns a string + +00:28:54.240 --> 00:28:56.199 +that is just the body... the inner + +00:28:56.200 --> 00:29:00.279 +body of the .tex file, if we run this we + +00:29:00.280 --> 00:29:02.999 +see the whole .tex file, and if we run + +00:29:03.000 --> 00:29:05.119 +this we save the .tex file and we + +00:29:05.120 --> 00:29:08.119 +compile the .tex file to generate a PDF... + +00:29:08.120 --> 00:29:10.959 +and if we run this we show the PDF in + +00:29:10.960 --> 00:29:14.239 +the lower right window. + +00:29:14.240 --> 00:29:17.759 +And that's the same thing for all + +00:29:17.760 --> 00:29:20.199 +my recent programs that generate + +00:29:20.200 --> 00:29:22.439 +PDFs - they are all + +00:29:22.440 --> 00:29:26.199 +integrated... here is the one that... + +00:29:26.200 --> 00:29:29.359 +the basis for all my modules that generate + +00:29:29.360 --> 00:29:30.719 +diagrams with Pict2e... + +00:29:30.720 --> 00:29:34.879 +its demos are not very interesting, + +00:29:34.880 --> 00:29:36.799 +so let me show some demos of + +00:29:36.800 --> 00:29:39.759 +extensions that do interesting things... + +00:29:39.760 --> 00:29:45.319 +so, this is a diagram that I created + +00:29:45.320 --> 00:29:47.479 +by editing it in a REPL... + +00:29:47.480 --> 00:29:51.279 +I create several Pict objects here... + +00:29:51.280 --> 00:29:54.479 +and if I execute this it + +00:29:54.480 --> 00:29:59.959 +compiles an object, generates a PDF, and + +00:29:59.960 --> 00:30:04.759 +if I tap this... here is the PDF. + +00:30:04.760 --> 00:30:07.599 +And if I just ask Lua to + +00:30:07.600 --> 00:30:10.079 +display what is "pux", here, + +00:30:10.080 --> 00:30:15.719 +it shows the source code in Pict2e + +00:30:15.720 --> 00:30:17.999 +of the diagram... and the + +00:30:18.000 --> 00:30:20.959 +nice thing is that it is indented, so + +00:30:20.960 --> 00:30:23.599 +it's easy to debug the Pict2e code. + +00:30:23.600 --> 00:30:25.919 +If anyone is interested the + +00:30:25.920 --> 00:30:28.639 +module that does the tricks for + +00:30:28.640 --> 00:30:31.879 +indentation is very easy to understand... + +00:30:31.880 --> 00:30:35.959 +it has lots of tests and test blocks, + +00:30:35.960 --> 00:30:38.599 +and I think that its data + +00:30:38.600 --> 00:30:42.079 +structures are easy to understand. + +00:30:42.080 --> 00:30:44.359 +Anyway... here is another + +00:30:44.360 --> 00:30:51.359 +example. The :show() is + +00:30:51.360 --> 00:30:56.439 +here... it generates a 3D diagram. + +NOTE Parsers + +00:30:56.440 --> 00:31:06.279 +Now let me talk about parsers and + +00:31:06.280 --> 00:31:09.559 +REPLs in VERY strange places... I mean, + +00:31:09.560 --> 00:31:13.359 +using REPLs to build parsers step by step + +00:31:13.360 --> 00:31:17.959 +and" replacing parts by more complex + +00:31:17.960 --> 00:31:23.039 +parts. So, I said that Lua is very + +00:31:23.040 --> 00:31:28.279 +minimalistic, and everybody knows that + +00:31:28.280 --> 00:31:30.759 +implementations of regular expressions + +00:31:30.760 --> 00:31:32.479 +are big and complex.. + +00:31:32.480 --> 00:31:34.679 +so, instead of coming with + +00:31:34.680 --> 00:31:37.439 +full regular expressions Lua comes with + +00:31:37.440 --> 00:31:39.879 +something called "patterns" and a + +00:31:39.880 --> 00:31:43.839 +library function called "string.match". + +00:31:43.840 --> 00:31:44.599 +Here is + +00:31:44.600 --> 00:31:50.319 +a copy of the part of the manual that + +00:31:50.320 --> 00:31:53.399 +explains the syntax... a part of the + +00:31:53.400 --> 00:31:57.159 +syntax of of patterns... here's how + +00:31:57.160 --> 00:31:59.279 +string.match is described in the + +00:31:59.280 --> 00:32:03.199 +manual - it's just this... "looks for + +00:32:03.200 --> 00:32:05.359 +the first match of pattern in the string + +00:32:05.360 --> 00:32:08.039 +as blah blah blah"... and then we have to + +00:32:08.040 --> 00:32:10.159 +go to the other section of the menual + +00:32:10.160 --> 00:32:11.479 +that explains patterns. + +00:32:11.480 --> 00:32:20.079 +Lua patterns are so simple, + +00:32:20.080 --> 00:32:23.159 +so limited, that they don't even + +00:32:23.160 --> 00:32:26.519 +have the the alternation operator... + +00:32:26.520 --> 00:32:29.759 +here is how it is described in the + +00:32:29.760 --> 00:32:31.599 +elisp manual - + +00:32:31.600 --> 00:32:36.039 +backslash-pipe specifies + +00:32:36.040 --> 00:32:40.359 +an alternative, blah blah blah. + +00:32:40.360 --> 00:32:42.879 +When we want to to build more + +00:32:42.880 --> 00:32:45.319 +complex... regular expressions, + +00:32:45.320 --> 00:32:49.199 +patterns, grammars, etc... we have to use + +00:32:49.200 --> 00:32:52.679 +an external library for that... no, + +00:32:52.680 --> 00:32:56.279 +sorry, a library that is external + +00:32:56.280 --> 00:32:58.239 +but that was written by one of the + +00:32:58.240 --> 00:33:00.879 +authors of Lua itself. This library + +00:33:00.880 --> 00:33:05.879 +is called Lpeg, and its manual says... + +00:33:05.880 --> 00:33:09.599 +"Lpeg is a new pattern matching library for + +00:33:09.600 --> 00:33:12.039 +Lua based on Parsing Expression Grammars + +00:33:12.040 --> 00:33:18.759 +(PEGs)". The manual is very terse, I + +00:33:18.760 --> 00:33:21.559 +found it incredibly hard to read... it + +00:33:21.560 --> 00:33:25.439 +doesn't have any diagrams - it has some + +00:33:25.440 --> 00:33:29.759 +examples, though... and the Lua Wiki + +00:33:29.760 --> 00:33:33.879 +has a big page called Lpeg Tutorial + +00:33:33.880 --> 00:33:35.359 +with lots of examples... + +00:33:35.360 --> 00:33:38.879 +but it it also doesn't have + +00:33:38.880 --> 00:33:41.199 +diagrams and I found some things + +00:33:41.200 --> 00:33:42.719 +incredibly hard to understand. + +00:33:42.720 --> 00:33:45.879 +For example, this is something that is in + +00:33:45.880 --> 00:33:48.879 +the the manual of Lpeg that I saw and I + +00:33:48.880 --> 00:33:51.639 +thought: "Wow, great! This makes all sense + +00:33:51.640 --> 00:33:53.159 +and is going to be very useful!"... + +00:33:53.160 --> 00:33:54.199 +it's a way to to build + +00:33:54.200 --> 00:33:57.199 +grammars that can be recursive, + +00:33:57.200 --> 00:34:01.359 +and they sort of can encode BNF + +00:34:01.360 --> 00:34:03.439 +grammars... we just have to translate the + +00:34:03.440 --> 00:34:06.479 +BNF a bit to get rid of some + +00:34:06.480 --> 00:34:08.079 +recursions and to translate them to + +00:34:08.080 --> 00:34:08.999 +something else. + +00:34:09.000 --> 00:34:11.919 +And the manual also has some things + +00:34:11.920 --> 00:34:15.159 +that I thought: "Oh, no! I don't have any + +00:34:15.160 --> 00:34:18.359 +idea of what this thing does"... and in fact + +00:34:18.360 --> 00:34:20.399 +I saw these things for the first + +00:34:20.400 --> 00:34:22.359 +time more than 10 years ago and they + +00:34:22.360 --> 00:34:26.079 +only started to make sense one year ago. + +00:34:26.080 --> 00:34:30.519 +One example is group captures. + +00:34:30.520 --> 00:34:36.359 +Lpeg also comes with a + +00:34:36.360 --> 00:34:38.719 +module called the Re module... let me + +00:34:38.720 --> 00:34:41.719 +pronounce as it in Portuguese - the Re + +00:34:41.720 --> 00:34:45.759 +module... its manual says: "The Re + +00:34:45.760 --> 00:34:48.199 +module (provided by the file re.lua in the + +00:34:48.200 --> 00:34:51.159 +distribution) supports a somewhat conventional + +00:34:51.160 --> 00:34:56.239 +regular expression syntax for pattern usage + +00:34:56.240 --> 00:34:58.679 +within lpeg"... and + +00:34:58.680 --> 00:35:03.519 +this is a quick reference... this + +00:35:03.520 --> 00:35:06.319 +thing is very brief, it has some nice + +00:35:06.320 --> 00:35:08.919 +examples but it's hard to understand anyway... + +00:35:08.920 --> 00:35:13.199 +and here are some comments about + +00:35:13.200 --> 00:35:17.279 +my attempts to learn Re.lua. This is + +00:35:17.280 --> 00:35:20.639 +a class... in this case it's a very small + +00:35:20.640 --> 00:35:24.839 +class... this file implements a :pm() + +00:35:24.840 --> 00:35:28.679 +method - I'm going to show examples of + +00:35:28.680 --> 00:35:32.239 +other :pm() methods very soon - so, this is + +00:35:32.240 --> 00:35:35.799 +a :pm() method for Re.lua that lets us + +00:35:35.800 --> 00:35:38.719 +compare the syntax of Lua patterns, Lpeg, + +00:35:38.720 --> 00:35:43.999 +and Re... let's see this example here... so, + +00:35:44.000 --> 00:35:47.319 +if we run this it loads my version of + +00:35:47.320 --> 00:35:52.799 +lpeg... no, sorry, my version of lpegrex... + +00:35:52.800 --> 00:35:57.119 +and it shows that when we apply + +00:35:57.120 --> 00:36:01.199 +the :pm() method to this Lua pattern, this + +00:36:01.200 --> 00:36:04.879 +lpeg pattern, and this Re pattern + +00:36:04.880 --> 00:36:07.999 +they all give the same results. So we can + +00:36:08.000 --> 00:36:10.799 +use this thing... this kind of thing here + +00:36:10.800 --> 00:36:14.119 +to show how to translate from Lua + +00:36:14.120 --> 00:36:16.519 +patterns, that are familiar because + +00:36:16.520 --> 00:36:18.519 +they're similar to regular expressions, + +00:36:18.520 --> 00:36:20.199 +only weaker... + +00:36:20.200 --> 00:36:24.799 +to lpeg, that is super weird + +00:36:24.800 --> 00:36:27.759 +and to Re, that is not so weird. + +00:36:27.760 --> 00:36:35.159 +Anyway, the comment says that in 2012 + +00:36:35.160 --> 00:36:37.519 +I had a project that needed a + +00:36:37.520 --> 00:36:40.479 +precedence passer that could parse + +00:36:40.480 --> 00:36:43.239 +arithmetical expressions with the right + +00:36:43.240 --> 00:36:46.639 +precedences... and at that point I was + +00:36:46.640 --> 00:36:49.919 +still struggling with pure lpeg, and I + +00:36:49.920 --> 00:36:52.359 +couldn't do much with it, so I tried to + +00:36:52.360 --> 00:36:55.519 +learn Re.lua instead, and I wrote this old + +00:36:55.520 --> 00:36:56.319 +class here... + +00:36:56.320 --> 00:37:01.039 +that allowed me to use a preprocessor + +00:37:01.040 --> 00:37:03.279 +on patterns for Lua. And the thing is that + +00:37:03.280 --> 00:37:04.879 +with this preprocessor I could + +00:37:04.880 --> 00:37:07.839 +specify precedence grammars using this + +00:37:07.840 --> 00:37:11.879 +thing here, that worked, but was super + +00:37:11.880 --> 00:37:15.999 +clumsy... and I gave up after a few attempts. + +00:37:16.000 --> 00:37:21.879 +and in 2022 I heard about something + +00:37:21.880 --> 00:37:23.239 +called lpegrex, + +00:37:23.240 --> 00:37:29.799 +that was a... a kind of extension or Re, + +00:37:29.800 --> 00:37:32.879 +and it was much more powerful than re.lua, + +00:37:32.880 --> 00:37:34.919 +but after a while I realized that it + +00:37:34.920 --> 00:37:37.639 +had the same defects as re.lua... + +00:37:37.640 --> 00:37:40.839 +and let me explain that, because + +00:37:40.840 --> 00:37:44.439 +it has all to do with the things about + +00:37:44.440 --> 00:37:48.039 +black boxes and magic that I told in the + +00:37:48.040 --> 00:37:52.919 +beginning. Both... I mean, sorry, neither + +00:37:52.920 --> 00:37:57.199 +re.lua or lpegrex had some features that + +00:37:57.200 --> 00:38:00.799 +I needed... they didn't let us explore... + +00:38:00.800 --> 00:38:03.679 +sorry, they received a pattern that was + +00:38:03.680 --> 00:38:06.839 +specified as a string, and it converted + +00:38:06.840 --> 00:38:09.679 +that into an lpeg pattern, but it didn't + +00:38:09.680 --> 00:38:12.559 +let us explore the the lpeg patterns + +00:38:12.560 --> 00:38:15.159 +that it generated... + +00:38:15.160 --> 00:38:18.759 +their code was written in a way + +00:38:18.760 --> 00:38:21.319 +that was REPL-unfriendly - I + +00:38:21.320 --> 00:38:24.279 +couldn't modify parts of the code + +00:38:24.280 --> 00:38:28.399 +bit by bit in a REPL and try to change + +00:38:28.400 --> 00:38:31.719 +the code without changing the + +00:38:31.720 --> 00:38:34.199 +original file... the code was very + +00:38:34.200 --> 00:38:36.839 +hard to explore, to hack, and to extend - + +00:38:36.840 --> 00:38:39.159 +in my opinion... the documentation was not + +00:38:39.160 --> 00:38:43.319 +very clear... and I sent one or two messages + +00:38:43.320 --> 00:38:47.159 +to the the developer of lpegrex and... + +00:38:47.160 --> 00:38:50.759 +he was too busy to help me. He + +00:38:50.760 --> 00:38:53.959 +answered it very briefly, and, uh, to be + +00:38:53.960 --> 00:38:56.599 +honest I felt... rejected. I felt that I + +00:38:56.600 --> 00:38:58.679 +wasn't doing anything interesting... + +00:38:58.680 --> 00:39:03.399 +whatever, whatever... + +00:39:03.400 --> 00:39:09.239 +So, in 2022 I was trying to learn lpegrex + +00:39:09.240 --> 00:39:11.559 +because I was thinking that it would + +00:39:11.560 --> 00:39:13.719 +solve my problems - but it didn't... + +00:39:13.720 --> 00:39:16.479 +it didn't have the features that I needed, + +00:39:16.480 --> 00:39:20.919 +it was hard to extend, hard to explore, + +00:39:20.920 --> 00:39:23.279 +and hard to debug, and I + +00:39:23.280 --> 00:39:25.039 +decided to rewrite it in a more + +00:39:25.040 --> 00:39:30.639 +hacker-friendly way - in the sense that... + +00:39:30.640 --> 00:39:33.759 +was modular, and I could replace any + +00:39:33.760 --> 00:39:35.399 +part of the module from a REPL... + +NOTE ELpeg1.lua + +00:39:35.400 --> 00:39:43.679 +My version of it was called ELpeg1.lua... + +00:39:43.680 --> 00:39:47.679 +and I decided that in my version I + +00:39:47.680 --> 00:39:49.639 +wouldn't have the part that + +00:39:49.640 --> 00:39:54.879 +receives a grammar specified as a string + +00:39:54.880 --> 00:39:57.519 +and converts that to lpeg... I would + +00:39:57.520 --> 00:40:00.959 +just have the backend part, that are the + +00:40:00.960 --> 00:40:03.999 +functions in lpeg that let us specify + +00:40:04.000 --> 00:40:05.479 +powerful grammars. + +00:40:05.480 --> 00:40:11.759 +Let me go back. Let me explain a + +00:40:11.760 --> 00:40:15.519 +bit about lpeg... Lua has + +00:40:15.520 --> 00:40:21.599 +coercions: the + expects to receive + +00:40:21.600 --> 00:40:23.999 +true numbers, and if one of its arguments, + +00:40:24.000 --> 00:40:26.999 +or both of them, are strings, it converts + +00:40:27.000 --> 00:40:29.839 +the string... the strings to numbers so in + +00:40:29.840 --> 00:40:33.519 +this case here, 2+"3", + +00:40:33.520 --> 00:40:36.159 +it returns the number 5, + +00:40:36.160 --> 00:40:39.359 +and this is the concatenation + +00:40:39.360 --> 00:40:42.119 +operator... it expects to receive + +00:40:42.120 --> 00:40:44.999 +strings, so in this case it will + +00:40:45.000 --> 00:40:47.359 +convert the number 2 to the string "2", + +00:40:47.360 --> 00:40:50.279 +and the concatenation of thes two + +00:40:50.280 --> 00:40:54.479 +things will be 23... oops, sorry, "23" + +00:40:54.480 --> 00:40:56.279 +as a string. + +00:40:56.280 --> 00:40:58.519 +Lpeg also has some coercions. + +00:40:58.520 --> 00:41:01.759 +I usually set these + +00:41:01.760 --> 00:41:05.799 +globals to let me write my grammars + +00:41:05.800 --> 00:41:09.719 +in a very compact way, so instead + +00:41:09.720 --> 00:41:14.759 +of lpeg.B, lpeg.C, etc I use these globals, + +00:41:14.760 --> 00:41:18.359 +like uppercase B, uppercase C, and so on... + +00:41:18.360 --> 00:41:21.679 +and with these globals I can write + +00:41:21.680 --> 00:41:26.759 +things like this: C(1)*"_"... + +00:41:26.760 --> 00:41:33.199 +and lpeg knows that lpeg.C... + +00:41:33.200 --> 00:41:38.879 +it sort of expands this to lpeg.C, + +00:41:38.880 --> 00:41:42.039 +but lpeg.C expects to receive + +00:41:42.040 --> 00:41:44.839 +an lpeg pattern, and 1 is not yet an + +00:41:44.840 --> 00:41:47.879 +lpeg pattern, so it is coerced into an + +00:41:47.880 --> 00:41:51.799 +lpeg pattern by calling lpeg.P, + +00:41:51.800 --> 00:41:55.679 +so this short thing here becomes + +00:41:55.680 --> 00:42:03.399 +equivalent to lpeg.C(lpeg.P(1)), and the + +00:42:03.400 --> 00:42:07.399 +multiplication, when at least one of its + +00:42:07.400 --> 00:42:10.759 +arguments is an lpeg pattern... it expects + +00:42:10.760 --> 00:42:13.199 +to receive two lpeg patterns, and in + +00:42:13.200 --> 00:42:15.239 +this case the one at the right is + +00:42:15.240 --> 00:42:18.319 +just a string, so it is coerced to an lpeg + +00:42:18.320 --> 00:42:20.079 +pattern by using lpeg.P. + +00:42:20.080 --> 00:42:25.599 +With this idea we can sort of + +00:42:25.600 --> 00:42:28.439 +understand the comparison here. I mean, + +00:42:28.440 --> 00:42:31.719 +let me run it again... this first part is + +00:42:31.720 --> 00:42:34.679 +very similar to a regular expression + +00:42:34.680 --> 00:42:35.359 +here at the left... + +00:42:35.360 --> 00:42:39.759 +and when we apply this... Lua pattern + +00:42:39.760 --> 00:42:43.639 +to this subject here the result + +00:42:43.640 --> 00:42:47.799 +is this thing here, this thing, this + +00:42:47.800 --> 00:42:54.319 +thing and this thing... I'm going to + +00:42:54.320 --> 00:42:56.119 +call each one of these results + +00:42:56.120 --> 00:42:59.519 +"captures", so each of these things + +00:42:59.520 --> 00:43:03.319 +between parentheses "captures" a substring + +00:43:03.320 --> 00:43:06.039 +of the original string and these + +00:43:06.040 --> 00:43:08.559 +captured substrings are returned in a + +00:43:08.560 --> 00:43:11.839 +certain order. Here is how to express the + +00:43:11.840 --> 00:43:12.759 +same thing in lpeg... + +00:43:12.760 --> 00:43:15.919 +it's very cryptic but it's a + +00:43:15.920 --> 00:43:20.719 +good way to understand the some basic + +00:43:20.720 --> 00:43:23.879 +operators of lpeg, I mean we can look at + +00:43:23.880 --> 00:43:26.479 +the manual and understand and + +00:43:26.480 --> 00:43:30.519 +what C, S and R do, and also + +00:43:30.520 --> 00:43:37.959 +exponentiation... and this strange thing + +00:43:37.960 --> 00:43:41.319 +here receives this string here, runs + +00:43:41.320 --> 00:43:43.279 +a function that I have defined, that + +00:43:43.280 --> 00:43:46.039 +converts it to an object of a certain + +00:43:46.040 --> 00:43:47.759 +class, and that class + +00:43:47.760 --> 00:43:52.399 +represents Re patterns, so this thing + +00:43:52.400 --> 00:43:54.479 +is treated as a pattern for re.lua, + +00:43:54.480 --> 00:43:56.479 +and it is matched against the string, + +00:43:56.480 --> 00:43:59.439 +and it returns the same thing as the + +00:43:59.440 --> 00:44:02.559 +other one. + +00:44:02.560 --> 00:44:05.519 +Also, this thing here also has a + +00:44:05.520 --> 00:44:08.479 +comparison with lpegrex, but these + +00:44:08.480 --> 00:44:11.559 +patterns are very trivial, they + +00:44:11.560 --> 00:44:13.359 +don't do anything very strange... + +00:44:13.360 --> 00:44:15.759 +so let's go back and see what + +00:44:15.760 --> 00:44:18.239 +kinds of very strange things there are. + +00:44:18.240 --> 00:44:26.559 +Here is the page of lpegrex at github, + +00:44:26.560 --> 00:44:29.719 +here's the documentation... + +00:44:29.720 --> 00:44:32.439 +it's relatively brief, + +00:44:32.440 --> 00:44:35.239 +it explains lpegrex as being an + +00:44:35.240 --> 00:44:39.719 +extension of Re.lua, so it explains + +00:44:39.720 --> 00:44:42.879 +mainly the additional features... here is a + +00:44:42.880 --> 00:44:45.119 +quick reference that explains only the + +00:44:45.120 --> 00:44:46.359 +additional features... + +00:44:46.360 --> 00:44:49.639 +some of the these things + +00:44:49.640 --> 00:44:50.919 +I was able to understand + +00:44:50.920 --> 00:44:57.559 +by struggling a lot, and some I wasn't + +00:44:57.560 --> 00:45:02.439 +able to even by spending several evenings + +00:45:02.440 --> 00:45:04.319 +try to to build examples... + +00:45:04.320 --> 00:45:12.879 +and this is something very nice. Lpegrex + +00:45:12.880 --> 00:45:15.879 +comes with some example parsers... and + +00:45:15.880 --> 00:45:18.679 +here is a parser that parses the Lua + +00:45:18.680 --> 00:45:22.479 +grammar - I mean, this is the the grammar + +00:45:22.480 --> 00:45:25.959 +for Lua 5.4 at the end of the + +00:45:25.960 --> 00:45:31.199 +reference manual... it's just this... this + +00:45:31.200 --> 00:45:34.799 +is in a kind of BNF, and this is the BNF + +00:45:34.800 --> 00:45:35.599 +translated + +00:45:35.600 --> 00:45:39.919 +to the language of lpegrex, so this + +00:45:39.920 --> 00:45:43.039 +thing uses many constructions that are + +00:45:43.040 --> 00:45:47.999 +in re.lua and some extra constructions that + +00:45:48.000 --> 00:45:50.959 +are described here... and with these + +00:45:50.960 --> 00:45:54.239 +examples I was able to to understand + +00:45:54.240 --> 00:45:55.159 +some of the... + +00:45:55.160 --> 00:45:58.079 +of these things here that are + +00:45:58.080 --> 00:46:00.239 +described here in the quick + +00:46:00.240 --> 00:46:04.719 +reference - but not all. + +00:46:04.720 --> 00:46:11.279 +So, I wasn't able to use lpegrex + +00:46:11.280 --> 00:46:14.279 +by itself, because some things didn't + +00:46:14.280 --> 00:46:16.199 +make much sense, and I decided to + +00:46:16.200 --> 00:46:18.759 +reimplement it in my own style, + +00:46:18.760 --> 00:46:23.679 +because that would be a way to map... + +00:46:23.680 --> 00:46:26.839 +to at the very least map what I had + +00:46:26.840 --> 00:46:29.559 +understood and what I didn't, learn + +00:46:29.560 --> 00:46:32.999 +one feature at a time, do comparisons, and + +00:46:33.000 --> 00:46:35.319 +so on. + +00:46:35.320 --> 00:46:38.799 +Here I pointed to two features of lpeg... + +00:46:38.800 --> 00:46:41.679 +in one I said "Oh, great! This thing can + +00:46:41.680 --> 00:46:44.319 +be used to to define grammars, even + +00:46:44.320 --> 00:46:45.959 +recursive grammars", and so on... + +00:46:45.960 --> 00:46:49.759 +and this is an "Oh, no!" feature - one + +00:46:49.760 --> 00:46:51.759 +thing that didn't make any sense at all... + +00:46:51.760 --> 00:46:56.439 +group captures. One thing that I did to + +00:46:56.440 --> 00:46:59.039 +understand group captures was to + +00:46:59.040 --> 00:47:02.319 +represent them as diagrams. Of course in + +00:47:02.320 --> 00:47:05.359 +the beginning I was drawing these + +00:47:05.360 --> 00:47:08.919 +diagrams by hand, but then I realized + +00:47:08.920 --> 00:47:11.559 +that I could use the bits of lpeg + +00:47:11.560 --> 00:47:14.759 +that I already knew to build a grammar + +00:47:14.760 --> 00:47:17.479 +that would parse a little language and + +00:47:17.480 --> 00:47:20.999 +generate these diagrams in LaTeX, and I was + +00:47:21.000 --> 00:47:21.919 +able to make this. + +00:47:21.920 --> 00:47:25.279 +In this diagram here + +00:47:25.280 --> 00:47:30.719 +this thing above the arrow is Lua code... + +00:47:30.720 --> 00:47:33.759 +a piece of Lua code that + +00:47:33.760 --> 00:47:37.119 +specifies an lpeg pattern... this + +00:47:37.120 --> 00:47:39.559 +thing here at the top is the string that + +00:47:39.560 --> 00:47:43.039 +is being matched, and the things below + +00:47:43.040 --> 00:47:46.599 +the underbraces are the captures that + +00:47:46.600 --> 00:47:50.639 +each thing... sorry, that each thing + +00:47:50.640 --> 00:47:51.319 +captures. + +00:47:51.320 --> 00:47:58.479 +For example, this underbrace here + +00:47:58.480 --> 00:48:00.279 +corresponds to this pattern here, + +00:48:00.280 --> 00:48:02.879 +that parses a single character but + +00:48:02.880 --> 00:48:05.559 +doesn't return any captures, this thing + +00:48:05.560 --> 00:48:08.119 +here parses a single "b" and doesn't + +00:48:08.120 --> 00:48:11.239 +return any captures, this thing here + +00:48:11.240 --> 00:48:14.399 +parses a single character and captures + +00:48:14.400 --> 00:48:16.879 +it, and this thing here parses the + +00:48:16.880 --> 00:48:21.319 +character "d" and captures it... and this + +00:48:21.320 --> 00:48:24.439 +other thing here transforms this + +00:48:24.440 --> 00:48:27.279 +pattern into another pattern... + +00:48:27.280 --> 00:48:33.119 +returns first a capture with all + +00:48:33.120 --> 00:48:35.079 +the string that was parsed by this + +00:48:35.080 --> 00:48:37.399 +pattern here, and then all the captures + +00:48:37.400 --> 00:48:41.079 +returned by this thing here before + +00:48:41.080 --> 00:48:42.959 +the ":". + +00:48:42.960 --> 00:48:45.479 +So, this was a way to build + +00:48:45.480 --> 00:48:48.599 +concrete examples for things that the + +00:48:48.600 --> 00:48:52.159 +lpag manual was explaining in a very terse + +00:48:52.160 --> 00:48:55.799 +way, and it worked for me - some things + +00:48:55.800 --> 00:48:56.999 +that were very + +00:48:57.000 --> 00:48:59.839 +mysterious started to make sense, and I + +00:48:59.840 --> 00:49:03.199 +started to have intelligent questions + +00:49:03.200 --> 00:49:06.079 +to ask in the mailing list. + +00:49:06.080 --> 00:49:10.959 +And with that I was able to + +00:49:10.960 --> 00:49:12.959 +understand what are group captures, + +00:49:12.960 --> 00:49:17.879 +and group captures that receive a name... + +00:49:17.880 --> 00:49:22.719 +Well, let me explain what this does. + +00:49:22.720 --> 00:49:27.119 +This thing here captures... sorry, parses + +00:49:27.120 --> 00:49:29.359 +the empty string and returns this as a + +00:49:29.360 --> 00:49:32.959 +constant... so, this is something that + +00:49:32.960 --> 00:49:35.799 +doesn't exist in regular expressions... + +00:49:35.800 --> 00:49:38.639 +it parses nothing and + +00:49:38.640 --> 00:49:41.839 +returns this as a capture... then this + +00:49:41.840 --> 00:49:44.599 +thing here returns these two + +00:49:44.600 --> 00:49:47.159 +constants here, and parses the empty + +00:49:47.160 --> 00:49:51.279 +string, and this thing here converts + +00:49:51.280 --> 00:49:54.159 +the results of this thing here into a + +00:49:54.160 --> 00:49:57.639 +group capture, and stores it in the label + +00:49:57.640 --> 00:50:03.279 +"d"... and then here's another constant + +00:50:03.280 --> 00:50:03.719 +capture. + +NOTE Building lists + +00:50:03.720 --> 00:50:05.679 +And I realized that these things + +00:50:05.680 --> 00:50:08.599 +here were similar to how Lua + +00:50:08.600 --> 00:50:09.839 +specifies building lists... + +00:50:09.840 --> 00:50:16.239 +when we build... sorry, tables. When + +00:50:16.240 --> 00:50:18.759 +we build a table, and we say that the + +00:50:18.760 --> 00:50:21.879 +first element of the table is here, this + +00:50:21.880 --> 00:50:23.559 +element is put at the end of the table... + +00:50:23.560 --> 00:50:29.399 +when after the that would say d=42... + +00:50:29.400 --> 00:50:31.199 +we are putting the 42 + +00:50:31.200 --> 00:50:34.559 +in the the slot whose key is "d". + +00:50:34.560 --> 00:50:38.999 +This was happening with lpeg captures, + +00:50:39.000 --> 00:50:43.359 +but there was something very strange... + +00:50:43.360 --> 00:50:46.199 +these group captures could hold + +00:50:46.200 --> 00:50:49.199 +more than one capture - more than one + +00:50:49.200 --> 00:50:51.759 +value... so there was something between + +00:50:51.760 --> 00:50:58.039 +lists and tables. I started to use this + +00:50:58.040 --> 00:51:00.479 +notation to... + +00:51:00.480 --> 00:51:04.959 +explain in my notation what they + +00:51:04.960 --> 00:51:08.159 +were doing... many things started + +00:51:08.160 --> 00:51:10.239 +to make sense, many mysterious + +00:51:10.240 --> 00:51:12.879 +sentences in the manual started to + +00:51:12.880 --> 00:51:14.439 +make sense... but some didn't... + +00:51:14.440 --> 00:51:19.679 +but at least I was able to send + +00:51:19.680 --> 00:51:22.319 +some intelligent questions to the + +00:51:22.320 --> 00:51:25.199 +mailing lis,t and the author of Lua and + +00:51:25.200 --> 00:51:27.359 +lpeg answered some of them... + +00:51:27.360 --> 00:51:31.519 +he was not very happy about my + +00:51:31.520 --> 00:51:34.959 +questions - he... told me that those + +00:51:34.960 --> 00:51:37.679 +diagrams were a waste of time, the + +00:51:37.680 --> 00:51:40.559 +manual was perfectly clear, and so on... + +00:51:40.560 --> 00:51:44.919 +whatever - but I was able to... + +00:51:44.920 --> 00:51:48.879 +so, it was weird, but I was able to + +00:51:48.880 --> 00:51:51.799 +understand lots of things from his + +00:51:51.800 --> 00:51:56.519 +answers. This is a copy of one of + +00:51:56.520 --> 00:51:58.239 +my messages, then there's another one, + +00:51:58.240 --> 00:52:01.239 +another one, some of them had diagrams... + +00:52:01.240 --> 00:52:04.359 +then he complained about these diagrams, + +00:52:04.360 --> 00:52:08.439 +he said that these things here, that look + +00:52:08.440 --> 00:52:11.119 +like table constructors, "do not exist"... + +00:52:11.120 --> 00:52:17.199 +whatever... anyway, once I understood + +00:52:17.200 --> 00:52:20.679 +group captures many features + +00:52:20.680 --> 00:52:23.359 +were very easy to understand + +00:52:23.360 --> 00:52:26.039 +and I started to be able to use lpeg to + +00:52:26.040 --> 00:52:28.159 +to build some very interesting things... + +00:52:28.160 --> 00:52:33.039 +I was able to reproduce some + +00:52:33.040 --> 00:52:36.359 +of the features that I saw in lpegrex - + +00:52:36.360 --> 00:52:41.079 +remember that this... where is that? + +00:52:41.080 --> 00:52:46.119 +this is the syntax of Lua... here - + +00:52:46.120 --> 00:52:48.959 +I was able to understand + +00:52:48.960 --> 00:52:52.479 +how these things here were translated to + +00:52:52.480 --> 00:52:55.359 +lpeg code... to lpeg patterns + +00:52:55.360 --> 00:52:58.239 +by using group captures in a certain + +00:52:58.240 --> 00:53:03.039 +way... I was able to implement them + +00:53:03.040 --> 00:53:04.759 +in ELpeg1.lua... + +00:53:04.760 --> 00:53:08.719 +and after some time I was able to use + +00:53:08.720 --> 00:53:12.879 +ELpeg1.lua to build grammars that + +00:53:12.880 --> 00:53:14.159 +were able to parse + +00:53:14.160 --> 00:53:18.679 +arithmetical expressions with the + +00:53:18.680 --> 00:53:20.959 +right precedence... and here's an example + +00:53:20.960 --> 00:53:23.319 +in which I built the grammar step by step... + +00:53:23.320 --> 00:53:29.239 +and I test the current grammar, and I + +00:53:29.240 --> 00:53:35.079 +replace a bit, and then I test the new + +00:53:35.080 --> 00:53:36.599 +grammar and so on... + +00:53:36.600 --> 00:53:39.079 +and you can see that the result is + +00:53:39.080 --> 00:53:43.359 +always a tree that is drawn in a + +00:53:43.360 --> 00:53:44.239 +nice two dimensional way... + +00:53:44.240 --> 00:53:48.919 +At this point these powers here + +00:53:48.920 --> 00:53:50.559 +are returned as a list, + +00:53:50.560 --> 00:53:53.119 +as an operation "pow" + +00:53:53.120 --> 00:53:57.559 +with several arguments, here... and then + +00:53:57.560 --> 00:54:00.519 +I apply a kind of parsing combinator, + +00:54:00.520 --> 00:54:03.719 +here... that transforms these trees into + +00:54:03.720 --> 00:54:08.199 +other trees and with these combinators + +00:54:08.200 --> 00:54:12.199 +here I can specify that the "^" is + +00:54:12.200 --> 00:54:14.639 +associative in a certain direction... + +00:54:14.640 --> 00:54:17.519 +that the "/" is associative in + +00:54:17.520 --> 00:54:20.119 +another direction... the "-" uses + +00:54:20.120 --> 00:54:23.079 +the same direction as a the "/", + +00:54:23.080 --> 00:54:26.079 +and so on... and they have the + +00:54:26.080 --> 00:54:29.679 +right precedences. + +00:54:29.680 --> 00:54:34.559 +So, here are the tests... + +00:54:34.560 --> 00:54:38.119 +here is my file ELpeg1.lua... it has + +00:54:38.120 --> 00:54:41.719 +several classes, each class has tests + +00:54:41.720 --> 00:54:42.279 +after it... + +00:54:42.280 --> 00:54:46.239 +I was able to implement something + +00:54:46.240 --> 00:54:50.519 +that lpegrex has, that is called + +00:54:50.520 --> 00:54:53.519 +"keywords", that is very useful for parsing + +00:54:53.520 --> 00:54:56.479 +programs in programming languages... + +00:54:56.480 --> 00:54:59.439 +I was able to implement something + +00:54:59.440 --> 00:55:02.639 +similar to the debugger... to the + +00:55:02.640 --> 00:55:07.999 +lpeg debugger lpeg uses... I was + +00:55:08.000 --> 00:55:11.399 +frustrated by some limitations of + +00:55:11.400 --> 00:55:16.839 +the lpeg debugger, and I implemented + +00:55:16.840 --> 00:55:23.439 +my own that is, uh... much better!... + +00:55:23.440 --> 00:55:24.759 +Let me show something else... I was + +00:55:24.760 --> 00:55:27.119 +able to translate a good part of the + +00:55:27.120 --> 00:55:33.039 +Lua parser, here, to ELpeg1.lua... I haven't + +00:55:33.040 --> 00:55:38.399 +finished yet, but I have most of the + +00:55:38.400 --> 00:55:39.719 +the translation here... + +00:55:39.720 --> 00:55:47.279 +and after having all that I was able to + +00:55:47.280 --> 00:55:50.319 +build other grammars very quickly... + +00:55:50.320 --> 00:55:55.239 +writing new parsers finally became fun. + +00:55:55.240 --> 00:55:58.719 +And here's one example that I showed in the + +00:55:58.720 --> 00:56:00.639 +beginning. + +00:56:00.640 --> 00:56:05.799 +If I remember correctly... + +00:56:05.800 --> 00:56:10.639 +I took a figure from the Wikipedia... + +00:56:10.640 --> 00:56:12.439 +I don't have its link now... + +00:56:12.440 --> 00:56:17.079 +but I specified a grammar that parses + +00:56:17.080 --> 00:56:20.119 +exactly the example that appears + +00:56:20.120 --> 00:56:20.839 +in the Wikipedia... + +00:56:20.840 --> 00:56:24.679 +so, with my grammar, considering that + +00:56:24.680 --> 00:56:28.719 +the top level entry is "Stmt", when I + +00:56:28.720 --> 00:56:30.679 +parse this string here + +00:56:30.680 --> 00:56:36.599 +the result is this tree... + +00:56:36.600 --> 00:56:41.119 +and I can do some operations on that, + +00:56:41.120 --> 00:56:44.039 +I can define how this thing is to be + +00:56:44.040 --> 00:56:45.639 +converted into LaTeX, + +00:56:45.640 --> 00:56:49.399 +I can define other operations + +00:56:49.400 --> 00:56:52.999 +that convert trees into other trees, and + +00:56:53.000 --> 00:56:54.879 +here are some tests of these operations... + +00:56:54.880 --> 00:57:00.359 +This is what I showed in the beginning... + +00:57:00.360 --> 00:57:02.759 +I'm not going to explain all the details + +00:57:02.760 --> 00:57:03.999 +of this thing now... + +00:57:04.000 --> 00:57:09.199 +this :show() converts this thing + +00:57:09.200 --> 00:57:11.919 +into LaTeX in the way specified by these + +00:57:11.920 --> 00:57:16.159 +instructions here, that says that... + +00:57:16.160 --> 00:57:25.239 +well, whatever... + +00:57:25.240 --> 00:57:32.959 +and here's the result - the LaTeXed result... + +00:57:32.960 --> 00:57:41.759 +and these diagrams here are generated by + +00:57:41.760 --> 00:57:46.719 +this file here, that defines a simple + +00:57:46.720 --> 00:57:48.479 +grammar that parses this thing here, + +00:57:48.480 --> 00:57:51.999 +and then LaTeXes it in a certain way, and + +00:57:52.000 --> 00:57:56.399 +and also tests to check if this code here... + +00:57:56.400 --> 00:58:01.999 +this Lua code that generates an lpeg grammar... + +00:58:02.000 --> 00:58:05.799 +parses this subject here and + +00:58:05.800 --> 00:58:08.599 +returns the expected result... + +00:58:08.600 --> 00:58:12.239 +So: this is the code that I + +00:58:12.240 --> 00:58:16.719 +wanted to show. I wanted to show many + +00:58:16.720 --> 00:58:19.919 +more things but I wasn't able to prepare + +00:58:19.920 --> 00:58:23.919 +them before the conference... and I hope + +00:58:23.920 --> 00:58:27.519 +that soon - for some value of "soon" - + +00:58:27.520 --> 00:58:30.399 +I'll be able to create REPL-based + +00:58:30.400 --> 00:58:33.919 +tutorials for lpeg, Re, and ELpeg1.lua... + +00:58:33.920 --> 00:58:36.319 +where lpeg is something very famous, + +00:58:36.320 --> 00:58:39.199 +Re is a module of lpeg... + +00:58:39.200 --> 00:58:42.399 +I could also do something like this + +00:58:42.400 --> 00:58:47.799 +for lpegrex... and ELpeg1.lua is + +00:58:47.800 --> 00:58:51.159 +the thing that I wrote, the one that + +00:58:51.160 --> 00:58:56.799 +has test in comments, and the tests + +00:58:56.800 --> 00:58:59.519 +usually generate trees, and sometimes + +00:58:59.520 --> 00:59:00.879 +they generate TeX code. + +00:59:00.880 --> 00:59:04.959 +Yeah, so that's it! I wanted to + +00:59:04.960 --> 00:59:07.159 +present much more but I wasn't able to + +00:59:07.160 --> 00:59:10.480 +prepare it... so: sorry, thanks, bye! =) diff --git a/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt b/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt new file mode 100644 index 00000000..9398d5f8 --- /dev/null +++ b/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt @@ -0,0 +1,503 @@ +WEBVTT + + +00:00:05.200 --> 00:00:06.359 +[Speaker 0]: Session is being recorded. + +00:00:06.819 --> 00:00:08.860 +Just waiting for Corwin and Leo. + +00:00:16.359 --> 00:00:17.960 +Great. Corwin, would you like to share your + +00:00:17.960 --> 00:00:18.460 +screen? + +00:00:37.620 --> 00:00:39.840 +Let's see the audio through BBB so we don't + +00:00:39.840 --> 00:00:41.720 +have to splice it in afterwards because it's + +00:00:41.720 --> 00:00:43.680 +annoying to splice things. + +00:00:43.680 --> 00:00:47.020 +I mean, Leo will be taking care of it, + +00:00:47.020 --> 00:00:50.560 +not me, so. Okay, he's going to finish up. + +00:00:52.720 --> 00:00:55.320 +[Speaker 1]: So, in the meantime, it's been a long day, + +00:00:55.320 --> 00:00:57.080 +people. Thanks for sticking around. + +00:00:57.180 --> 00:00:58.739 +And we're going to do a little bit of jazz + +00:00:58.739 --> 00:01:00.060 +handing until Corwin comes back. + +00:01:00.060 --> 00:01:07.650 +Smack. I + +00:01:14.240 --> 00:01:16.020 +[Speaker 2]: can't imagine an Emacs con without getting to + +00:01:16.020 --> 00:01:17.920 +enjoy Leo's famous jazz hands. + +00:01:21.420 --> 00:01:23.080 +[Speaker 1]: I can tell you it's a lot easier... + +00:01:23.160 --> 00:01:25.760 +Hello? I can tell you it's a lot easier to do + +00:01:25.760 --> 00:01:30.740 +jazz hands at 9am EST than it is at 5pm EST, + +00:01:30.860 --> 00:01:34.160 +because for me it's 11 and I've barely seen + +00:01:34.160 --> 00:01:39.720 +this 1 today. Okay Corwin, + +00:01:39.720 --> 00:01:41.880 +do you have a presentation right now? + +00:01:45.480 --> 00:01:47.440 +We do not seem to be able to hear you, + +00:01:47.440 --> 00:01:55.240 +Corwin. Okay, just bear with us, + +00:01:55.240 --> 00:01:57.380 +folks. We're gonna figure out this 1. + +00:01:57.380 --> 00:01:58.660 +This is the last bug of the day, + +00:01:58.660 --> 00:02:00.640 +and then we're clear until tomorrow. + +00:02:05.820 --> 00:02:07.700 +[Speaker 2]: I just heard you, but I don't know if it was + +00:02:07.700 --> 00:02:12.100 +here or via mumble. Okay. + +00:02:14.540 --> 00:02:17.360 +[Speaker 1]: Can we figure out? Whenever there's a problem + +00:02:17.360 --> 00:02:19.340 +like this, like Sash and myself are furiously + +00:02:19.460 --> 00:02:20.640 +typing in the background, + +00:02:20.640 --> 00:02:22.380 +we say, oh, can we fix this slide? + +00:02:22.740 --> 00:02:24.180 +But here, I'm stumped. + +00:02:33.180 --> 00:02:36.760 +[Speaker 2]: I think Corbin is in the GenTrack on Mumble. + +00:02:40.520 --> 00:02:43.680 +[Speaker 1]: Okay, so let's all switch to GenTrack and + +00:02:43.780 --> 00:02:46.860 +we'll be able to figure out the way. + +00:03:18.420 --> 00:03:21.540 +[Speaker 0]: Okay, well, while Corwin figures out how to + +00:03:21.540 --> 00:03:23.940 +get started, we might as well maybe do a + +00:03:23.940 --> 00:03:25.380 +little bit of closing remarks, + +00:03:25.380 --> 00:03:27.220 +and then you can jump in whenever you want. + +00:03:29.440 --> 00:03:30.420 +[Speaker 1]: Sounds good to me. + +00:03:31.980 --> 00:03:34.459 +[Speaker 0]: Okay. Thank you, everyone, + +00:03:34.459 --> 00:03:36.160 +for coming to Emacs Conf 2023. + +00:03:37.120 --> 00:03:38.980 +We made it to the end of the first day! + +00:03:39.140 --> 00:03:40.440 +Hooray! We're going to keep these closing + +00:03:40.440 --> 00:03:42.880 +remarks short because it's a long day. + +00:03:42.880 --> 00:03:44.920 +It's almost midnight and Leah will turn into + +00:03:44.920 --> 00:03:48.340 +a pumpkin very soon. So before that happens, + +00:03:48.580 --> 00:03:50.560 +we just want to say hello and thanks. + +00:03:50.640 --> 00:03:54.980 +And pre-recorded talks are already up. + +00:03:55.260 --> 00:03:56.520 +They're on the talk pages, + +00:03:56.520 --> 00:03:57.320 +they're on media.emaxcontent.org. + +00:03:58.860 --> 00:04:00.620 +We'll work on extracting the live talks, + +00:04:00.620 --> 00:04:01.920 +but it'll take a few weeks. + +00:04:01.920 --> 00:04:02.220 +[Speaker 3]: Maybe, you + +00:04:02.220 --> 00:04:03.660 +[Speaker 0]: know, we'll see how it goes. + +00:04:04.540 --> 00:04:06.100 +Please feel free to spread the word, + +00:04:06.100 --> 00:04:07.700 +because you know some people didn't actually + +00:04:07.720 --> 00:04:09.380 +know there was EmacsConf this weekend, + +00:04:09.380 --> 00:04:11.400 +so let them know, because it's a lot of fun. + +00:04:11.400 --> 00:04:15.020 +More talks tomorrow. And if you've got ideas + +00:04:15.020 --> 00:04:15.900 +for making things better, + +00:04:15.900 --> 00:04:17.500 +or If you'd like to tell us what's working + +00:04:17.500 --> 00:04:18.660 +well and what you'd like, + +00:04:18.940 --> 00:04:21.180 +please put them in the conference pad at + +00:04:21.180 --> 00:04:26.580 +pad.emaxconf.org. Anything anyone want to + +00:04:26.580 --> 00:04:27.080 +add? + +00:04:30.060 --> 00:04:30.860 +[Speaker 1]: I'm all good. + +00:04:32.900 --> 00:04:35.260 +[Speaker 2]: Let's see if Corwin can get his mic to work. + +00:04:37.740 --> 00:04:38.800 +No, it's not. + +00:04:43.520 --> 00:04:45.140 +[Speaker 1]: Well, I mean, did you want to say something + +00:04:45.140 --> 00:04:47.220 +as well? Because people have heard you talk + +00:04:47.220 --> 00:04:49.120 +all day long on the Dev track, + +00:04:49.120 --> 00:04:50.240 +but not on the general track, + +00:04:50.240 --> 00:04:51.540 +actually. It's the first time they hear you + +00:04:51.540 --> 00:04:52.040 +today. + +00:04:52.540 --> 00:04:55.580 +[Speaker 2]: Right. Oh, well, way to put me on the spot, + +00:04:56.540 --> 00:04:58.040 +but more seriously, thanks. + +00:04:58.040 --> 00:04:59.760 +So yeah, it's a lot of fun. + +00:05:00.340 --> 00:05:03.760 +You know, it's, we sort of keep coming back + +00:05:03.760 --> 00:05:05.580 +every year and doing this conference. + +00:05:06.300 --> 00:05:08.720 +It's always been fun. And we keep doing it + +00:05:08.720 --> 00:05:11.320 +thanks to, you know, all the people who + +00:05:11.320 --> 00:05:13.860 +submit all these amazing talks with these + +00:05:14.600 --> 00:05:16.560 +amazing sessions. And of course the audience + +00:05:16.560 --> 00:05:19.940 +as well. I don't have a lot to say I guess + +00:05:19.940 --> 00:05:21.500 +for today because I think we're hoping to + +00:05:21.500 --> 00:05:23.180 +keep it kind of short and sweet. + +00:05:24.400 --> 00:05:25.920 +So yeah, I think that's about it for me. + +00:05:25.920 --> 00:05:28.380 +I guess we'll maybe wait another minute or so + +00:05:28.380 --> 00:05:30.180 +to see if Cormen can make it. + +00:05:30.580 --> 00:05:32.140 +But yeah, that's all for me. + +00:05:34.820 --> 00:05:37.920 +[Speaker 1]: All right, great. Speaking of putting people + +00:05:37.920 --> 00:05:41.600 +on the spot, you might see a face in the room + +00:05:41.600 --> 00:05:43.680 +that you might have seen last year, + +00:05:43.840 --> 00:05:45.700 +but we've got Flobby Koda in the room as + +00:05:45.700 --> 00:05:49.400 +well, who you might not have heard of him but + +00:05:49.400 --> 00:05:51.140 +he's been doing a lot of the check-ins today + +00:05:51.140 --> 00:05:53.360 +for most of the speakers and he's been doing + +00:05:53.360 --> 00:05:54.520 +a wonderful job at it. + +00:05:54.520 --> 00:05:56.560 +Florian, do you want to say a word if only to + +00:05:56.560 --> 00:05:58.140 +say you're being put on the spot? + +00:06:00.620 --> 00:06:02.840 +[Speaker 4]: I have nothing prepared really but I just + +00:06:02.840 --> 00:06:05.100 +want to thank everybody who could, + +00:06:05.380 --> 00:06:07.260 +with who I could talk in between. + +00:06:07.360 --> 00:06:10.420 +So I had like wonderful 20 to 30 minute talks + +00:06:10.580 --> 00:06:12.900 +with every speaker before they get into the + +00:06:12.900 --> 00:06:15.100 +live Q&A or the live presentation. + +00:06:15.780 --> 00:06:16.920 +Thanks a lot for everybody, + +00:06:16.920 --> 00:06:19.640 +I learned quite a lot and also thank you for + +00:06:19.640 --> 00:06:22.360 +all of you guys and everyone for having such + +00:06:22.360 --> 00:06:24.060 +a beautiful experience here. + +00:06:25.960 --> 00:06:28.060 +[Speaker 1]: Well, thank you. We're glad to have you. + +00:06:29.180 --> 00:06:31.120 +Okay, Sasha, Unless you've got anything else + +00:06:31.120 --> 00:06:33.880 +to add, and Corwin, have you fixed your + +00:06:33.880 --> 00:06:38.400 +microphone? Yes, we can hear you Corwin. + +00:06:38.400 --> 00:06:39.160 +Okay, well let's start again. + +00:06:39.160 --> 00:06:40.440 +Let's forget everything you've heard for the + +00:06:40.440 --> 00:06:41.640 +last 20 minutes. We'll start again. + +00:06:41.640 --> 00:06:42.540 +I'm just kidding. + +00:06:35.280 --> 00:06:45.560 +[Speaker 3]: You tell me. No, I mean, + +00:06:45.560 --> 00:06:47.760 +I don't know what I could possibly add to all + +00:06:47.760 --> 00:06:50.200 +that. I think we absolutely should get some + +00:06:50.200 --> 00:06:51.500 +rest, save it for tomorrow. + +00:06:52.540 --> 00:06:55.240 +I was just looking through these notes in the + +00:06:55.240 --> 00:06:57.480 +couple of minutes that I had between my own + +00:06:57.480 --> 00:06:59.980 +talk. Thank you for your help with that. + +00:07:00.720 --> 00:07:02.420 +But also, especially you, + +00:07:02.420 --> 00:07:08.040 +Sasha, and Leo, and everybody in the IRC over + +00:07:08.040 --> 00:07:10.440 +the months here, just encouraging me to keep + +00:07:10.440 --> 00:07:12.460 +going when it was just seemed futile. + +00:07:13.580 --> 00:07:15.780 +Even though it just really turned into a + +00:07:15.780 --> 00:07:18.120 +brain dump, I appreciate getting the chance + +00:07:18.120 --> 00:07:20.320 +of feeling like that process is more + +00:07:20.320 --> 00:07:22.540 +documented now than it was before I did it. + +00:07:22.540 --> 00:07:23.440 +Hey, that's not nothing, + +00:07:23.440 --> 00:07:25.440 +right? And that's why we all do this. + +00:07:25.440 --> 00:07:28.360 +And I don't know, Floey really said it + +00:07:28.360 --> 00:07:30.520 +perfect. Like, I appreciate the chance to get + +00:07:30.520 --> 00:07:31.560 +to work on this with you. + +00:07:31.560 --> 00:07:32.700 +I learned so much. + +00:07:36.400 --> 00:07:38.980 +[Speaker 1]: Amazing. Well, you know what? + +00:07:39.020 --> 00:07:41.380 +Without further ado, I believe it's time for + +00:07:41.380 --> 00:07:42.840 +us to say goodbye for day 1. + +00:07:42.840 --> 00:07:45.340 +We will obviously be seeing you tomorrow at 9 + +00:07:45.340 --> 00:07:48.740 +a.m. I think the schedule is actually stating + +00:07:48.740 --> 00:07:49.840 +we're starting at 8.59am. + +00:07:50.500 --> 00:07:51.220 +Is it correct? + +00:07:51.220 --> 00:07:53.980 +[Speaker 0]: Yes, I think the chrono tab will kick in. + +00:07:54.020 --> 00:07:56.020 +The video is like 6 minutes long. + +00:07:57.620 --> 00:07:58.660 +Actually, maybe I should, + +00:07:58.660 --> 00:08:00.640 +I'll give it an extra minute for safety, + +00:08:00.660 --> 00:08:03.660 +I think. Yeah, yeah. I'll tweak the timing. + +00:08:04.340 --> 00:08:06.420 +[Speaker 1]: I think that'd be wise for people we do not + +00:08:06.420 --> 00:08:08.460 +know basically 8.59 is when I brush my teeth + +00:08:08.460 --> 00:08:10.680 +before going live so we might be in a very + +00:08:10.680 --> 00:08:12.740 +awkward spot for me to introduce the talk if + +00:08:12.740 --> 00:08:15.420 +it happens. Well anyway folks thank you very + +00:08:15.420 --> 00:08:18.500 +much for watching and we'll see you tomorrow. + +00:08:19.360 --> 00:08:31.320 +Bye-bye! All right, I have closed the bbb oh + +00:08:31.320 --> 00:08:34.780 +it's restarting apparently oh it's we're back + +00:08:34.780 --> 00:08:37.480 +on the q and a between stephan and let's + +00:08:37.480 --> 00:08:47.420 +close this hey we are off + +00:08:44.700 --> 00:08:52.540 +[Speaker 3]: we are clear I am pausing the recording I + +00:08:52.540 --> 00:08:54.280 +don't have permission to do that in this + +00:08:54.280 --> 00:08:54.780 +room. diff --git a/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt b/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt new file mode 100644 index 00000000..96dac2e5 --- /dev/null +++ b/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt @@ -0,0 +1,364 @@ +WEBVTT captioned by sachac, checked by sachac + +00:00:00.000 --> 00:00:04.558 +Welcome to EmacsConf 2023, where we get to find out + +00:00:04.559 --> 00:00:07.697 +just how much we can do with a text editor. + +00:00:07.698 --> 00:00:10.316 +Just like last year, we have two tracks. + +00:00:10.317 --> 00:00:12.655 +There's a General track and a Development track, + +00:00:12.656 --> 00:00:14.234 +but really, you'll probably find + +00:00:14.235 --> 00:00:15.953 +interesting things on both tracks + +00:00:15.954 --> 00:00:18.492 +no matter what your level of experience is, + +00:00:18.493 --> 00:00:21.151 +so don't feel limited to one or the other. + +00:00:21.152 --> 00:00:24.710 +For Saturday, it's mostly Org Mode talks on the General track. + +00:00:24.711 --> 00:00:26.869 +The doc talk on the development track + +00:00:26.870 --> 00:00:30.128 +is about literate documentation with Emacs and Org Mode, + +00:00:30.129 --> 00:00:31.687 +and it's a general-audience talk + +00:00:31.688 --> 00:00:33.606 +even though it's in the Development track. + +00:00:33.607 --> 00:00:35.265 +I just ran out of space in the schedule. + +00:00:35.266 --> 00:00:38.504 +The best parts of EmacsConf are the conversations. + +00:00:38.505 --> 00:00:41.263 +The wiki has a page on how to watch and participate, + +00:00:41.264 --> 00:00:44.042 +and I'll give you a quick overview as well. + +00:00:44.043 --> 00:00:47.521 +You can watch both streams at live.emacsconf.org + +00:00:47.522 --> 00:00:50.400 +using free and open source software. + +00:00:50.401 --> 00:00:52.819 +Using a streaming media player like mpv + +00:00:52.820 --> 00:00:56.218 +seems to be the best way to watch in terms of performance + +00:00:56.219 --> 00:00:57.817 +but there are also web-based players + +00:00:57.818 --> 00:01:00.296 +just in case that's all you've got. + +00:01:00.297 --> 00:01:02.295 +The schedule shows the General track on top + +00:01:02.296 --> 00:01:03.974 +and the Development track on the bottom, + +00:01:03.975 --> 00:01:06.593 +so you can see what else is going on. + +00:01:06.594 --> 00:01:07.792 +As you're watching the talks, + +00:01:07.793 --> 00:01:10.691 +you can refer to the schedule in another window. + +00:01:10.692 --> 00:01:13.710 +Hover over the boxes to see the times and titles, + +00:01:13.711 --> 00:01:15.609 +and click on the boxes in the schedule + +00:01:15.610 --> 00:01:18.388 +to jump to the talk's page for more details. + +00:01:18.389 --> 00:01:20.927 +You can also get the schedule as an iCalendar file + +00:01:20.928 --> 00:01:23.186 +or as an Org file in different time zones. + +00:01:23.187 --> 00:01:24.685 +Many talks will be followed by + +00:01:24.686 --> 00:01:27.344 +live Q&A web conferences with the speaker, + +00:01:27.345 --> 00:01:30.423 +which will be done in BigBlueButton or BBB. + +00:01:30.424 --> 00:01:33.422 +These are indicated with a solid border on the schedule + +00:01:33.423 --> 00:01:36.581 +and by Q&A: BBB on the schedule page. + +00:01:36.582 --> 00:01:38.280 +You can join the web conference room + +00:01:38.281 --> 00:01:39.899 +by clicking on the BBB link + +00:01:39.900 --> 00:01:42.838 +on the schedule page or the talk's webpage. + +00:01:42.839 --> 00:01:45.757 +Then you can ask your questions yourself when the Q&A starts. + +00:01:45.758 --> 00:01:48.216 +To improve performance, please keep your webcam off + +00:01:48.217 --> 00:01:50.955 +and stay muted until it's your turn to talk. + +00:01:50.956 --> 00:01:53.574 +This year we're experimenting with automatically switching + +00:01:53.575 --> 00:01:55.933 +between talks and Q&A sessions, + +00:01:55.934 --> 00:01:59.132 +so the transitions on the stream might be a little sudden, + +00:01:59.133 --> 00:02:00.891 +but people in the BigBlueButton room + +00:02:00.892 --> 00:02:02.570 +can continue the conversation + +00:02:02.571 --> 00:02:05.409 +even after the talk moves off-stream. + +00:02:05.410 --> 00:02:08.768 +Other talks will have Q&A via Etherpad or IRC, + +00:02:08.769 --> 00:02:11.087 +depending on what the speakers prefer. + +00:02:11.088 --> 00:02:14.106 +This is indicated in the schedule with a dashed border + +00:02:14.107 --> 00:02:16.825 +and on the schedule page as well. + +00:02:16.826 --> 00:02:19.264 +Please ask your questions in the recommended places + +00:02:19.265 --> 00:02:21.783 +so that the speakers can easily see them. + +00:02:21.784 --> 00:02:24.502 +Some talks will have the Q&A after the event, + +00:02:24.503 --> 00:02:27.361 +so you can add your questions to their Etherpad. + +00:02:27.362 --> 00:02:29.460 +We'll e-mail the speakers afterwards + +00:02:29.461 --> 00:02:32.359 +and update the talk pages when they answer. + +00:02:32.360 --> 00:02:35.498 +The schedule pages and track pages have quick shortcuts + +00:02:35.499 --> 00:02:38.977 +so that you can find out more about talks, open the Etherpads, + +00:02:38.978 --> 00:02:42.536 +and join the Q&A sessions. The watch page has more tips + +00:02:42.537 --> 00:02:45.235 +on how to make the most of Q&A. + +00:02:45.236 --> 00:02:48.014 +If you can, please add notes and ask questions + +00:02:48.015 --> 00:02:51.173 +in the Etherpad for the talk. That makes it easier + +00:02:51.174 --> 00:02:52.832 +for everyone to share their notes, + +00:02:52.833 --> 00:02:55.771 +and speakers and hosts can read the questions from there. + +00:02:55.772 --> 00:02:59.790 +We'll copy the notes to the talk pages afterwards. + +00:02:59.791 --> 00:03:01.849 +We have one pad for each talk, + +00:03:01.850 --> 00:03:03.968 +so you can follow the links to get to the next one + +00:03:03.969 --> 00:03:07.127 +or go back to the schedule and get the link from there. + +00:03:07.128 --> 00:03:08.766 +If you have general feedback about + +00:03:08.767 --> 00:03:10.925 +the conference itself, please put it in + +00:03:10.926 --> 00:03:16.384 +pad.emacsconf.org/2023 , which is linked on each pad. + +00:03:16.385 --> 00:03:19.043 +You can also use this as a general community message board + +00:03:19.044 --> 00:03:22.182 +for things like Help Wanted. + +00:03:22.183 --> 00:03:25.319 +Internet Relay Chat or IRC can be another great way + +00:03:25.320 --> 00:03:27.960 +to be part of lots of conversations. + +00:03:27.961 --> 00:03:31.679 +You can use chat.emacsconf.org to join the IRC channels + +00:03:31.680 --> 00:03:34.518 +through your web browser. The tabs on the left can help you + +00:03:34.519 --> 00:03:37.077 +switch between the different channels. + +00:03:37.078 --> 00:03:40.339 +There's #emacsconf-gen for the General track + +00:03:40.340 --> 00:03:43.695 +and #emacsconf-dev for the Development track. + +00:03:43.696 --> 00:03:47.414 +If you need to reach us, you can join #emacsconf-org + +00:03:47.415 --> 00:03:52.393 +or e-mail emacsconf-org-private@gnu.org. + +00:03:52.394 --> 00:03:55.672 +You can use #emacsconf for hallway conversations. + +00:03:55.673 --> 00:03:57.791 +Of course, you can join any of these channels + +00:03:57.792 --> 00:04:00.070 +with your favourite IRC client. + +00:04:00.071 --> 00:04:03.909 +We're on the libera.chat network. + +00:04:03.910 --> 00:04:06.548 +Once again, we're going to be streaming with open captions + +00:04:06.549 --> 00:04:09.627 +for most of the talks this year, thanks to our speakers and + +00:04:09.628 --> 00:04:12.986 +captioning volunteers. The captioned talks are indicated + +00:04:12.987 --> 00:04:15.705 +on the schedule, and with any luck, we'll be posting + +00:04:15.706 --> 00:04:19.204 +transcripts on talk pages shortly after the talks start. + +00:04:19.205 --> 00:04:21.023 +If you need additional accommodations, + +00:04:21.024 --> 00:04:23.783 +please let us know in #emacsconf-org + +00:04:23.784 --> 00:04:25.682 +and we'll see if we can make things happen. + +00:04:25.683 --> 00:04:29.921 +If something goes down, we'll update status.emacsconf.org. + +00:04:29.922 --> 00:04:31.780 +If it doesn't look like we've noticed yet, + +00:04:31.781 --> 00:04:35.219 +please let us know in the #emacsconf-org IRC channel, + +00:04:35.220 --> 00:04:37.378 +where we will be quietly panicking. + +00:04:37.379 --> 00:04:40.077 +In all of these conversations, please keep in mind + +00:04:40.078 --> 00:04:43.076 +our guidelines for conduct. You can find them on the wiki, + +00:04:43.077 --> 00:04:46.556 +They basically boil down to: please be nice. + +00:04:46.557 --> 00:04:48.995 +If all goes well, the prerecorded talks and transcripts + +00:04:48.996 --> 00:04:50.994 +should be available from the talk pages + +00:04:50.995 --> 00:04:52.733 +shortly after they start playing, + +00:04:52.734 --> 00:04:54.632 +and we'll post the recordings of live talks + +00:04:54.633 --> 00:04:57.751 +and Q&A sessions within the next month or so. + +00:04:57.752 --> 00:05:00.270 +If you'd like to get an update, you can subscribe to + +00:05:00.271 --> 00:05:03.569 +the emacsconf-discuss mailing list. + +00:05:03.570 --> 00:05:05.128 +All right, let's get going. + +00:05:05.129 --> 00:05:07.528 +Leo Vivier is hosting the general track, + +00:05:07.529 --> 00:05:10.647 +and Amin Bandali hosting the development track. + +00:05:10.648 --> 00:05:13.366 +The other volunteers and I will run around mostly backstage, + +00:05:13.367 --> 00:05:15.445 +and you'll probably meet us in the closing remarks. + +00:05:15.446 --> 00:05:17.084 +That's also where we get to thank + +00:05:17.085 --> 00:05:18.723 +all the people and organizations + +00:05:18.724 --> 00:05:21.762 +who make EmacsConf even possible. + +00:05:21.763 --> 00:05:24.637 +Thanks for coming to EmacsConf 2023. diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt new file mode 100644 index 00000000..b681859e --- /dev/null +++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt @@ -0,0 +1,371 @@ +WEBVTT + + +00:00:16.200 --> 00:00:16.700 +[Speaker 0]: I see 2 questions on the panel already. + +00:00:22.660 --> 00:00:23.040 +Let's see, 1 asking how much Andrew uses + +00:00:26.320 --> 00:00:26.480 +these ripples remotely or versus on their own + +00:00:29.240 --> 00:00:29.740 +desktop. And another asking if this can be + +00:00:31.160 --> 00:00:31.660 +integrated with EGLOT. + +00:00:34.840 --> 00:00:35.060 +And I will note that it is very cool that + +00:00:36.580 --> 00:00:37.080 +this year we've had so many talks on Ripples. + +00:00:40.920 --> 00:00:41.140 +Just goes to show how powerful Emacs is and + +00:00:42.980 --> 00:00:43.140 +just how much or how far you can push it and + +00:00:44.040 --> 00:00:44.540 +how much you can do with it. + +00:00:53.460 --> 00:00:53.960 +And so see someone asking on IRC, + +00:00:57.780 --> 00:00:58.280 +if or how many people use GnuGeeks. + +00:01:01.400 --> 00:01:01.900 +Since we are talking about Scheme, + +00:01:05.740 --> 00:01:06.220 +GnuGeeks is a great platform slash operating + +00:01:10.380 --> 00:01:10.640 +system or distro for your test house, + +00:01:11.920 --> 00:01:12.420 +but also for servers and such. + +00:01:13.320 --> 00:01:13.780 +They do some impressive, + +00:01:15.240 --> 00:01:15.720 +amazing work. And it's all, + +00:01:19.400 --> 00:01:19.900 +pretty much all done in Gindugal's scheme. + +00:01:30.260 --> 00:01:30.760 +So very cool stuff. Bye. + +00:01:45.260 --> 00:01:45.760 +You + +00:03:19.940 --> 00:03:20.140 +I see another interesting question on the + +00:03:23.440 --> 00:03:23.940 +pad. How hard is it to add support for + +00:03:24.960 --> 00:03:25.460 +something other than Guile? + +00:03:28.040 --> 00:03:28.200 +And if it makes sense to contribute at this + +00:03:28.940 --> 00:03:29.440 +early stage of development? + +00:03:31.960 --> 00:03:32.220 +They said that they've written several + +00:03:34.000 --> 00:03:34.140 +packages for chicken skin before and they + +00:03:35.400 --> 00:03:35.900 +would like to try this 1 as well. + +00:05:26.380 --> 00:05:26.880 +I guess since Andrew isn't still here, + +00:05:29.480 --> 00:05:29.640 +and there was some chatter about GnuGeeks in + +00:05:32.400 --> 00:05:32.900 +the chat, maybe it might be nice for me to + +00:05:35.520 --> 00:05:35.800 +share my screen and plug Inukis for a little + +00:05:38.800 --> 00:05:39.000 +bit and introduce it or at least show its + +00:05:41.720 --> 00:05:41.980 +website to folks who may not have seen it yet + +00:05:43.380 --> 00:05:43.880 +so I'm going to try and do that now. + +00:05:45.260 --> 00:05:45.760 +You + +00:06:19.760 --> 00:06:20.260 +Okay, let's see if this works. + +00:06:33.540 --> 00:06:34.040 +Okay, so this is GNU Geeks' website. + +00:06:35.000 --> 00:06:35.500 +You can go to geeks.gnu.org. + +00:06:38.820 --> 00:06:39.180 +And they introduced it at the top. + +00:06:43.480 --> 00:06:43.980 +So it's a wholly free operating system or + +00:06:45.100 --> 00:06:45.600 +distribution of GNU Linux. + +00:06:48.600 --> 00:06:49.040 +Meaning that it only has free software + +00:06:50.840 --> 00:06:51.340 +packaged and no non-free packages, + +00:06:53.560 --> 00:06:53.940 +so it is endorsed by the FSF and the GNU + +00:06:56.640 --> 00:06:56.920 +project. As someone said in the chat, + +00:06:57.740 --> 00:06:58.240 +it's kind of like Nix, + +00:07:01.360 --> 00:07:01.860 +but instead built on GNU Gallop scheme. + +00:07:05.320 --> 00:07:05.820 +It has transactional upgrades and rollbacks. + +00:07:10.160 --> 00:07:10.380 +So if you do upgrade your system and let's + +00:07:11.180 --> 00:07:11.420 +say in the middle of it, + +00:07:13.200 --> 00:07:13.700 +your hardware fails or your power goes out, + +00:07:16.560 --> 00:07:16.720 +the likelihood of things being corrupted is + +00:07:18.840 --> 00:07:19.340 +very low because the upgrade is essentially + +00:07:21.560 --> 00:07:22.060 +prepared like in the background. + +00:07:24.140 --> 00:07:24.640 +And then pretty much atomically, + +00:07:26.780 --> 00:07:27.280 +the system is switched to it. + +00:07:30.400 --> 00:07:30.900 +And also if there is some kind of, + +00:07:32.400 --> 00:07:32.900 +sorry, I'm losing my voice here. + +00:07:34.840 --> 00:07:35.140 +If there is some kind of issue that makes + +00:07:35.800 --> 00:07:36.300 +your system unbootable, + +00:07:41.480 --> 00:07:41.660 +you could always go back to booting the + +00:07:44.600 --> 00:07:44.760 +previous revision of your system when you + +00:07:46.100 --> 00:07:46.600 +restart in the Grub bootloader. + +00:07:56.740 --> 00:07:57.180 +Yeah, so they have a nice blog where they + +00:07:59.340 --> 00:07:59.540 +regularly post updates and what's new in the + +00:08:01.000 --> 00:08:01.500 +project. You can go check that out. + +00:08:07.240 --> 00:08:07.500 +We also have a packages archive where you can + +00:08:09.360 --> 00:08:09.560 +see a list of all the software that has been + +00:08:11.060 --> 00:08:11.560 +packaged for GNU Geeks. + +00:08:13.620 --> 00:08:14.120 +It is an impressive list. + +00:08:16.440 --> 00:08:16.560 +I don't know how many tens of thousands of + +00:08:19.720 --> 00:08:20.220 +packages there are. Geeks has been growing + +00:08:22.360 --> 00:08:22.840 +very well. And you can search the packages + +00:08:29.380 --> 00:08:29.540 +here. And yeah, all kinds of things are + +00:08:31.800 --> 00:08:32.299 +packaged. Of course, GNU Emacs is packaged, + +00:08:37.260 --> 00:08:37.760 +along with many extensions or packages, + +00:08:41.039 --> 00:08:41.260 +GNU Emacs packages that are packaged as + +00:08:42.840 --> 00:08:43.340 +system packages for Geeks. + +00:08:46.960 --> 00:08:47.460 +Yeah, so definitely go check it out. + +00:08:55.680 --> 00:08:56.180 +You can use Geeks both as a standalone + +00:08:59.340 --> 00:08:59.840 +package manager, let's say on a Debian-based + +00:09:00.780 --> 00:09:01.280 +distribution like Triscale, + +00:09:06.180 --> 00:09:06.340 +for example, or you could install it like as + +00:09:08.900 --> 00:09:09.400 +a complete system distribution on its own. + +00:09:15.560 --> 00:09:16.000 +So the former is useful if you want to maybe + +00:09:18.080 --> 00:09:18.420 +get a taste for Geeks and try it out before + +00:09:21.140 --> 00:09:21.300 +fully committing to it and switching to it as + +00:09:24.620 --> 00:09:24.800 +your main distro. You can try it on top of + +00:09:27.720 --> 00:09:27.900 +any other distro pretty much and then you can + +00:09:31.080 --> 00:09:31.200 +of course install it on its own as well as a + +00:09:31.560 --> 00:09:32.060 +system distribution. + +00:09:50.940 --> 00:09:51.140 +Yeah, there are a bunch of manuals and + +00:09:53.040 --> 00:09:53.300 +reference cards and videos that you're + +00:09:55.920 --> 00:09:56.280 +welcome to watch. They have several mailing + +00:09:59.240 --> 00:09:59.440 +lists. It sounds like they have a wiki now as + +00:10:04.020 --> 00:10:04.400 +well. And the development is done on Gnu + +00:10:09.680 --> 00:10:10.180 +Savannah. If we go to savannah.gnu.org + +00:10:12.780 --> 00:10:13.280 +slash projects slash geeks, + +00:10:18.640 --> 00:10:18.820 +Yeah, the project is developed here and they + +00:10:21.300 --> 00:10:21.500 +have a bunch of repositories including the + +00:10:24.340 --> 00:10:24.840 +main 1 which is geeks.git + +00:10:28.200 --> 00:10:28.380 +itself. So yeah, folks are welcome to go + +00:10:32.380 --> 00:10:32.880 +check it out. Let's see, + +00:10:35.860 --> 00:10:36.260 +maybe we can go have a look at some package + +00:10:37.540 --> 00:10:37.840 +definitions, although I think we're almost + +00:10:38.940 --> 00:10:39.440 +out of time on the live stream. + +00:10:42.600 --> 00:10:43.100 +So, yeah, just quickly. + +00:10:45.280 --> 00:10:45.780 +Emacs to the CM has all the, + +00:10:48.640 --> 00:10:49.140 +Emacs packages or Emacs itself. + +00:10:52.120 --> 00:10:52.620 +And Emacs-xyz is where you'll find all the + +00:10:54.480 --> 00:10:54.980 +Emacs like ELPA packages, + +00:10:57.980 --> 00:10:58.260 +but package for use on GNU Geeks system or + +00:11:01.220 --> 00:11:01.360 +with GNU Geeks. And I think that's all the + +00:11:04.080 --> 00:11:04.580 +time that we have. So yeah, + +00:11:06.000 --> 00:11:06.300 +thanks for tuning in, folks. + +00:11:07.800 --> 00:11:08.300 +Please post your questions on the pad. + +00:11:09.280 --> 00:11:09.780 +We'll pass them on to Andrew. + +00:11:12.400 --> 00:11:12.720 +And yeah, hope you enjoy this. + +00:11:15.140 --> 00:11:15.360 +Definitely go check out Andrew's work and Gnu + +00:11:25.320 --> 00:11:25.580 +geeks as well. You are currently the only + +00:11:26.280 --> 00:11:26.780 +person in this conference. diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt new file mode 100644 index 00000000..15bb79f9 --- /dev/null +++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt @@ -0,0 +1,68 @@ +WEBVTT + + +00:00:02.120 --> 00:00:23.279 +Introduction + +00:00:23.280 --> 00:01:18.179 +Interactive development + +00:01:18.180 --> 00:02:53.719 +REPL: Read Eval Print Loop + +00:02:53.720 --> 00:04:07.599 +Long-lasting loops + +00:04:07.600 --> 00:05:23.159 +Not interruptible + +00:05:23.160 --> 00:05:51.479 +No protocol + +00:05:51.480 --> 00:07:25.859 +Not scalable + +00:07:25.860 --> 00:09:01.739 +nREPL + +00:09:01.740 --> 00:10:34.179 +Arei, Ares, and how to try + +00:10:34.180 --> 00:11:27.639 +Demo + +00:11:27.640 --> 00:12:32.459 +Continuations + +00:12:32.460 --> 00:13:33.419 +Reading from stdin + +00:13:33.420 --> 00:15:13.159 +Fancy example with continuations + +00:15:13.160 --> 00:17:42.059 +Guix API + +00:17:42.060 --> 00:17:57.019 +Support + +00:17:57.020 --> 00:18:46.219 +Future steps - Multiple simultaneous evaluations in different contexts + +00:18:46.220 --> 00:18:56.879 +Tree-sitter integration + +00:18:56.880 --> 00:19:22.759 +Full-fledged debugger + +00:19:22.760 --> 00:19:58.379 +FAQ - Does it support other Scheme implementations? + +00:19:58.380 --> 00:20:22.120 +Is it possible to use it with other text editors? + +00:20:22.121 --> 00:20:45.879 +Conclusion + +00:20:45.880 --> 00:21:00.680 +Contacts diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt new file mode 100644 index 00000000..7037754b --- /dev/null +++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt @@ -0,0 +1,1044 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:02.120 --> 00:00:07.399 +Hello and welcome everyone on EmacsConf 2023. + +00:00:07.400 --> 00:00:08.719 +I'm Andrew Tropin. + +00:00:08.720 --> 00:00:11.919 +I work on operating systems and programming languages. + +00:00:11.920 --> 00:00:16.639 +Today, we discuss Lisps, Schemes, REPLs, + +00:00:16.640 --> 00:00:18.139 +interactive development, + +00:00:18.140 --> 00:00:23.279 +and how to make your own cozy development environment. + +NOTE Interactive development + +00:00:23.280 --> 00:00:26.319 +Let's start from interactive development. + +00:00:26.320 --> 00:00:29.519 +Lisps are famous for a nice + +00:00:29.520 --> 00:00:32.479 +Interactive Development Experience. + +00:00:32.480 --> 00:00:33.999 +They have REPLs. + +00:00:34.000 --> 00:00:40.119 +Emacs Lisp has its own Lisp machine, + +00:00:40.120 --> 00:00:44.719 +and a lot of cool IDE with different functionality + +00:00:44.720 --> 00:00:47.879 +is already here and providing + +00:00:47.880 --> 00:00:51.619 +a nice and pleasant experience. + +00:00:51.620 --> 00:00:56.839 +The question is, is it enough? + +00:00:56.840 --> 00:00:59.920 +In most cases, yes, but for some languages, + +00:00:59.921 --> 00:01:04.839 +we have some white spaces, some missing pieces. + +00:01:04.840 --> 00:01:08.299 +And for example, in Scheme world, + +00:01:08.300 --> 00:01:10.879 +we already have a few tools. + +00:01:10.880 --> 00:01:14.599 +We have REPL, we have integration for REPL in Emacs, + +00:01:14.600 --> 00:01:16.679 +but is it enough? + +00:01:16.680 --> 00:01:18.179 +Let's see. + +NOTE REPL: Read Eval Print Loop + +00:01:18.180 --> 00:01:22.839 +We know that Emacs is very good for Lisps and REPL. + +00:01:22.840 --> 00:01:26.039 +Lisp and Emacs should be a perfect setup. + +00:01:26.040 --> 00:01:30.079 +But let's see how REPL basically works. + +00:01:30.080 --> 00:01:34.799 +It's an event loop which does three things. + +00:01:34.800 --> 00:01:37.279 +It reads an expression, it evaluates the expression, + +00:01:37.280 --> 00:01:40.739 +and it prints the result. + +00:01:40.740 --> 00:01:47.279 +We can take a simple expression, input it into REPL, + +00:01:47.280 --> 00:01:48.959 +and evaluate it and see the result. + +00:01:48.960 --> 00:01:50.819 +Very nice, very convenient. + +00:01:50.820 --> 00:01:55.339 +You can experiment and see immediately what is happening. + +00:01:55.340 --> 00:01:57.759 +You can even run a long-running process + +00:01:57.760 --> 00:01:58.919 +which does something. + +00:01:58.920 --> 00:02:07.199 +You can interrupt it and everything will be okay. + +00:02:07.200 --> 00:02:08.639 +But the problem appears + +00:02:08.640 --> 00:02:11.659 +when you start to develop a bigger project. + +00:02:11.660 --> 00:02:14.039 +And in most cases, you don't do + +00:02:14.240 --> 00:02:16.399 +your whole development in REPL. + +00:02:16.400 --> 00:02:18.460 +You do only a small part of it. + +00:02:18.461 --> 00:02:20.679 +In most cases, you just write + +00:02:20.680 --> 00:02:22.919 +the source code in text files, + +00:02:22.920 --> 00:02:26.399 +and after that, you run those snippets of code + +00:02:26.400 --> 00:02:30.520 +from those text files, or run the whole project. + +00:02:30.721 --> 00:02:33.719 +It's not very convenient to copy and paste + +00:02:33.720 --> 00:02:36.039 +every time the snippets of code to the REPL, + +00:02:36.040 --> 00:02:38.879 +see the result, modify the snippet of code, + +00:02:38.880 --> 00:02:41.199 +copy it again, and so on. + +00:02:41.200 --> 00:02:44.039 +So people invented some integration + +00:02:44.040 --> 00:02:46.079 +between REPL and your text editor. + +00:02:46.080 --> 00:02:51.599 +So you can evaluate expressions inside your text editor + +00:02:51.600 --> 00:02:53.719 +and see the result here. + +NOTE Long-lasting loops + +00:02:53.720 --> 00:02:56.679 +Works good so far, but what happens + +00:02:56.680 --> 00:03:02.299 +if we run a long-lasting loop, + +00:03:02.300 --> 00:03:04.999 +which does a lot of operations. + +00:03:05.000 --> 00:03:07.839 +As you can see here with a simple example, + +00:03:07.840 --> 00:03:13.599 +the output of the function, + +00:03:13.600 --> 00:03:16.759 +stdout of the function is presented here, + +00:03:16.760 --> 00:03:18.799 +and the resulting value is here. + +00:03:18.800 --> 00:03:22.359 +If you run a long-running process, + +00:03:22.360 --> 00:03:24.639 +you don't see anything happening. + +00:03:24.640 --> 00:03:29.259 +And you see there's a watch instead of my cursor. + +00:03:29.260 --> 00:03:33.719 +Maybe you don't see it, but nothing actually happens, + +00:03:33.720 --> 00:03:36.379 +at least from the point of view of the user. + +00:03:36.380 --> 00:03:38.399 +But if we interrupt the evaluation, + +00:03:38.400 --> 00:03:41.439 +we will see that some process in the background + +00:03:41.440 --> 00:03:44.239 +was launched, but we didn't see anything. + +00:03:44.240 --> 00:03:51.039 +Because the REPL is a single-threaded blocking process, + +00:03:51.040 --> 00:03:54.319 +which reads stdin and prints stdout, + +00:03:54.320 --> 00:03:55.679 +make the integration + +00:03:55.680 --> 00:03:58.540 +between the REPL and your text editor + +00:03:58.541 --> 00:04:02.919 +is not an easy task. + +00:04:02.920 --> 00:04:04.320 +And even if you do it, + +00:04:04.321 --> 00:04:07.599 +you have a lot of downsides, usually. + +NOTE Not interruptible + +00:04:07.600 --> 00:04:13.679 +First of all, the process is not interruptible. + +00:04:13.680 --> 00:04:18.479 +If you have a remote process which listens on the socket + +00:04:18.480 --> 00:04:21.939 +to which you connect from your development environment, + +00:04:21.940 --> 00:04:25.479 +and you run some infinite loop, for example, + +00:04:25.480 --> 00:04:28.299 +you can't interrupt it. + +00:04:28.300 --> 00:04:31.239 +Because interruption is done via signals, + +00:04:31.240 --> 00:04:35.039 +and signals to remote processes are not usually + +00:04:35.040 --> 00:04:38.759 +the thing in such integrations. + +NOTE Output is not interactive + +00:04:38.760 --> 00:04:41.159 +Output is also not interactive. + +00:04:41.160 --> 00:04:45.319 +Usually, for example, here you can see + +00:04:45.320 --> 00:04:47.799 +when I evaluate the expression, + +00:04:47.800 --> 00:04:51.119 +the output is captured on the evaluation side, + +00:04:51.120 --> 00:04:53.719 +and after that, after the whole evaluation + +00:04:53.720 --> 00:04:56.179 +of the whole expression finished, + +00:04:56.180 --> 00:05:06.759 +I get the result, all the stdout at once. + +00:05:06.760 --> 00:05:09.919 +And if I run the process which evaluates for 5 seconds, + +00:05:09.920 --> 00:05:13.780 +I will see the first signs of the life + +00:05:13.781 --> 00:05:17.039 +only after 5 seconds of evaluation. + +00:05:17.040 --> 00:05:23.159 +Okay, what else? + +NOTE No protocol + +00:05:23.160 --> 00:05:26.119 +When you do such integrations, you have no protocol, + +00:05:26.120 --> 00:05:29.759 +you have just stdin and stdout. + +00:05:29.760 --> 00:05:32.919 +You print to stdin from your text editor. + +00:05:32.920 --> 00:05:36.679 +You read from stdout of the process. + +00:05:36.680 --> 00:05:40.339 +It's hard to tell if evaluation is finished, + +00:05:40.340 --> 00:05:47.319 +if it requires stdin, and how to extend the REPL + +00:05:47.320 --> 00:05:51.479 +to make it more featureful, and so on. + +NOTE Not scalable + +00:05:51.480 --> 00:05:57.359 +And also, such integrations are usually not very scalable. + +00:05:57.360 --> 00:06:14.699 +For example, if you want to have a completion, + +00:06:14.700 --> 00:06:17.460 +you type something, you have the completion. Cool. + +00:06:17.461 --> 00:06:22.039 +But if you run the process and at the same time + +00:06:22.040 --> 00:06:24.620 +try to have a completion, you don't have it, + +00:06:24.621 --> 00:06:29.799 +because the evaluation is in progress, + +00:06:29.800 --> 00:06:33.279 +and you can't calculate the completion candidates + +00:06:33.280 --> 00:06:35.519 +at the same time. To make it more obvious, + +00:06:35.520 --> 00:06:41.019 +I will start a completion here. + +00:06:41.020 --> 00:06:43.279 +You see the completion pop-ups. + +00:06:43.280 --> 00:06:46.159 +I start the evaluation process, + +00:06:46.160 --> 00:06:49.859 +and when I try to complete something, + +00:06:49.860 --> 00:06:53.119 +the evaluation freezes and there is no completion. + +00:06:53.120 --> 00:06:55.479 +Not very convenient. + +00:06:55.480 --> 00:06:58.119 +Usually, you have some long-running processes + +00:06:58.120 --> 00:07:01.399 +and you want them to continue while you have + +00:07:01.400 --> 00:07:08.579 +your go to definition, completion, and other things. + +00:07:08.580 --> 00:07:13.659 +Overall, those issues make it quite inconvenient + +00:07:13.660 --> 00:07:18.419 +to integrate REPL in text editors or development environments, + +00:07:18.420 --> 00:07:21.379 +so you need something else + +00:07:21.380 --> 00:07:25.859 +to make the work comfortable. + +NOTE nREPL + +00:07:25.860 --> 00:07:28.979 +There is already a solution called nREPL. + +00:07:28.980 --> 00:07:31.119 +It's a synchronous protocol which allows + +00:07:31.120 --> 00:07:34.019 +to send operations to the server + +00:07:34.020 --> 00:07:37.759 +and receive responses in a synchronous manner. + +00:07:37.760 --> 00:07:42.159 +And here is a simple example of a few operations. + +00:07:42.160 --> 00:07:45.079 +First one is cloning the existing session, + +00:07:45.080 --> 00:07:49.240 +and as a response you will get a new session. + +00:07:49.241 --> 00:07:52.099 +Also you send the evaluation request with code + +00:07:52.100 --> 00:07:55.639 +that you want to evaluate, and you get two responses. + +00:07:55.640 --> 00:08:00.600 +First one says that output is captured + +00:08:00.601 --> 00:08:02.839 +and it's equal to "hi\n", + +00:08:02.840 --> 00:08:06.560 +and after that, you receive an "Evaluation completed", + +00:08:06.561 --> 00:08:12.439 +the value of this expression. + +00:08:12.440 --> 00:08:14.079 +This protocol was developed + +00:08:14.080 --> 00:08:15.879 +for CIDER development environment. + +00:08:15.880 --> 00:08:18.759 +It's a Clojure development environment for Emacs. + +00:08:18.760 --> 00:08:22.859 +It's very cool, featureful, reliable, + +00:08:22.860 --> 00:08:26.899 +and I would say production-ready. + +00:08:26.900 --> 00:08:31.499 +A lot of professional Clojure developers use it. + +00:08:31.500 --> 00:08:33.239 +The nREPL protocol is very simple. + +00:08:33.240 --> 00:08:38.219 +It has a few operations out of the box, + +00:08:38.220 --> 00:08:46.479 +and you can extend it with any arbitrary operation you want. + +00:08:46.480 --> 00:08:53.819 +I work a lot on Guix codebase and other Scheme projects, + +00:08:53.820 --> 00:08:57.299 +so the experience I had previously with nREPL + +00:08:57.300 --> 00:08:59.399 +was not satisfying. I decided + +00:08:59.400 --> 00:09:01.739 +to just implement nREPL protocol. + +NOTE Arei, Ares, and how to try + +00:09:01.740 --> 00:09:05.719 +First of all, I implemented nREPL server in Guile. + +00:09:05.720 --> 00:09:11.339 +I called it `guile-ares-rs`, and used it + +00:09:11.340 --> 00:09:13.959 +with a generic nREPL client for Emacs. + +00:09:13.960 --> 00:09:14.719 +It worked. + +00:09:14.720 --> 00:09:18.639 +It had some rough edges, but overall it was okay. + +00:09:18.640 --> 00:09:21.639 +And after that, to add more features + +00:09:21.640 --> 00:09:25.079 +to make the implementation more complete, + +00:09:25.080 --> 00:09:33.219 +I wrote my own nREPL client for Emacs and called it `arei`. + +00:09:33.220 --> 00:09:40.179 +And I got almost complete Guile IDE in two months. + +00:09:40.180 --> 00:09:45.319 +So `ares-rs` is nREPL server implementation. + +00:09:45.320 --> 00:09:49.679 +`arei` is Emacs client, which uses the same nREPL protocol. + +00:09:49.680 --> 00:09:54.439 +It utilizes `sesman` package for managing sessions, + +00:09:54.440 --> 00:10:00.079 +the association of buffers with nREPL connection. + +00:10:00.080 --> 00:10:04.379 +It has some roots. + +00:10:04.380 --> 00:10:06.639 +The implementation has some roots + +00:10:06.640 --> 00:10:09.979 +in Geiser, CIDER, Monroe, and Rail. + +00:10:09.980 --> 00:10:15.279 +I took small snippets for some parts of functionality. + +00:10:15.280 --> 00:10:19.479 +I used the CAPF and xref infrastructure + +00:10:19.480 --> 00:10:23.079 +for completion at point and cross-reference capabilities. + +00:10:23.080 --> 00:10:27.679 +And by the time of conference, I hope + +00:10:27.680 --> 00:10:30.199 +that README will be complete enough + +00:10:30.200 --> 00:10:34.179 +so you will be able to try it yourself. + +NOTE Demo + +00:10:34.180 --> 00:10:42.679 +Let's see what is possible with it already. + +00:10:42.680 --> 00:10:46.719 +Let's connect to nREPL server. + +00:10:51.900 --> 00:10:56.280 +After that, you can evaluate the expression. + +00:10:56.281 --> 00:11:02.319 +And you see the stdout and the result. + +00:11:02.320 --> 00:11:04.719 +Very nice, very convenient. + +00:11:04.720 --> 00:11:08.659 +You have different expression, you evaluate it, + +00:11:08.660 --> 00:11:10.359 +you get the value of the evaluation. + +00:11:10.360 --> 00:11:12.279 +You can run an infinite loop + +00:11:12.280 --> 00:11:15.639 +which prints to stderr and stdout + +00:11:15.640 --> 00:11:18.599 +and you see all necessary stuff. + +00:11:18.600 --> 00:11:19.299 +Very cool. + +00:11:19.300 --> 00:11:21.959 +But also, you can interrupt the evaluation, + +00:11:21.960 --> 00:11:25.159 +which is very convenient if you accidentally + +00:11:25.160 --> 00:11:27.639 +run an infinite loop. + +NOTE Continuations + +00:11:27.640 --> 00:11:32.939 +Also, do you remember here we have a few more examples + +00:11:32.940 --> 00:11:34.079 +that we didn't try yet? + +00:11:34.080 --> 00:11:39.159 +For example, on usual REPL implementation, + +00:11:39.160 --> 00:11:47.599 +if I evaluate this expression, I get return value. + +00:11:47.600 --> 00:11:50.759 +I make a continuation and save it to this variable + +00:11:50.760 --> 00:11:52.859 +and I try to call this evaluation + +00:11:52.860 --> 00:11:55.339 +and I get an exception, + +00:11:55.340 --> 00:11:58.399 +because the environment in which this continuation + +00:11:58.400 --> 00:12:03.479 +was created was different and it has redefined + +00:12:03.480 --> 00:12:06.159 +stdout and stderr to capture it. + +00:12:06.160 --> 00:12:08.979 +But when I run it one more time, + +00:12:08.980 --> 00:12:12.199 +when I resume the continuation, + +00:12:12.200 --> 00:12:15.799 +the environment changed and it doesn't work. + +00:12:15.800 --> 00:12:17.419 +What happens in `arei`? + +00:12:17.420 --> 00:12:21.759 +I define continuation, I save the continuation + +00:12:21.760 --> 00:12:23.479 +for the simple expression + +00:12:23.480 --> 00:12:27.279 +and I resume the continuation with a new argument, + +00:12:27.280 --> 00:12:30.139 +and you can see at the top of the screen + +00:12:30.140 --> 00:12:32.459 +that it works perfectly fine. + +NOTE Reading from stdin + +00:12:32.460 --> 00:12:35.559 +Also, with a usual REPL implementation, + +00:12:35.560 --> 00:12:40.319 +let's see what happens when we have a process + +00:12:40.320 --> 00:12:41.919 +which reads from stdin. + +00:12:41.920 --> 00:12:48.099 +I evaluate the expression and nothing visible happens. + +00:12:48.100 --> 00:12:52.999 +I can try to type `C-g`, `C-c`, + +00:12:53.000 --> 00:12:56.559 +and after some time it will say user interrupt. + +00:12:56.560 --> 00:13:00.439 +What actually I expect in such a case + +00:13:00.440 --> 00:13:04.679 +to have a minibuffer which prompts me for the input. + +00:13:04.680 --> 00:13:10.019 +When I evaluate the same expression in the `arei`, + +00:13:10.020 --> 00:13:12.199 +you see the prompt at the minibuffer + +00:13:12.200 --> 00:13:21.899 +and here I can tell, "Hello I'm a message from minibuffer". + +00:13:21.900 --> 00:13:26.099 +Cool. You will see that this message is printed to stdout, + +00:13:26.100 --> 00:13:28.679 +and unspecified was returned + +00:13:28.680 --> 00:13:33.419 +as a result of this expression. + +NOTE Fancy example with continuations + +00:13:33.420 --> 00:13:37.319 +Let's make some fancy example with continuations. + +00:13:37.320 --> 00:13:45.079 +Continuations is a very cool mechanism + +00:13:45.080 --> 00:13:47.999 +which is not the topic of today's talk, + +00:13:48.000 --> 00:13:50.999 +but you can find a lot of interesting information + +00:13:51.000 --> 00:13:54.439 +in Scheme documentation or in related books, + +00:13:54.440 --> 00:13:58.339 +and I advise you to do it because it's really nice thing + +00:13:58.340 --> 00:14:00.119 +that is actually applicable + +00:14:00.120 --> 00:14:03.519 +in many different programming languages. + +00:14:03.520 --> 00:14:05.199 +Here you can see the infinite loop + +00:14:05.200 --> 00:14:09.159 +which just prints values increasing one by one. + +00:14:09.160 --> 00:14:13.299 +And here we save a continuation on each iteration. + +00:14:13.300 --> 00:14:18.059 +I can call the continuation + +00:14:18.060 --> 00:14:21.939 +and it will resume from the previous saved step. + +00:14:21.940 --> 00:14:27.679 +And you can see, it resumed from the same step + +00:14:27.680 --> 00:14:31.640 +we interrupted earlier, but we provided a new value for it. +another value for it. + +00:14:31.641 --> 00:14:33.920 +We can provide another value + +00:14:33.921 --> 00:14:39.199 +and it resumed from the same spot it was saved earlier. + +00:14:39.200 --> 00:14:42.579 +But I also can provide a `read-i` value + +00:14:42.580 --> 00:14:45.199 +and if I provide `read-i` value, + +00:14:45.200 --> 00:14:50.779 +the infinite loop will read the input from stdin + +00:14:50.780 --> 00:14:53.319 +and will continue the evaluation + +00:14:53.320 --> 00:14:56.679 +with a different `i` provided in this input. + +00:14:56.680 --> 00:15:03.039 +So let's try to type some arbitrary value + +00:15:03.040 --> 00:15:07.519 +and you see that the loop continued with this value. + +00:15:07.520 --> 00:15:08.039 +Very nice. + +00:15:08.040 --> 00:15:13.159 +And every time we could easily interrupt it. + +NOTE Guix API + +00:15:13.160 --> 00:15:17.319 +Okay, what most annoying thing that I had previously + +00:15:17.320 --> 00:15:19.339 +with the usual REPL implementation + +00:15:19.340 --> 00:15:22.759 +that I have a quite nice Guix API + +00:15:22.760 --> 00:15:27.579 +where I can build packages, systems and other stuff. + +00:15:27.580 --> 00:15:35.359 +But if I evaluate this expression, I will get an error. + +00:15:35.360 --> 00:15:38.039 +Okay. I will get an error + +00:15:38.040 --> 00:15:44.479 +because I don't have an appropriate environment. + +00:15:44.480 --> 00:15:51.579 +But what I can do, I can connect to the remote REPL + +00:15:51.580 --> 00:15:55.059 +by creating a server with `guix repl --listen` command + +00:15:55.060 --> 00:15:58.619 +and connecting to it with `geiser-connect` command. + +00:15:58.620 --> 00:16:01.819 +And now I can evaluate this expression. + +00:16:01.820 --> 00:16:03.359 +Right? + +00:16:03.360 --> 00:16:10.479 +Wow. + +00:16:10.480 --> 00:16:14.339 +Okay. + +00:16:14.340 --> 00:16:19.039 +It actually doesn't matter for my example. + +00:16:19.040 --> 00:16:22.879 +I will explain how it doesn't work easily. + +00:16:22.880 --> 00:16:26.519 +This is a long-running process which prints something + +00:16:26.520 --> 00:16:29.579 +and it can take up to a few minutes. + +00:16:29.580 --> 00:16:33.359 +And for the whole few minutes I don't see any results, + +00:16:33.360 --> 00:16:38.719 +the same as with this infinite loop which prints to stdout + +00:16:38.720 --> 00:16:42.199 +but I don't see anything interactively. + +00:16:42.200 --> 00:16:45.619 +With `arei`, I can run + +00:16:45.620 --> 00:16:47.920 +the evaluation of the same expression, + +00:16:51.440 --> 00:16:54.119 +and you will see instantly + +00:16:54.120 --> 00:17:00.200 +that stdout is presented here in slightly yellowish color. + +00:17:00.201 --> 00:17:02.920 +I can interrupt the evaluation + +00:17:02.921 --> 00:17:06.039 +if I don't want to wait until it's finished, + +00:17:06.040 --> 00:17:15.779 +and just after that, I can evaluate another value. + +00:17:15.780 --> 00:17:23.359 +So that's cool. + +00:17:23.360 --> 00:17:25.959 +And let's see one more thing. + +00:17:25.960 --> 00:17:30.339 +We have an infinite loop and we have some completion here. + +00:17:30.340 --> 00:17:32.579 +And completion still works, + +00:17:32.580 --> 00:17:33.659 +very nice, + +00:17:33.660 --> 00:17:40.259 +while the infinite loop is running. + +00:17:40.260 --> 00:17:42.059 +Okay. + +NOTE Support + +00:17:42.060 --> 00:17:44.919 +Actually it took me around two months + +00:17:44.920 --> 00:17:48.039 +of full-time work funded by my own savings, + +00:17:48.040 --> 00:17:51.599 +and you can support and help to the project + +00:17:51.600 --> 00:17:57.019 +using OpenCollective or by contributing on SourceHut. + +NOTE Future steps - Multiple simultaneous evaluations in different contexts + +00:17:57.020 --> 00:17:58.699 +The future steps for the project + +00:17:58.700 --> 00:18:03.674 +include an experimental workflow where you have + +00:18:03.675 --> 00:18:07.539 +multiple simultaneous evaluation in different contexts. + +00:18:07.540 --> 00:18:11.959 +For example, you have Fibers, you have Goblins, + +00:18:11.960 --> 00:18:16.919 +you have some HTTP server or some other thing, + +00:18:16.920 --> 00:18:22.119 +and you want to run all of them independently + +00:18:22.120 --> 00:18:25.319 +in slightly isolated sessions, + +00:18:25.320 --> 00:18:29.799 +and you want to have the ability + +00:18:29.800 --> 00:18:30.959 +to still interact with them. + +00:18:30.960 --> 00:18:33.979 +For example, if they require standard input + +00:18:33.980 --> 00:18:39.239 +or something else, you want to be able to provide it. + +00:18:39.240 --> 00:18:42.519 +You want to see the stderr and stdout + +00:18:42.520 --> 00:18:46.219 +of those long-running processes and so on. + +NOTE Tree-sitter integration + +00:18:46.220 --> 00:18:50.239 +The second thing is tree-sitter integration + +00:18:50.240 --> 00:18:53.399 +for better syntax highlighting, code navigation, + +00:18:53.400 --> 00:18:56.879 +and other features. + +NOTE Full-fledged debugger + +00:18:56.880 --> 00:19:01.399 +And after that, probably we will do a full-fledged debugger + +00:19:01.400 --> 00:19:06.239 +so you can jump expressions one by one + +00:19:06.240 --> 00:19:10.779 +and see the results and see some intermediate values + +00:19:10.780 --> 00:19:13.079 +during the evaluation. + +00:19:13.080 --> 00:19:14.479 +And it's very possible + +00:19:14.480 --> 00:19:17.079 +because nREPL is a very extensible protocol + +00:19:17.080 --> 00:19:18.199 +and you can implement + +00:19:18.200 --> 00:19:22.759 +whatever you want on top of it. + +NOTE FAQ - Does it support other Scheme implementations? + +00:19:22.760 --> 00:19:27.079 +I will answer two probably very frequent questions. + +00:19:27.080 --> 00:19:30.499 +Does it support other Scheme implementations? + +00:19:30.500 --> 00:19:32.279 +At the moment, it doesn't, + +00:19:32.280 --> 00:19:36.519 +but the Scheme implementation is not restricted. + +00:19:36.520 --> 00:19:40.639 +You have a server which is implemented in your language + +00:19:40.640 --> 00:19:43.974 +and you have a client--in our case, `arei`-- + +00:19:43.975 --> 00:19:48.319 +which communicates with this protocol. + +00:19:48.320 --> 00:19:52.359 +So if you implement nREPL server in a different language, + +00:19:52.360 --> 00:19:58.379 +it should work with already implemented `arei` client. + +NOTE Is it possible to use it with other text editors? + +00:19:58.380 --> 00:20:04.079 +And is it possible to use the same functionality + +00:20:04.080 --> 00:20:06.999 +in other text editors, for example in VS Code, + +00:20:07.000 --> 00:20:08.679 +Vim, whatever? + +00:20:08.680 --> 00:20:13.799 +Yes, it's possible and the case is similar here. + +00:20:13.800 --> 00:20:16.599 +You have already implemented nREPL server + +00:20:16.600 --> 00:20:19.359 +and you can write your own nREPL client + +00:20:19.360 --> 00:20:22.120 +in a different text editor and it will work. + +NOTE Conclusion + +00:20:22.121 --> 00:20:26.759 +I would like to thank the authors and maintainers + +00:20:26.760 --> 00:20:30.439 +and contributors of Guile, Geiser, CIDER, Clojure, + +00:20:30.440 --> 00:20:33.359 +and Emacs, and all other people + +00:20:33.360 --> 00:20:38.779 +who are somehow related to the work on those projects + +00:20:38.780 --> 00:20:42.079 +involved in this talk. + +00:20:42.080 --> 00:20:45.879 +And I hope the Scheme programming will be enjoyable. + +NOTE Contacts + +00:20:45.880 --> 00:20:47.239 +If you want to contact me, + +00:20:47.240 --> 00:20:49.799 +join #tropin IRC channel at libera.chat, + +00:20:49.800 --> 00:20:53.039 +or drop me a message via email or feediverse + +00:20:53.040 --> 00:20:55.879 +using `andrew@trop.in` handle. + +00:20:55.880 --> 00:21:00.680 +I will see you in a bit in Q&A session. diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt new file mode 100644 index 00000000..2c35ee7e --- /dev/null +++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt @@ -0,0 +1,1871 @@ +WEBVTT + + +00:00:05.940 --> 00:00:06.060 +[Speaker 1]: Yeah, we're live. So whoever's in the + +00:00:08.240 --> 00:00:08.380 +background might be able to see you live in + +00:00:09.900 --> 00:00:10.080 +about 10 seconds as soon as the stream + +00:00:11.380 --> 00:00:11.880 +catches up. Hi Jacob, how are you doing? + +00:00:12.360 --> 00:00:12.540 +[Speaker 0]: Got that? We're live. I'm doing well. + +00:00:13.080 --> 00:00:13.580 +How are you doing today? + +00:00:16.200 --> 00:00:16.400 +[Speaker 1]: I am doing well and this is the very last + +00:00:17.960 --> 00:00:18.160 +talk of the day so I'm very excited not + +00:00:20.020 --> 00:00:20.279 +because it finishes but because I am tired + +00:00:22.080 --> 00:00:22.580 +[Speaker 0]: Yeah very understandable. + +00:00:23.860 --> 00:00:24.320 +Well thanks for all of your hard work. + +00:00:26.180 --> 00:00:26.320 +We all really appreciate it and all the other + +00:00:26.320 --> 00:00:26.820 +organizers. + +00:00:28.980 --> 00:00:29.160 +[Speaker 1]: and need some sleep. Well on behalf of all + +00:00:30.980 --> 00:00:31.220 +the organizers thank you but you know it all + +00:00:33.840 --> 00:00:34.120 +it makes it all worthwhile when we see the + +00:00:36.280 --> 00:00:36.400 +valuable contribution that every single 1 of + +00:00:37.160 --> 00:00:37.660 +our speakers are making, + +00:00:39.559 --> 00:00:39.920 +not only for recording their talks, + +00:00:42.180 --> 00:00:42.380 +which is a tough demand on people to say, + +00:00:43.420 --> 00:00:43.920 +oh, if you want to go to EmacsConf, + +00:00:45.480 --> 00:00:45.980 +you might want to record your talk. + +00:00:48.960 --> 00:00:49.120 +But then almost all of you do it and you + +00:00:50.440 --> 00:00:50.640 +spend a lot of time with us answering + +00:00:51.580 --> 00:00:51.940 +questions. So we couldn't do it. + +00:00:53.680 --> 00:00:53.900 +You know, we wouldn't be spending as much + +00:00:54.960 --> 00:00:55.460 +energy, half as much energy, + +00:00:58.320 --> 00:00:58.660 +if we didn't believe that it was worth it. + +00:01:01.120 --> 00:01:01.320 +So now it's me thanking you on behalf of all + +00:01:01.480 --> 00:01:01.980 +the speakers. + +00:01:03.900 --> 00:01:04.200 +[Speaker 0]: Well thank you that's part of what I wanted + +00:01:06.040 --> 00:01:06.340 +to get across in my talk was that coming + +00:01:08.800 --> 00:01:09.000 +together and sharing ourselves and you know + +00:01:11.140 --> 00:01:11.320 +not just putting little little essays out + +00:01:13.020 --> 00:01:13.380 +there and single videos but coming together + +00:01:15.720 --> 00:01:15.940 +as a community you know sharing ourselves our + +00:01:18.640 --> 00:01:18.800 +faces our voices you know it really brings us + +00:01:19.840 --> 00:01:20.340 +together and makes everyone stronger. + +00:01:22.940 --> 00:01:23.400 +[Speaker 1]: Exactly, and I think it's been a recurring + +00:01:27.280 --> 00:01:27.440 +theme. Most of the talks we have at + +00:01:28.840 --> 00:01:29.200 +EmacsConf, they're usually about sharing, + +00:01:30.580 --> 00:01:30.800 +obviously, sharing the knowledge that they've + +00:01:32.960 --> 00:01:33.340 +acquired, either writing a package or + +00:01:35.860 --> 00:01:36.040 +learning how to use Emacs as a professor in + +00:01:37.200 --> 00:01:37.700 +academia or stuff like this. + +00:01:39.380 --> 00:01:39.600 +But what I particularly like this year about + +00:01:41.720 --> 00:01:41.960 +the different talks we've had is that they've + +00:01:44.479 --> 00:01:44.979 +really made the sharing even more obvious. + +00:01:46.720 --> 00:01:46.840 +We've had the mentoring this afternoon and we + +00:01:49.640 --> 00:01:49.740 +have your talk about using videos as a + +00:01:51.100 --> 00:01:51.600 +different medium to get into something. + +00:01:54.020 --> 00:01:54.520 +And I really think in terms of accessibility + +00:01:58.780 --> 00:01:58.940 +to Emacs, all of you who talked about this + +00:01:59.960 --> 00:02:00.180 +topic are doing a wonderful job. + +00:02:01.400 --> 00:02:01.900 +So, thank you again for all of this. + +00:02:04.080 --> 00:02:04.240 +[Speaker 0]: Thank you. Yeah, do we have any questions to + +00:02:04.360 --> 00:02:04.860 +be answering? + +00:02:08.199 --> 00:02:08.560 +[Speaker 1]: Yeah, so only 1 for now and I'll invite + +00:02:10.860 --> 00:02:11.200 +people as usual to please add their question + +00:02:12.720 --> 00:02:13.220 +to the pad or to join us on BBB. + +00:02:15.920 --> 00:02:16.080 +Now the chat is open if you want to join us + +00:02:17.480 --> 00:02:17.980 +on BBB and ask your questions directly. + +00:02:20.520 --> 00:02:20.740 +And in the meantime, I will read the first + +00:02:22.700 --> 00:02:23.200 +question. So, Kroting, + +00:02:25.040 --> 00:02:25.520 +are you using OxReveal to make your slides? + +00:02:26.520 --> 00:02:26.960 +If not, what are you using? + +00:02:27.740 --> 00:02:28.240 +They look very elegant, + +00:02:28.820 --> 00:02:29.320 +and I concur. + +00:02:32.920 --> 00:02:33.420 +[Speaker 0]: That's true. I am using OxReveal. + +00:02:35.320 --> 00:02:35.580 +I have a whole entire video on it. + +00:02:36.020 --> 00:02:36.520 +So if you're interested, + +00:02:37.840 --> 00:02:38.000 +feel free to take a look. + +00:02:39.960 --> 00:02:40.340 +It's very simple to get started with. + +00:02:42.560 --> 00:02:42.780 +There are a lot of different packages to use + +00:02:45.640 --> 00:02:46.140 +Reveal.js and Emacs. OxReveal or OrgReveal + +00:02:47.320 --> 00:02:47.820 +seems to be pretty easy to use. + +00:02:48.840 --> 00:02:49.020 +So try that 1 out. Yeah, + +00:02:49.440 --> 00:02:49.940 +it's really nice. + +00:02:54.020 --> 00:02:54.160 +[Speaker 1]: Awesome. I'm going to give a little bit of + +00:02:55.840 --> 00:02:56.200 +time for the other people to finish writing + +00:02:56.980 --> 00:02:57.260 +their answer. In the meantime, + +00:02:58.260 --> 00:02:58.660 +I'll ask you 1 of my own. + +00:02:59.620 --> 00:02:59.960 +So you said you were in college, + +00:03:01.500 --> 00:03:01.780 +right? In com sci. Sorry, + +00:03:02.980 --> 00:03:03.480 +[Speaker 0]: Yeah. + +00:03:07.240 --> 00:03:07.460 +[Speaker 1]: computer science. I think it's great to find + +00:03:08.860 --> 00:03:09.360 +people in computer science who have, + +00:03:11.780 --> 00:03:12.280 +from the get-go, as soon as their bachelor, + +00:03:16.220 --> 00:03:16.360 +an appetite for sharing and vulgarizing a lot + +00:03:17.780 --> 00:03:17.900 +of knowledge. Because it feels like if you + +00:03:18.540 --> 00:03:18.760 +get started like this, + +00:03:20.580 --> 00:03:20.740 +you're gonna have a well over time as you + +00:03:21.500 --> 00:03:21.820 +progress with the learning. + +00:03:23.720 --> 00:03:23.860 +So I'm very excited to see what you do in the + +00:03:24.720 --> 00:03:25.220 +coming years because of this. + +00:03:26.420 --> 00:03:26.920 +[Speaker 0]: Thank you, thank you, yeah. + +00:03:29.700 --> 00:03:29.860 +And Emacs has been like very central to my + +00:03:32.100 --> 00:03:32.300 +education as well. It's a great way to sort + +00:03:34.460 --> 00:03:34.640 +of organize myself and also it's a good way + +00:03:36.040 --> 00:03:36.220 +to share with other people with Org Mode. + +00:03:38.000 --> 00:03:38.500 +I can export my code, I can export notes. + +00:03:39.340 --> 00:03:39.840 +It makes it so simple. + +00:03:42.240 --> 00:03:42.720 +My peers are also impressed by my PDF + +00:03:44.260 --> 00:03:44.440 +documents and whatever I can produce with + +00:03:48.040 --> 00:03:48.160 +[Speaker 1]: Oh yeah. If only they knew how much time it + +00:03:49.840 --> 00:03:50.340 +takes us to get LaTeX to behave properly. + +00:03:52.680 --> 00:03:52.860 +[Speaker 0]: Emacs. Right, right. I see some more + +00:03:53.980 --> 00:03:54.480 +questions coming in I can answer. + +00:03:56.940 --> 00:03:57.100 +[Speaker 1]: Sure, I'll read it for you so that it's a + +00:03:57.440 --> 00:03:57.940 +little more interactive. + +00:03:59.920 --> 00:04:00.160 +So, second question. Videos can be very + +00:04:01.820 --> 00:04:02.320 +inspirational to learn about something by + +00:04:04.860 --> 00:04:05.360 +watching it used. I often find it, + +00:04:07.080 --> 00:04:07.440 +I often find that I need to do some research + +00:04:09.120 --> 00:04:09.440 +after watching a video to learn more. + +00:04:10.640 --> 00:04:11.040 +Do you give people links to relevant + +00:04:11.820 --> 00:04:12.320 +resources or etc? + +00:04:15.060 --> 00:04:15.300 +[Speaker 0]: Yeah, that's something I could definitely do + +00:04:17.800 --> 00:04:18.300 +more of. When I make a video I try to combine + +00:04:20.459 --> 00:04:20.600 +all the relevant resources and make 1 sort of + +00:04:23.600 --> 00:04:24.100 +cohesive video. I like to think of my video + +00:04:26.580 --> 00:04:26.980 +as a jumping off point to the Emacs manuals + +00:04:30.040 --> 00:04:30.160 +because the manuals are so so full but you + +00:04:31.360 --> 00:04:31.800 +need to have a sort of a cursory + +00:04:33.800 --> 00:04:34.120 +understanding to get started with them. + +00:04:35.440 --> 00:04:35.600 +And then yeah, if there are other sort of + +00:04:36.880 --> 00:04:37.000 +GitHub links or something like that, + +00:04:38.220 --> 00:04:38.720 +I like to put those in the description. + +00:04:42.720 --> 00:04:42.980 +[Speaker 1]: Good question. Right. And I think it's arcing + +00:04:44.820 --> 00:04:45.320 +back also. I keep using the word arcing back. + +00:04:47.420 --> 00:04:47.580 +I'm sorry. It's my... Every EmacsConf I have + +00:04:49.440 --> 00:04:49.640 +1 word or 1 phrase that I keep saying over + +00:04:51.220 --> 00:04:51.360 +and over again and this 1 is not leaving but + +00:04:53.000 --> 00:04:53.240 +don't worry we only have about 1 more hour + +00:04:54.640 --> 00:04:55.140 +and then you're done with me arcing out, + +00:04:59.060 --> 00:04:59.540 +arcing back to stuff. I think this is + +00:05:03.740 --> 00:05:03.960 +reminding me of both the mentoring talk we've + +00:05:06.760 --> 00:05:07.120 +had today about onboarding people basically + +00:05:08.480 --> 00:05:08.600 +so that they can have a well of a time on + +00:05:11.040 --> 00:05:11.240 +their own on Emacs and I'd agree with you, + +00:05:13.180 --> 00:05:13.460 +you know, as much as we like to rave about + +00:05:15.140 --> 00:05:15.640 +Emacs as a self-documenting editor, + +00:05:17.700 --> 00:05:17.860 +about how complete the documentation is, + +00:05:18.940 --> 00:05:19.240 +As you've mentioned in your talk, + +00:05:21.220 --> 00:05:21.720 +it's not accessible directly to the people. + +00:05:23.620 --> 00:05:23.800 +We can yell as much as we want to people on + +00:05:26.600 --> 00:05:26.880 +IRC, you just need to RTFM or you just need + +00:05:29.280 --> 00:05:29.780 +to do Ctrl-H-V for the variable or Ctrl-H-F. + +00:05:32.040 --> 00:05:32.420 +What is a variable? I am not for computer + +00:05:33.240 --> 00:05:33.540 +science. What does it mean? + +00:05:36.580 --> 00:05:36.780 +It is really blocking a lot of people right + +00:05:40.800 --> 00:05:40.960 +from the get-go. And I think the element of + +00:05:42.340 --> 00:05:42.520 +interactivity, as you've mentioned in your + +00:05:45.360 --> 00:05:45.800 +talk, that is introduced by video just makes + +00:05:47.520 --> 00:05:48.020 +the hand-holding that much easier. + +00:05:50.940 --> 00:05:51.440 +And it's great to do it like this. + +00:05:53.400 --> 00:05:53.680 +All right, I think we've got another + +00:05:56.120 --> 00:05:56.320 +questions. What are your fellow codes of + +00:05:57.500 --> 00:05:58.000 +students using for their editors? + +00:06:00.200 --> 00:06:00.540 +What kinds of feedback do you get from them + +00:06:01.960 --> 00:06:02.460 +when they learn about you using Emacs? + +00:06:05.080 --> 00:06:05.580 +[Speaker 0]: That's a great question. + +00:06:10.360 --> 00:06:10.760 +I think professors want to make things, + +00:06:12.240 --> 00:06:12.740 +the entry as simple as possible. + +00:06:15.540 --> 00:06:15.700 +So for the first computer science course and + +00:06:16.640 --> 00:06:17.140 +the second, at least at Columbia, + +00:06:20.380 --> 00:06:20.880 +They use Codeo, which is 1 of those online + +00:06:25.740 --> 00:06:26.040 +whole IDEs. Now in the third course, + +00:06:27.520 --> 00:06:27.680 +which is sort of more the weed out as they + +00:06:29.820 --> 00:06:30.040 +call it, the professor gives you a choice and + +00:06:33.320 --> 00:06:33.820 +he says you can use Emacs or you can use Vim. + +00:06:36.340 --> 00:06:36.680 +And everyone uses Vim. + +00:06:38.720 --> 00:06:39.220 +Not a single person I know is using Emacs, + +00:06:43.380 --> 00:06:43.520 +simply because the professor's using Vim and + +00:06:45.080 --> 00:06:45.320 +that's what he shows on screen and that's + +00:06:46.640 --> 00:06:47.140 +just what everyone else falls into. + +00:06:50.220 --> 00:06:50.320 +And it's also, like, they're totally in the + +00:06:52.120 --> 00:06:52.320 +terminal, and that can be a big barrier of + +00:06:54.640 --> 00:06:55.140 +entry. So I think they see Emacs as like + +00:06:59.760 --> 00:07:00.060 +something like Vim, but it's not sort of the + +00:07:01.560 --> 00:07:01.960 +same idea. It's not what everyone uses + +00:07:03.840 --> 00:07:03.960 +because it's not what's being shown up on + +00:07:05.220 --> 00:07:05.660 +screen. So if you're not following, + +00:07:06.460 --> 00:07:06.880 +like if you're a new learner, + +00:07:08.300 --> 00:07:08.680 +if you're not following with Vim, + +00:07:10.320 --> 00:07:10.600 +you might have a little bit of a harder time + +00:07:12.740 --> 00:07:12.940 +in these classes because everyone else is + +00:07:14.060 --> 00:07:14.560 +also using Vim. + +00:07:19.640 --> 00:07:19.920 +[Speaker 1]: Right. And I'm kind of reminded again, + +00:07:21.260 --> 00:07:21.640 +it feels like this is the last talk, + +00:07:24.020 --> 00:07:24.280 +so I'm reminiscing of all the different talks + +00:07:25.680 --> 00:07:26.000 +we've had on the general chat, + +00:07:28.340 --> 00:07:28.580 +at least. And you know, + +00:07:30.800 --> 00:07:31.020 +it feels like we had, you know, + +00:07:34.160 --> 00:07:34.660 +this 1 talk, I can't remember the first name + +00:07:36.340 --> 00:07:36.680 +at the presentation, but it was about forcing + +00:07:38.760 --> 00:07:38.940 +people to use Emacs and not giving them the + +00:07:41.860 --> 00:07:42.040 +choice to do this. And I found it to be such + +00:07:45.060 --> 00:07:45.420 +a powerful move to do because usually people, + +00:07:47.440 --> 00:07:47.720 +maybe some classes are actually forcing Vim + +00:07:49.540 --> 00:07:49.920 +because it's a little more palatable I guess. + +00:07:51.020 --> 00:07:51.520 +Do you have something to say on this? + +00:07:53.760 --> 00:07:53.940 +[Speaker 0]: Yeah let me actually, I've remembered 1 + +00:07:55.380 --> 00:07:55.720 +thing, I know there's another course, + +00:07:58.880 --> 00:07:59.060 +a fourth course you'd say in assembly and the + +00:08:00.960 --> 00:08:01.460 +professor suggests Emacs. + +00:08:04.240 --> 00:08:04.340 +However I know that's just 1 professor so I + +00:08:06.740 --> 00:08:06.980 +think broadly Vim is more of the standard and + +00:08:08.360 --> 00:08:08.480 +yeah what were you, can you repeat what you + +00:08:09.880 --> 00:08:10.380 +said about Vim being more sort of friendly? + +00:08:12.880 --> 00:08:13.260 +[Speaker 1]: Yeah, because it's not, + +00:08:14.960 --> 00:08:15.200 +okay, I'm quoting the opinions of other, + +00:08:17.040 --> 00:08:17.540 +you know, I would hate to insult Emacs and + +00:08:19.400 --> 00:08:19.840 +give myself a bad rep at Emacs comfortable + +00:08:23.200 --> 00:08:23.660 +things. But it feels like because modal + +00:08:26.280 --> 00:08:26.520 +editing is usually something that people hear + +00:08:28.260 --> 00:08:28.420 +from when it starts looking into how to be + +00:08:30.460 --> 00:08:30.920 +more efficient when they read text. + +00:08:32.220 --> 00:08:32.720 +It feels like the first door, + +00:08:35.140 --> 00:08:35.640 +the closest door to this is Vim. + +00:08:36.380 --> 00:08:36.880 +And so a lot of professors, + +00:08:39.720 --> 00:08:40.220 +because there's very little on-boarding, + +00:08:41.600 --> 00:08:41.980 +I mean, I'm going to say the word on-boarding + +00:08:42.720 --> 00:08:43.140 +and then I'm going to modulate, + +00:08:44.600 --> 00:08:44.760 +but there's very little on-boarding to get + +00:08:47.040 --> 00:08:47.480 +into modal editing. You just have your H's + +00:08:50.080 --> 00:08:50.380 +and your J's and your K's and your L's and + +00:08:51.020 --> 00:08:51.180 +everything works. You know, + +00:08:52.360 --> 00:08:52.680 +it does something, yes, + +00:08:53.640 --> 00:08:53.960 +the arrows are in weird places, + +00:08:55.080 --> 00:08:55.580 +but it does something that is vaguely + +00:08:58.260 --> 00:08:58.760 +logical. Whereas with Ctrl-Meta, + +00:09:03.380 --> 00:09:03.560 +Hyper, Super, J and then Ctrl-C and Meta 4 + +00:09:04.560 --> 00:09:05.060 +for good measure, you know, + +00:09:08.000 --> 00:09:08.140 +It already feels a little more opaque in + +00:09:09.960 --> 00:09:10.460 +terms of how people are going to use this. + +00:09:13.780 --> 00:09:13.940 +So, I think it's also 1 good thing about the + +00:09:15.860 --> 00:09:16.020 +videos is that people can see you're not + +00:09:17.900 --> 00:09:18.400 +contorting your hands in very difficult + +00:09:20.920 --> 00:09:21.420 +shapes to use Emacs as the bad rep usually + +00:09:24.440 --> 00:09:24.620 +is. But yeah, to come back to what I was + +00:09:26.600 --> 00:09:27.040 +saying about Vim, I just feel like they've + +00:09:30.460 --> 00:09:30.760 +won the battle in terms of looking very + +00:09:33.840 --> 00:09:34.340 +accessible. And for us with Emacs, + +00:09:37.080 --> 00:09:37.580 +from the top of our ivory tower, + +00:09:39.940 --> 00:09:40.440 +we see the ease of getting into Vim, + +00:09:43.320 --> 00:09:43.660 +but we always think, but Vim script is shit, + +00:09:44.700 --> 00:09:45.040 +we've got Elisp for us, + +00:09:46.320 --> 00:09:46.820 +We can do so many things on our end. + +00:09:51.180 --> 00:09:51.340 +So yeah, does that evoke anything to you with + +00:09:52.960 --> 00:09:53.160 +regards to Vim versus Emacs in terms of + +00:09:53.160 --> 00:09:53.660 +apprehension? + +00:09:56.820 --> 00:09:57.040 +[Speaker 0]: Yeah, I think that Emacs might be more + +00:09:59.320 --> 00:09:59.540 +straightforward if you just plop someone down + +00:10:01.360 --> 00:10:01.780 +in front of their computer because you press + +00:10:03.800 --> 00:10:04.300 +H, you're going to see an H on the screen, + +00:10:06.780 --> 00:10:07.280 +right? And Vim is a whole new modal mindset. + +00:10:09.960 --> 00:10:10.380 +So for a student who wants to like gain + +00:10:13.540 --> 00:10:13.740 +efficiency, then yes, I think that Vim is + +00:10:15.160 --> 00:10:15.360 +definitely like, it feels like a more + +00:10:16.280 --> 00:10:16.760 +friendly introduction. + +00:10:18.340 --> 00:10:18.600 +But I think that Emacs doesn't get enough + +00:10:20.580 --> 00:10:20.680 +credit around here. And I'd like to see it + +00:10:23.000 --> 00:10:23.460 +more often, because a lot of students, + +00:10:25.640 --> 00:10:26.140 +they're not looking to fix the efficiencies + +00:10:28.080 --> 00:10:28.580 +in their text editing. + +00:10:31.620 --> 00:10:31.780 +They're looking to fix the efficiencies in + +00:10:33.620 --> 00:10:34.120 +how they do homework or how they do their + +00:10:34.640 --> 00:10:35.140 +programming assignments, + +00:10:37.280 --> 00:10:37.540 +and they would save time if they, + +00:10:39.320 --> 00:10:39.820 +or at least the mentality for a student, + +00:10:42.500 --> 00:10:42.720 +is that if you can just get it done more + +00:10:43.980 --> 00:10:44.160 +quickly, like it's more, + +00:10:45.540 --> 00:10:45.720 +you know, you do what you're used to, + +00:10:49.120 --> 00:10:49.300 +and Vim is just a barrier towards you know + +00:10:51.040 --> 00:10:51.180 +getting your work done like how do I copy and + +00:10:52.800 --> 00:10:52.960 +paste something it's a whole new set of + +00:10:55.080 --> 00:10:55.280 +challenges to learn so I think both have + +00:10:56.920 --> 00:10:57.420 +their deficiencies and abilities. + +00:11:00.760 --> 00:11:00.920 +[Speaker 1]: Yeah it's funny because I'm just 1 last thing + +00:11:03.440 --> 00:11:03.680 +on this it feels like modal editing because + +00:11:05.360 --> 00:11:05.860 +it is already weird from the get-go, + +00:11:08.260 --> 00:11:08.640 +perhaps it might do a better job of making + +00:11:10.640 --> 00:11:10.760 +people uneasy. You know how we say that + +00:11:11.600 --> 00:11:12.100 +constraints breeds creativity. + +00:11:14.820 --> 00:11:15.180 +Well, Vim constrains you from the get-go. + +00:11:16.160 --> 00:11:16.620 +If you do not press I, + +00:11:18.120 --> 00:11:18.420 +nothing is going to show up in the buffer + +00:11:19.040 --> 00:11:19.540 +that you're currently editing. + +00:11:21.840 --> 00:11:22.000 +Whereas Emacs give you this full sense of + +00:11:24.000 --> 00:11:24.500 +security by when you press J, + +00:11:27.860 --> 00:11:28.360 +[Speaker 0]: Yeah, true. + +00:11:29.480 --> 00:11:29.760 +[Speaker 1]: it actually inputs J. All right, + +00:11:30.540 --> 00:11:30.840 +moving on to another question. + +00:11:32.040 --> 00:11:32.540 +And by the way, we've got some time. + +00:11:34.740 --> 00:11:35.240 +We have technically about 6 more minutes, + +00:11:38.640 --> 00:11:38.940 +but I see Sasha on the other track is already + +00:11:40.400 --> 00:11:40.640 +answering questions that I'm in about + +00:11:42.840 --> 00:11:43.320 +EmacsConf. So we can go a little longer, + +00:11:44.760 --> 00:11:45.040 +as long as I let the organizers know. + +00:11:46.000 --> 00:11:46.200 +So we've got about, let's say, + +00:11:48.120 --> 00:11:48.320 +6 minutes for now. And we'll see if more + +00:11:50.020 --> 00:11:50.220 +questions crop up. All right, + +00:11:51.040 --> 00:11:51.540 +moving on to the next question. + +00:11:53.400 --> 00:11:53.760 +Did you start those university classes using + +00:11:55.180 --> 00:11:55.680 +Emacs, I suppose, in your first year? + +00:12:01.640 --> 00:12:01.780 +[Speaker 0]: Yes, yeah, I did. I started with Emacs 2 + +00:12:02.780 --> 00:12:03.120 +years before entering college, + +00:12:04.280 --> 00:12:04.780 +so my junior year of high school. + +00:12:09.220 --> 00:12:09.480 +And I've basically over time built up a + +00:12:11.180 --> 00:12:11.680 +workflow of how I will take my notes, + +00:12:12.900 --> 00:12:13.400 +how I will organize my classes. + +00:12:16.280 --> 00:12:16.780 +And now that I'm taking programming classes + +00:12:18.280 --> 00:12:18.780 +where Emacs might be more acceptable. + +00:12:21.500 --> 00:12:22.000 +It's even enhanced my workflow. + +00:12:24.760 --> 00:12:25.260 +Taking notes in Ouro for program assists, + +00:12:27.540 --> 00:12:27.720 +everyone talks about it, + +00:12:30.640 --> 00:12:30.880 +but from the source, It doesn't get better + +00:12:32.860 --> 00:12:33.080 +than that, being able to write with + +00:12:34.280 --> 00:12:34.780 +highlighting, with syntax highlighting, + +00:12:38.360 --> 00:12:38.720 +with easy exports, running inline code + +00:12:40.960 --> 00:12:41.380 +blocks. And a lot of these programming + +00:12:42.960 --> 00:12:43.460 +classes, they make you code on a server. + +00:12:45.080 --> 00:12:45.320 +And they just say, oh, + +00:12:46.500 --> 00:12:46.980 +SSH, and you can use Vim. + +00:12:48.560 --> 00:12:49.040 +I can use Tramp, and I can use Emacs, + +00:12:50.440 --> 00:12:50.940 +and I'm perfectly at home. + +00:12:52.760 --> 00:12:53.260 +It's just such a seamless transition. + +00:12:55.380 --> 00:12:55.760 +It's a really amazing way to do school. + +00:12:58.260 --> 00:12:58.580 +Professors, you know, all they want is a PDF + +00:12:59.220 --> 00:12:59.340 +at the end of the day. + +00:13:00.520 --> 00:13:01.020 +They just want the paper on their desk. + +00:13:03.420 --> 00:13:03.560 +They're not so picky about how you get it + +00:13:04.840 --> 00:13:05.340 +there. They just want it in their hands. + +00:13:07.120 --> 00:13:07.540 +So, so Emacs is, it's very usable. + +00:13:08.040 --> 00:13:08.540 +It's very doable. + +00:13:11.280 --> 00:13:11.580 +[Speaker 1]: Right. I've got a little anecdote on this + +00:13:13.740 --> 00:13:13.860 +because you're speaking about the topic of + +00:13:16.120 --> 00:13:16.280 +Emacs at university from the perspective of + +00:13:17.600 --> 00:13:18.100 +someone who is in computer science. + +00:13:19.840 --> 00:13:20.340 +But for me, in the humanities, + +00:13:22.900 --> 00:13:23.080 +I just remember those professors who just + +00:13:24.940 --> 00:13:25.440 +required you not to use your laptop. + +00:13:28.580 --> 00:13:28.780 +And I started with Emacs roughly at the same + +00:13:32.460 --> 00:13:32.700 +age as you did. And I was just using it for + +00:13:33.160 --> 00:13:33.580 +absolutely everything, + +00:13:35.240 --> 00:13:35.740 +for my organization, for producing papers. + +00:13:37.860 --> 00:13:38.000 +And to be told that I could not use Emacs for + +00:13:38.680 --> 00:13:39.180 +a class for my note-taking, + +00:13:43.660 --> 00:13:43.860 +I felt utterly naked in the face of what I + +00:13:46.500 --> 00:13:46.720 +needed to do. And yeah, + +00:13:47.800 --> 00:13:48.120 +it's great to see those different + +00:13:49.120 --> 00:13:49.540 +experiences. And it just, + +00:13:50.440 --> 00:13:50.800 +you're always going to be weird. + +00:13:53.000 --> 00:13:53.120 +Like I was the weird guy using Emacs in the + +00:13:54.720 --> 00:13:55.080 +humanities, but I would have been weird using + +00:13:58.440 --> 00:13:58.940 +Vim or any kind of computers with fancy + +00:13:59.060 --> 00:13:59.560 +editing. + +00:14:02.200 --> 00:14:02.580 +[Speaker 0]: Oh yeah, yeah. And I'm in humanities classes + +00:14:03.840 --> 00:14:04.340 +as well, I'm not in a strictly engineering, + +00:14:06.720 --> 00:14:06.880 +so people will see me writing an essay about, + +00:14:07.780 --> 00:14:08.080 +you know, a philosophy essay, + +00:14:09.820 --> 00:14:09.960 +I was working on an essay about Plato and + +00:14:11.180 --> 00:14:11.680 +Aristotle, and they say, + +00:14:13.840 --> 00:14:14.040 +what are you coding, why are you coding your + +00:14:16.620 --> 00:14:16.880 +essay? And I say, well it's just the font + +00:14:17.560 --> 00:14:18.060 +looks a little bit different. + +00:14:19.300 --> 00:14:19.640 +Everything else is the same words, + +00:14:20.800 --> 00:14:21.100 +just the font looks a little different. + +00:14:22.160 --> 00:14:22.660 +This is how I like to do it. + +00:14:25.600 --> 00:14:25.760 +[Speaker 1]: Oh, those pesky monospace fonts are making us + +00:14:27.880 --> 00:14:28.020 +pass as hackers. But for everyone who is + +00:14:29.060 --> 00:14:29.560 +behind us, looking at our monitors. + +00:14:30.040 --> 00:14:30.540 +[Speaker 0]: Exactly. + +00:14:33.900 --> 00:14:34.280 +[Speaker 1]: All right. A little bit of a remark, + +00:14:35.760 --> 00:14:36.020 +I guess, towards me and what I said about + +00:14:37.480 --> 00:14:37.860 +Vim. So, quoting, before NeoVim, + +00:14:39.140 --> 00:14:39.640 +you had to do as much or more configuration + +00:14:41.280 --> 00:14:41.760 +to get basic editing done than in Emacs. + +00:14:43.520 --> 00:14:43.780 +It's also slower with modal editing compared + +00:14:45.440 --> 00:14:45.520 +to Emacs key bindings because you have to + +00:14:47.360 --> 00:14:47.640 +press escape and 2 keys to get things done. + +00:14:49.120 --> 00:14:49.540 +While in Emacs, you only have to press Ctrl + +00:14:52.120 --> 00:14:52.360 +or Meta something to move or search or + +00:14:53.400 --> 00:14:53.900 +whatever, and then write. + +00:14:55.960 --> 00:14:56.460 +And I tend to agree, I'm not familiar with + +00:14:59.260 --> 00:14:59.760 +the ages before NeoVim, + +00:15:03.120 --> 00:15:03.620 +But I think we are mostly talking in terms of + +00:15:04.900 --> 00:15:05.400 +reputation and communication, + +00:15:08.360 --> 00:15:08.480 +like how is Vim considered nowadays or for + +00:15:10.760 --> 00:15:11.260 +the last 10 years in the mindset of people + +00:15:13.740 --> 00:15:14.240 +choosing or about to choose an editor. + +00:15:17.620 --> 00:15:17.860 +And, You know, I keep spitting the fact about + +00:15:19.340 --> 00:15:19.480 +VimScript being bad, but I'm going to be + +00:15:20.800 --> 00:15:20.980 +honest, I've never actually written any + +00:15:24.180 --> 00:15:24.400 +VimScript. I'm just parroting whatever the + +00:15:26.760 --> 00:15:26.960 +giants with shoulders I'm standing have been + +00:15:28.260 --> 00:15:28.740 +saying to me. And it's not very intelligent, + +00:15:31.080 --> 00:15:31.280 +I know, but We also have a very limited pool + +00:15:34.340 --> 00:15:34.540 +of time, and I also think that this is a + +00:15:36.460 --> 00:15:36.960 +point that your talk addresses in a way. + +00:15:40.240 --> 00:15:40.740 +Yes, we could be starting the massive quest + +00:15:42.740 --> 00:15:43.180 +of reading the Emacs manual or the ELISP + +00:15:45.100 --> 00:15:45.480 +introductory guide or the ELISP complete + +00:15:47.620 --> 00:15:48.120 +guide. A lot of people are trying, + +00:15:48.940 --> 00:15:49.440 +very highly motivated, + +00:15:51.140 --> 00:15:51.220 +I'm going to get started on Emacs and I'm + +00:15:51.940 --> 00:15:52.440 +going to do things right. + +00:15:53.760 --> 00:15:54.260 +But the fact of the matter is, + +00:15:56.580 --> 00:15:56.820 +it's not necessarily a good use of your time + +00:15:57.740 --> 00:15:58.240 +to get started like this, + +00:16:00.680 --> 00:16:00.840 +because there are so many things you're not + +00:16:03.320 --> 00:16:03.660 +going to understand, it kind of goes back, + +00:16:04.640 --> 00:16:04.920 +didn't say iBug this time, + +00:16:07.700 --> 00:16:08.200 +I stopped myself, it kind of goes back to + +00:16:11.040 --> 00:16:11.240 +this I plus 1 Vigoski proximals on + +00:16:12.740 --> 00:16:12.940 +development stuff that I was talking about + +00:16:16.020 --> 00:16:16.520 +before. The manual is I plus 999. + +00:16:20.940 --> 00:16:21.140 +Your video might be I plus 3 or I plus 2 and + +00:16:23.240 --> 00:16:23.480 +the hand-holding really does wonders for + +00:16:26.120 --> 00:16:26.400 +people to eventually get closer to reading + +00:16:27.540 --> 00:16:28.040 +the manuals and stuff like this. + +00:16:31.000 --> 00:16:31.500 +[Speaker 0]: Yeah it's a great way just something about + +00:16:33.160 --> 00:16:33.660 +giving someone those practical + +00:16:35.000 --> 00:16:35.240 +demonstrations, that's something I really + +00:16:36.860 --> 00:16:37.080 +appreciate. A lot of these really nice + +00:16:38.520 --> 00:16:39.020 +presentations we've had today and yesterday + +00:16:41.920 --> 00:16:42.100 +show real life use cases and we get to see + +00:16:44.240 --> 00:16:44.480 +people typing and they're working how they + +00:16:46.680 --> 00:16:46.920 +would normally work. And that's a great way + +00:16:49.040 --> 00:16:49.200 +to begin to understand how you can apply a + +00:16:50.680 --> 00:16:50.800 +tool to yourself because at the end of the + +00:16:52.040 --> 00:16:52.360 +day Emacs is a tool for us. + +00:16:53.760 --> 00:16:54.060 +You know we might take joy in it, + +00:16:54.960 --> 00:16:55.440 +it helps us be more productive, + +00:16:58.040 --> 00:16:58.540 +it's fun but we're using it for a certain end + +00:17:00.880 --> 00:17:01.080 +and you know if we how we can understand to + +00:17:03.080 --> 00:17:03.280 +get to those ends and what those ends might + +00:17:05.740 --> 00:17:06.240 +even be. It's just great to see other people + +00:17:07.440 --> 00:17:07.940 +bring that forth for you. + +00:17:12.380 --> 00:17:12.619 +[Speaker 1]: Okay, great. Well, I don't see any more + +00:17:13.980 --> 00:17:14.480 +questions in the chat currently, + +00:17:17.020 --> 00:17:17.160 +and I don't see anyone who's joined us on the + +00:17:19.599 --> 00:17:19.760 +blue button. We are near the time that I said + +00:17:22.420 --> 00:17:22.920 +we've got about 40 seconds to go until we + +00:17:24.060 --> 00:17:24.400 +were due to end. Jacob, + +00:17:26.099 --> 00:17:26.240 +I kind of want to give you the microphone for + +00:17:27.339 --> 00:17:27.500 +the end. Do you have anything to say? + +00:17:28.359 --> 00:17:28.680 +Like you've talked about your YouTube + +00:17:30.480 --> 00:17:30.720 +channel, we've already ensured that the links + +00:17:31.960 --> 00:17:32.360 +will be everywhere on the talk page, + +00:17:34.280 --> 00:17:34.640 +in the pad, on IRC. But is there anything + +00:17:35.540 --> 00:17:35.740 +else you'd like to add? + +00:17:37.120 --> 00:17:37.620 +Because you're the last speaker of EmacsCon, + +00:17:39.640 --> 00:17:40.140 +and you've got the tough responsibility of + +00:17:42.040 --> 00:17:42.540 +finishing it. + +00:17:45.440 --> 00:17:45.920 +[Speaker 0]: Oh, well, that's not tough at all when we've + +00:17:47.640 --> 00:17:47.960 +had 2 days. I mean, so many people, + +00:17:51.300 --> 00:17:51.440 +so many presenters coming together and like I + +00:17:52.640 --> 00:17:53.140 +said right at the beginning to Leo, + +00:17:54.920 --> 00:17:55.200 +putting your face out there, + +00:17:56.180 --> 00:17:56.680 +putting your voice out there, + +00:17:57.620 --> 00:17:58.120 +putting yourself out there, + +00:18:00.060 --> 00:18:00.380 +it's such a great way to come together + +00:18:02.080 --> 00:18:02.580 +because Emacs is not the standard. + +00:18:04.540 --> 00:18:04.820 +You know, I've tried to teach my friends + +00:18:06.040 --> 00:18:06.540 +Emacs, I've tried to show it to them. + +00:18:08.360 --> 00:18:08.480 +You know, some people you get it or you + +00:18:10.320 --> 00:18:10.600 +don't. And the people who get it, + +00:18:11.740 --> 00:18:12.240 +we're not all in the same place. + +00:18:13.440 --> 00:18:13.940 +And it's great. + +00:18:15.720 --> 00:18:15.860 +[Speaker 1]: I'm interrupting you for a second because I + +00:18:17.960 --> 00:18:18.460 +think we were supposed to kill the the cron + +00:18:20.220 --> 00:18:20.720 +which starts the next meeting and it hasn't. + +00:18:22.640 --> 00:18:22.940 +Let me try to fix it. I'll talk to production + +00:18:25.360 --> 00:18:25.860 +[Speaker 0]: Do I wait or keep going? + +00:18:27.360 --> 00:18:27.560 +[Speaker 1]: in a second. Just wait a bit. + +00:18:29.260 --> 00:18:29.440 +I'm very sorry. I've given you the mic and + +00:18:35.280 --> 00:18:35.440 +then it just... Okay let me just check your + +00:18:35.440 --> 00:18:35.940 +production. + +00:18:59.660 --> 00:18:59.720 +What? All right, Jason. + +00:19:00.880 --> 00:19:01.120 +All right, Jacob, I'm going to put us + +00:19:02.080 --> 00:19:02.320 +manually back on track. + +00:19:03.080 --> 00:19:03.580 +So give me just a second. + +00:19:04.220 --> 00:19:04.720 +[Speaker 0]: Right. + +00:19:09.240 --> 00:19:09.740 +[Speaker 1]: I'm going to manually type the URL, + +00:19:12.440 --> 00:19:12.720 +because it's a janky setup that we've got + +00:19:13.980 --> 00:19:14.440 +right now, when whenever it's not working. + +00:19:20.400 --> 00:19:20.900 +All right. So tps slash slash bbb emacs first + +00:19:23.000 --> 00:19:23.500 +dot org html. No, that's not the 1. + +00:19:27.180 --> 00:19:27.440 +Let me try to type it. + +00:19:27.900 --> 00:19:28.400 +Probably. Bbbemaxfirst. + +00:19:42.700 --> 00:19:43.180 +L5H, R5D, BH0 Okay, we're getting back Okay, + +00:19:44.380 --> 00:19:44.740 +sorry folks about this We are, + +00:19:45.360 --> 00:19:45.860 +Jacob, We're back online. + +00:19:46.800 --> 00:19:47.080 +I'm really sorry about this. + +00:19:49.040 --> 00:19:49.540 +It's just that Sasha's script kicked in. + +00:19:51.140 --> 00:19:51.280 +I did tell you we were supposed to finish at + +00:19:53.940 --> 00:19:54.060 +30. And because Sasha is busy presenting in + +00:19:54.940 --> 00:19:55.320 +the other room, sadly, + +00:19:57.100 --> 00:19:57.400 +we got yanked again. So Jacob, + +00:19:58.280 --> 00:19:58.780 +I'm very sorry for the interruption. + +00:20:01.220 --> 00:20:01.560 +And you were retelling people about something + +00:20:02.320 --> 00:20:02.820 +you told me during the check-ins. + +00:20:04.440 --> 00:20:04.940 +Do you mind restarting this? + +00:20:09.440 --> 00:20:09.660 +[Speaker 0]: Yeah, sure. Well, you said I have the no + +00:20:12.180 --> 00:20:12.480 +small task of making the last words from + +00:20:14.440 --> 00:20:14.640 +presenters and not the organizers at + +00:20:16.260 --> 00:20:16.500 +EmacsConf. And I said, + +00:20:17.880 --> 00:20:18.380 +well, that's not hard at all. + +00:20:20.540 --> 00:20:20.760 +How many speakers have we had? + +00:20:24.480 --> 00:20:24.860 +30? And it's so incredible these past, + +00:20:26.880 --> 00:20:27.080 +you know, today and yesterday to have all + +00:20:29.700 --> 00:20:29.960 +been able to come together and not just share + +00:20:33.920 --> 00:20:34.420 +our ideas and our code and how we do things, + +00:20:38.000 --> 00:20:38.300 +but to share our faces and our voices and our + +00:20:39.780 --> 00:20:40.120 +lives, you know a little bit of our lives. + +00:20:42.100 --> 00:20:42.380 +You know to have the passion to even spend + +00:20:44.900 --> 00:20:45.400 +the time to on your weekend to watch this + +00:20:47.440 --> 00:20:47.660 +means that you have some sort of care about + +00:20:49.160 --> 00:20:49.660 +Emacs and it adds to your life. + +00:20:51.820 --> 00:20:52.080 +And you know those Emacs people aren't + +00:20:53.620 --> 00:20:53.980 +everywhere. I've tried to bring my friends + +00:20:56.040 --> 00:20:56.320 +onto Emacs and it seems like you know you're + +00:20:58.900 --> 00:20:59.220 +an Emacs person or you're not really an Emacs + +00:21:02.360 --> 00:21:02.640 +person. And those Emacs people can be really + +00:21:04.840 --> 00:21:05.000 +spread out. So it's great that we're able to + +00:21:07.900 --> 00:21:08.000 +come together and share a little bit of + +00:21:09.760 --> 00:21:10.260 +ourselves, a little bit of how we do things. + +00:21:12.440 --> 00:21:12.720 +And like I said in my talk, + +00:21:15.660 --> 00:21:15.880 +just increase our own joy in Emacs by coming + +00:21:19.360 --> 00:21:19.540 +together and being able to share our joy in + +00:21:21.760 --> 00:21:21.900 +Emacs. And of course, thank you to all the + +00:21:25.000 --> 00:21:25.120 +organizers and everyone who's contributed in + +00:21:27.980 --> 00:21:28.380 +any way. It means a lot to even the smallest + +00:21:29.700 --> 00:21:30.200 +member, the biggest member of our community. + +00:21:33.480 --> 00:21:33.700 +We're all really glad to be able to come + +00:21:36.300 --> 00:21:36.520 +together like this and share and meet each + +00:21:37.820 --> 00:21:38.320 +other and give nice talks. + +00:21:40.200 --> 00:21:40.440 +[Speaker 1]: Well, thank you so much, + +00:21:42.340 --> 00:21:42.780 +Jacob. And perhaps to reassure people, + +00:21:44.900 --> 00:21:45.060 +because yes, right now it feels like we are + +00:21:47.040 --> 00:21:47.300 +legions, all of us here in the same room + +00:21:47.960 --> 00:21:48.400 +watching the same thing. + +00:21:50.740 --> 00:21:50.900 +We are the Emacs' and that's a very good + +00:21:52.540 --> 00:21:52.840 +feeling to have. But you know, + +00:21:54.640 --> 00:21:55.140 +first, there's 1 thing that is certain, + +00:21:58.380 --> 00:21:58.660 +almost 99% certain, it's the fact that next + +00:22:00.300 --> 00:22:00.800 +year there'll probably be another EmacsConf + +00:22:02.920 --> 00:22:03.340 +and there will be more Emacs versions, + +00:22:04.540 --> 00:22:04.940 +there will be more augmented versions, + +00:22:07.300 --> 00:22:07.480 +there will be more people doing cool stuff on + +00:22:11.640 --> 00:22:12.040 +Melpa, on ELPA, etc. So it is still a vibrant + +00:22:14.200 --> 00:22:14.700 +community. But in case you're craving this + +00:22:17.260 --> 00:22:17.760 +little extra in-person stuff, + +00:22:20.280 --> 00:22:20.500 +Sash and myself, we are maintaining a list of + +00:22:21.560 --> 00:22:21.820 +all the Emacs user group. + +00:22:22.680 --> 00:22:23.080 +This is on the Emacs wiki. + +00:22:24.140 --> 00:22:24.440 +This is what I'm sharing on my screen + +00:22:27.500 --> 00:22:27.720 +currently. And we try to organize them by + +00:22:30.100 --> 00:22:30.340 +regional region, sorry, + +00:22:31.560 --> 00:22:32.020 +parts of the world like North America, + +00:22:32.640 --> 00:22:33.120 +South America, Europe, + +00:22:36.300 --> 00:22:36.680 +Africa, Asia. And we have a list of upcoming + +00:22:39.000 --> 00:22:39.500 +events and a lot of them are still online. + +00:22:41.420 --> 00:22:41.920 +Ever since we had the entire pandemic stuff, + +00:22:46.940 --> 00:22:47.440 +a lot of the workshops moved online and, + +00:22:49.960 --> 00:22:50.320 +sorry, I had someone whispering in my ear. + +00:22:53.100 --> 00:22:53.400 +A lot of them moved online and they are still + +00:22:54.960 --> 00:22:55.080 +online now because they've realized it's a + +00:22:57.100 --> 00:22:57.280 +very great way to get more people in the same + +00:22:59.640 --> 00:22:59.960 +place. And whilst it's great to have + +00:23:01.560 --> 00:23:01.920 +in-person meetings, We do this with Emacs + +00:23:05.140 --> 00:23:05.340 +Paris. Emacs Paris actually is happening is + +00:23:07.640 --> 00:23:07.840 +it? I think, oh I'm going to need to tell + +00:23:10.200 --> 00:23:10.280 +Sasha that apparently yes we do not have the + +00:23:12.380 --> 00:23:12.600 +next event for Emacs Paris which is next + +00:23:14.700 --> 00:23:15.140 +Tuesday and it is in person but for everyone + +00:23:18.580 --> 00:23:18.740 +and including you Jacob if you find a + +00:23:20.460 --> 00:23:20.640 +workshop in North America that is working for + +00:23:22.540 --> 00:23:23.020 +you, I'm thinking about Emacs SF, + +00:23:24.660 --> 00:23:24.940 +which I've attended multiple times, + +00:23:27.980 --> 00:23:28.220 +and Emacs Austin as well, + +00:23:29.060 --> 00:23:29.340 +that I've been to once, + +00:23:31.640 --> 00:23:31.780 +I think, It would be a lovely experience and + +00:23:34.160 --> 00:23:34.540 +a way to, most of them are every month, + +00:23:36.040 --> 00:23:36.160 +it would be a good way for you to stay in + +00:23:39.240 --> 00:23:39.440 +touch and to continue this sense of + +00:23:40.580 --> 00:23:41.080 +in-person-ness about Emacs. + +00:23:46.560 --> 00:23:46.800 +[Speaker 0]: Wonderful. All right, thank you so much. + +00:23:48.900 --> 00:23:49.400 +Should I drop off of our call now and let you + +00:23:50.000 --> 00:23:50.500 +close things up? + +00:23:52.600 --> 00:23:52.760 +[Speaker 1]: Yeah, we're probably gonna close thing up. + +00:23:53.600 --> 00:23:53.940 +Let me just check on Sasha. + +00:23:55.380 --> 00:23:55.560 +Sasha is obviously answering many many + +00:23:57.180 --> 00:23:57.660 +questions about how we are organizing + +00:23:59.540 --> 00:23:59.640 +EmacsConf. So Jacob, I'm gonna let you go. + +00:24:01.440 --> 00:24:01.680 +Thank you so much for your presentation and + +00:24:03.720 --> 00:24:03.920 +your answers. And maybe we'll see you next + +00:24:05.020 --> 00:24:05.240 +year. Or maybe a workshop. + +00:24:06.820 --> 00:24:07.320 +[Speaker 0]: Who knows? I'm so lucky I got you as my Q&A. + +00:24:10.440 --> 00:24:10.760 +When I saw you at my first Emacs Conf 2 years + +00:24:12.740 --> 00:24:13.240 +ago, I thought, maybe this guy will do mine. + +00:24:18.840 --> 00:24:19.240 +[Speaker 1]: Very nice. Thank you. I'm glad I was able to + +00:24:19.920 --> 00:24:20.280 +generate such a feeling. + +00:24:21.600 --> 00:24:22.100 +All right, I'll get going now. + +00:24:23.260 --> 00:24:23.760 +Jacob, have a wonderful evening. + +00:24:23.940 --> 00:24:24.140 +[Speaker 0]: And here you are. You too, + +00:24:24.400 --> 00:24:24.900 +see you later. + +00:24:28.140 --> 00:24:28.320 +[Speaker 1]: Bye-bye. And folks, what are we going to do + +00:24:30.300 --> 00:24:30.520 +right now? I'm going to set everything up so + +00:24:32.520 --> 00:24:33.020 +that we can get Sasha finished on the talk. + +00:24:34.840 --> 00:24:35.060 +If you're watching, squinting with both + +00:24:37.720 --> 00:24:38.080 +streams, you can go to Sasha's room, + +00:24:39.520 --> 00:24:40.020 +I mean, the development track, + +00:24:42.180 --> 00:24:42.680 +to maybe catch some of the answers by Sasha. + +00:24:45.040 --> 00:24:45.160 +Otherwise, we'll be back in roughly 5 to 10 + +00:24:46.960 --> 00:24:47.120 +minutes to do the closing remarks on this + +00:24:47.720 --> 00:24:48.040 +channel. In the meantime, + +00:24:48.840 --> 00:24:49.340 +I'll put on some music. + +00:24:51.300 --> 00:24:51.800 +So bear with us and I'll see you shortly. + +00:25:15.660 --> 00:25:16.160 +And closing here. This BBB recording. + +00:25:16.360 --> 00:25:16.860 +Yay! diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt new file mode 100644 index 00000000..99fe789d --- /dev/null +++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt @@ -0,0 +1,26 @@ +WEBVTT + + +00:00:00.000 --> 00:00:48.999 +Introduction + +00:00:49.000 --> 00:04:03.399 +My journey of learning + +00:04:03.400 --> 00:05:32.119 +Straightforward Emacs + +00:05:32.120 --> 00:07:16.399 +Videos + +00:07:16.400 --> 00:08:10.359 +Clarity + +00:08:10.360 --> 00:09:15.919 +High-quality and accessible content + +00:09:15.920 --> 00:11:48.119 +The personal aspect + +00:11:48.120 --> 00:16:34.120 +Unity diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt new file mode 100644 index 00000000..1e7d942e --- /dev/null +++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt @@ -0,0 +1,1148 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:02.439 +Hello everyone, I'm Jacob Boxerman. + +00:00:02.440 --> 00:00:04.319 +I'm a sophomore at Columbia University + +00:00:04.320 --> 00:00:06.139 +studying computer science. + +00:00:06.140 --> 00:00:08.519 +I'm so excited to be here today + +00:00:08.520 --> 00:00:11.259 +right at the end of EmacsConf 2023. + +00:00:11.260 --> 00:00:13.719 +So glad to be able to share with everyone today. + +00:00:13.720 --> 00:00:16.746 +EmacsConf is really the epitome for me + +00:00:16.747 --> 00:00:20.099 +of sharing and of learning about Emacs. + +NOTE Today's talk + +00:00:20.100 --> 00:00:21.539 +And in my closing keynote + +00:00:21.540 --> 00:00:24.419 +titled "Sharing Emacs is Caring Emacs," + +00:00:24.420 --> 00:00:25.819 +I want to drive that home, + +00:00:25.820 --> 00:00:27.259 +and I want to make every day + +00:00:27.260 --> 00:00:31.419 +a day for learning and for sharing in our community. + +00:00:31.420 --> 00:00:33.259 +I'd like to share my own journey + +00:00:33.260 --> 00:00:34.979 +of sharing the joy of Emacs + +00:00:34.980 --> 00:00:38.459 +and convince you that sharing the ways we share + +00:00:38.460 --> 00:00:41.179 +and how we participate in our Emacs community, + +00:00:41.180 --> 00:00:42.419 +those are the most important things + +00:00:42.420 --> 00:00:44.339 +to both grow our community + +00:00:44.340 --> 00:00:48.899 +and to increase our own personal joy in Emacs. + +NOTE My history with Emacs + +00:00:48.900 --> 00:00:52.459 +My journey of sharing begins with my journey of learning. + +00:00:52.460 --> 00:00:55.299 +So I'll start by spending a bit of time on that. + +00:00:55.300 --> 00:00:57.779 +I use Emacs every day for personal organization + +00:00:57.780 --> 00:01:00.179 +and to-dos -- you know, schoolwork, projects, + +00:01:00.180 --> 00:01:03.299 +exams, readings. I use Org Mode for that, + +00:01:03.300 --> 00:01:05.979 +write essays, make presentations like this one. + +00:01:05.980 --> 00:01:08.419 +I also write in various programming languages + +00:01:08.420 --> 00:01:10.219 +including Java, C, Python, + +00:01:10.220 --> 00:01:13.139 +locally and also remotely for projects, classes, + +00:01:13.140 --> 00:01:14.699 +other responsibilities. + +00:01:14.700 --> 00:01:17.579 +I really started with Emacs during the pandemic. + +00:01:17.580 --> 00:01:20.059 +I had tried Emacs before, but at the time + +00:01:20.060 --> 00:01:22.379 +all I knew it for was `M-x tetris`. + +00:01:22.380 --> 00:01:25.459 +But then its power and its configurability even then + +00:01:25.460 --> 00:01:27.059 +especially spoke to me. + +00:01:27.060 --> 00:01:28.899 +So from those little humble beginnings, + +00:01:28.900 --> 00:01:31.459 +trying different preconfigured distros, + +00:01:31.460 --> 00:01:33.059 +I slowly made my way to building + +00:01:33.060 --> 00:01:36.339 +my own 2000+ line configuration, + +00:01:36.340 --> 00:01:39.219 +which actually surprisingly has about 70 stars, + +00:01:39.220 --> 00:01:40.539 +a few watchers, a few forks on GitHub. + +00:01:40.540 --> 00:01:42.379 +Pretty straightforward. + +NOTE Self-exploration vs learning from others + +00:01:42.380 --> 00:01:46.419 +But what exactly was that learning process like? + +00:01:46.420 --> 00:01:49.459 +Now, Emacs was such a beast to me at first. + +00:01:49.460 --> 00:01:51.059 +I was familiar with Python, + +00:01:51.060 --> 00:01:52.579 +with C, Java, languages like that. + +00:01:52.580 --> 00:01:55.339 +I was no stranger to the shell configuration, + +00:01:55.340 --> 00:01:56.579 +anything like that. + +00:01:56.580 --> 00:02:01.179 +But the absolute infinity of possibility with Emacs + +00:02:01.180 --> 00:02:02.739 +was a bit overwhelming. + +00:02:02.740 --> 00:02:04.739 +I find a sentiment in the community + +00:02:04.740 --> 00:02:06.939 +that exploring on one's own + +00:02:06.940 --> 00:02:11.019 +was greater than exploring and learning from others. + +00:02:11.020 --> 00:02:14.459 +And now I see why people say that and it's true in a sense, + +00:02:14.460 --> 00:02:17.219 +but it might not be fully understood. + +00:02:17.220 --> 00:02:21.179 +At a certain point, we need to all create our own paths. + +00:02:21.180 --> 00:02:24.159 +And I think that's just one of the ways Emacs is built. + +00:02:24.160 --> 00:02:27.739 +The minute possibilities of configurability are so vast, + +00:02:27.740 --> 00:02:29.899 +it's like a fingerprint or a snowflake -- + +00:02:29.900 --> 00:02:32.179 +there are so many options to create + +00:02:32.180 --> 00:02:35.419 +a totally unique Emacs experience. + +00:02:35.420 --> 00:02:37.779 +Of course that can't be found from somebody else -- + +00:02:37.780 --> 00:02:38.699 +It has to come from you. + +00:02:38.700 --> 00:02:42.339 +Still, building a strong foundation + +00:02:42.340 --> 00:02:45.539 +is much, much better when we have others. + +00:02:45.540 --> 00:02:48.579 +Expanding on that foundation is, too, actually. + +00:02:48.580 --> 00:02:50.299 +My own process started + +00:02:50.300 --> 00:02:53.219 +with a lot of Googling, blog posts, YouTube, and Reddit. + +NOTE Learning process + +00:02:53.220 --> 00:02:55.419 +I actually found Emacs on YouTube. + +00:02:55.420 --> 00:02:58.139 +Seeing how other people used it + +00:02:58.140 --> 00:03:01.419 +was what really convinced me to try it for myself. + +00:03:01.420 --> 00:03:03.739 +At a certain point when my confidence grew, + +00:03:03.740 --> 00:03:07.059 +my trial and error became less error and more success. + +00:03:07.060 --> 00:03:09.979 +I was also able to take what I saw other people do, + +00:03:09.980 --> 00:03:13.859 +learn from it, and expand, making it my own. + +00:03:13.860 --> 00:03:17.019 +And through that time, I learned Emacs. + +NOTE Emacs learning (not just learning Emacs) + +00:03:17.020 --> 00:03:21.019 +But I also participated in Emacs learning. + +00:03:21.020 --> 00:03:22.579 +What's the difference? + +00:03:22.580 --> 00:03:24.219 +We often discuss the former, + +00:03:24.220 --> 00:03:27.579 +grappling with key binds, commands. + +00:03:27.580 --> 00:03:31.619 +But Emacs learning goes beyond these technicalities. + +00:03:31.620 --> 00:03:35.859 +It's a mindset. It thrives on collaboration. + +00:03:35.860 --> 00:03:37.579 +It's not a solo endeavor; + +00:03:37.580 --> 00:03:41.139 +it flourishes best when we do it together. + +00:03:41.140 --> 00:03:44.099 +This involves collaborating together, + +00:03:44.100 --> 00:03:46.179 +creating a collaborative mindset, + +00:03:46.180 --> 00:03:47.979 +sharing effective strategies, + +00:03:47.980 --> 00:03:49.075 +lifting each other + +00:03:49.076 --> 00:03:51.639 +through our collective pool of knowledge. + +00:03:51.640 --> 00:03:55.299 +Together, we contribute to the growth of each member + +00:03:55.300 --> 00:03:56.979 +within our vibrant community. + +00:03:56.980 --> 00:04:00.259 +Emacs learning is much, much harder to do alone. + +00:04:00.260 --> 00:04:03.299 +And I wanted to help with that. + +NOTE My YouTube journey + +00:04:03.300 --> 00:04:05.739 +So this brings me to the second part of my talk, + +00:04:05.740 --> 00:04:08.659 +my Emacs journey, how I got started + +00:04:08.660 --> 00:04:11.459 +and where I am today with my YouTube channel, + +00:04:11.460 --> 00:04:14.819 +my Straightforward Emacs series with nearly 200,000 views. + +NOTE Why not just read the manual? + +00:04:14.820 --> 00:04:18.219 +The Emacs Manual is often pushed + +00:04:18.220 --> 00:04:20.379 +as the best way to learn Emacs. + +00:04:20.380 --> 00:04:21.859 +It's an all-encompassing tome. + +00:04:21.860 --> 00:04:23.979 +And as amazing as I think it is, + +00:04:23.980 --> 00:04:25.179 +I don't think it's reasonable + +00:04:25.180 --> 00:04:27.579 +to push the Emacs manual so hard, + +00:04:27.580 --> 00:04:29.059 +which is something I felt at first. + +00:04:29.060 --> 00:04:31.599 +It can be really daunting. It's dense. + +00:04:31.600 --> 00:04:32.779 +There's a lot there. + +00:04:32.780 --> 00:04:34.539 +It's just a bit too much for a beginner, + +00:04:34.540 --> 00:04:37.419 +or even someone with a little bit of experience. + +00:04:37.420 --> 00:04:40.259 +These qualities, I feel, + +00:04:40.260 --> 00:04:43.179 +apply to many of the Emacs resources we can find out there. + +00:04:43.180 --> 00:04:45.179 +The best word for them is heavy. + +00:04:45.180 --> 00:04:48.099 +They look, they feel, they come across as heavy + +00:04:48.100 --> 00:04:50.739 +regardless of what they may actually be. + +00:04:50.740 --> 00:04:53.379 +It's not even that people are too lazy, + +00:04:53.380 --> 00:04:56.519 +or not capable enough (because that's never true). + +00:04:56.520 --> 00:05:00.539 +It's just a mental block that takes some getting over, + +00:05:00.540 --> 00:05:03.159 +and that's okay -- so we need other things, too. + +00:05:03.160 --> 00:05:04.859 +For me, that was video. + +00:05:04.860 --> 00:05:07.539 +I wanted someone to tell and show me + +00:05:07.540 --> 00:05:08.939 +what I wanted to know, + +00:05:08.940 --> 00:05:11.739 +as well as things I didn't even know were possible. + +00:05:11.740 --> 00:05:15.419 +I realized this once I'd progressed a little further + +00:05:15.420 --> 00:05:18.019 +in my Emacs journey. I wanted to do my part. + +00:05:18.020 --> 00:05:20.979 +I care about Emacs. I started to really care about Emacs. + +NOTE Why video for Emacs + +00:05:20.980 --> 00:05:24.319 +So I wanted to share about Emacs. + +00:05:24.320 --> 00:05:27.339 +So at that point, I refocused my work with Emacs + +00:05:27.340 --> 00:05:30.739 +beyond just myself. I wanted to help others + +00:05:30.740 --> 00:05:32.719 +feel the excitement that I did. + +00:05:32.720 --> 00:05:35.299 +So where did I turn, and why? + +00:05:35.300 --> 00:05:37.779 +It's so trite, but they say that + +00:05:37.780 --> 00:05:40.159 +a picture is worth a thousand words. + +00:05:40.160 --> 00:05:41.859 +So how much is a video worth? + +00:05:41.860 --> 00:05:44.219 +Everyone learns differently, and that's okay. + +00:05:44.220 --> 00:05:46.139 +But it's absolutely certain to me + +00:05:46.140 --> 00:05:48.319 +that you need to see something to believe it. + +00:05:48.320 --> 00:05:50.499 +So for that, I turned to video. + +00:05:50.500 --> 00:05:54.419 +And it turns out that seeing is believing. + +NOTE Straightforward Emacs + +00:05:54.420 --> 00:05:56.899 +I made a short video showing off Emacs Org Mode. + +00:05:56.900 --> 00:05:58.959 +I didn't even have a voiceover. + +00:05:58.960 --> 00:06:01.699 +That video, less than five minutes long, + +00:06:01.700 --> 00:06:04.339 +but still incorporating some of my core principles, + +00:06:04.340 --> 00:06:06.899 +now has over 55,000 views and counting. + +00:06:06.900 --> 00:06:09.459 +So, something must have been right. + +00:06:09.460 --> 00:06:11.219 +And the positive reception to that video + +00:06:11.220 --> 00:06:12.979 +made me want to continue. + +00:06:12.980 --> 00:06:14.939 +I decided to continue with the videos + +00:06:14.940 --> 00:06:18.779 +in a series I titled "Straightforward Emacs." + +00:06:18.780 --> 00:06:20.939 +And I'm asked: who is the target audience + +00:06:20.940 --> 00:06:23.899 +for Straightforward Emacs? It's me. + +00:06:23.900 --> 00:06:27.599 +They're the videos I wish I had existed + +00:06:27.600 --> 00:06:28.659 +when I was figuring out + +00:06:28.660 --> 00:06:32.699 +Emacs' numerous and wonderful features. + +NOTE Challenges and benefits of video + +00:06:32.700 --> 00:06:36.619 +Video does, I admit, come with its own set of challenges. + +00:06:36.620 --> 00:06:40.399 +Complaints that video is less accessible, it's valid. + +00:06:40.400 --> 00:06:42.459 +They're more time consuming, it's valid too. + +00:06:42.460 --> 00:06:45.059 +It's harder to skim a video than a blog post, + +00:06:45.060 --> 00:06:47.499 +and referring back can be a little annoying. + +00:06:47.500 --> 00:06:48.419 +To try and solve this, + +00:06:48.420 --> 00:06:50.739 +I make video notes available as best I can though. + +00:06:50.740 --> 00:06:54.399 +It's not perfect. Despite these valid claims, + +00:06:54.400 --> 00:06:57.379 +I believe video offers a sense of personality + +00:06:57.380 --> 00:06:59.219 +that written content just can't. + +00:06:59.220 --> 00:07:00.779 +And that makes it well worth it. + +00:07:00.780 --> 00:07:03.259 +My first two videos in the series + +00:07:03.260 --> 00:07:06.259 +received a combined 35,000 views. + +00:07:06.260 --> 00:07:08.019 +I still get kind comments today + +00:07:08.020 --> 00:07:10.459 +from viewers thanking me, asking questions. + +00:07:10.460 --> 00:07:12.779 +So I must have done something right, + +00:07:12.780 --> 00:07:14.499 +to outweigh those cons of video, + +00:07:14.500 --> 00:07:16.299 +to outweigh those common complaints. + +NOTE Crafting tutorials that work + +00:07:16.300 --> 00:07:21.659 +What was it? I covered topics that had been done before. + +00:07:21.660 --> 00:07:24.019 +But I wanted to present them in my way. + +00:07:24.020 --> 00:07:26.659 +In the way that I knew people would appreciate, + +00:07:26.660 --> 00:07:28.299 +because it's what I would have appreciated + +00:07:28.300 --> 00:07:30.919 +when I started my Emacs journey. + +00:07:30.920 --> 00:07:34.479 +In writing, I navigated towards clarity. + +00:07:34.480 --> 00:07:38.179 +Crystal clear, step-by-step instructions. + +00:07:38.180 --> 00:07:40.699 +Fully scripted, recorded in multiple parts and + +00:07:40.700 --> 00:07:43.179 +spliced together. That allowed me + +00:07:43.180 --> 00:07:48.599 +to achieve my second goal: no wasted time, or word, + +00:07:48.600 --> 00:07:51.819 +or thought. I meticulously cut my videos + +00:07:51.820 --> 00:07:54.079 +to create smooth dialogue. + +00:07:54.080 --> 00:07:57.499 +I cut out large blocks of typing if not explained. + +00:07:57.500 --> 00:07:59.259 +Though this does vary video to video. + +00:07:59.260 --> 00:08:03.259 +Less scripted, more personal video receives less editing. + +00:08:03.260 --> 00:08:05.659 +Like this talk itself, it's not edited at all. + +00:08:05.660 --> 00:08:08.259 +And though prerecorded, I wanted to present + +00:08:08.260 --> 00:08:11.719 +my unfiltered, raw self. + +NOTE High-quality and accessible content + +00:08:11.720 --> 00:08:15.939 +Another goal of mine is high quality and accessible content. + +00:08:15.940 --> 00:08:18.579 +I speak carefully and I tune my volume, + +00:08:18.580 --> 00:08:20.679 +making it easier to listen to, + +00:08:20.680 --> 00:08:23.399 +and improving YouTube's auto-captioning. + +00:08:23.400 --> 00:08:24.899 +Something I didn't consider at first, + +00:08:24.900 --> 00:08:28.399 +but was mentioned to me in a comment, was color scheme. + +00:08:28.400 --> 00:08:29.859 +Now I try to select a scheme + +00:08:29.860 --> 00:08:33.279 +with good contrast and a readable font. + +00:08:33.280 --> 00:08:35.739 +Content-wise, I design my tutorials + +00:08:35.740 --> 00:08:38.219 +to ensure they cater to various skill levels, + +00:08:38.220 --> 00:08:40.099 +as well as learning preferences. + +00:08:40.100 --> 00:08:42.999 +My videos assume basic Emacs knowledge + +00:08:43.000 --> 00:08:44.519 +but not too much more. + +00:08:44.520 --> 00:08:47.199 +Importantly, they're configuration agnostic. + +00:08:47.200 --> 00:08:50.319 +However you feel about Emacs' 'distributions', + +00:08:50.320 --> 00:08:53.119 +Doom, Spacemacs, etc, they're out there, + +00:08:53.120 --> 00:08:57.919 +and beginners often don't distinguish. + +00:08:57.920 --> 00:09:02.039 +I admit it can be a bit frustrating to see a Reddit post + +00:09:02.040 --> 00:09:04.599 +asking a question about unexpected behavior, + +00:09:04.600 --> 00:09:06.179 +without mention of the fact that they have + +00:09:06.180 --> 00:09:09.659 +literally thousands of lines of non-standard configuration + +00:09:09.660 --> 00:09:12.219 +in the form of an Emacs distribution. + +00:09:12.220 --> 00:09:14.899 +So I do my best to mention different possible keybindings + +00:09:14.900 --> 00:09:17.919 +a viewer might be using. + +NOTE Most crucial aspect of my videos + +00:09:17.920 --> 00:09:19.939 +There was one thing, though, that turned out to be + +00:09:19.940 --> 00:09:23.299 +the most crucial part of my videos and series. + +00:09:23.300 --> 00:09:25.459 +And it's one of the reasons itself for this talk. + +00:09:25.460 --> 00:09:27.879 +You may have already picked up on it. + +00:09:27.880 --> 00:09:31.119 +It's the personal aspect. Sharing myself. + +00:09:31.120 --> 00:09:33.659 +Incorporating relatable examples, + +00:09:33.660 --> 00:09:36.579 +scenarios that resonate with my audience. + +00:09:36.580 --> 00:09:39.139 +Seeing personal use cases, examples, + +00:09:39.140 --> 00:09:41.459 +and demonstrations of real life Emacs use + +00:09:41.460 --> 00:09:44.059 +is really what began to build a community. + +00:09:44.060 --> 00:09:47.219 +Because that's the stuff that can jump out of the video + +00:09:47.220 --> 00:09:50.219 +and into the comments. + +NOTE A broadening community + +00:09:50.220 --> 00:09:53.199 +The idea for this talk started + +00:09:53.200 --> 00:09:55.239 +as a story of my YouTube journey. + +00:09:55.240 --> 00:09:57.539 +I wanted to share how I began sharing Emacs + +00:09:57.540 --> 00:10:00.959 +and why I like it. And I think I've done that. + +00:10:00.960 --> 00:10:03.719 +Thanks to the EmacsConf organizers, though, + +00:10:03.720 --> 00:10:06.199 +I started to see a larger vision. + +00:10:06.200 --> 00:10:08.259 +Each video I made took a lot of effort, + +00:10:08.260 --> 00:10:11.139 +from research and planning to script writing, + +00:10:11.140 --> 00:10:14.399 +filming and editing. But those comments made it worth it -- + +00:10:14.400 --> 00:10:16.839 +people saying that straightforward Emacs + +00:10:16.840 --> 00:10:17.619 +was just what they were looking for, + +00:10:17.620 --> 00:10:20.719 +and that they appreciated my sharing. + +00:10:20.720 --> 00:10:22.419 +That's what made me want to continue. + +00:10:22.420 --> 00:10:25.699 +And what made me want to continue even more + +00:10:25.700 --> 00:10:28.499 +was the community I was building. + +00:10:28.500 --> 00:10:30.099 +I'd start to see repeat viewers + +00:10:30.100 --> 00:10:32.639 +who'd come back for my latest upload. + +00:10:32.640 --> 00:10:34.859 +It's hard for me to find time to produce videos. + +00:10:34.860 --> 00:10:38.419 +But whether it was two weeks or four months later + +00:10:38.420 --> 00:10:40.259 +when I finally got around to uploading, + +00:10:40.260 --> 00:10:43.279 +those same commenters would be there for me. + +00:10:43.280 --> 00:10:47.459 +And I found real joy in actively engaging with my audience. + +00:10:47.460 --> 00:10:49.499 +It was amazing to see how my videos -- + +00:10:49.500 --> 00:10:51.259 +me sharing useful Emacs tips, + +00:10:51.260 --> 00:10:55.119 +sharing the way I do things -- sparked broader discussions. + +00:10:55.120 --> 00:10:56.979 +On any chat form out there, there's no doubt + +00:10:56.980 --> 00:10:59.719 +you'll find some sort of cross discourse. + +00:10:59.720 --> 00:11:02.199 +I'd see viewers replying to other commenters, + +00:11:02.200 --> 00:11:04.419 +and my videos were no exception. Seeing how + +00:11:04.420 --> 00:11:06.099 +my videos sparked conversation, + +00:11:06.100 --> 00:11:10.779 +debate and further interest was incredible. + +NOTE Sharing Emacs + +00:11:10.780 --> 00:11:13.999 +We've had two amazing days of sharing Emacs, + +00:11:14.000 --> 00:11:17.379 +putting ourselves out there, and sharing in a community. + +00:11:17.380 --> 00:11:19.059 +I want to emphasize how amazing + +00:11:19.060 --> 00:11:22.339 +a strong community with the right values is, + +00:11:22.340 --> 00:11:24.659 +and to inspire each and every one of us + +00:11:24.660 --> 00:11:27.699 +to do our part to strengthen that community. + +00:11:27.700 --> 00:11:30.259 +The point of my talk isn't to tell you + +00:11:30.260 --> 00:11:33.119 +to pick up your microphone and produce a YouTube video, + +00:11:33.120 --> 00:11:34.559 +though that wouldn't hurt. + +00:11:34.560 --> 00:11:37.779 +We're not all interested in that, and that's okay. + +00:11:37.780 --> 00:11:41.059 +First, I want everybody to pat themselves on the back + +00:11:41.060 --> 00:11:44.139 +for the mere fact that we are here together. + +00:11:44.140 --> 00:11:48.019 +Then let's turn to the potential within our community. + +NOTE Platforms + +00:11:48.020 --> 00:11:50.139 +First, though, I'll briefly note + +00:11:50.140 --> 00:11:52.339 +that everyone has their opinions about platforms, + +00:11:52.340 --> 00:11:53.459 +and I'm not here to make judgments, + +00:11:53.460 --> 00:11:56.059 +but freedom, equity, and accessibility are important, + +00:11:56.060 --> 00:11:57.921 +but reach is, too. + +NOTE Achieving unity + +00:11:57.922 --> 00:12:00.539 +Regardless of the platform, + +00:12:00.540 --> 00:12:02.699 +one thing remains certain: + +00:12:02.700 --> 00:12:05.399 +our strength lies in unity. + +00:12:05.400 --> 00:12:08.739 +Like any online community, this calls for unique ways + +00:12:08.740 --> 00:12:13.779 +to come together and share. How can we achieve this unity? + +00:12:13.780 --> 00:12:15.099 +The key is finding avenues + +00:12:15.100 --> 00:12:18.799 +where our collective knowledge and our support can flourish, + +00:12:18.800 --> 00:12:21.779 +while each person can find a place for themselves, + +00:12:21.780 --> 00:12:25.679 +creating a more connected and empowered Emacs community. + +00:12:25.680 --> 00:12:29.099 +From uplifting others with positive contributions + +00:12:29.100 --> 00:12:31.219 +to engaging on platforms like Reddit, + +00:12:31.220 --> 00:12:35.199 +both idealistic and concrete approaches are really valuable. + +00:12:35.200 --> 00:12:36.859 +We can continue lively debate + +00:12:36.860 --> 00:12:38.899 +on community forums and discussion boards, + +00:12:38.900 --> 00:12:41.619 +encouraging a positive and inclusive atmosphere + +00:12:41.620 --> 00:12:44.659 +for asking questions and seeking help. + +00:12:44.660 --> 00:12:48.259 +We can leverage social media platforms to share quick tips, + +00:12:48.260 --> 00:12:51.479 +tricks, or interesting discoveries related to Emacs. + +00:12:51.480 --> 00:12:52.579 +Those who enjoy writing + +00:12:52.580 --> 00:12:54.859 +can contribute to blogs and newsletters, + +00:12:54.860 --> 00:12:57.499 +sharing personal expertise and experiences + +00:12:57.500 --> 00:12:59.239 +with a larger audience. + +00:12:59.240 --> 00:13:02.959 +Let's also not underestimate the value of online video, + +00:13:02.960 --> 00:13:05.659 +as I've said, and learning platforms too. + +00:13:05.660 --> 00:13:07.539 +Creating and sharing tutorials + +00:13:07.540 --> 00:13:10.259 +on platforms like YouTube or educational websites + +00:13:10.260 --> 00:13:14.019 +addresses specific aspects of Emacs and benefits learners, + +00:13:14.020 --> 00:13:17.419 +while contributing a personal touch. + +00:13:17.420 --> 00:13:20.579 +Participating in or organizing Emacs-related courses + +00:13:20.580 --> 00:13:22.539 +also fosters a structured learning + +00:13:22.540 --> 00:13:24.259 +environment where there's so much room + +00:13:24.260 --> 00:13:26.079 +for mentorship and support, + +00:13:26.080 --> 00:13:29.999 +which is valuable for everyone involved. + +NOTE Every contribution is valuable + +00:13:30.000 --> 00:13:32.579 +We can also call on our open source [* free software] values + +00:13:32.580 --> 00:13:34.939 +and focus on collaborative projects, + +00:13:34.940 --> 00:13:38.239 +from coding projects where we can contribute and learn + +00:13:38.240 --> 00:13:41.019 +to building shared documentation and guides + +00:13:41.020 --> 00:13:44.339 +that compile collective knowledge on specific topics -- + +00:13:44.340 --> 00:13:46.459 +the Emacs Wiki is a great place + +00:13:46.460 --> 00:13:49.599 +to start and continue that work as well. + +00:13:49.600 --> 00:13:51.659 +Especially for those who might be less willing + +00:13:51.660 --> 00:13:53.099 +to put themselves out there, + +00:13:53.100 --> 00:13:56.199 +it's essential to recognize that every contribution, + +00:13:56.200 --> 00:13:59.519 +regardless of its scale, adds value to our community. + +00:13:59.520 --> 00:14:02.119 +Documentation contributions, however small, + +00:14:02.120 --> 00:14:04.459 +can go a long way. So do translations, + +00:14:04.460 --> 00:14:07.379 +for those who are able to increase accessibility, + +00:14:07.380 --> 00:14:09.539 +as well as testing and bug reporting. + +00:14:09.540 --> 00:14:11.379 +Reporting issues to package maintainers + +00:14:11.380 --> 00:14:14.019 +in their desired format -- speaking as one myself, + +00:14:14.020 --> 00:14:16.819 +I appreciate when users give helpful feedback. + +00:14:16.820 --> 00:14:20.479 +There are options for everybody, big and small. + +00:14:20.480 --> 00:14:22.539 +Remember, the strength of our community + +00:14:22.540 --> 00:14:25.339 +lies in its ability to share, collaborate, + +00:14:25.340 --> 00:14:29.379 +and learn together. Whether through collaborative projects, + +00:14:29.380 --> 00:14:32.899 +sharing insights on forums, or leveraging social media, + +00:14:32.900 --> 00:14:34.659 +by embracing these ideas, we can build + +00:14:34.660 --> 00:14:40.299 +a more connected and empowered Emacs community. + +NOTE Conclusion + +00:14:40.300 --> 00:14:43.759 +Now Emacs is so very personal. + +00:14:43.760 --> 00:14:44.939 +Those of us who have our own + +00:14:44.940 --> 00:14:47.679 +carefully manicured configurations understand -- + +00:14:47.680 --> 00:14:50.859 +Emacs molds to our liking and our person. + +00:14:50.860 --> 00:14:53.219 +Our configurations and use-cases + +00:14:53.220 --> 00:14:56.379 +are a reflection of our individuality. + +00:14:56.380 --> 00:14:59.319 +Nonetheless, the richness of our community + +00:14:59.320 --> 00:15:04.619 +lies in collaboration, sharing, and learning together. + +00:15:04.620 --> 00:15:06.099 +There's a lot of talk in the community + +00:15:06.100 --> 00:15:09.559 +about how to ensure Emacs' longevity. + +00:15:09.560 --> 00:15:11.139 +I agree it's important. + +00:15:11.140 --> 00:15:13.819 +We care because of passion, excitement, + +00:15:13.820 --> 00:15:16.099 +and utility. We want to share + +00:15:16.100 --> 00:15:19.259 +and we want to have others love what we love. + +00:15:19.260 --> 00:15:21.099 +We also want a stronger community + +00:15:21.100 --> 00:15:23.899 +that fosters new innovation. + +00:15:23.900 --> 00:15:26.539 +I used to buy into complaints I'd read online + +00:15:26.540 --> 00:15:29.499 +that Emacs' defaults are too unapproachable. + +00:15:29.500 --> 00:15:33.419 +The default color scheme and the font is unappealing. + +00:15:33.420 --> 00:15:35.699 +Fix that and people will flock. + +00:15:35.700 --> 00:15:37.739 +Sounds fair, I'd think. + +00:15:37.740 --> 00:15:40.639 +Turns out, it's not what we need. + +00:15:40.640 --> 00:15:42.679 +Emacs is bigger than that. + +00:15:42.680 --> 00:15:45.779 +What we need is like what we've done here this weekend. + +00:15:45.780 --> 00:15:49.659 +Like EmacsConf. It's the absolute epitome + +00:15:49.660 --> 00:15:53.899 +of sharing about and caring about Emacs. + +00:15:53.900 --> 00:15:56.859 +We are here both working to grow our community, + +00:15:56.860 --> 00:16:00.139 +and to strengthen what we already have. + +00:16:00.140 --> 00:16:02.579 +We're here because we find joy in Emacs, + +00:16:02.580 --> 00:16:05.859 +and that joy is amplified by sharing it + +00:16:05.860 --> 00:16:07.679 +with and among others. + +00:16:07.680 --> 00:16:10.219 +So let's continue this journey together, + +00:16:10.220 --> 00:16:13.459 +navigating Emacs with a spirit of collaboration, + +00:16:13.460 --> 00:16:17.259 +because in unity, we find not just strength + +00:16:17.260 --> 00:16:22.059 +but the enduring legacy of a tool that we hold very dear. + +00:16:22.060 --> 00:16:23.339 +Thank you to everybody here + +00:16:23.340 --> 00:16:26.499 +for being part of this shared adventure. + +00:16:26.500 --> 00:16:34.120 +Let's go forth and share, together. diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt new file mode 100644 index 00000000..edf50d33 --- /dev/null +++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt @@ -0,0 +1,1304 @@ +WEBVTT + + +00:00:02.899 --> 00:00:03.260 +[Speaker 0]: Right. Okay, so hi everyone. + +00:00:04.540 --> 00:00:04.839 +We are now live. Hi Howard, + +00:00:06.339 --> 00:00:06.839 +how are you doing? Great. + +00:00:09.960 --> 00:00:10.460 +Lovely to hear. As usual, + +00:00:11.980 --> 00:00:12.480 +it's always a pleasure to see your + +00:00:14.440 --> 00:00:14.599 +presentation and the amount of time and + +00:00:15.360 --> 00:00:15.780 +energy you put into it. + +00:00:17.680 --> 00:00:17.860 +Slightly sorry about the shoppiness of the + +00:00:18.680 --> 00:00:19.119 +broadcast. Do not worry, + +00:00:22.700 --> 00:00:23.200 +the talk will be in its full 30 fps quality + +00:00:24.779 --> 00:00:25.160 +on the website after the conference. + +00:00:26.759 --> 00:00:26.939 +Actually, right now. It's available right + +00:00:30.099 --> 00:00:30.279 +now. As usual, feel free to ask your + +00:00:31.560 --> 00:00:31.920 +questions in the in the pad. + +00:00:34.200 --> 00:00:34.360 +We've linked it both on the talk page and on + +00:00:38.400 --> 00:00:38.760 +IRC. I think I am on the right 1, + +00:00:40.080 --> 00:00:40.580 +right? This is a solo. + +00:00:42.660 --> 00:00:43.160 +Guys, questions, where are they? + +00:00:45.060 --> 00:00:45.300 +Oh, we do have questions, + +00:00:46.920 --> 00:00:47.240 +it's just that they're not in the right part. + +00:00:47.960 --> 00:00:48.340 +Okay, so I'm going to start, + +00:00:49.739 --> 00:00:49.920 +I'm going to read the questions to Howard and + +00:00:50.860 --> 00:00:51.260 +Howard will be answering them. + +00:00:52.960 --> 00:00:53.220 +And if you are interested in asking questions + +00:00:54.620 --> 00:00:54.860 +directly to Howard, I see a lot of people + +00:00:55.640 --> 00:00:56.140 +have joined us on BBB, + +00:00:58.540 --> 00:00:58.780 +so we'll first go through the questions on + +00:01:00.800 --> 00:01:01.020 +the pad and then we'll move on to the people + +00:01:03.340 --> 00:01:03.560 +on BBB. So Howard, starting with the first + +00:01:06.300 --> 00:01:06.460 +question, does table data allow for + +00:01:08.640 --> 00:01:08.800 +recursion, e.g. The result that returns they + +00:01:10.600 --> 00:01:10.940 +are random monster haunting the cavern + +00:01:14.060 --> 00:01:14.280 +entrance and we roll on random monster and + +00:01:16.420 --> 00:01:16.700 +inject them, inject into the result? + +00:01:17.920 --> 00:01:18.420 +Sorry a little bit of a complicated question. + +00:01:21.900 --> 00:01:22.200 +Do you want me to read it again, + +00:01:23.620 --> 00:01:24.120 +perhaps? Yeah, I think so. + +00:01:25.240 --> 00:01:25.740 +I didn't quite catch that. + +00:01:28.860 --> 00:01:29.060 +Okay, so does the table data allow for + +00:01:30.180 --> 00:01:30.550 +recursion? So I think... + +00:01:31.560 --> 00:01:31.880 +[Speaker 1]: Oh, yeah, yeah, yeah, yeah. + +00:01:33.960 --> 00:01:34.240 +No, it does. I put a little, + +00:01:35.440 --> 00:01:35.940 +you know, there's some code that could, + +00:01:38.660 --> 00:01:38.940 +so you could, yeah, you get a random value + +00:01:41.040 --> 00:01:41.380 +that gets inserted and that random value + +00:01:43.280 --> 00:01:43.580 +could refer to another table and it can keep + +00:01:46.000 --> 00:01:46.500 +on going. I have not pushed that that hard + +00:01:48.320 --> 00:01:48.820 +because obviously it's, + +00:01:50.880 --> 00:01:50.980 +it might be a little on the heavyweight side. + +00:01:52.540 --> 00:01:52.760 +I can't imagine it to go too deep, + +00:01:52.760 --> 00:01:53.260 +though. + +00:01:56.820 --> 00:01:56.979 +[Speaker 0]: I'm pretty sure Emacs would be complaining if + +00:01:57.940 --> 00:01:58.320 +you go a little too deep. + +00:01:59.979 --> 00:02:00.479 +We have something as Mike's list recursion, + +00:02:01.420 --> 00:02:01.840 +and stuff like this. So don't worry. + +00:02:03.440 --> 00:02:03.940 +Go willy nilly with your recursions. + +00:02:07.120 --> 00:02:07.240 +We've got comments about the fact that it's a + +00:02:09.180 --> 00:02:09.680 +really cool project and I feel like everyone + +00:02:10.680 --> 00:02:11.180 +watching would be agreeing. + +00:02:14.100 --> 00:02:14.340 +You've got a question about where you can get + +00:02:16.620 --> 00:02:16.780 +this. Do you have a github repository with + +00:02:17.080 --> 00:02:17.580 +all of this? + +00:02:20.440 --> 00:02:20.600 +[Speaker 1]: Yeah, and at the well at the end of the + +00:02:22.840 --> 00:02:22.960 +presentation I kind of display that and I + +00:02:25.920 --> 00:02:26.420 +think I put it at the top of the the pad + +00:02:35.220 --> 00:02:35.720 +[Speaker 2]: Yeah, there's a + +00:02:36.760 --> 00:02:37.260 +[Speaker 0]: Yes. I don't go Gone please. + +00:02:38.680 --> 00:02:38.820 +[Speaker 1]: Nothing there. There's a lot of stuff that + +00:02:40.080 --> 00:02:40.580 +needs to be reformatted. + +00:02:46.820 --> 00:02:46.940 +This is all Aflacode, so obviously it's a + +00:02:49.180 --> 00:02:49.480 +personal hack. So people should just steal + +00:02:51.880 --> 00:02:52.160 +the code as opposed to looking at a real + +00:02:52.760 --> 00:02:53.260 +project to use. + +00:03:00.420 --> 00:03:00.660 +[Speaker 0]: Right, lovely. So this game plus CRDT should + +00:03:01.960 --> 00:03:02.460 +be great for non-solid plays. + +00:03:03.640 --> 00:03:04.140 +Are you familiar with CRDT? + +00:03:08.160 --> 00:03:08.360 +[Speaker 1]: Well, so I used to use Flubits once upon a + +00:03:11.880 --> 00:03:12.160 +time and after seeing the previous talk on + +00:03:14.060 --> 00:03:14.340 +CRDT it's like, oh, I like that, + +00:03:16.000 --> 00:03:16.500 +and yes, I think that would be a fun idea. + +00:03:19.860 --> 00:03:20.080 +[Speaker 0]: I think I remember, so I did something much + +00:03:21.040 --> 00:03:21.300 +more humble than you did. + +00:03:24.660 --> 00:03:24.960 +I did a little bit, a little package in Org + +00:03:27.940 --> 00:03:28.080 +Mode for rolling dice and you had like a + +00:03:31.560 --> 00:03:31.780 +little formula like you could write 60 20 and + +00:03:34.740 --> 00:03:35.240 +it would throw 6 dice with 20 faces, + +00:03:39.060 --> 00:03:39.560 +60 sorry, 6 die, Frenchmen here in the room, + +00:03:43.660 --> 00:03:43.980 +20 faces and it would average them out or + +00:03:45.140 --> 00:03:45.640 +provide you any kind of stats needed. + +00:03:48.800 --> 00:03:49.020 +And this type of stuff works really well over + +00:03:52.540 --> 00:03:53.040 +CRDT because it's 1 edit inside of a file. + +00:03:55.900 --> 00:03:56.320 +If you start making edits in different parts + +00:03:58.780 --> 00:03:59.040 +of your file, it starts becoming a little + +00:04:02.060 --> 00:04:02.260 +more complicated because CRDT struggles when + +00:04:04.480 --> 00:04:04.640 +you're making many discrete changes inside of + +00:04:05.640 --> 00:04:06.140 +the same file. Does that make sense? + +00:04:07.640 --> 00:04:08.140 +[Speaker 1]: It does, it does. Interesting. + +00:04:10.120 --> 00:04:10.280 +Okay, yeah, no, I have not played with it + +00:04:10.280 --> 00:04:10.780 +yet. + +00:04:14.280 --> 00:04:14.540 +[Speaker 0]: Well, feel free to play with it and if you've + +00:04:16.320 --> 00:04:16.820 +got any kind of... If it works, + +00:04:17.720 --> 00:04:18.120 +it works and it's amazing, + +00:04:20.200 --> 00:04:20.380 +but if it doesn't, feel free to send us + +00:04:21.180 --> 00:04:21.680 +messages because Shantan, + +00:04:23.240 --> 00:04:23.740 +who's the maintainer of CRDT, + +00:04:25.840 --> 00:04:26.000 +we've been looking into options to make it a + +00:04:28.380 --> 00:04:28.880 +little more resilient and work elsewhere for + +00:04:31.360 --> 00:04:31.860 +securely. Excellent. All right, + +00:04:34.600 --> 00:04:35.080 +Great. I'm going back to the previous + +00:04:37.160 --> 00:04:37.500 +question. So does the current version also + +00:04:39.020 --> 00:04:39.520 +have some utilities for doing multiplayer, + +00:04:41.140 --> 00:04:41.640 +like either physically or digitally, + +00:04:42.520 --> 00:04:43.020 +like we've done with CRUT? + +00:04:45.060 --> 00:04:45.300 +The question is because you mentioned you + +00:04:47.360 --> 00:04:47.860 +previously did multiplayer session as well? + +00:04:51.180 --> 00:04:51.680 +[Speaker 1]: Yeah, I mean, I was using the table, + +00:04:55.940 --> 00:04:56.060 +the random table at a random entry kind of + +00:04:58.460 --> 00:04:58.960 +thing. I was using that at my table. + +00:05:00.780 --> 00:05:01.280 +So, I'm an eternal DM. + +00:05:02.920 --> 00:05:03.420 +So I would always use that. + +00:05:05.020 --> 00:05:05.220 +Like somebody says, what's the name of that + +00:05:07.160 --> 00:05:07.400 +shopkeep? And I could just hit a key, + +00:05:08.440 --> 00:05:08.660 +and it'd come up with the name, + +00:05:10.120 --> 00:05:10.620 +and I'd just read it off. + +00:05:14.440 --> 00:05:14.940 +But it was still me generating it. + +00:05:17.120 --> 00:05:17.540 +So it wasn't something that people would see + +00:05:19.540 --> 00:05:19.640 +necessarily, but I would keep notes in it and + +00:05:20.520 --> 00:05:21.020 +then publish those notes. + +00:05:24.240 --> 00:05:24.620 +But yes, I don't know. + +00:05:25.440 --> 00:05:25.940 +This sounds all kind of, + +00:05:27.260 --> 00:05:27.760 +this sounds all intriguing. + +00:05:28.840 --> 00:05:29.340 +I think this would be fun. + +00:05:32.220 --> 00:05:32.720 +I think I need to get a group of like-minded + +00:05:35.880 --> 00:05:36.380 +Emacs people who want to play online. + +00:05:39.860 --> 00:05:40.120 +[Speaker 0]: I'm sure you've got plenty of people not only + +00:05:41.580 --> 00:05:42.080 +watching but also here in BBB. + +00:05:44.660 --> 00:05:44.800 +So we only have about 14 minutes until we go + +00:05:46.120 --> 00:05:46.360 +to the next talk and it might be a little + +00:05:48.200 --> 00:05:48.700 +short for a campaign, but we might just... + +00:05:53.220 --> 00:05:53.720 +Moving on to the next question, + +00:05:56.480 --> 00:05:56.920 +how does 1 become super awesome like Howard + +00:05:58.200 --> 00:05:58.620 +Abrams? And I very much agree. + +00:05:58.700 --> 00:05:59.140 +[Speaker 1]: Sure, yes. That's kind, + +00:06:04.460 --> 00:06:04.600 +[Speaker 0]: That's not a secret, You're not giving your + +00:06:09.360 --> 00:06:09.800 +[Speaker 1]: too kind, too kind. There's no trade secrets. + +00:06:10.580 --> 00:06:11.080 +Just follow your passions. + +00:06:14.540 --> 00:06:15.040 +[Speaker 0]: trade secrets. I can only conquer. + +00:06:16.160 --> 00:06:16.660 +All right, moving on to the next question. + +00:06:18.740 --> 00:06:19.200 +Please talk a little about how you produced + +00:06:20.460 --> 00:06:20.960 +such a slick presentation video. + +00:06:22.800 --> 00:06:23.300 +Everything looked completely professional, + +00:06:25.120 --> 00:06:25.620 +and I'd agree. So tell us more. + +00:06:29.260 --> 00:06:29.760 +[Speaker 1]: OK, so as you've seen my previous + +00:06:32.680 --> 00:06:33.180 +presentations, It's all just Emacs screen. + +00:06:35.920 --> 00:06:36.060 +I just felt like, oh, what I really want to + +00:06:39.360 --> 00:06:39.560 +talk about is how much fun I'm having and the + +00:06:43.680 --> 00:06:43.840 +little introduction. So my son actually is a + +00:06:44.980 --> 00:06:45.240 +YouTuber. So I asked him, + +00:06:47.200 --> 00:06:47.360 +and it's like, oh, I'll take care of your + +00:06:49.940 --> 00:06:50.440 +dad. And so he's the 1 that kind of prompted + +00:06:51.280 --> 00:06:51.780 +me. So I had a director. + +00:06:53.720 --> 00:06:54.220 +Don't know if that translates, + +00:06:58.940 --> 00:06:59.340 +[Speaker 0]: I mean, that translates amazingly. + +00:07:02.560 --> 00:07:03.060 +[Speaker 1]: though, but. Very good. + +00:07:06.900 --> 00:07:07.400 +You know, very over the top. + +00:07:09.440 --> 00:07:09.940 +I've never done something like this before. + +00:07:10.460 --> 00:07:10.600 +[Speaker 0]: I mean, the results at the end is No, + +00:07:11.680 --> 00:07:12.040 +but it fits you so well. + +00:07:14.820 --> 00:07:14.980 +I think this over the top-ness combined with + +00:07:15.800 --> 00:07:16.300 +the editing, it just... + +00:07:18.900 --> 00:07:19.200 +[Speaker 1]: I might have to keep doing it because it was + +00:07:20.600 --> 00:07:21.100 +fun. It was fun to do. + +00:07:23.160 --> 00:07:23.300 +[Speaker 0]: You've set a standard that you'll need to + +00:07:24.520 --> 00:07:24.860 +meet for following Emax. + +00:07:28.360 --> 00:07:28.860 +[Speaker 1]: I'll have to keep paying them then. + +00:07:30.820 --> 00:07:31.320 +[Speaker 0]: Oh no! Alright, Yes! Alright, + +00:07:32.360 --> 00:07:32.860 +moving on to the next question. + +00:07:35.380 --> 00:07:35.540 +Does table data, no sorry that's the 1 we did + +00:07:37.360 --> 00:07:37.680 +on recursion and we're not going to struggle + +00:07:38.900 --> 00:07:39.400 +through the reading of it again. + +00:07:41.280 --> 00:07:41.780 +Alright so with your toolkits, + +00:07:43.940 --> 00:07:44.060 +a list of good books would be nice to be + +00:07:45.300 --> 00:07:45.800 +included, example D&D, + +00:07:48.400 --> 00:07:48.900 +space, steampunk, cyberpunk settings. + +00:07:49.800 --> 00:07:50.300 +Do you have such a plan? + +00:07:56.120 --> 00:07:56.360 +[Speaker 1]: 00I mean, I could definitely publish a + +00:07:59.640 --> 00:08:00.140 +bibliography of things I'm using and reading, + +00:08:03.640 --> 00:08:04.140 +But I don't know if I'd be writing anything. + +00:08:07.420 --> 00:08:07.640 +[Speaker 0]: Oh come on, don't tell yourself short. + +00:08:09.000 --> 00:08:09.140 +You've already proven you were amazing in + +00:08:10.640 --> 00:08:11.140 +very different, very varied topics. + +00:08:12.840 --> 00:08:13.340 +I'm sure you should give it 1 more try. + +00:08:15.460 --> 00:08:15.740 +[Speaker 1]: I don't know. I've got a sabbatical coming + +00:08:17.580 --> 00:08:17.840 +up. I'm toying with writing something, + +00:08:19.860 --> 00:08:20.360 +but I don't know if it'd ever leave the Emacs + +00:08:20.440 --> 00:08:20.940 +buffer. + +00:08:23.680 --> 00:08:24.180 +[Speaker 0]: All right, I like this. + +00:08:28.140 --> 00:08:28.260 +Next question. Hi Howard and thanks for an + +00:08:28.860 --> 00:08:29.360 +outstanding presentation. + +00:08:31.640 --> 00:08:31.800 +What did you use to create the graphics in + +00:08:34.280 --> 00:08:34.440 +your presentation? Didn't we cover this 1 + +00:08:35.059 --> 00:08:35.380 +already? I can't remember. + +00:08:35.740 --> 00:08:35.860 +No, that was + +00:08:41.980 --> 00:08:42.240 +[Speaker 1]: a good 1. So the graphics actually were just + +00:08:43.179 --> 00:08:43.679 +kind of hacked together. + +00:08:45.020 --> 00:08:45.340 +But then I just gave them to my son. + +00:08:47.200 --> 00:08:47.520 +And it's like, can you put the graphic right + +00:08:50.140 --> 00:08:50.640 +here and he goes no problem there it is like + +00:08:56.280 --> 00:08:56.640 +[Speaker 0]: okay great so 1 more 1 more reason to keep + +00:08:57.060 --> 00:08:57.560 +paying your son + +00:08:59.820 --> 00:09:00.180 +[Speaker 1]: perfect yeah yeah exactly so if you can get + +00:09:02.760 --> 00:09:03.260 +get yourself a YouTuber who knows how to use + +00:09:05.800 --> 00:09:06.300 +all the tools. I think he was using DaVinci, + +00:09:08.860 --> 00:09:09.360 +but he's got quite a few going. + +00:09:12.700 --> 00:09:12.900 +[Speaker 0]: Right. Alright, moving on to the next + +00:09:15.040 --> 00:09:15.220 +question. Any plans to borrow tables from + +00:09:17.980 --> 00:09:18.240 +Dungeon World or Iron Sword Starforge and + +00:09:20.460 --> 00:09:20.960 +publish in a TK repository? + +00:09:22.360 --> 00:09:22.860 +Not sure what TK is. + +00:09:25.380 --> 00:09:25.880 +[Speaker 1]: Yeah, yeah, okay. So yeah, + +00:09:30.320 --> 00:09:30.820 +so that would be fun and I'd love that. + +00:09:33.840 --> 00:09:34.340 +And I was just reading a way to render PDFs + +00:09:38.080 --> 00:09:38.480 +that you might own into Markdown format. + +00:09:39.140 --> 00:09:39.560 +And if it's in Markdown, + +00:09:41.440 --> 00:09:41.940 +it'd be easy to pull into Org Mode. + +00:09:43.680 --> 00:09:44.180 +So all of the Iron Sworn, + +00:09:45.280 --> 00:09:45.780 +that role-playing game, + +00:09:48.780 --> 00:09:49.280 +Since it's all under the Creative License, + +00:09:51.380 --> 00:09:51.600 +I think even the Star Forge is. + +00:09:53.940 --> 00:09:54.280 +So I think I could grab the Star Forge 1. + +00:09:56.820 --> 00:09:57.100 +I don't know about Dungeon World and their + +00:09:59.220 --> 00:09:59.380 +tables. But yeah, a lot of people are + +00:10:01.060 --> 00:10:01.500 +starting to publish those kind of tables. + +00:10:03.760 --> 00:10:04.180 +So yeah, that'd be fun. + +00:10:07.160 --> 00:10:07.400 +I'd like to render all those in text files + +00:10:08.560 --> 00:10:09.060 +that I could pull up like that. + +00:10:13.180 --> 00:10:13.580 +[Speaker 0]: Lovely. I think that's all for the questions + +00:10:15.820 --> 00:10:16.320 +we had in the pad. We still have 9 minutes. + +00:10:18.280 --> 00:10:18.760 +I see plenty of people have joined us, + +00:10:21.060 --> 00:10:21.560 +including 1 person with a microphone on BBB. + +00:10:23.160 --> 00:10:23.500 +PlasmaStrike, do you have a question? + +00:10:24.920 --> 00:10:25.180 +And would you like to unmute yourself and ask + +00:10:28.440 --> 00:10:28.940 +it? I'm also going to check the chat. + +00:10:31.640 --> 00:10:31.920 +[Speaker 1]: Oh, yeah. StarsWithoutNumber is another great + +00:10:33.640 --> 00:10:34.140 +1 that's got some great tables in it. + +00:10:37.720 --> 00:10:37.960 +Sorry, I'm just looking at the questions that + +00:10:38.940 --> 00:10:39.440 +are popping up here, too. + +00:10:42.740 --> 00:10:43.180 +[Speaker 0]: Sure. So I don't see anyone unmuting + +00:10:44.540 --> 00:10:44.800 +themselves. I see people typing away + +00:10:45.220 --> 00:10:45.400 +questions. By the way, + +00:10:46.120 --> 00:10:46.560 +if you're going to type questions, + +00:10:48.240 --> 00:10:48.680 +perhaps do not put them on BBB, + +00:10:50.460 --> 00:10:50.600 +put them in the pad. It's a little easier for + +00:10:52.380 --> 00:10:52.880 +us to archive them afterwards. + +00:10:56.160 --> 00:10:56.580 +I'm going to give a little bit of time. + +00:10:58.360 --> 00:10:58.860 +I feel bad about going on break when I have + +00:11:00.940 --> 00:11:01.160 +you available and ready to answer more + +00:11:02.680 --> 00:11:03.180 +questions. Oh, you're too kind. + +00:11:07.360 --> 00:11:07.860 +[Speaker 2]: How have you, as this changed, + +00:11:09.520 --> 00:11:09.960 +how's your visualization of the books, + +00:11:11.260 --> 00:11:11.760 +or of your games at all? + +00:11:15.180 --> 00:11:15.680 +[Speaker 1]: Sorry, can you ask that 1 more time? + +00:11:16.700 --> 00:11:17.200 +I didn't catch the first part. + +00:11:20.140 --> 00:11:20.600 +[Speaker 2]: How has this impacted, + +00:11:23.080 --> 00:11:23.300 +like, your imagination on the scenes and + +00:11:28.240 --> 00:11:28.360 +stuff like that because it's partly open and + +00:11:30.720 --> 00:11:30.920 +closed because you had that chart where you + +00:11:32.880 --> 00:11:33.380 +had that where you put it in the center of + +00:11:37.240 --> 00:11:37.400 +constrained by algorithms to enhance your + +00:11:39.780 --> 00:11:40.020 +creativity, you write it but it's not all + +00:11:42.700 --> 00:11:42.900 +freeform to where you have writer's block as + +00:11:42.900 --> 00:11:43.400 +much. + +00:11:46.800 --> 00:11:47.080 +[Speaker 1]: You hit the, You hit it on the head. + +00:11:49.640 --> 00:11:50.040 +That's exactly it. That's why I've been doing + +00:11:53.940 --> 00:11:54.440 +this. Creativity is a hard thing to foster. + +00:11:57.520 --> 00:11:57.700 +And having little prompts that you have to + +00:11:58.340 --> 00:11:58.840 +kind of work together, + +00:12:03.660 --> 00:12:04.160 +like twisty language, what does that mean? + +00:12:06.560 --> 00:12:06.900 +Oh, you have to kind of work with that. + +00:12:08.800 --> 00:12:09.160 +So yeah, that's 1 of the reasons why I got + +00:12:11.800 --> 00:12:12.300 +into doing the solo version of it, + +00:12:14.120 --> 00:12:14.600 +just because you kind of, + +00:12:15.980 --> 00:12:16.480 +it does really foster the creativity. + +00:12:23.540 --> 00:12:24.040 +Did that answer the question? + +00:12:28.520 --> 00:12:28.780 +[Speaker 2]: Yeah well has it kind of has it improved over + +00:12:30.060 --> 00:12:30.280 +time though of using it like + +00:12:33.200 --> 00:12:33.700 +[Speaker 1]: oh yeah oh yeah I would definitely say so + +00:12:36.420 --> 00:12:36.920 +While I'm still not ready to publish my files + +00:12:40.240 --> 00:12:40.740 +at all, but the first ones were much worse. + +00:12:46.160 --> 00:12:46.320 +[Speaker 2]: That was an example like after you play for + +00:12:47.800 --> 00:12:48.080 +like 2 months or something like that, + +00:12:50.320 --> 00:12:50.440 +like, could you close your eyes and see the + +00:12:51.420 --> 00:12:51.920 +rooms a lot better versus... + +00:12:54.720 --> 00:12:55.220 +[Speaker 1]: Yeah, I think so. I think so. + +00:13:02.150 --> 00:13:02.500 +And, you know, there's 1 solo game called A + +00:13:03.340 --> 00:13:03.840 +Thousand-Year-Old Vampire. + +00:13:05.740 --> 00:13:06.100 +I don't know if you've seen that 1 or not, + +00:13:08.440 --> 00:13:08.940 +but it's quite creative. + +00:13:09.720 --> 00:13:10.220 +It's very interesting. + +00:13:13.180 --> 00:13:13.680 +It's got a great setup to use. + +00:13:17.200 --> 00:13:17.320 +And When I was looking through it, + +00:13:19.320 --> 00:13:19.820 +it's like, I'm thinking of a typical vampire + +00:13:20.720 --> 00:13:21.220 +and this sort of thing. + +00:13:25.760 --> 00:13:26.040 +But then there's this YouTuber named Seth + +00:13:27.880 --> 00:13:28.180 +Skalkarski, if I can pronounce his name + +00:13:30.020 --> 00:13:30.060 +right. He was describing it. + +00:13:32.040 --> 00:13:32.540 +And he came up with a completely different + +00:13:34.540 --> 00:13:34.940 +vampire scene. And it's like, + +00:13:37.560 --> 00:13:37.880 +oh, I could see how people can kind of start + +00:13:40.600 --> 00:13:41.000 +working on these things and really see things + +00:13:43.080 --> 00:13:43.260 +differently. And the creativity and all that + +00:13:44.340 --> 00:13:44.840 +sort of stuff just really blossoms. + +00:13:48.040 --> 00:13:48.540 +[Speaker 2]: And then I guess as an extension of that, + +00:13:53.680 --> 00:13:53.920 +how has the stories changed after using this + +00:13:58.140 --> 00:13:58.640 +toolkit or the solo games for 2 months? + +00:14:00.200 --> 00:14:00.700 +Like the scenes, like how you, + +00:14:02.440 --> 00:14:02.940 +like the stories that you'd start generating? + +00:14:05.980 --> 00:14:06.460 +[Speaker 1]: Yeah, yeah, yeah. Yeah, + +00:14:09.000 --> 00:14:09.200 +I mean, a lot depends on just how much you're + +00:14:10.140 --> 00:14:10.440 +willing to put into it. + +00:14:13.980 --> 00:14:14.340 +But yeah, I've definitely had a lot of fun. + +00:14:16.360 --> 00:14:16.760 +And it's just been a lot more enjoyable and + +00:14:17.680 --> 00:14:18.180 +just more interesting. + +00:14:21.960 --> 00:14:22.120 +[Speaker 2]: Well I mean like has the types and quality of + +00:14:23.940 --> 00:14:24.440 +the stories changed a lot? + +00:14:25.240 --> 00:14:25.740 +Or more than that? + +00:14:30.280 --> 00:14:30.620 +[Speaker 1]: I think so, you know, but obviously the proof + +00:14:34.000 --> 00:14:34.500 +is if somebody else is doing the evaluation + +00:14:39.060 --> 00:14:39.280 +and I'm not letting that out But I think so, + +00:14:42.040 --> 00:14:42.500 +but I think so so but I think your mileage + +00:14:44.340 --> 00:14:44.840 +may vary. So yeah, try it out + +00:14:47.360 --> 00:14:47.860 +[Speaker 2]: Have you seen the game Dwarf Fortress? + +00:14:50.880 --> 00:14:51.140 +Because it's supposed to be a video game + +00:14:53.040 --> 00:14:53.260 +that's in a similar spirit to that, + +00:14:55.080 --> 00:14:55.580 +where it helps you generate stories. + +00:14:56.820 --> 00:14:57.320 +Dwarf Fortress, RimWorld, + +00:15:00.420 --> 00:15:00.920 +Kenshi is another 1. + +00:15:03.400 --> 00:15:03.720 +[Speaker 1]: Yeah, no, I've looked at the Dwarf Fortress, + +00:15:04.640 --> 00:15:04.900 +but I haven't played it. + +00:15:08.160 --> 00:15:08.480 +But that 1 seems a little bit more + +00:15:10.640 --> 00:15:10.920 +structured, but still could be a lot of fun + +00:15:13.700 --> 00:15:13.860 +too. And then others, it's like, + +00:15:15.240 --> 00:15:15.260 +how far do you want to take it? + +00:15:18.280 --> 00:15:18.780 +Like I just picked up this 1 called Broken + +00:15:21.820 --> 00:15:21.980 +Cask. There it is, where you generate a + +00:15:25.240 --> 00:15:25.640 +little bar tavern, and then you start rolling + +00:15:29.180 --> 00:15:29.540 +events. Now, it gives a lot more stuff coming + +00:15:30.780 --> 00:15:31.060 +out of it. It's like, oh, + +00:15:32.700 --> 00:15:32.980 +this person's showing up and this is what's + +00:15:34.700 --> 00:15:34.840 +happening, but you can elaborate on it as + +00:15:36.660 --> 00:15:36.880 +much as you want. And that's what I'm + +00:15:39.600 --> 00:15:39.840 +thinking I might do. Hi, + +00:15:40.600 --> 00:15:41.100 +Mike, you got a question? + +00:15:47.680 --> 00:15:48.180 +[Speaker 3]: Hi, Howard. Yeah, I do have a question. + +00:15:50.940 --> 00:15:51.440 +I'm a big fan of your work on literate DevOps + +00:15:53.120 --> 00:15:53.620 +and your essay and video on that topic. + +00:15:56.040 --> 00:15:56.260 +I'm just wondering if you still use that + +00:15:59.640 --> 00:15:59.820 +workflow at work and have you changed how + +00:16:02.160 --> 00:16:02.420 +that process works or has it evolved over + +00:16:04.720 --> 00:16:05.220 +time since that video and essay were written? + +00:16:06.840 --> 00:16:07.340 +[Speaker 1]: That's a good question. + +00:16:12.440 --> 00:16:12.600 +Yes, I still do it. It varies depending on + +00:16:13.500 --> 00:16:14.000 +the project and whatnot. + +00:16:16.400 --> 00:16:16.900 +But I still am using it. + +00:16:20.280 --> 00:16:20.520 +Yeah, yeah. In fact, I'm doing it with a lot + +00:16:22.760 --> 00:16:23.260 +of other things. Like all my configuration + +00:16:27.660 --> 00:16:28.160 +files are all in a literate style for Emacs. + +00:16:31.160 --> 00:16:31.660 +And even all the code that's in Ironsworn, + +00:16:35.060 --> 00:16:35.560 +the repo, if you go to the repo, + +00:16:37.440 --> 00:16:37.640 +it's the readme file. And yeah, + +00:16:39.720 --> 00:16:40.140 +that's just being rendered out to the Emacs + +00:16:41.660 --> 00:16:42.160 +file. So it is still all literate. + +00:16:43.440 --> 00:16:43.940 +[Speaker 3]: Very cool. + +00:16:46.500 --> 00:16:46.780 +[Speaker 1]: Yeah, because I don't know. + +00:16:48.120 --> 00:16:48.620 +Some things are just a little too complicated + +00:16:49.320 --> 00:16:49.820 +to just type up. + +00:16:56.040 --> 00:16:56.200 +[Speaker 0]: All right, sorry to be the bearer of bad + +00:16:58.220 --> 00:16:58.720 +news, but we have only about 3 more minutes + +00:16:59.840 --> 00:17:00.060 +of lifetime. By the way, + +00:17:02.920 --> 00:17:03.120 +feel free to stay and discuss any of the + +00:17:07.540 --> 00:17:08.040 +topic of today's session after we go off air + +00:17:10.579 --> 00:17:10.859 +and we'll be able to keep all of the nice + +00:17:12.260 --> 00:17:12.540 +discussion and put them on the talks page + +00:17:16.560 --> 00:17:17.060 +afterwards. Great. Howard, + +00:17:20.020 --> 00:17:20.280 +I would like to ask you if you have any last + +00:17:21.760 --> 00:17:21.900 +words regarding the presentation or the + +00:17:23.040 --> 00:17:23.540 +questions you've had. Well, + +00:17:24.520 --> 00:17:25.020 +the last question we had, + +00:17:27.500 --> 00:17:27.720 +actually, we had Mike come and ask it live. + +00:17:29.440 --> 00:17:29.720 +But do you have any parting words before we + +00:17:31.720 --> 00:17:32.220 +leave you? Okay. + +00:17:37.560 --> 00:17:38.000 +[Speaker 1]: I think the last thing is go and hack + +00:17:41.420 --> 00:17:41.720 +something. I mean, this Lisp stuff is a lot + +00:17:43.860 --> 00:17:44.360 +of fun. And I hope that came across. + +00:17:47.240 --> 00:17:47.420 +It's like, the project I made is just a + +00:17:50.220 --> 00:17:50.720 +personal thing and it was fun for me to make, + +00:17:53.100 --> 00:17:53.400 +but everybody's probably got some fun thing + +00:17:54.320 --> 00:17:54.820 +they could make as well. + +00:17:56.200 --> 00:17:56.700 +And just, I don't know, + +00:17:58.460 --> 00:17:58.960 +hack it yourself because all the, + +00:18:01.920 --> 00:18:02.420 +you know, think about adding multi-threading + +00:18:04.480 --> 00:18:04.740 +to Emacs. Maybe we don't want that, + +00:18:06.000 --> 00:18:06.360 +because that'll just complicate things. + +00:18:08.200 --> 00:18:08.700 +This is your own personal hacking sandbox, + +00:18:09.520 --> 00:18:10.020 +so go have fun. + +00:18:14.220 --> 00:18:14.380 +[Speaker 0]: Great. I was just going to say we were + +00:18:15.060 --> 00:18:15.560 +talking about Dwarf Fortress. + +00:18:18.680 --> 00:18:19.180 +In Dwarf Fortress, it's a very CPU intensive + +00:18:21.020 --> 00:18:21.240 +game because it needs to compute every single + +00:18:23.480 --> 00:18:23.860 +thing in the world and there's such a thing + +00:18:27.700 --> 00:18:27.780 +as the CPU death of the world where basically + +00:18:29.340 --> 00:18:29.500 +you've got too many cats that are just + +00:18:31.320 --> 00:18:31.440 +breeding constantly with 1 another and it + +00:18:33.760 --> 00:18:34.000 +creates so many entities that it just + +00:18:36.760 --> 00:18:36.940 +crashes, and the time it takes for the day to + +00:18:38.440 --> 00:18:38.940 +finish it, it just never finish. + +00:18:40.680 --> 00:18:41.180 +So I was going to say maybe multi-threading + +00:18:43.180 --> 00:18:43.660 +might be useful in this case for Emacs. + +00:18:46.100 --> 00:18:46.600 +So, wanting to foray into the future. + +00:18:48.800 --> 00:18:49.300 +[Speaker 1]: All right. Thank you. + +00:18:50.900 --> 00:18:51.180 +[Speaker 0]: And thank you so much, + +00:18:52.360 --> 00:18:52.540 +Howard, and thank you Plasma Strike for your + +00:18:53.320 --> 00:18:53.560 +question, as well as Mike, + +00:18:55.760 --> 00:18:55.900 +who joined us. We're going to go live with + +00:18:57.440 --> 00:18:57.940 +the next talk in about 1 minute, + +00:19:00.400 --> 00:19:00.580 +and until then, well, I'm not going to put + +00:19:02.040 --> 00:19:02.400 +music, You can wait 50 seconds without music, + +00:19:03.960 --> 00:19:04.460 +you Zoomers. We'll be back in a bit. + +00:19:05.280 --> 00:19:05.780 +[Speaker 2]: Bye-bye. + +00:19:09.620 --> 00:19:09.860 +[Speaker 0]: Bye, Howard. All right, + +00:19:11.120 --> 00:19:11.280 +we are off. Thank you so much, + +00:19:11.980 --> 00:19:12.480 +Howard. I need to dash. + +00:19:13.940 --> 00:19:14.440 +And oh, I think he's already gone. + +00:19:16.360 --> 00:19:16.860 +So Bye everyone, I'll see you later. diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt new file mode 100644 index 00000000..53987434 --- /dev/null +++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt @@ -0,0 +1,41 @@ +WEBVTT + + +00:00:00.000 --> 00:01:20.679 +Introduction + +00:01:20.680 --> 00:02:47.439 +Solo RPGs + +00:02:47.440 --> 00:04:11.759 +Demo + +00:04:11.760 --> 00:05:31.959 +Randomization + +00:05:31.960 --> 00:06:03.639 +Moves + +00:06:03.640 --> 00:06:34.679 +Reference + +00:06:34.680 --> 00:07:48.679 +Story arcs + +00:07:48.680 --> 00:09:02.959 +Using different stats + +00:09:02.960 --> 00:09:34.799 +Dice rolls + +00:09:34.800 --> 00:10:19.679 +Dangers + +00:10:19.680 --> 00:11:49.679 +A strong success + +00:11:49.680 --> 00:13:04.719 +Other solo RPGs + +00:13:04.720 --> 00:14:35.920 +Conclusion diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt new file mode 100644 index 00000000..9e8147a4 --- /dev/null +++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt @@ -0,0 +1,834 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:05.559 +Hi there, I'm Howard Abrams. You may remember me + +00:00:05.560 --> 00:00:07.719 +from past conference talks + +00:00:07.720 --> 00:00:10.519 +as "Literate DevOps and the Temple of Doom" + +00:00:10.520 --> 00:00:13.399 +and "Using Eshell for Fun and Profit". + +00:00:13.400 --> 00:00:16.599 +I'm here to talk to you about my latest Emacs project: + +00:00:16.600 --> 00:00:19.479 +playing games, solo role-playing games. + +00:00:19.480 --> 00:00:23.159 +I started playing RPGs when I got my first copy + +00:00:23.160 --> 00:00:25.599 +of Dungeons & Dragons when I was 12. + +00:00:25.600 --> 00:00:28.279 +Yes, my original copy burned + +00:00:28.280 --> 00:00:30.559 +in the Great Satanic Panic of the 1980s, + +00:00:30.560 --> 00:00:32.359 +but that's another story. + +00:00:32.360 --> 00:00:37.919 +I started playing other RPGs like GURPS. + +00:00:37.920 --> 00:00:39.999 +These are some of my notes. + +00:00:40.000 --> 00:00:42.559 +Back then, I was typing them in Emacs, + +00:00:42.560 --> 00:00:46.079 +but I formatted them with LaTeX. + +00:00:46.080 --> 00:00:49.079 +Later, when I was introducing my kids + +00:00:49.080 --> 00:00:50.839 +to role-playing games, + +00:00:50.840 --> 00:00:53.580 +I actually typed them up still in Emacs, + +00:00:53.581 --> 00:00:57.599 +but now formatted them for a tablet. + +00:00:57.600 --> 00:00:59.319 +I wrote a little JavaScript code + +00:00:59.320 --> 00:01:03.119 +that allowed me to click on it, and it would roll dice, + +00:01:03.120 --> 00:01:06.679 +generate random events, keep track of turn order, + +00:01:06.680 --> 00:01:07.479 +you know, everything, + +00:01:07.480 --> 00:01:10.119 +so I didn't have to slow down the action of the game. + +00:01:10.120 --> 00:01:12.999 +Well, when my kids got older, + +00:01:13.000 --> 00:01:15.599 +I still managed to sneak in a game of D&D + +00:01:15.600 --> 00:01:17.319 +once a week at lunch. + +00:01:17.320 --> 00:01:20.679 +This pastime came to a screeching halt with the pandemic. + +NOTE Solo RPGs + +00:01:20.680 --> 00:01:23.639 +I turned to playing role-playing games by myself + +00:01:23.640 --> 00:01:27.999 +to get my fix. Playing these silly elf games in solo mode + +00:01:28.000 --> 00:01:29.879 +has been part of the game for many years, + +00:01:29.880 --> 00:01:32.559 +but with so many of us stuck at home, + +00:01:32.560 --> 00:01:35.119 +solo role-playing games really expanded, + +00:01:35.120 --> 00:01:40.279 +creative people releasing some amazing ideas. + +00:01:40.280 --> 00:01:44.399 +What's a solo RPG like? Well, it's somewhere in the middle + +00:01:44.400 --> 00:01:47.519 +of writing your own story, where anything's possible, + +00:01:47.520 --> 00:01:50.159 +but you've got to do all the imaginative work; + +00:01:50.160 --> 00:01:52.999 +or reading a choose-your-own-adventure book, + +00:01:53.000 --> 00:01:55.239 +where the text is given to you, + +00:01:55.240 --> 00:01:59.079 +and you have free, a few predetermined paths; + +00:01:59.080 --> 00:02:01.039 +and tactical battle games, + +00:02:01.040 --> 00:02:03.159 +where dice determines everything. + +00:02:03.160 --> 00:02:05.799 +It kind of fits in the sweet spot between those. + +00:02:05.800 --> 00:02:08.879 +While I started removing the Game Master + +00:02:08.880 --> 00:02:12.119 +using the Mythic GM Emulator, + +00:02:12.120 --> 00:02:15.319 +Ironsworn really captivated me. + +00:02:15.320 --> 00:02:19.199 +I began with dice, pencils, notebooks, you know, + +00:02:19.200 --> 00:02:23.359 +just like when I was a kid. But taking notes on paper? + +00:02:23.360 --> 00:02:27.999 +Yeah, you know me. That's not my jam. Org mode is. + +00:02:28.000 --> 00:02:31.159 +And, you know, notes have to be in Org, + +00:02:31.160 --> 00:02:35.159 +well, why not write a little dice roller in Lisp? + +00:02:35.160 --> 00:02:38.799 +Well, when Shawn Tomkin released his Ironsworn + +00:02:38.800 --> 00:02:41.879 +under the Creative Commons, well, + +00:02:41.880 --> 00:02:43.919 +I could just download the entire text. + +00:02:43.920 --> 00:02:47.439 +I figured I could just render the entire game in Emacs. + +NOTE Demo + +00:02:47.440 --> 00:02:51.239 +All right, enough talk. Let's get some Emacs action here, + +00:02:51.240 --> 00:02:55.199 +while I show you a bit of my game. + +00:02:55.200 --> 00:02:57.519 +When playing a solo RPG, + +00:02:57.520 --> 00:02:59.759 +I jot down the story notes in an Org file. + +00:02:59.760 --> 00:03:02.759 +I mean, did you expect anything less from me? + +00:03:02.760 --> 00:03:07.759 +I alternate between lengthy prose and short notes. + +00:03:07.760 --> 00:03:10.519 +As I'm both the writer and the audience, + +00:03:10.520 --> 00:03:11.999 +the goal is just enjoyment. + +00:03:12.000 --> 00:03:16.999 +So, this document is both a record log of my game sessions, + +00:03:17.000 --> 00:03:20.959 +as well as my character's character sheet. + +00:03:20.960 --> 00:03:24.519 +In most RPGs, a player's focus is a character sheet + +00:03:24.520 --> 00:03:26.999 +that lists all the attributes, the stats, equipment, + +00:03:27.000 --> 00:03:28.759 +powers, you know, that sort of thing. + +00:03:28.760 --> 00:03:32.959 +For my game, I wanted the focus to be the prose, + +00:03:32.960 --> 00:03:34.559 +or at least the notes. + +00:03:34.560 --> 00:03:38.199 +So, I put down all the stats as Org mode properties. + +00:03:38.200 --> 00:03:40.799 +Now, I can collapse a property drawer + +00:03:40.800 --> 00:03:42.119 +and have functions + +00:03:42.120 --> 00:03:45.759 +that just grab values from these properties. + +00:03:45.760 --> 00:03:50.079 +All right, let's play. While not important to my talk, + +00:03:50.080 --> 00:03:52.679 +I'm in the middle of a game. My character, Tegan, + +00:03:52.680 --> 00:03:54.959 +promised to help a village by tracking down + +00:03:54.960 --> 00:03:59.239 +the son of a village chief. A less-than-stellar roll + +00:03:59.240 --> 00:04:01.199 +meant I didn't catch him before he entered + +00:04:01.200 --> 00:04:03.879 +the mysterious underground structure + +00:04:03.880 --> 00:04:06.399 +of a relic of an ancient people. + +00:04:06.400 --> 00:04:08.399 +I just finished playing out the journey, + +00:04:08.400 --> 00:04:11.759 +and he's about to enter into the Catacombs of Svala's Blood. + +NOTE Randomization + +00:04:11.760 --> 00:04:15.199 +Why that name? Well, that was actually what came up + +00:04:15.200 --> 00:04:19.639 +from an extensive random number generator that I wrote. + +00:04:19.640 --> 00:04:21.959 +As I wrote more and more functions + +00:04:21.960 --> 00:04:23.279 +to help me play this game, + +00:04:23.280 --> 00:04:25.919 +and since I don't play all the time, + +00:04:25.920 --> 00:04:30.359 +I created hydra. I can roll dice, + +00:04:30.360 --> 00:04:34.079 +I can roll dice challenges against the character stats, + +00:04:34.080 --> 00:04:38.199 +I can adjust stats. Lots of random generators + +00:04:38.200 --> 00:04:39.479 +come from this oracle section. + +00:04:39.480 --> 00:04:43.159 +For instance, are footprints going through the door? + +00:04:43.160 --> 00:04:46.479 +I press `c`, and I'm prompted with how likely. + +00:04:46.480 --> 00:04:51.079 +Since the villagers gave Tegan vague directions, + +00:04:51.080 --> 00:04:53.239 +and he didn't see any signs the contrary, + +00:04:53.240 --> 00:04:58.479 +I chose "likely". And, well, it originally said yes, + +00:04:58.480 --> 00:05:01.599 +and that's why I jotted this information down. + +00:05:01.600 --> 00:05:03.479 +Now, this is different than my character's ability + +00:05:03.480 --> 00:05:07.639 +to notice the prints. This is about generating the story, + +00:05:07.640 --> 00:05:10.279 +something that the game master would do + +00:05:10.280 --> 00:05:12.479 +in a typical role-playing game. + +00:05:12.480 --> 00:05:14.719 +Now, if I wanted to name something, + +00:05:14.720 --> 00:05:16.039 +or even the current weather, + +00:05:16.040 --> 00:05:20.399 +I have random tables with the `C` keystroke. + +00:05:20.400 --> 00:05:27.279 +Hmm, weather. Oh, it's summer, so hey, + +00:05:27.280 --> 00:05:31.959 +it's nice and clear. All right, let's play. + +NOTE Moves + +00:05:31.960 --> 00:05:34.239 +The action in Ironsworn, + +00:05:34.240 --> 00:05:37.039 +like other Powered by the Apocalypse games, + +00:05:37.040 --> 00:05:44.359 +is driven by moves. So, I hit the `m` key, + +00:05:44.360 --> 00:05:46.879 +and all the moves show up. + +00:05:46.880 --> 00:05:49.479 +Now, I don't think I need to espouse + +00:05:49.480 --> 00:05:52.679 +the virtues of completing-read enhancements like Ivy. + +00:05:52.680 --> 00:05:55.559 +Here, I'm using orderless with vertico + +00:05:55.560 --> 00:05:57.719 +to help me find my choices. + +00:05:57.720 --> 00:06:03.639 +Since I've discovered a site, let's play that move. + +NOTE Reference + +00:06:03.640 --> 00:06:06.479 +I seldom remember the details for the moves, + +00:06:06.480 --> 00:06:09.159 +so I figured, why not put the text of the book + +00:06:09.160 --> 00:06:11.799 +in an Org file and show it in a side window? + +00:06:11.800 --> 00:06:15.439 +The prompt at the bottom, asking for a name, + +00:06:15.440 --> 00:06:18.199 +is driven by the content in the displayed Org file. + +00:06:18.200 --> 00:06:21.119 +This allows me to enhance my game without + +00:06:21.120 --> 00:06:25.159 +changing the original code. So, let's call this story arc, + +00:06:25.160 --> 00:06:31.839 +Exploring the Catacombs of Svala's Blood. + +00:06:31.840 --> 00:06:34.679 +Ooh, sounds epic. + +NOTE Story arcs + +00:06:34.680 --> 00:06:37.239 +Ironsworn tracks the beats of a narrative, + +00:06:37.240 --> 00:06:40.799 +so major plot points take up more room in the fiction + +00:06:40.800 --> 00:06:42.759 +than minor plot points. + +00:06:42.760 --> 00:06:45.039 +Similar games like Blades in the Dark + +00:06:45.040 --> 00:06:48.199 +use numbers to track these, so you can say something like, + +00:06:48.200 --> 00:06:51.079 +we're three quarters of the way through this story arc. + +00:06:51.080 --> 00:06:53.119 +Ironsworn just uses labels, + +00:06:53.120 --> 00:06:55.839 +and while I want this particular story arc + +00:06:55.840 --> 00:06:59.519 +to be significant, I really just want to get in, + +00:06:59.520 --> 00:07:00.959 +find this person, and get out. + +00:07:00.960 --> 00:07:04.039 +So, I'm going to call this "short". + +00:07:04.040 --> 00:07:09.279 +Next, it's asking about an Org mode header placement. + +00:07:09.280 --> 00:07:12.199 +While I originally wanted my Org files + +00:07:12.200 --> 00:07:13.799 +to be completely flexible, + +00:07:13.800 --> 00:07:15.919 +one thing I noticed in playing + +00:07:15.920 --> 00:07:17.999 +is that a pattern always emerged. + +00:07:18.000 --> 00:07:22.639 +The story became a tree. You see, story arcs + +00:07:22.640 --> 00:07:25.559 +were just a series of montages or scenes, + +00:07:25.560 --> 00:07:27.919 +and each of those were made of a series of events + +00:07:27.920 --> 00:07:29.119 +and challenges to overcome. + +00:07:29.120 --> 00:07:32.799 +So, each Org mode header has a track, + +00:07:32.800 --> 00:07:35.719 +which often becomes the number of subheadings. + +00:07:35.720 --> 00:07:40.639 +At any point, I can see how much track is being made. + +00:07:40.640 --> 00:07:47.239 +So, for instance, this one seems to be + +00:07:47.240 --> 00:07:48.679 +about a third of the way through. + +NOTE Using different stats + +00:07:48.680 --> 00:07:52.599 +So, let's dive into this ancient place. + +00:07:52.600 --> 00:07:55.719 +Since I've been walking through a misty forest, + +00:07:55.720 --> 00:07:59.319 +I can imagine vines hiding an immense door + +00:07:59.320 --> 00:08:01.959 +and a humid, earthy smell as I peer inside. + +00:08:01.960 --> 00:08:04.319 +But I don't have to write that stuff down, + +00:08:04.320 --> 00:08:06.919 +or if I want to practice my writing, I can. + +00:08:06.920 --> 00:08:09.359 +I can imagine the place is dark, + +00:08:09.360 --> 00:08:10.839 +so Tegan lights a torch + +00:08:10.840 --> 00:08:13.039 +before peering into this obscure world. + +00:08:13.040 --> 00:08:15.799 +As this move mentions, + +00:08:15.800 --> 00:08:20.279 +the next move to make is called Delve the Depths. + +00:08:20.280 --> 00:08:26.159 +As soon as I select this move, + +00:08:26.160 --> 00:08:31.319 +it shows up on the side window, and explains that, + +00:08:31.320 --> 00:08:34.399 +depending on how you're moving through + +00:08:34.400 --> 00:08:36.239 +this ancient catacombs, + +00:08:36.240 --> 00:08:38.759 +is what kind of stat I roll against, + +00:08:38.760 --> 00:08:41.039 +and those stats show up at the bottom. + +00:08:41.040 --> 00:08:45.479 +You know, if I'm sneaking around, you roll against "shadow". + +00:08:45.480 --> 00:08:47.719 +If you're trying to go as fast as you can, it's "edge". + +00:08:47.720 --> 00:08:51.679 +But I kind of imagine that he's thinking through, + +00:08:51.680 --> 00:08:53.679 +being very careful about it. + +00:08:53.680 --> 00:08:55.759 +So, I'm going to select "wits". + +00:08:55.760 --> 00:08:57.719 +And I don't have any modifiers. + +00:08:57.720 --> 00:08:59.559 +Just about every one of my stats prompts me + +00:08:59.560 --> 00:09:02.959 +if I want to add or subtract any values. + +NOTE Dice rolls + +00:09:02.960 --> 00:09:09.879 +A miss. I should explain how the dice roll in this game. + +00:09:09.880 --> 00:09:13.399 +The downside to Ironsworn is that + +00:09:13.400 --> 00:09:16.839 +the dice mechanics are more cumbersome than other games. + +00:09:16.840 --> 00:09:20.199 +You roll a 6-sided die, add to it your relevant stat, + +00:09:20.200 --> 00:09:24.599 +plus any modifiers. Next, you roll two 10-sided die + +00:09:24.600 --> 00:09:25.799 +and see how it compares. + +00:09:25.800 --> 00:09:28.679 +Of course, I programmed this in Lisp, + +00:09:28.680 --> 00:09:31.599 +but when I displayed it, I wanted to see all the dice. + +00:09:31.600 --> 00:09:34.799 +And I also just wanted to see the end results. + +NOTE Dangers + +00:09:34.800 --> 00:09:37.479 +So I colored it. I rolled a miss, + +00:09:37.480 --> 00:09:39.799 +which means I need to reveal a danger. + +00:09:39.800 --> 00:09:43.519 +Sure, I could imagine all sorts of dangers, + +00:09:43.520 --> 00:09:44.359 +but this is a game. + +00:09:44.360 --> 00:09:48.359 +I've already made a random generator for dangers. + +00:09:48.360 --> 00:09:51.719 +In fact, I've made a random generator + +00:09:51.720 --> 00:09:55.479 +for dangers in an ancient underkeep. + +00:09:55.480 --> 00:10:00.879 +Discovery undermines or complicates the quest. + +00:10:00.880 --> 00:10:09.719 +Hmm, a complication for finding the chief's son? + +00:10:09.720 --> 00:10:13.319 +What about a labyrinth full of hallways and levels + +00:10:13.320 --> 00:10:16.599 +with lots of choices and almost no way of finding them? + +00:10:16.600 --> 00:10:19.679 +Yeah, that sounds like it fits pretty well. + +NOTE A strong success + +00:10:19.680 --> 00:10:26.959 +Time for another move. This time, we're going to + +00:10:26.960 --> 00:10:28.799 +gather information, + +00:10:28.800 --> 00:10:32.279 +see if we can figure out which way to go. + +00:10:32.280 --> 00:10:34.719 +A strong hit. Excellent. + +00:10:34.720 --> 00:10:38.399 +I imagine Tegan noticing footprints in the dust + +00:10:38.400 --> 00:10:40.439 +and knowing where to go. + +00:10:40.440 --> 00:10:44.319 +The game suggests that when you get a strong success, + +00:10:44.320 --> 00:10:45.799 +you can increase your momentum. + +00:10:45.800 --> 00:10:48.879 +These game mechanics + +00:10:48.880 --> 00:10:51.754 +come into play later, but this function here + +00:10:51.755 --> 00:10:57.880 +allows me to adjust that stat +2. + +00:10:57.881 --> 00:11:01.460 +I don't even have to scroll to the top of the buffer + +00:11:01.461 --> 00:11:04.820 +and edit that value in my properties. + +00:11:04.821 --> 00:11:08.159 +At any point, I can take a look at those stats + +00:11:08.160 --> 00:11:10.439 +and see how they measure up. + +00:11:10.440 --> 00:11:13.159 +Again, I don't have to scroll up + +00:11:13.160 --> 00:11:14.879 +and take a look at my properties + +00:11:14.880 --> 00:11:16.559 +at the top of the Org mode file. + +00:11:16.560 --> 00:11:19.239 +That's how I play the game. + +00:11:19.240 --> 00:11:24.639 +It's just a recursive loop of playing a move, + +00:11:24.640 --> 00:11:27.319 +rolling some dice to see how it works, + +00:11:27.320 --> 00:11:30.159 +trying to answer the question + +00:11:30.160 --> 00:11:33.679 +based on your own imagination or random tables, + +00:11:33.680 --> 00:11:35.599 +which the game calls oracles, + +00:11:35.600 --> 00:11:41.199 +and play creatively until you decide to take a break + +00:11:41.200 --> 00:11:42.399 +and pick it up another time. + +00:11:42.400 --> 00:11:46.999 +I think you get the gist of how I play + +00:11:47.000 --> 00:11:49.679 +this dice and pencil game in Org Mode. + +NOTE Other solo RPGs + +00:11:49.680 --> 00:11:54.039 +However, I found more solo RPGs to play. + +00:11:54.040 --> 00:11:57.319 +And of course, I want to render them in Emacs too. + +00:11:57.320 --> 00:12:00.799 +This code for Ironsworn was a bit too specific, + +00:12:00.800 --> 00:12:04.759 +so I decided to create a role-playing game toolkit. + +00:12:04.760 --> 00:12:09.599 +This project is still in the early stages, + +00:12:09.600 --> 00:12:12.199 +but I've created some functions + +00:12:12.200 --> 00:12:16.719 +for mimicking rolling dice, including a mini-DSL for + +00:12:16.720 --> 00:12:19.799 +making dice mechanics + +00:12:19.800 --> 00:12:22.839 +typical of many role-playing game systems. + +00:12:22.840 --> 00:12:26.519 +I've also ported over the random table system. + +00:12:26.520 --> 00:12:30.479 +A text file can just list entries to be displayed at random. + +00:12:30.480 --> 00:12:33.959 +I love that I can put dice expression + +00:12:33.960 --> 00:12:35.799 +and word choices in the entries. + +00:12:35.800 --> 00:12:39.439 +One type of random table allows you + +00:12:39.440 --> 00:12:41.559 +to essentially copy and paste a table + +00:12:41.560 --> 00:12:43.799 +from a published game into a text file. + +00:12:43.800 --> 00:12:47.879 +A frequency table is what I'm calling + +00:12:47.880 --> 00:12:50.879 +a list of random entries where some entries show up + +00:12:50.880 --> 00:12:55.959 +more often than others. I'm working on generalizing + +00:12:55.960 --> 00:12:59.959 +the character sheet attributes as Org properties, + +00:12:59.960 --> 00:13:04.719 +so if you're interested, check out the project at Codeberg. + +NOTE Conclusion + +00:13:04.720 --> 00:13:10.359 +The point of my presentation is not to show off Ironsworn, + +00:13:10.360 --> 00:13:14.079 +how I programmed it, or even this new toolkit. + +00:13:14.080 --> 00:13:17.559 +You see, most engineers, + +00:13:17.560 --> 00:13:20.479 +when they get an idea for a game like mine, + +00:13:20.480 --> 00:13:24.079 +would make a web app. Nothing wrong with it. + +00:13:24.080 --> 00:13:25.959 +More people can play it, + +00:13:25.960 --> 00:13:28.199 +but web apps suffer from text entry. + +00:13:28.200 --> 00:13:30.959 +And don't tell me you prefer the keyboard interface + +00:13:30.960 --> 00:13:35.959 +to Google Docs. Oh, and the JavaScript framework du jour? + +00:13:35.960 --> 00:13:40.399 +Oh, I mean, that's a huge barrier of entry + +00:13:40.400 --> 00:13:42.039 +when all you want to do + +00:13:42.040 --> 00:13:44.359 +is have a bit of fun prototyping a game. + +00:13:44.360 --> 00:13:48.479 +What I'd like to impress upon you + +00:13:48.480 --> 00:13:53.999 +is that hacking Emacs to make personal games is a trip. + +00:13:54.000 --> 00:13:57.359 +Learning Lisp is, it's easy. + +00:13:57.360 --> 00:14:00.919 +And more, Emacs Lisp has some, well sure, + +00:14:00.920 --> 00:14:04.519 +it has some cruft. But really, some of those features + +00:14:04.520 --> 00:14:07.599 +that I would hate at a distributed system at work, + +00:14:07.600 --> 00:14:10.919 +like global variables, makes hacking easier + +00:14:10.920 --> 00:14:14.719 +when you just want to have some fun in your own system. + +00:14:14.720 --> 00:14:19.599 +So, grab your laptop, sink into your comfy chair, + +00:14:19.600 --> 00:14:21.599 +pour yourself a glass of scotch, + +00:14:21.600 --> 00:14:24.719 +and craft yourself an enjoyable evening. + +00:14:24.720 --> 00:14:35.920 +Happy hacking, my friends. diff --git a/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt b/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt new file mode 100644 index 00000000..c3f0d9a2 --- /dev/null +++ b/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt @@ -0,0 +1,1033 @@ +WEBVTT captioned by Daniel Alejandro Tapia + +00:00:00.660 --> 00:00:03.839 +Stenotypy is a system of typing + +00:00:03.840 --> 00:00:07.339 +where you press multiple keys at the same time, + +00:00:07.340 --> 00:00:13.359 +letting you send more than one letter at a time. + +00:00:13.360 --> 00:00:16.939 +This is a video from the 1920s. + +00:00:16.940 --> 00:00:23.059 +The man is holding a stenotype, a device used for stenotypy. + +00:00:23.060 --> 00:00:26.359 +This particular one is called Grandjean. + +00:00:26.360 --> 00:00:30.067 +It's made for the French language. + +00:00:30.068 --> 00:00:31.739 +In this demonstration, + +00:00:31.740 --> 00:00:34.899 +the man is going to be dictating a passage, + +00:00:34.900 --> 00:00:38.759 +first, slowly and then quickly. + +00:00:38.760 --> 00:00:42.419 +The lady on the left doesn't have trouble keeping up. + +00:00:42.420 --> 00:00:44.859 +She's using stenotypy. + +00:00:44.860 --> 00:00:48.319 +The lady on the right is a good typist, + +00:00:48.320 --> 00:01:13.299 +but she can't keep up when the dictation gets faster. + +00:01:13.300 --> 00:01:16.019 +I'm nowhere near as fast as this lady. + +00:01:16.020 --> 00:01:18.779 +She's extremely skilled. + +00:01:18.780 --> 00:01:24.539 +I'm not even a tenth of what she is. + +00:01:24.540 --> 00:01:28.399 +I don't use Grandjean, I use Melani, + +00:01:28.400 --> 00:01:33.319 +which is a system for Castilian and Italian. + +00:01:33.320 --> 00:01:39.539 +If I want to make the word solo, I press S, O, L, + +00:01:39.540 --> 00:01:43.319 +which is made by two keys, and O. + +00:01:43.320 --> 00:01:45.599 +Here's what that looks like. + +00:01:45.600 --> 00:01:50.799 +The hyphen between S and O means that + +00:01:50.800 --> 00:01:52.519 +the S is on the left side, + +00:01:52.520 --> 00:01:57.039 +and the rest of the letters are on the right side. + +00:01:57.040 --> 00:01:59.999 +If I want to write the word sólo, + +00:02:00.000 --> 00:02:02.439 +which is just like the previous word, + +00:02:02.440 --> 00:02:05.479 +but with the first O accented, + +00:02:05.480 --> 00:02:08.259 +I would press the asterisk key. + +00:02:08.260 --> 00:02:11.959 +In Melani, the asterisk is used + +00:02:11.960 --> 00:02:20.299 +to put an accent on a letter. + +00:02:20.300 --> 00:02:22.039 +If you speak English, + +00:02:22.040 --> 00:02:25.039 +then you would likely use the Ireland system. + +00:02:25.040 --> 00:02:28.779 +S-E-T makes the word set. + +00:02:28.780 --> 00:02:32.379 +In Ireland, you can make a long vowel sound + +00:02:32.380 --> 00:02:34.259 +by pressing the two thumb keys + +00:02:34.260 --> 00:02:41.699 +on the other side of the vowel you want to make long. + +00:02:41.700 --> 00:02:44.120 +S-long-E-T makes the word seat. + +00:02:50.200 --> 00:02:52.659 +This is me programming. + +00:02:52.660 --> 00:02:56.480 +After a few lines, I'll explain what's going on. + +00:03:19.580 --> 00:03:23.379 +In GNU Emacs, you can create abbreviations + +00:03:23.380 --> 00:03:25.539 +that expand to strings. + +00:03:25.540 --> 00:03:31.359 +For example, you can create an abbrev, like btwx, + +00:03:31.360 --> 00:03:33.979 +that will expand to "by the way" + +00:03:33.980 --> 00:03:40.359 +when you succeed btwx with a space or some punctuation. + +00:03:40.360 --> 00:03:42.439 +Here that's what I'm doing. + +00:03:42.440 --> 00:03:48.139 +I type d and then emacs, which expands to this. + +00:03:48.140 --> 00:03:50.659 +But this is a different kind of expansion + +00:03:50.660 --> 00:03:54.339 +from a simple string like by the way. + +00:03:54.340 --> 00:03:56.639 +This one has structure. + +00:03:56.640 --> 00:04:00.679 +It has interesting points that I can jump to. + +00:04:00.680 --> 00:04:01.919 +It's called a skeleton. + +00:04:03.740 --> 00:04:05.939 +This is the skeleton. + +00:04:05.940 --> 00:04:10.559 +The part that I want you to focus on is the @ symbols. + +00:04:10.560 --> 00:04:15.739 +Those are the interesting points that I jump to. + +00:04:15.740 --> 00:04:18.259 +So, at one interesting point, + +00:04:18.260 --> 00:04:20.699 +I can write the name of the function, + +00:04:20.700 --> 00:04:24.359 +at another interesting point, the arguments + +00:04:24.360 --> 00:04:28.619 +if the function will need them, the doc string, + +00:04:28.620 --> 00:04:31.799 +and finally the body. + +00:04:31.800 --> 00:04:34.939 +When I get to the body, I use stenotypy + +00:04:34.940 --> 00:04:39.059 +to write the words of the functions I'm looking for. + +00:04:39.060 --> 00:04:41.639 +Then I call a completion framework + +00:04:41.640 --> 00:04:45.059 +to choose from a list of candidates. + +00:04:45.060 --> 00:04:47.859 +This completion framework doesn't care + +00:04:47.860 --> 00:04:52.519 +what order the words are in or how many words I use. + +00:04:52.520 --> 00:04:56.219 +This completion framework is called Corfu, + +00:04:56.220 --> 00:05:00.459 +which stands for COmpletion in Region FUnction. + +00:05:00.460 --> 00:05:03.279 +And I'm using a package called Orderless + +00:05:03.280 --> 00:05:04.439 +to make it stronger. + +00:05:51.460 --> 00:05:57.199 +Here, I use another skeleton, the same one as before. + +00:05:57.200 --> 00:06:00.879 +This time, it has an argument. + +00:06:00.880 --> 00:06:07.239 +Then, when I get to the body, I write another skeleton, + +00:06:07.240 --> 00:06:12.359 +one that has an interesting point between the quotes + +00:06:12.360 --> 00:06:14.919 +and creates a new line + +00:06:14.920 --> 00:06:17.499 +right underneath it. + +00:06:17.500 --> 00:06:20.319 +I typed i and then emacs, + +00:06:20.320 --> 00:06:22.359 +and I got the interactive skeleton. + +00:07:16.120 --> 00:07:18.899 +Now, I use another skeleton, + +00:07:18.900 --> 00:07:20.479 +but these ones differ + +00:07:20.480 --> 00:07:23.039 +because it prompts me for a string, + +00:07:23.040 --> 00:07:27.299 +and I can make the skeleton as long as I want. + +00:07:27.300 --> 00:07:29.799 +If I keep entering text in the prompt, + +00:07:29.800 --> 00:07:33.839 +then Emacs will keep making the skeleton bigger. + +00:07:33.840 --> 00:07:37.999 +When I enter an empty string, it knows to stop asking, + +00:07:38.000 --> 00:07:39.999 +and it sends me to the point + +00:07:40.000 --> 00:07:44.619 +I've designated to go to when a skeleton is created. + +00:07:44.620 --> 00:07:46.439 +That's what the underscore means. + +00:07:48.260 --> 00:07:54.119 +I type c and then Emacs, and I get the condition skeleton. + +00:07:54.120 --> 00:08:00.059 +And then I use Corfu and Orderless to program. + +00:08:00.060 --> 00:08:03.819 +On two functions, I use a dabbrev. + +00:08:03.820 --> 00:08:09.499 +A dabbrev is a dynamic abbreviation. + +00:08:09.500 --> 00:08:11.439 +Here's how it works. + +00:08:11.440 --> 00:08:12.899 +If I have three strings + +00:08:12.900 --> 00:08:17.819 +that begin with S-T, string, strawberry, and stop, + +00:08:17.820 --> 00:08:22.179 +I can write S-T and then call dabbrev expand. + +00:08:22.180 --> 00:08:24.379 +First, this will give me stop + +00:08:24.380 --> 00:08:27.119 +because I'm nearest to the word stop. + +00:08:27.120 --> 00:08:30.499 +Then when I call it again, I'll get strawberry. + +00:08:30.500 --> 00:08:35.459 +And if I call it a third time, I'll get string. + +00:08:35.460 --> 00:08:40.139 +If I start off with S-T-R, then I'll get strawberry first + +00:08:40.140 --> 00:08:42.279 +and then string. + +00:08:42.280 --> 00:08:45.999 +I used dabbrev twice in this function. + +00:08:46.000 --> 00:08:48.079 +If you read the top of the screen, + +00:08:48.080 --> 00:08:52.000 +you can see which commands I use and how I invoke them. + +00:09:00.240 --> 00:09:03.119 +Finally, I use one last skeleton + +00:09:03.120 --> 00:09:07.039 +to map the function I just wrote to a hotkey. + +00:09:07.040 --> 00:09:09.500 +In this case, C-o. + +00:09:15.580 --> 00:09:19.219 +Here we can see what the function I just wrote does. + +00:09:19.220 --> 00:09:22.239 +It opens a line with the line below indented + +00:09:22.240 --> 00:09:23.800 +if it isn't blank. + +00:09:23.801 --> 00:09:29.039 +I've kept the old behavior with an argument of zero + +00:09:29.040 --> 00:09:33.599 +and done something for when I use a negative argument. + +00:09:33.600 --> 00:09:36.899 +You can see the interesting points. + +00:09:36.900 --> 00:09:40.980 +I could jump to any of them or cycle through them. + +00:09:50.000 --> 00:09:54.619 +I normally use a 9-to-16 setup. + +00:09:54.620 --> 00:09:58.119 +To me, Emacs, and computing in general, + +00:09:58.120 --> 00:10:00.880 +is much more pleasant to use that way. + +00:10:07.680 --> 00:10:09.620 +When I stenotype a word, + +00:10:10.000 --> 00:10:14.179 +a space is sent immediately afterwards. + +00:10:14.180 --> 00:10:17.799 +Orderless treats spaces as delimiters. + +00:10:17.800 --> 00:10:19.379 +This is very helpful + +00:10:19.380 --> 00:10:23.459 +because I can enter commands with stenotypy, + +00:10:23.460 --> 00:10:25.219 +without having to worry about + +00:10:25.220 --> 00:10:27.060 +whether words are in the right order. + +00:10:29.320 --> 00:10:34.219 +Lem, spelled L-E-M, is another Emacs. + +00:10:34.220 --> 00:10:35.900 +It's extremely powerful. + +00:10:35.901 --> 00:10:40.060 +But Lem doesn't have skeletons, not yet at least. + +00:10:40.061 --> 00:10:40.359 +So I'm going to program the traditional way. + +00:10:43.740 --> 00:10:47.580 +Nothing fancy, just left-to-right programming. + +00:11:38.800 --> 00:11:41.520 +With Plover, you have dictionaries. + +00:11:41.521 --> 00:11:44.860 +I added Fibonacci to my dictionary. + +00:11:44.861 --> 00:11:47.939 +I made my own dictionary from scratch. + +00:11:47.940 --> 00:11:49.780 +But if you don't want to do that, + +00:11:49.781 --> 00:11:52.260 +there are free dictionaries available + +00:11:52.261 --> 00:11:55.120 +that have many words already in them, + +00:11:55.121 --> 00:11:56.720 +saving you lots of time. + +00:11:56.721 --> 00:12:00.279 +The reason I made my dictionary from scratch + +00:12:00.280 --> 00:12:03.559 +is because I wanted to know my system inside and out. + +00:12:03.560 --> 00:12:07.960 +On one stroke, I typed T. + +00:12:07.961 --> 00:12:12.740 +And, on the next stroke, I stenotyped coalton. + +00:12:12.741 --> 00:12:16.460 +And then I got (coalton-toplevel and a new line. + +00:12:16.461 --> 00:12:19.519 +It's similar to what I did in GNU Emacs + +00:12:19.520 --> 00:12:22.579 +when I expanded a skeleton. + +00:12:22.580 --> 00:12:25.179 +This is actually not stenotypy, + +00:12:25.180 --> 00:12:29.820 +but a different kind of steno, known as serial steno. + +00:12:29.821 --> 00:12:32.940 +Plover is capable of this as well. + +00:12:32.941 --> 00:12:36.840 +Here are some things that Plover can do. + +00:12:36.841 --> 00:12:38.920 +Plover can glue words, + +00:12:38.921 --> 00:12:41.460 +like if you need to make a compound word. + +00:12:41.461 --> 00:12:44.360 +It can break a compound word. + +00:12:44.361 --> 00:12:48.060 +You can press keys to turn off Plover + +00:12:48.061 --> 00:12:50.120 +or to turn it back on. + +00:12:50.121 --> 00:12:52.720 +You can case words the way you want, + +00:12:52.721 --> 00:12:55.760 +uppercase, lowercase, capitalize. + +00:12:55.761 --> 00:12:58.820 +You can change your stenotype layout, + +00:12:58.821 --> 00:13:02.380 +like, say, if you want to use Grandjean for French, + +00:13:02.381 --> 00:13:06.379 +Melani for Castilian, and Ireland for English. + +00:13:06.380 --> 00:13:08.020 +All of that's possible. + +00:13:10.480 --> 00:13:14.619 +Here I should note that I'm using a Plover plugin + +00:13:14.620 --> 00:13:17.520 +called Full Keyboard Steno. + +00:13:17.521 --> 00:13:22.180 +It makes my entire keyboard into a stenotype. + +00:13:26.800 --> 00:13:30.700 +Lem also has a completion feature built in. + +00:13:30.701 --> 00:13:35.100 +But I didn't need it for the code that I wrote. + +00:13:35.101 --> 00:13:37.900 +It's quite good. + +00:13:38.720 --> 00:13:42.280 +In summary, if you add in the symbols + +00:13:42.281 --> 00:13:45.120 +that you're going to need when you're programming, + +00:13:45.121 --> 00:13:46.440 +you'll be fine. + +00:13:46.441 --> 00:13:48.620 +Even without skeletons, + +00:13:48.621 --> 00:13:51.400 +Plover is nice to use for programming. + +00:14:00.920 --> 00:14:05.620 +The search tool is the primary way of navigating in Emacs. + +00:14:05.621 --> 00:14:08.040 +Every Emacser can be measured + +00:14:08.041 --> 00:14:11.639 +by their skill with the search tool. + +00:14:11.640 --> 00:14:14.820 +C-s begins a forward search. + +00:14:14.821 --> 00:14:17.880 +The s stands for search. + +00:14:18.420 --> 00:14:20.740 +I'm reading Aesop's Fables, + +00:14:20.741 --> 00:14:23.640 +and I want to look for the word fox. + +00:14:23.641 --> 00:14:28.200 +So I press C-s and type fox. + +00:14:28.201 --> 00:14:31.599 +If I want to go back to the beginning of the word fox, + +00:14:31.600 --> 00:14:37.500 +I press C-r, which stands for reverse search. + +00:14:37.501 --> 00:14:42.320 +With Stenotypy, spaces are added to the end of words, + +00:14:42.740 --> 00:14:45.520 +so sometimes that causes problems. + +00:14:49.060 --> 00:14:52.120 +We can remedy that by changing the way + +00:14:52.121 --> 00:14:54.880 +Emacs interprets our whitespace. + +00:14:55.360 --> 00:14:57.960 +When I press C-M-s [alt control s], + +00:14:57.961 --> 00:15:01.300 +whitespace is interpreted as a wildcard. + +00:15:01.301 --> 00:15:04.159 +It's a function I made myself. + +00:15:04.160 --> 00:15:09.159 +fox mask will take me to the fox and the mask. + +00:15:09.160 --> 00:15:12.180 +The whitespace is a wildcard. + +00:15:12.181 --> 00:15:16.760 +For me, Ctrl-s makes the whitespace literal. + +00:15:16.761 --> 00:15:20.539 +I like having both options available to me: + +00:15:20.540 --> 00:15:25.219 +literal whitespace and wildcard whitespace. + +00:15:29.420 --> 00:15:32.180 +Say I want to find the cat and the fox, + +00:15:32.620 --> 00:15:34.859 +one of my favorite fables. + +00:15:34.860 --> 00:15:39.419 +I write cat fox, but I don't get what I want. + +00:15:39.420 --> 00:15:42.119 +I've written a function that reverses + +00:15:42.120 --> 00:15:44.739 +the order of my search query. + +00:15:45.260 --> 00:15:47.179 +Now I get what I want. + +00:15:47.880 --> 00:15:50.939 +Searching like this is very convenient. + +00:15:55.340 --> 00:15:58.539 +In Lem, we can do something similar. + +00:15:58.540 --> 00:16:01.419 +I want to read The Fox and the Lion. + +00:16:01.420 --> 00:16:08.379 +I search for Lion Fox. Notice those words are capitalized. + +00:16:08.380 --> 00:16:11.780 +Now I'm going to transform the last two words + +00:16:11.781 --> 00:16:14.299 +into a regular expression + +00:16:14.300 --> 00:16:18.479 +so that the order doesn't matter. + +00:16:18.480 --> 00:16:21.859 +And now I can find the fable I'm looking for. + +00:16:27.220 --> 00:16:31.899 +I did this with a plugin called Retro Stringop, + +00:16:31.900 --> 00:16:34.259 +op meaning operation. + +00:16:34.260 --> 00:16:40.059 +I can perform any operation on the last n words. + +00:16:40.060 --> 00:16:42.319 +Let's look at that. + +00:16:42.320 --> 00:16:44.699 +The 2 means that I want to do something + +00:16:44.700 --> 00:16:46.939 +to the last two words. + +00:16:46.940 --> 00:16:50.899 +The operation I'm performing is Python code. + +00:16:50.900 --> 00:16:54.059 +To be honest, I don't know any Python, + +00:16:54.060 --> 00:16:57.619 +but string manipulation is easy to understand. + +00:16:57.620 --> 00:17:01.700 +If you do know Python, then you can make your own plugins + +00:17:01.701 --> 00:17:04.939 +and even help with the development of Plover. + +00:17:07.820 --> 00:17:09.899 +A feature I like in Lem is that + +00:17:09.900 --> 00:17:15.779 +when you gracefully exit search with Enter or C-m, + +00:17:15.780 --> 00:17:18.499 +what you searched for is highlighted. + +00:17:18.500 --> 00:17:23.240 +You can cycle through the results, the highlights, + +00:17:23.241 --> 00:17:26.619 +and you can toggle the highlights on or off. + +00:17:30.160 --> 00:17:34.480 +1978, John Kulp designs a keyboard + +00:17:34.481 --> 00:17:37.179 +known as the Space Cadet Keyboard. + +00:17:37.180 --> 00:17:40.339 +This keyboard has many distinctive qualities, + +00:17:40.340 --> 00:17:44.419 +one being the modifiers, numbering seven in total: + +00:17:44.420 --> 00:17:51.139 +Shift, Control, Meta, Super, Hyper, Greek, and Top. + +00:17:51.900 --> 00:17:56.019 +This keyboard influences the development of Emacs. + +00:17:56.860 --> 00:18:02.659 +2000, designer Kiyoshi Kimura and programmer Yoji Hagia + +00:18:02.660 --> 00:18:07.399 +release SandS, a program that lets you turn your spacebar + +00:18:07.400 --> 00:18:09.659 +into a dual-function key, + +00:18:09.660 --> 00:18:11.499 +sending space on tap + +00:18:11.500 --> 00:18:15.139 +and acting as the Shift modifier on hold. + +00:18:16.220 --> 00:18:18.500 +This idea, the dual-function key, + +00:18:18.501 --> 00:18:21.379 +later revolutionizes typing. + +00:18:22.060 --> 00:18:25.640 +These two concepts, the space cadet modifiers + +00:18:25.641 --> 00:18:29.579 +and the dual-function key, can be combined. + +00:18:29.580 --> 00:18:32.439 +I use a program called Kanata + +00:18:32.440 --> 00:18:36.659 +to put all the modifiers on my homerow. + +00:18:36.660 --> 00:18:40.099 +When I tap the letter a, I get an a. + +00:18:40.100 --> 00:18:43.419 +If I hold it down for longer than 200 milliseconds, + +00:18:43.420 --> 00:18:46.739 +it acts as the Meta modifier, + +00:18:46.740 --> 00:18:48.059 +and really I can add + +00:18:48.060 --> 00:18:52.399 +as many layers to my keyboard as I want. + +00:18:52.400 --> 00:18:55.499 +I don't use a little stenotype. + +00:18:55.500 --> 00:18:59.139 +Thanks to Full Keyboard Steno, the Plover plugin, + +00:18:59.140 --> 00:19:02.019 +I use my whole keyboard. + +00:19:02.020 --> 00:19:05.439 +I have an alternative keyboard layout on it, + +00:19:05.440 --> 00:19:08.699 +so, even when I'm typing in the traditional way, + +00:19:08.700 --> 00:19:10.379 +it feels amazing. + +00:19:10.380 --> 00:19:15.699 +My layout is called Kuron, and I lay it over Melani + +00:19:15.700 --> 00:19:19.619 +so that I have both available to me at all times. + +00:19:19.620 --> 00:19:24.399 +I don't get them confused because I set them off + +00:19:24.400 --> 00:19:26.939 +with the way I press keys. + +00:19:26.940 --> 00:19:29.319 +If I press one key at a time, + +00:19:29.320 --> 00:19:32.419 +I'm using Kuron, my keyboard layout. + +00:19:32.420 --> 00:19:35.399 +If I press multiple keys at the same time + +00:19:35.400 --> 00:19:37.339 +and let them go quickly, + +00:19:37.340 --> 00:19:41.419 +then I'm using stenotypy, in my case Melani. + +00:19:41.420 --> 00:19:45.240 +And if I hold one key longer than 200 milliseconds, + +00:19:45.241 --> 00:19:51.339 +then I'm activating it as a modifier key or a layer key. + +00:19:51.340 --> 00:19:56.799 +I always know what state I'm in by the way I press my keys. + +00:19:56.800 --> 00:19:59.619 +It's impossible for me to get confused. + +00:20:03.800 --> 00:20:07.859 +Holding multiple modifiers is not a problem + +00:20:07.860 --> 00:20:13.439 +because the keycaps used for stenotypy are flat and square. + +00:20:13.440 --> 00:20:15.979 +Pressing two or more keys at once + +00:20:15.980 --> 00:20:18.899 +with the same finger is easy. + +00:20:18.900 --> 00:20:21.899 +Notice how close they are to each other. + +00:20:21.900 --> 00:20:25.659 +In stenotypy, the homerow is the border + +00:20:25.660 --> 00:20:28.139 +between the two rows of keys. + +00:20:28.560 --> 00:20:31.259 +It took me a while to get used to it, + +00:20:31.260 --> 00:20:35.259 +but now that I am used to it, I quite like it. + +00:20:35.640 --> 00:20:38.219 +So if I have to press a hotkey + +00:20:38.220 --> 00:20:43.979 +with all six modifiers, Shift, Control, Meta, + +00:20:43.980 --> 00:20:50.899 +Alt, Hyper, Super, it's easy. + +00:20:50.900 --> 00:20:54.659 +Thanks to Kanata, I have a Greek layer on my board. + +00:20:54.660 --> 00:20:58.799 +Additionally, I have alpha, beta, and gamma layers + +00:20:58.800 --> 00:21:03.319 +that send sequences of keys that I can use as hotkeys + +00:21:03.320 --> 00:21:06.539 +in both GNU Emacs and Lem. + +00:21:06.540 --> 00:21:10.419 +Maybe you noticed a few while I was programming. + +00:21:10.420 --> 00:21:12.959 +Now it's possible to bring the Space Cadet + +00:21:12.960 --> 00:21:17.219 +to any keyboard and to build on its wonderful ideas. + +00:21:20.920 --> 00:21:24.459 +Here I'll note that another Emacser, Excalamus, + +00:21:24.460 --> 00:21:27.539 +has made a page called Plover with Emacs, + +00:21:27.540 --> 00:21:30.639 +with information on how to use Emacs + +00:21:30.640 --> 00:21:32.539 +with the standard stenotype, + +00:21:32.540 --> 00:21:34.519 +the one that has two rows, + +00:21:34.520 --> 00:21:37.439 +the one I call a little stenotype. + +00:21:37.440 --> 00:21:39.599 +While I use my full keyboard, + +00:21:39.600 --> 00:21:43.199 +I understand how a small board can be useful. + +00:21:43.200 --> 00:21:46.159 +Finger movement is greatly reduced, + +00:21:46.160 --> 00:21:49.439 +leading to a very ergonomic typing experience. + +00:21:49.440 --> 00:21:53.239 +In fact, all of the speed records + +00:21:53.240 --> 00:21:57.239 +are set with this stenotype, the standard stenotype. + +00:21:58.840 --> 00:22:01.479 +There are many great ideas on this page. + +00:22:01.480 --> 00:22:04.319 +Thank you, Excalamus. + +00:22:06.800 --> 00:22:09.159 +Special thanks to Richard Stallman, + +00:22:09.160 --> 00:22:13.119 +the creator of GNU Emacs and the Free Software Foundation, + +00:22:13.420 --> 00:22:16.919 +Sasaki Ryosuke, first name Ryosuke, + +00:22:16.920 --> 00:22:19.599 +the creator and lead developer of Lem, + +00:22:20.120 --> 00:22:24.279 +Mirabai Knight, the creator of the Open Steno Project, + +00:22:24.280 --> 00:22:26.839 +which oversees the development of Plover, + +00:22:26.840 --> 00:22:31.159 +and jtroo, the creator and lead developer of Kanata. + +00:22:32.700 --> 00:22:36.999 +The views expressed in this talk are solely my own. + +00:22:37.000 --> 00:22:41.159 +I have no connection to any of the parties mentioned herein + +00:22:41.160 --> 00:22:43.479 +and therefore cannot be seen + +00:22:43.480 --> 00:22:45.359 +as representing them in any capacity. + +00:22:45.360 --> 00:22:49.199 +What I've said cannot be taken as medical advice. + +00:22:50.860 --> 00:22:54.759 +I used the TranSide theme for GNU Emacs in this talk. + +00:22:54.760 --> 00:22:57.199 +It's beautiful and functional. + +00:22:57.900 --> 00:23:01.639 +I love how the code looks, and I can read the comments. + +00:23:03.560 --> 00:23:05.759 +In Lem, I used Gruber. + +00:23:05.760 --> 00:23:10.399 +Again, the comments are readable, and the code looks nice. + +00:23:11.200 --> 00:23:13.839 +When I first started using Emacs, + +00:23:13.840 --> 00:23:16.199 +I used the Wheatgrass theme. + +00:23:19.980 --> 00:23:23.879 +Another theme that I love is os1. + +00:23:24.520 --> 00:23:28.239 +It's a light, warm, modern theme for Emacs + +00:23:28.240 --> 00:23:30.439 +inspired by film palettes. + +00:23:35.040 --> 00:23:38.499 +Regarding typography, for programming, + +00:23:38.500 --> 00:23:42.879 +I used JuliaMono, which was designed by Cormullion. + +00:23:43.520 --> 00:23:46.919 +It's extensive, and it's beautiful. + +00:23:48.000 --> 00:23:51.039 +For graphics, I used PromptFont, + +00:23:51.380 --> 00:23:53.959 +which was made by Yukari Hafner. + +00:23:54.840 --> 00:23:56.479 +She's very talented. + +00:23:56.480 --> 00:23:59.639 +I really like her work, including this font. + +00:24:01.180 --> 00:24:04.679 +There are so many packages that I love in Emacs. + +00:24:05.520 --> 00:24:07.639 +If I talked about all of them, + +00:24:07.640 --> 00:24:09.799 +my talk would last for days, + +00:24:09.800 --> 00:24:11.959 +so I'm only going to mention three. + +00:24:12.580 --> 00:24:14.079 +Keycast. + +00:24:14.400 --> 00:24:15.519 +At the top of the screen, + +00:24:15.520 --> 00:24:18.039 +you can see the commands I'm executing + +00:24:18.040 --> 00:24:20.559 +and how I'm invoking those commands. + +00:24:20.560 --> 00:24:21.919 +That's Keycast. + +00:24:21.920 --> 00:24:24.879 +Rainbow Delimiters is another one I like. + +00:24:25.540 --> 00:24:27.519 +It lets me know visually + +00:24:27.520 --> 00:24:29.919 +when my parentheses are out of balance. + +00:24:30.480 --> 00:24:33.199 +Very helpful when I'm programming in Lisp. + +00:24:35.900 --> 00:24:37.879 +Moodline is another. + +00:24:37.880 --> 00:24:42.899 +The modeline is where I can see relevant information + +00:24:42.900 --> 00:24:44.879 +about the file I'm working on. + +00:24:46.840 --> 00:24:50.759 +Moodline only gives me the information I want. + +00:24:50.760 --> 00:24:55.460 +I'm not really worried about too many things, just + +00:24:55.461 --> 00:25:07.160 +the file name, the mode I'm in, and where I am in the file. diff --git a/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt b/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt new file mode 100644 index 00000000..11cfd65f --- /dev/null +++ b/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt @@ -0,0 +1,355 @@ +WEBVTT captioned by sachac, checked by sachac + +00:00:00.000 --> 00:00:04.519 +Welcome to the second day of EmacsConf 2023. + +00:00:04.520 --> 00:00:06.858 +There's a General track and a Development track, + +00:00:06.859 --> 00:00:08.437 +but really, you'll probably find + +00:00:08.438 --> 00:00:10.156 +interesting things on both tracks + +00:00:10.157 --> 00:00:12.695 +no matter what your level of experience is, + +00:00:12.696 --> 00:00:15.354 +so don't feel limited to one or the other. + +00:00:15.355 --> 00:00:17.093 +Please note that the hyperdrive talk + +00:00:17.094 --> 00:00:21.172 +(titled "hyperdrive.el: Peer-to-peer filesystem in Emacs") + +00:00:21.173 --> 00:00:23.491 +on the Development track in the afternoon + +00:00:23.492 --> 00:00:25.231 +is actually a general-audience talk, + +00:00:25.232 --> 00:00:28.091 +I just didn't have space elsewhere in the schedule. + +00:00:28.092 --> 00:00:31.330 +The best parts of EmacsConf are the conversations. + +00:00:31.331 --> 00:00:34.089 +The wiki has a page on how to watch and participate, + +00:00:34.090 --> 00:00:36.868 +and I'll give you a quick overview as well. + +00:00:36.869 --> 00:00:40.347 +You can watch both streams at live.emacsconf.org + +00:00:40.348 --> 00:00:43.226 +using free and open source software. + +00:00:43.227 --> 00:00:45.645 +Using a streaming media player like mpv + +00:00:45.646 --> 00:00:49.044 +seems to be the best way to watch in terms of performance + +00:00:49.045 --> 00:00:50.643 +but there are also web-based players + +00:00:50.644 --> 00:00:53.122 +just in case that's all you've got. + +00:00:53.123 --> 00:00:55.121 +The schedule shows the General track on top + +00:00:55.122 --> 00:00:56.800 +and the Development track on the bottom, + +00:00:56.801 --> 00:00:59.419 +so you can see what else is going on. + +00:00:59.420 --> 00:01:00.618 +As you're watching the talks, + +00:01:00.619 --> 00:01:03.517 +you can refer to the schedule in another window. + +00:01:03.518 --> 00:01:06.536 +Hover over the boxes to see the times and titles, + +00:01:06.537 --> 00:01:08.435 +and click on the boxes in the schedule + +00:01:08.436 --> 00:01:11.214 +to jump to the talk's page for more details. + +00:01:11.215 --> 00:01:13.753 +You can also get the schedule as an iCalendar file + +00:01:13.754 --> 00:01:16.012 +or as an Org file in different time zones. + +00:01:16.013 --> 00:01:17.511 +Many talks will be followed by + +00:01:17.512 --> 00:01:20.170 +live Q&A web conferences with the speaker, + +00:01:20.171 --> 00:01:23.249 +which will be done in BigBlueButton or BBB. + +00:01:23.250 --> 00:01:26.248 +These are indicated with a solid border on the schedule + +00:01:26.249 --> 00:01:29.407 +and by Q&A: BBB on the schedule page. + +00:01:29.408 --> 00:01:31.106 +You can join the web conference room + +00:01:31.107 --> 00:01:32.725 +by clicking on the BBB link + +00:01:32.726 --> 00:01:35.664 +on the schedule page or the talk's webpage. + +00:01:35.665 --> 00:01:38.583 +Then you can ask your questions yourself when the Q&A starts. + +00:01:38.584 --> 00:01:41.042 +To improve performance, please keep your webcam off + +00:01:41.043 --> 00:01:43.781 +and stay muted until it's your turn to talk. + +00:01:43.782 --> 00:01:46.400 +This year we're experimenting with automatically switching + +00:01:46.401 --> 00:01:48.759 +between talks and Q&A sessions, + +00:01:48.760 --> 00:01:51.958 +so the transitions on the stream might be a little sudden, + +00:01:51.959 --> 00:01:53.717 +but people in the BigBlueButton room + +00:01:53.718 --> 00:01:55.396 +can continue the conversation + +00:01:55.397 --> 00:01:58.235 +even after the talk moves off-stream. + +00:01:58.236 --> 00:02:01.594 +Other talks will have Q&A via Etherpad or IRC, + +00:02:01.595 --> 00:02:03.913 +depending on what the speakers prefer. + +00:02:03.914 --> 00:02:06.932 +This is indicated in the schedule with a dashed border + +00:02:06.933 --> 00:02:09.651 +and on the schedule page as well. + +00:02:09.652 --> 00:02:12.090 +Please ask your questions in the recommended places + +00:02:12.091 --> 00:02:14.609 +so that the speakers can easily see them. + +00:02:14.610 --> 00:02:17.328 +Some talks will have the Q&A after the event, + +00:02:17.329 --> 00:02:20.187 +so you can add your questions to their Etherpad. + +00:02:20.188 --> 00:02:21.919 +We'll e-mail the speakers afterwards + +00:02:21.920 --> 00:02:25.185 +and update the talk pages when they answer. + +00:02:25.186 --> 00:02:28.324 +The schedule pages and track pages have quick shortcuts + +00:02:28.325 --> 00:02:31.803 +so that you can find out more about talks, open the Etherpads, + +00:02:31.804 --> 00:02:35.362 +and join the Q&A sessions. The watch page has more tips + +00:02:35.363 --> 00:02:38.061 +on how to make the most of Q&A. + +00:02:38.062 --> 00:02:40.840 +If you can, please add notes and ask questions + +00:02:40.841 --> 00:02:43.839 +in the Etherpad for the talk. That makes it easier + +00:02:43.840 --> 00:02:45.658 +for everyone to share their notes, + +00:02:45.659 --> 00:02:48.597 +and speakers and hosts can read the questions from there. + +00:02:48.598 --> 00:02:52.616 +We'll copy the notes to the talk pages afterwards. + +00:02:52.617 --> 00:02:54.675 +We have one pad for each talk, + +00:02:54.676 --> 00:02:56.794 +so you can follow the links to get to the next one + +00:02:56.795 --> 00:02:59.953 +or go back to the schedule and get the link from there. + +00:02:59.954 --> 00:03:01.592 +If you have general feedback about + +00:03:01.593 --> 00:03:03.751 +the conference itself, please put it in + +00:03:03.752 --> 00:03:09.210 +pad.emacsconf.org/2023 , which is linked on each pad. + +00:03:09.211 --> 00:03:11.869 +You can also use this as a general community message board + +00:03:11.870 --> 00:03:15.008 +for things like Help Wanted. + +00:03:15.009 --> 00:03:18.259 +Internet Relay Chat or IRC can be another great way + +00:03:18.260 --> 00:03:20.786 +to be part of lots of conversations. + +00:03:20.787 --> 00:03:24.505 +You can use chat.emacsconf.org to join the IRC channels + +00:03:24.506 --> 00:03:27.344 +through your web browser. The tabs on the left can help you + +00:03:27.345 --> 00:03:29.903 +switch between the different channels. + +00:03:29.904 --> 00:03:32.959 +There's #emacsconf-gen for the General track + +00:03:32.960 --> 00:03:36.521 +and #emacsconf-dev for the Development track. + +00:03:36.522 --> 00:03:40.240 +If you need to reach us, you can join #emacsconf-org + +00:03:40.241 --> 00:03:45.219 +or e-mail emacsconf-org-private@gnu.org. + +00:03:45.220 --> 00:03:48.498 +You can use #emacsconf for hallway conversations. + +00:03:48.499 --> 00:03:50.617 +Of course, you can join any of these channels + +00:03:50.618 --> 00:03:52.759 +with your favourite IRC client. + +00:03:52.760 --> 00:03:56.735 +We're on the libera.chat network. + +00:03:56.736 --> 00:03:59.374 +Once again, we're going to be streaming with open captions + +00:03:59.375 --> 00:04:02.453 +for most of the talks this year, thanks to our speakers and + +00:04:02.454 --> 00:04:05.812 +captioning volunteers. The captioned talks are indicated + +00:04:05.813 --> 00:04:08.531 +on the schedule, and with any luck, we'll be posting + +00:04:08.532 --> 00:04:12.030 +transcripts on talk pages shortly after the talks start. + +00:04:12.031 --> 00:04:13.849 +If you need additional accommodations, + +00:04:13.850 --> 00:04:16.609 +please let us know in #emacsconf-org + +00:04:16.610 --> 00:04:18.508 +and we'll see if we can make things happen. + +00:04:18.509 --> 00:04:22.747 +If something goes down, we'll update status.emacsconf.org. + +00:04:22.748 --> 00:04:24.606 +If it doesn't look like we've noticed yet, + +00:04:24.607 --> 00:04:28.045 +please let us know in the #emacsconf-org IRC channel, + +00:04:28.046 --> 00:04:30.204 +where we will be quietly panicking. + +00:04:30.205 --> 00:04:32.903 +In all of these conversations, please keep in mind + +00:04:32.904 --> 00:04:35.902 +our guidelines for conduct. You can find them on the wiki, + +00:04:35.903 --> 00:04:39.382 +They basically boil down to: please be nice. + +00:04:39.383 --> 00:04:41.821 +If all goes well, the prerecorded talks and transcripts + +00:04:41.822 --> 00:04:43.820 +should be available from the talk pages + +00:04:43.821 --> 00:04:45.559 +shortly after they start playing, + +00:04:45.560 --> 00:04:47.458 +and we'll post the recordings of live talks + +00:04:47.459 --> 00:04:50.577 +and Q&A sessions within the next month or so. + +00:04:50.578 --> 00:04:53.096 +If you'd like to get an update, you can subscribe to + +00:04:53.097 --> 00:04:56.395 +the emacsconf-discuss mailing list. + +00:04:56.396 --> 00:04:57.954 +All right, let's get going. + +00:04:57.955 --> 00:05:00.354 +Leo Vivier is hosting the general track, + +00:05:00.355 --> 00:05:03.473 +and Amin Bandali hosting the development track. + +00:05:03.474 --> 00:05:06.192 +The other volunteers and I will run around mostly backstage, + +00:05:06.193 --> 00:05:08.271 +and you'll probably meet us in the closing remarks. + +00:05:08.272 --> 00:05:09.910 +That's also where we get to thank + +00:05:09.911 --> 00:05:11.549 +all the people and organizations + +00:05:11.550 --> 00:05:14.588 +who make EmacsConf even possible. + +00:05:14.589 --> 00:05:17.463 +Thanks for coming to EmacsConf 2023. diff --git a/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt b/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt new file mode 100644 index 00000000..c2a49049 --- /dev/null +++ b/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt @@ -0,0 +1,649 @@ +WEBVTT captioned by daniel molina, checked by sachac + +NOTE Introduction + +00:00:01.360 --> 00:00:03.079 +Welcome everybody. My name is Daniel Molina + +00:00:03.080 --> 00:00:05.060 +and I'm going to give this talk + +00:00:05.061 --> 00:00:08.063 +"Who needs Excel? Managing your students' qualifications + +00:00:08.064 --> 00:00:08.959 +with Org-table". + +00:00:08.960 --> 00:00:10.559 +I'm a professor. I work every day. + +00:00:10.560 --> 00:00:12.519 +I have to qualify my students. + +00:00:12.520 --> 00:00:15.079 +While most would consider normal in this situation, + +00:00:15.080 --> 00:00:17.719 +would be to use Excel or LibreOffice + +00:00:17.720 --> 00:00:18.599 +for doing that. + +00:00:18.600 --> 00:00:21.179 +However, I think that approaching it from Emacs + +00:00:21.180 --> 00:00:24.479 +has several interesting advantages. + +00:00:24.480 --> 00:00:27.659 +First, I would like to write the qualification + +00:00:27.660 --> 00:00:33.599 +next to the justification, next to the student error, + +00:00:33.600 --> 00:00:36.639 +and in the Excel format, it's not comfortable to do that. + +00:00:36.640 --> 00:00:38.839 +Actually, I always prefer to write in Emacs + +00:00:38.840 --> 00:00:42.719 +for many reasons, as many of you. + +00:00:42.720 --> 00:00:46.679 +Also, I love text format because I can compare versions + +00:00:46.680 --> 00:00:50.279 +using a control version system like Git and easily change. + +00:00:50.280 --> 00:00:52.759 +This is very useful for the revision period + +00:00:52.760 --> 00:00:55.479 +in which a student visits me + +00:00:55.480 --> 00:01:01.039 +and maybe I can change the qualification for any reason. + +00:01:01.040 --> 00:01:03.439 +I also can export the results directly to PDF + +00:01:03.440 --> 00:01:08.679 +to publish them in my online campus for the student. + +00:01:08.680 --> 00:01:11.359 +I have many tools for doing that. + +00:01:11.360 --> 00:01:13.199 +I already knew about Org-table formula. + +00:01:13.200 --> 00:01:15.199 +I thought it was very cool and useful + +00:01:15.200 --> 00:01:16.159 +to use Emacs for that, + +00:01:16.160 --> 00:01:19.239 +and I have actually found a package `orgtbl-aggregate` + +00:01:19.240 --> 00:01:22.859 +that seemed adequate for doing that. + +00:01:22.860 --> 00:01:26.319 +Unfortunately, I didn't see a lot of information + +00:01:26.320 --> 00:01:29.159 +about how to do that in a painless way. + +00:01:29.160 --> 00:01:31.759 +So, I have to learn, training and testing, + +00:01:31.760 --> 00:01:34.999 +and then prepare these tools to solve that problem + +00:01:35.000 --> 00:01:36.639 +and to help other teachers. + +00:01:36.640 --> 00:01:39.959 +Anyway, it could be used not only for teaching + +00:01:39.960 --> 00:01:41.959 +but for more contexts. + +NOTE Demonstration + +00:01:41.960 --> 00:01:44.799 +Well, let's start. + +00:01:44.800 --> 00:01:46.459 +First, I have two sections, + +00:01:46.460 --> 00:01:53.399 +the comments and the section of the table, or results. + +00:01:53.400 --> 00:01:56.479 +I have... The comment for each student + +00:01:56.480 --> 00:01:57.559 +is in a different headline. + +00:01:57.560 --> 00:02:05.439 +It's very useful to check with a note. + +00:02:05.440 --> 00:02:10.159 +I can go directly using your helm or ivy + +00:02:10.160 --> 00:02:12.999 +or consult to go directly to the section. + +00:02:13.000 --> 00:02:14.559 +So it's very nice. + +00:02:14.560 --> 00:02:22.879 +Then I put the comment, right, completely wrong, + +00:02:22.880 --> 00:02:30.599 +it answers other questions. + +00:02:30.600 --> 00:02:35.839 +I put other comments here that I could send to the student, + +00:02:35.840 --> 00:02:37.480 +you can imagine, and then + +00:02:37.481 --> 00:02:40.159 +I can put the qualification, the score for each student. + +00:02:40.160 --> 00:02:43.159 +The thing with that is, initially, + +00:02:43.160 --> 00:02:46.219 +when I started doing that, I put, I don't know, + +00:02:46.220 --> 00:02:50.719 +the exception and a qualification with that. + +00:02:50.720 --> 00:02:55.679 +Okay, that's one point, this a three, + +00:02:55.680 --> 00:03:06.679 +and use a column total with something like that. + +00:03:06.680 --> 00:03:08.319 +Okay, that's nice. + +NOTE Range + +00:03:08.320 --> 00:03:11.639 +But then, when I started getting more and more parts, + +00:03:11.640 --> 00:03:17.081 +I considered it more useful to use, + +00:03:17.082 --> 00:03:20.699 +to put for each part, + +00:03:20.700 --> 00:03:20.700 +which is the maximum qualification, + +00:03:20.300 --> 00:03:22.919 +on the range of the qualification. + +00:03:22.920 --> 00:03:25.559 +In that case, I'm going to put, + +00:03:25.560 --> 00:03:28.679 +the first one is two scores, the second three points, + +00:03:28.680 --> 00:03:34.999 +the third one is one point, and the last one, four points. + +00:03:35.000 --> 00:03:37.799 +And instead of putting that in that way, + +00:03:37.800 --> 00:03:41.027 +I like to put one is completely right, + +00:03:41.028 --> 00:03:47.319 +zero is completely wrong, or maybe some intermediate values for that. + +00:03:47.320 --> 00:03:50.999 +Of course, I have to change the qualification, + +00:03:51.000 --> 00:03:54.439 +the formula, so it's very simple. + +00:03:54.440 --> 00:03:56.479 +I only have to put, + +00:03:56.480 --> 00:04:08.299 +multiply the values of the second line with that. + +00:04:08.300 --> 00:04:11.899 +So, it's very useful for doing that. + +NOTE More qualifications + +00:04:11.900 --> 00:04:16.639 +Okay, that's the first part, so I can put the comment, + +00:04:16.640 --> 00:04:19.959 +I can go to the section, I can create... + +00:04:19.960 --> 00:04:24.919 +I'm going to put more qualifications. + +00:04:24.920 --> 00:04:27.639 +Now I'm going to put the table. + +00:04:27.640 --> 00:04:30.459 +First I'm going to change, rename the column name, + +00:04:30.460 --> 00:04:39.039 +because it's easier when there is only one word. + +00:04:39.040 --> 00:04:47.159 +And it's very simple to use. You only have to put + +00:04:47.160 --> 00:04:51.439 +the name, aggregate, the name of the table, + +00:04:51.440 --> 00:04:54.659 +in that case group A, + +00:04:54.660 --> 00:04:57.199 +and in another string, the columns. + +00:04:57.200 --> 00:05:03.799 +For instance, name, surname, total. + +00:05:03.800 --> 00:05:07.439 +And you can see that you can get a lesson list + +00:05:07.440 --> 00:05:09.119 +with all the students, + +00:05:09.120 --> 00:05:16.759 +but only with the final score to publish them. + +00:05:16.760 --> 00:05:17.679 +Okay? + +00:05:17.680 --> 00:05:20.679 +Even you can update the name of the column, + +00:05:20.680 --> 00:05:21.800 +not in the original table, + +00:05:21.801 --> 00:05:29.559 +but in the lesson table using that format. + +00:05:29.560 --> 00:05:32.099 +Okay? + +00:05:32.100 --> 00:05:34.239 +That is a good option. + +NOTE Subsets + +00:05:34.240 --> 00:05:38.499 +Now we are going to see how can we use that + +00:05:38.500 --> 00:05:44.359 +to make a subset of the students. + +00:05:44.360 --> 00:05:47.839 +For instance, imagine, this is me, + +00:05:47.840 --> 00:05:54.799 +I'm going to put the bad, I change, now I can update, + +00:05:54.800 --> 00:06:02.759 +you can see this, but also I'm going to put a list + +00:06:02.760 --> 00:06:10.960 +with the students that have failed the exam. + +00:06:10.961 --> 00:06:21.259 +It's simple, because this package has the option `:cond`. + +00:06:21.260 --> 00:06:26.199 +I'm going to put first to see it better, + +00:06:26.200 --> 00:06:28.599 +I'm going to put a condition + +00:06:28.600 --> 00:06:37.519 +in which we aggregate less than a half, 5, + +00:06:37.520 --> 00:06:44.179 +and I have to use a `string-to-number` total. + +00:06:44.180 --> 00:06:47.259 +In that way, I can see that this is the student + +00:06:47.260 --> 00:06:48.839 +that has failed the exam, + +00:06:48.840 --> 00:06:54.079 +I could use that to make another table, + +00:06:54.080 --> 00:07:08.299 +this is the people that passed the exam. + +NOTE Sorting + +00:07:08.300 --> 00:07:10.980 +Another interesting feature is that + +00:07:10.981 --> 00:07:15.620 +I can... the lesson table can be sorted automatically. + +00:07:15.621 --> 00:07:20.100 +It's simple. You only have to put this symbol (`^`), + +00:07:20.101 --> 00:07:23.360 +and you can put next to the column you want + +00:07:23.361 --> 00:07:26.999 +to use for the sort, and then you can put + +00:07:27.000 --> 00:07:30.679 +`a` if you want to sort alphabetically, + +00:07:30.680 --> 00:07:33.879 +in uppercase if you want to reverse the sort, + +00:07:33.880 --> 00:07:38.919 +and `n` if you want to sort numerically. + +00:07:38.920 --> 00:07:40.759 +For instance, I can put that + +00:07:40.760 --> 00:07:43.959 +from the lesser score to the best score, + +00:07:43.960 --> 00:07:46.639 +or here from the best score to the lesser score. + +00:07:46.640 --> 00:07:48.960 +And this sort is completely independent + +00:07:48.961 --> 00:07:51.640 +to the sort of the original table. + +NOTE New table + +00:07:51.641 --> 00:07:54.520 +Now I'm going to do another different thing, + +00:07:54.521 --> 00:08:02.799 +we are going to put a new table, + +00:08:02.800 --> 00:08:07.559 +I'm going to put a new table + +00:08:07.560 --> 00:08:09.639 +in which I'm going to put + +00:08:09.640 --> 00:08:14.319 +the number of passed students, failed students + +00:08:14.320 --> 00:08:16.519 +and the ratio of students. It's simple. + +00:08:16.520 --> 00:08:26.559 +I'm going to put the pass, in that case, as column, + +00:08:26.560 --> 00:08:32.919 +I can put the count, of course, I can put the count, + +00:08:32.920 --> 00:08:35.799 +the number of students + +00:08:35.800 --> 00:08:42.079 +that have passed, so I'm going to put in that way, ok? + +00:08:42.080 --> 00:08:58.479 +I'm going to put pass, count, failed, ratio. + +00:08:58.480 --> 00:08:59.739 +You can see, ok? + +00:08:59.740 --> 00:09:01.859 +But this only the count, + +00:09:01.860 --> 00:09:04.519 +you are going to put the number wrong. + +00:09:04.520 --> 00:09:08.359 +So, it's true, but you can actually put formula here. + +00:09:08.360 --> 00:09:10.079 +For instance, you can say, + +00:09:10.080 --> 00:09:12.399 +I know that I have 3 students, + +00:09:12.400 --> 00:09:18.799 +so the number of failed is 3 minus the passed student. + +00:09:18.800 --> 00:09:24.959 +And also, I can put the formula, is the people, + +00:09:24.960 --> 00:09:27.719 +the students that passed, + +00:09:27.720 --> 00:09:36.079 +divide into the number total of students, ok? + +00:09:36.080 --> 00:09:41.379 +Let's go to put that in that way, + +00:09:41.380 --> 00:09:44.399 +is the people that passed, it is better in that way, + +00:09:44.400 --> 00:09:48.359 +and also I can put directly the number of, + +00:09:48.360 --> 00:09:50.919 +the ratio of students. + +00:09:50.920 --> 00:09:55.739 +So, in that way, I can have a table + +00:09:55.740 --> 00:09:57.519 +with the students that passed, + +00:09:57.520 --> 00:09:58.559 +the students that failed + +00:09:58.560 --> 00:10:01.279 +and the ratio of people that passed. + +NOTE Statistics + +00:10:01.280 --> 00:10:04.819 +Sometimes this type of qualification will be useful for me, + +00:10:04.820 --> 00:10:08.079 +to see how much has been the sound, + +00:10:08.080 --> 00:10:12.239 +how much good has been the exercise. + +00:10:12.240 --> 00:10:14.879 +Now, I'm going to put a new table. + +00:10:14.880 --> 00:10:22.421 +This new table is going to go some statistics, + +00:10:22.422 --> 00:10:32.379 +`statistics_score`, `begin: aggregate :table "final"`. + +00:10:32.380 --> 00:10:43.919 +In this case, I'm going to use not the original table, + +00:10:43.920 --> 00:10:54.019 +but a final, I'm going to put `final_group`, + +00:10:54.020 --> 00:11:01.399 +`final_p1`, `final_p2`, ok? + +00:11:01.400 --> 00:11:06.119 +And as `:cols`, I'm going to put directly + +00:11:06.120 --> 00:11:13.579 +how many results I have, I put number, + +00:11:13.580 --> 00:11:19.199 +I'm going to put also the mean. + +00:11:19.200 --> 00:11:21.400 +You can see that mean total is not working + +00:11:21.401 --> 00:11:24.519 +because I'm using this table and I renamed, + +00:11:24.520 --> 00:11:26.079 +the column name was renamed, + +00:11:26.080 --> 00:11:36.679 +so it's `mean(Score)`, mean, + +00:11:36.680 --> 00:12:05.919 +and then the score. You can obtain `stdiv` -- `sdev`, + +00:12:05.920 --> 00:12:08.959 +sorry, there was an error about that, + +00:12:08.960 --> 00:12:12.639 +and two decimal, + +00:12:12.640 --> 00:12:17.799 +and that is another interesting score. + +NOTE Combining + +00:12:17.800 --> 00:12:23.239 +Now, I'm going to finish showing how we can use. + +00:12:23.240 --> 00:12:25.839 +To finish it, we are going to see + +00:12:25.840 --> 00:12:28.299 +how we can combine several tables + +00:12:28.300 --> 00:12:32.479 +or even an aggregated table in a new table. + +00:12:32.480 --> 00:12:36.259 +For instance, you can have a table for the practice 1, + +00:12:36.260 --> 00:12:38.199 +you can have a table for the practice 2, + +00:12:38.200 --> 00:12:40.359 +so I'm going to do that. + +00:12:40.360 --> 00:12:48.180 +I'm going to move this table. You can copy or remove, + +00:12:48.181 --> 00:12:49.759 +doesn't matter the order, + +00:12:49.760 --> 00:12:59.519 +I'm going to put this to identify the result of practice 2, + +00:12:59.520 --> 00:13:03.321 +Org create an ID (`org-id-get-create`), + +00:13:03.322 --> 00:13:07.479 +then we have a previous result, + +00:13:07.480 --> 00:13:10.199 +and I have a final table. + +00:13:10.200 --> 00:13:11.839 +The final table could be complicated, + +00:13:11.840 --> 00:13:17.439 +but it's not so much complicated, it's only that, + +00:13:17.440 --> 00:13:21.959 +I'm going to put something that the formula wants. + +00:13:21.960 --> 00:13:26.588 +The formula is to make + +00:13:26.589 --> 00:13:34.400 +an `org-lookup-first` of the second name, + +00:13:34.401 --> 00:13:41.540 +considering that it's unique, + +00:13:41.541 --> 00:13:53.439 +`remote` of the surname, + +00:13:53.440 --> 00:14:05.559 +and let's say another `remote` of the `$3` element, + +00:14:05.560 --> 00:14:15.119 +ok, that's an error because I don't put yet the ID, + +00:14:15.120 --> 00:14:19.759 +so I'm going to copy -- mark and copy -- + +00:14:19.760 --> 00:14:28.519 +and paste the unique ID generated, + +00:14:28.520 --> 00:14:38.519 +I'm going to put that... I think there is missing one. + +00:14:38.520 --> 00:14:43.399 +Finally. Okay, that's right. + +00:14:43.400 --> 00:14:49.579 +So imagine that I change something here, for instance, + +00:14:49.580 --> 00:14:56.700 +I put... I change that, + +00:14:56.701 --> 00:15:02.199 +actually, this is changed also, and this is changed. + +00:15:02.200 --> 00:15:08.599 +This is a good way to divide the classification + +00:15:08.600 --> 00:15:10.200 +in several files, one for the practice 1, + +00:15:10.201 --> 00:15:15.039 +one for the practice 2, and one final practice + +00:15:15.040 --> 00:15:27.639 +that I can finally export in a final table. + +00:15:27.640 --> 00:15:31.119 +Of course you can make it a lot more pretty, + +00:15:31.120 --> 00:15:33.359 +but this is all I want to show you. + +00:15:33.360 --> 00:15:34.799 +I hope with this talk + +00:15:34.800 --> 00:15:37.679 +you have learned a lot more about Org formula, + +00:15:37.680 --> 00:15:39.688 +[orgtbl-aggregate] package, + +00:15:39.689 --> 00:15:42.279 +and how you can use all this techniques + +00:15:42.280 --> 00:15:45.599 +to improve your qualification of a student, + +00:15:45.600 --> 00:15:50.480 +or for whatever you want. diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt new file mode 100644 index 00000000..9852485c --- /dev/null +++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt @@ -0,0 +1,2654 @@ +WEBVTT + + +00:00:00.599 --> 00:00:04.140 +[Speaker 0]: Again, second only live Q&A of the day. + +00:00:04.339 --> 00:00:06.339 +So, things are still a bit rusty, + +00:00:06.339 --> 00:00:08.379 +but believe me, by the end of the morning, + +00:00:08.380 --> 00:00:12.259 +we will be well-oiled machinery. + +00:00:12.340 --> 00:00:13.940 +So, hi Marcus, how are you doing? + +00:00:14.540 --> 00:00:15.860 +[Speaker 1]: I'm fine, Thank you. + +00:00:17.500 --> 00:00:20.020 +[Speaker 0]: I really liked, most people might have + +00:00:20.020 --> 00:00:22.180 +forgotten, but you started your presentation + +00:00:22.360 --> 00:00:26.340 +with the, in a very dark room and with this + +00:00:26.680 --> 00:00:29.340 +typical note of dry German humor that I + +00:00:29.340 --> 00:00:30.900 +particularly liked. + +00:00:31.640 --> 00:00:34.280 +[Speaker 1]: Whereas I told you we're born without humour + +00:00:34.280 --> 00:00:38.300 +so any sense of humour is the result of very + +00:00:38.300 --> 00:00:39.059 +hard work. + +00:00:40.940 --> 00:00:44.280 +[Speaker 0]: Well I can confirm therefore that your work + +00:00:44.280 --> 00:00:46.600 +is evident in this particular remark. + +00:00:47.780 --> 00:00:50.879 +So as we did before and perhaps this time + +00:00:50.940 --> 00:00:54.320 +more punctiliously, terrible adverb, + +00:00:54.320 --> 00:00:58.100 +that's why I'm an English major we will be + +00:00:58.100 --> 00:01:00.420 +taking questions first from the pad and then + +00:01:00.420 --> 00:01:03.740 +we'll be moving on to people in the BBV room. + +00:01:03.740 --> 00:01:05.540 +Let me just check if we have some people. + +00:01:05.540 --> 00:01:06.720 +We do have some people. + +00:01:06.960 --> 00:01:08.860 +All right, so Markus, I'm gonna ask you the + +00:01:08.860 --> 00:01:11.200 +questions in the pad unless you have + +00:01:11.200 --> 00:01:12.600 +something to remark first. + +00:01:13.080 --> 00:01:15.060 +[Speaker 1]: Yes, oh no, no, I don't have nothing to + +00:01:15.060 --> 00:01:17.800 +remark. I mean, only that we're coming to the + +00:01:17.800 --> 00:01:20.200 +end of the term here, and I think in the + +00:01:20.200 --> 00:01:24.140 +paper that I wrote, I expressed doubt that + +00:01:24.140 --> 00:01:25.560 +Emacs was good for beginners, + +00:01:25.560 --> 00:01:31.720 +but I've now gone back to an interactive + +00:01:31.780 --> 00:01:34.020 +notebook in the class without Emacs, + +00:01:34.080 --> 00:01:37.500 +and I've just missed it terribly the whole + +00:01:37.500 --> 00:01:39.220 +term. And I think I saw you walk too, + +00:01:39.220 --> 00:01:40.540 +so that's kind of interesting. + +00:01:41.380 --> 00:01:42.160 +That's it. + +00:01:42.270 --> 00:01:43.580 +[Speaker 0]: Right. All right, well, + +00:01:43.580 --> 00:01:45.040 +let's get started with the questions because + +00:01:45.040 --> 00:01:47.940 +I'm a little worried that we might acquire + +00:01:48.340 --> 00:01:50.580 +debt because of the time that we have. + +00:01:50.580 --> 00:01:53.040 +And just to be clear, so that you also know + +00:01:53.040 --> 00:01:54.479 +the time at which we're supposed to be + +00:01:54.479 --> 00:01:57.240 +finishing, the next talk here on this track + +00:01:57.240 --> 00:01:59.560 +is supposed to be at 10.40, + +00:01:59.700 --> 00:02:01.740 +which is in 13 minutes from now. + +00:02:01.800 --> 00:02:03.220 +All right, with that said, + +00:02:03.240 --> 00:02:04.500 +starting with the first questions. + +00:02:05.000 --> 00:02:07.300 +What tools do you use for making your slides? + +00:02:07.300 --> 00:02:09.440 +They are very nice and I concur. + +00:02:17.680 --> 00:02:18.180 +OrgReveal? + +00:02:12.280 --> 00:02:22.600 +[Speaker 1]: I use OrgReveal. It's a package, + +00:02:22.980 --> 00:02:26.380 +OrgReveal. I don't have the link right now, + +00:02:26.380 --> 00:02:31.560 +but it's an org mode package where You create + +00:02:31.560 --> 00:02:35.400 +some meta information and I think it's + +00:02:35.400 --> 00:02:39.900 +basically JavaScript, JavaScript package that + +00:02:39.900 --> 00:02:41.620 +will work from a bunch of different + +00:02:45.580 --> 00:02:49.540 +platforms, but it works particularly well + +00:02:49.540 --> 00:02:52.120 +from Emacs. So you use that a lot. + +00:02:53.740 --> 00:02:55.440 +[Speaker 0]: Right, yeah, I think it is definitely + +00:02:55.440 --> 00:02:57.120 +interacting with JavaScript in the background + +00:02:57.120 --> 00:02:59.120 +and it makes for a very clean presentation + +00:02:59.440 --> 00:03:01.380 +right from Emacs. I mean, + +00:03:01.380 --> 00:03:04.340 +it's not opened in Emacs unless you use a web + +00:03:04.340 --> 00:03:06.480 +browser in Emacs that supports such + +00:03:06.480 --> 00:03:09.400 +compositing but it's pretty convenient and I + +00:03:09.400 --> 00:03:10.780 +recommend looking into it. + +00:03:15.140 --> 00:03:19.540 +[Speaker 1]: I'm just going to share the URL here. + +00:03:20.080 --> 00:03:21.400 +So if anybody's interested. + +00:03:22.300 --> 00:03:24.140 +[Speaker 0]: Right, and we'll be putting all the links + +00:03:24.140 --> 00:03:25.600 +right now. So obviously right now, + +00:03:25.600 --> 00:03:28.180 +Marcus is writing inside of his own Emacs, + +00:03:28.180 --> 00:03:29.340 +but we also have the pad. + +00:03:29.340 --> 00:03:31.020 +We'll make sure that you have all the links + +00:03:31.020 --> 00:03:32.520 +accessible a little bit later. + +00:03:32.660 --> 00:03:34.340 +Okay, moving on to the next question, + +00:03:34.460 --> 00:03:35.360 +why MDPI? + +00:03:36.820 --> 00:03:40.520 +[Speaker 1]: Oh yeah, well that's a little bit of a longer + +00:03:40.520 --> 00:03:42.600 +answer, kind of boring I suppose. + +00:03:42.840 --> 00:03:44.680 +So when I came here to the US, + +00:03:45.560 --> 00:03:47.960 +I used to teach a lot of graduate courses and + +00:03:47.960 --> 00:03:49.280 +I had to suddenly teach a lot of + +00:03:49.280 --> 00:03:50.460 +undergraduate courses, + +00:03:50.500 --> 00:03:53.100 +which partly motivated this move because it + +00:03:53.100 --> 00:03:55.640 +made me realize, as I said in the + +00:03:55.640 --> 00:03:58.020 +presentation, how little the students + +00:03:58.020 --> 00:03:59.780 +understand of the underlying infrastructure + +00:04:00.040 --> 00:04:01.920 +and how important it is for them to work with + +00:04:01.920 --> 00:04:06.440 +an IDE that doesn't make coding especially + +00:04:06.540 --> 00:04:09.140 +convenient, but that teaches them a lot of + +00:04:09.140 --> 00:04:10.840 +the stuff on the side, + +00:04:10.840 --> 00:04:13.080 +you know, while still presenting a very + +00:04:13.440 --> 00:04:17.380 +smooth environment, which developers + +00:04:17.480 --> 00:04:22.120 +appreciate as well. So I came here and I used + +00:04:22.120 --> 00:04:24.520 +to publish like 4 or 5 research papers per + +00:04:24.520 --> 00:04:26.140 +year, but I didn't have the time. + +00:04:26.520 --> 00:04:28.760 +So I was contacted by MDPI. + +00:04:30.060 --> 00:04:34.340 +And it's 1 of those research paper mills, + +00:04:34.700 --> 00:04:37.160 +which seem to be springing up where authors + +00:04:37.200 --> 00:04:40.840 +can, really the institutions of the authors + +00:04:40.840 --> 00:04:42.560 +have to pay so that they can publish, + +00:04:42.560 --> 00:04:44.440 +right? So it's not really, + +00:04:44.440 --> 00:04:46.400 +and I checked them out and they seem to be + +00:04:46.400 --> 00:04:47.680 +proper peer review publishing, + +00:04:47.680 --> 00:04:49.120 +but to be absolutely sure I said, + +00:04:49.120 --> 00:04:50.460 +well, you can have my article, + +00:04:51.220 --> 00:04:52.540 +but of course for free, + +00:04:52.540 --> 00:04:55.080 +I'm not going to pay for you to publish it. + +00:04:55.080 --> 00:04:57.700 +And so that's what they did. + +00:04:57.880 --> 00:05:01.160 +They invited me and I submitted the paper and + +00:05:01.160 --> 00:05:02.240 +it was a very good process. + +00:05:02.240 --> 00:05:04.540 +That was a very, it was a good peer review + +00:05:04.540 --> 00:05:06.760 +critique. So I changed the paper quite a bit. + +00:05:06.760 --> 00:05:07.940 +It's still not a great paper. + +00:05:07.940 --> 00:05:09.320 +It's just a small case study. + +00:05:09.320 --> 00:05:12.100 +That's the kind of thing that you have a lot + +00:05:12.100 --> 00:05:14.800 +in medical research where also people don't + +00:05:14.800 --> 00:05:17.720 +have a lot of time to do research, + +00:05:17.720 --> 00:05:19.480 +proper research, which takes a very long + +00:05:19.480 --> 00:05:21.520 +time. And so that's why MDPI. + +00:05:21.820 --> 00:05:24.660 +And they are in the most of the relevant + +00:05:24.800 --> 00:05:27.780 +citation indices. So they are reputable + +00:05:27.900 --> 00:05:30.920 +enough. I mean, normally I would say for + +00:05:30.920 --> 00:05:33.060 +anybody who does anything like this, + +00:05:33.260 --> 00:05:36.420 +you might not even want to bother with the + +00:05:36.420 --> 00:05:37.640 +journal these days anymore. + +00:05:37.640 --> 00:05:39.260 +You just go straight to ArcSci, + +00:05:40.520 --> 00:05:41.620 +put out your preprint. + +00:05:41.980 --> 00:05:44.540 +And in fact, what will happen if you're on + +00:05:44.540 --> 00:05:46.440 +ArcSci, if somebody finds it interesting, + +00:05:46.440 --> 00:05:49.900 +they're going to reach out to you to capture + +00:05:49.900 --> 00:05:54.280 +your paper and have it published under their + +00:05:54.280 --> 00:05:56.120 +heading. Oh yeah, actually the other reason + +00:05:56.120 --> 00:05:58.660 +why I wanted MDPI is because there were open + +00:05:58.660 --> 00:05:59.980 +access from the start. + +00:06:00.720 --> 00:06:02.660 +And I really like, if you go to the paper, + +00:06:02.660 --> 00:06:04.200 +I really like the way it's presented. + +00:06:04.200 --> 00:06:07.340 +So I looked at a few papers and I thought + +00:06:07.340 --> 00:06:12.140 +it's a really nice online access, + +00:06:12.160 --> 00:06:13.980 +online open access solution. + +00:06:15.920 --> 00:06:17.220 +That's the long answer, + +00:06:17.220 --> 00:06:17.720 +sorry. + +00:06:18.740 --> 00:06:21.060 +[Speaker 0]: No, that was perfectly fine and you provided + +00:06:21.060 --> 00:06:23.760 +many details so it was far from a boring + +00:06:23.760 --> 00:06:25.420 +answer, let me reassure you. + +00:06:26.140 --> 00:06:27.100 +Moving on to the question, + +00:06:27.100 --> 00:06:29.120 +we only have about 8 minutes left so I'd like + +00:06:29.120 --> 00:06:31.500 +to finish those 2 questions and let people in + +00:06:31.500 --> 00:06:34.460 +the audience speak. So do you think immersion + +00:06:35.280 --> 00:06:37.500 +can be achieved on teaching other students + +00:06:37.500 --> 00:06:38.600 +with different backgrounds? + +00:06:39.340 --> 00:06:42.180 +[Speaker 1]: Oh yeah, that's a really good question. + +00:06:45.740 --> 00:06:48.380 +I had actually a discussion last night with + +00:06:48.380 --> 00:06:49.920 +my wife in bed about this, + +00:06:49.920 --> 00:06:52.860 +about the use of textbooks which are famously + +00:06:53.000 --> 00:06:55.840 +non-immersive because they're consumed away + +00:06:55.840 --> 00:06:58.640 +from the class. Very rarely you sit in class + +00:06:58.660 --> 00:07:00.540 +like people used to do and read something + +00:07:00.540 --> 00:07:02.420 +together. Maybe they did that in English. + +00:07:02.420 --> 00:07:04.700 +And that is of course instantly immersive. + +00:07:05.240 --> 00:07:06.700 +But in computer science, + +00:07:06.700 --> 00:07:08.180 +many other topics, psychology, + +00:07:08.360 --> 00:07:10.300 +you know, biology and so on, + +00:07:10.680 --> 00:07:12.260 +you cannot get immersion, + +00:07:12.260 --> 00:07:14.240 +at least not in a lecture theater. + +00:07:15.040 --> 00:07:16.960 +You get it in a lab because people solve the + +00:07:16.960 --> 00:07:18.920 +problem and then they're immersed in it. + +00:07:18.920 --> 00:07:20.660 +So, but my answer would be, + +00:07:20.660 --> 00:07:22.680 +yes, I can think totally immersion can be + +00:07:22.680 --> 00:07:25.520 +achieved anywhere, but what you have to do is + +00:07:25.520 --> 00:07:29.500 +you have to not lecture and you have to let + +00:07:29.500 --> 00:07:31.640 +students do work as you go along. + +00:07:31.640 --> 00:07:33.840 +So I used to lecture quite a bit because I + +00:07:33.840 --> 00:07:38.220 +was an insecure young professor and just read + +00:07:38.220 --> 00:07:41.400 +all my slides and my notes as I used to use, + +00:07:41.400 --> 00:07:43.540 +as everybody uses to when they start. + +00:07:44.200 --> 00:07:46.100 +But as I went along, I realized, + +00:07:46.100 --> 00:07:48.240 +you know, I've got such a grasp of the topic + +00:07:48.240 --> 00:07:51.080 +that I really everything I do now is prepared + +00:07:51.080 --> 00:07:53.720 +in Emacs in an interactive way so I start + +00:07:53.800 --> 00:07:55.480 +saying a few words and then the students + +00:07:55.480 --> 00:07:58.000 +immediately we get to work and they seem to + +00:07:58.000 --> 00:07:59.840 +love that because in most of the other + +00:07:59.840 --> 00:08:01.680 +classes people just talk at them they take + +00:08:01.680 --> 00:08:03.500 +their stuff home and work at home, + +00:08:03.600 --> 00:08:05.140 +which is of course is super. + +00:08:05.380 --> 00:08:06.680 +But most of the students, + +00:08:06.680 --> 00:08:08.600 +if they have, in at least in a liberal arts + +00:08:08.600 --> 00:08:10.220 +college, they have 5 other classes, + +00:08:10.440 --> 00:08:13.520 +they do not take a lot of time to do the work + +00:08:13.520 --> 00:08:16.880 +at home. So it's, you know, + +00:08:16.880 --> 00:08:18.840 +yeah, It's kind of different. + +00:08:18.840 --> 00:08:20.020 +It's kind of risky, yeah, + +00:08:20.020 --> 00:08:22.360 +but the main point I was trying to make is + +00:08:22.360 --> 00:08:26.740 +Emacs and Org Mode really helped me to boil + +00:08:26.740 --> 00:08:29.220 +that interactive session down to something + +00:08:29.220 --> 00:08:30.800 +that will work in the classroom. + +00:08:30.800 --> 00:08:32.559 +I don't have to jump around between + +00:08:32.559 --> 00:08:33.740 +platforms. For example, + +00:08:33.840 --> 00:08:35.799 +this term, and I didn't use Emacs in the + +00:08:35.799 --> 00:08:36.919 +class with the students, + +00:08:37.159 --> 00:08:40.240 +I had to render using a package. + +00:08:40.760 --> 00:08:42.299 +It's actually a very nice package called, + +00:08:42.299 --> 00:08:46.100 +what's it called? Ox, what's it called? + +00:08:46.100 --> 00:08:50.520 +Ox, Ox IPNB. It's called Ox IPNB. + +00:08:50.580 --> 00:08:53.360 +So what it does is it renders in the usual + +00:08:53.360 --> 00:08:55.580 +way with Emacs, Org Mode does, + +00:08:55.600 --> 00:08:58.700 +renders interactive notebook files in + +00:08:58.700 --> 00:09:01.060 +Jupyter. And that took me a lot of time. + +00:09:01.320 --> 00:09:03.840 +And I immediately noticed as soon as the + +00:09:03.840 --> 00:09:06.180 +teacher has to fight platforms themselves, + +00:09:06.660 --> 00:09:09.920 +they take the ball off the immersion task, + +00:09:09.920 --> 00:09:12.340 +you know, to keep the student on the problem. + +00:09:16.000 --> 00:09:18.560 +[Speaker 0]: Yeah. Oh, go on, please. + +00:09:19.400 --> 00:09:22.840 +Yeah. I was going to remark that. + +00:09:12.980 --> 00:09:23.260 +[Speaker 1]: So yeah, absolutely. Yeah, + +00:09:23.260 --> 00:09:25.120 +I suppose it might be MIT style. + +00:09:25.120 --> 00:09:26.140 +Big difference though, + +00:09:26.140 --> 00:09:27.900 +my classes are very, very short, + +00:09:27.900 --> 00:09:30.060 +small. So I have like between 10 and 15 + +00:09:30.060 --> 00:09:32.180 +students per class. 1 of the reasons why I + +00:09:32.180 --> 00:09:35.080 +went to this college is because I was fed up + +00:09:35.080 --> 00:09:36.940 +teaching, trying to teach hundreds of + +00:09:36.940 --> 00:09:40.580 +students. Okay, sorry, + +00:09:40.580 --> 00:09:42.520 +do some of your students nag you about using + +00:09:42.520 --> 00:09:43.460 +VS Code? Yes, they do, + +00:09:43.460 --> 00:09:45.300 +but their arguments aren't very good. + +00:09:46.800 --> 00:09:48.740 +They hadn't really compared Emacs and VS + +00:09:48.740 --> 00:09:51.800 +Code. And what I do, actually I use RStudio + +00:09:51.980 --> 00:09:53.860 +as well, demonstrate VS Code, + +00:09:53.860 --> 00:10:01.060 +RStudio and Emacs. And I think it's very easy + +00:10:01.060 --> 00:10:02.840 +for them to see. And there are some videos + +00:10:02.840 --> 00:10:05.020 +about that as well, how much easier it is to + +00:10:05.020 --> 00:10:08.520 +get into Emacs to limit your investments to + +00:10:08.520 --> 00:10:09.820 +what you actually wanna do. + +00:10:09.820 --> 00:10:11.840 +When the problem with VS Code is it comes at + +00:10:11.840 --> 00:10:14.280 +you with this sort of Microsoft store + +00:10:14.440 --> 00:10:17.280 +ideology, like a gazillion plugins, + +00:10:17.420 --> 00:10:18.840 +which if you're a developer, + +00:10:18.900 --> 00:10:20.140 +you know what you want. + +00:10:21.040 --> 00:10:24.120 +And I mean, it's a bit like VS Code is like + +00:10:24.960 --> 00:10:27.940 +Google search for as if you were programming + +00:10:27.980 --> 00:10:30.820 +in Google search, a complete waste of time. + +00:10:31.220 --> 00:10:33.280 +Having said that, I've also seen some videos + +00:10:33.280 --> 00:10:36.180 +with people who really know how to use VS + +00:10:36.180 --> 00:10:37.420 +Code. And of course, you know, + +00:10:37.420 --> 00:10:41.180 +if somebody gets on the inside of a tool and + +00:10:41.180 --> 00:10:44.480 +spends upwards of a thousand hours in the + +00:10:44.480 --> 00:10:45.840 +tool, they'll be great. + +00:10:45.920 --> 00:10:47.580 +But that's not true for beginners. + +00:10:48.960 --> 00:10:50.780 +So hold on, there's another 1. + +00:10:51.020 --> 00:10:52.320 +I'm reading them, sorry. + +00:10:52.840 --> 00:10:55.420 +Leo, I can see the questions, + +00:10:55.680 --> 00:10:58.000 +but you may wanna turn them around. + +00:10:59.700 --> 00:11:00.720 +[Speaker 0]: No, No, no, please, please, + +00:11:00.720 --> 00:11:01.560 +you're free to read them. + +00:11:01.560 --> 00:11:02.900 +I'm on your fasted computer. + +00:11:02.960 --> 00:11:04.600 +[Speaker 1]: Some of you, too, that's the nagging. + +00:11:04.600 --> 00:11:06.100 +I teach simple programming at a vocational + +00:11:06.100 --> 00:11:07.700 +school, and even after showing the students + +00:11:07.700 --> 00:11:09.520 +Vim, Vim, of course, is a contender, + +00:11:09.520 --> 00:11:11.260 +and now I'm telling them I prefer Emacs. + +00:11:12.180 --> 00:11:14.260 +They still all choose VS Code as their + +00:11:14.260 --> 00:11:17.460 +editor. Well, okay, what I did is mandatory. + +00:11:17.720 --> 00:11:19.140 +I didn't let them choose. + +00:11:19.840 --> 00:11:21.980 +That's what I did. And I thought that was + +00:11:21.980 --> 00:11:23.800 +quite risky, but in the end, + +00:11:23.860 --> 00:11:26.400 +it turns out that the best students loved it + +00:11:26.400 --> 00:11:28.580 +and keep using Emacs in their jobs. + +00:11:28.580 --> 00:11:32.640 +I hear that now. The students in the middle + +00:11:33.160 --> 00:11:35.860 +were probably the ones who would pick VS Code + +00:11:35.860 --> 00:11:38.400 +because every tutorial they see, + +00:11:38.600 --> 00:11:40.440 +they learn a lot through YouTube and so + +00:11:40.440 --> 00:11:42.260 +everything they see is in VS Code. + +00:11:42.260 --> 00:11:44.180 +If there were more tutorials in Emacs, + +00:11:44.180 --> 00:11:45.600 +I'm trying to make some, + +00:11:45.700 --> 00:11:47.620 +then of course that would be different. + +00:11:49.280 --> 00:11:53.940 +But I think it's partly brainwashing and + +00:11:53.940 --> 00:11:55.840 +partly, of course, the other reason is there + +00:11:55.840 --> 00:12:00.320 +is no online Emacs. They use VS Code Dev, + +00:12:00.500 --> 00:12:02.460 +right? And that's, of course, + +00:12:03.340 --> 00:12:05.140 +they use an online cloud solution. + +00:12:05.420 --> 00:12:07.040 +Like most of the students in the high school, + +00:12:07.040 --> 00:12:09.360 +I teach Python in the high school right now, + +00:12:09.480 --> 00:12:11.600 +and the students only get Chromebooks that + +00:12:11.600 --> 00:12:14.160 +are completely cut down to nothing. + +00:12:15.060 --> 00:12:17.420 +They cannot have Linux on their Chromebooks. + +00:12:18.260 --> 00:12:19.900 +So what are they supposed to do? + +00:12:19.900 --> 00:12:21.580 +Their only choice really is Repl. + +00:12:21.760 --> 00:12:24.240 +Repl.com is a possibility for them to do + +00:12:24.240 --> 00:12:27.540 +that. But, you know, or they use code spaces, + +00:12:27.660 --> 00:12:29.560 +which is VS Code in GitHub. + +00:12:31.400 --> 00:12:32.640 +[Speaker 0]: Marcus, sorry for the interruption. + +00:12:32.640 --> 00:12:34.040 +We only have about 2 minutes left. + +00:12:34.040 --> 00:12:35.380 +So if you could take 1 question, + +00:12:35.380 --> 00:12:36.760 +that would be great. Sorry. + +00:12:30.660 --> 00:12:38.100 +[Speaker 1]: So. I'm observing the same behavior. + +00:12:38.100 --> 00:12:40.080 +Any more tutorials will be most welcome. + +00:12:40.080 --> 00:12:43.660 +Yes, I I'd love to. I spent the rest of my + +00:12:43.660 --> 00:12:46.100 +days on this earth making Emacs tutorials if + +00:12:48.263 --> 00:12:49.267 +[Speaker 0]: tutorials if I can. + +00:12:46.100 --> 00:12:49.769 +[Speaker 1]: I can. Thank you. DMAX Thank you. + +00:12:49.769 --> 00:12:51.040 +Approach to handling EDA. + +00:12:51.140 --> 00:12:52.700 +Oh yeah, with white data sets. + +00:12:56.760 --> 00:12:58.940 +Well, that's a good point. + +00:13:01.500 --> 00:13:03.260 +[Speaker 0]: So Markus, I don't want to put you under too + +00:13:03.840 --> 00:13:06.680 +[Speaker 1]: answer the question. The handling EDA, + +00:13:07.080 --> 00:13:08.760 +I don't know, if you look at the comments, + +00:13:08.760 --> 00:13:09.960 +I think these are on YouTube, + +00:13:09.960 --> 00:13:11.340 +right, at some point, Leo? + +00:13:03.260 --> 00:13:12.600 +[Speaker 0]: much pressure to Oh yes, + +00:13:12.600 --> 00:13:13.860 +they will definitely be on YouTube. + +00:13:14.200 --> 00:13:14.540 +answer the + +00:13:13.860 --> 00:13:15.580 +[Speaker 1]: I'm going to question you asked about the + +00:13:15.580 --> 00:13:17.560 +EDA, that's too long to go into right now, + +00:13:17.560 --> 00:13:21.100 +plus my cat is here. So I'm going to answer + +00:13:21.100 --> 00:13:22.620 +that in the comments, all right? + +00:13:23.000 --> 00:13:24.160 +Start up the conversation. + +00:13:24.960 --> 00:13:27.800 +Yes, I'm going to post that in the comments + +00:13:27.800 --> 00:13:28.480 +as well. + +00:13:29.320 --> 00:13:31.500 +[Speaker 0]: Sure, but Also, just to be clear, + +00:13:31.500 --> 00:13:32.640 +Marcus, you're going to continue the + +00:13:32.640 --> 00:13:35.440 +discussion. It's just a stream that will be + +00:13:35.440 --> 00:13:37.160 +moving on to the next talk in about 50 + +00:13:37.160 --> 00:13:39.380 +seconds. Marcus, feel free to keep answering + +00:13:39.380 --> 00:13:40.760 +questions inside this room. + +00:13:40.760 --> 00:13:42.780 +You also have people, we're going to check + +00:13:42.840 --> 00:13:44.540 +aside with the stream, + +00:13:44.540 --> 00:13:46.280 +we have a number of people in the room. + +00:13:46.280 --> 00:13:48.300 +You can see them on the left on the button + +00:13:48.640 --> 00:13:51.360 +who are probably going to unmute themselves + +00:13:51.460 --> 00:13:52.580 +and ask you questions. + +00:13:52.740 --> 00:13:54.440 +So feel free to stay in the room, + +00:13:54.720 --> 00:13:57.100 +answer as lengthy as you want the questions + +00:13:57.100 --> 00:13:58.700 +because that's more content for us and we + +00:13:58.700 --> 00:14:01.640 +love it obviously. But it's just that I + +00:14:01.640 --> 00:14:03.760 +personally will be leaving to take care of + +00:14:03.760 --> 00:14:04.860 +the rest of the talks. + +00:14:04.960 --> 00:14:06.880 +So, Markus, do you have any last words before + +00:14:06.880 --> 00:14:07.740 +we move on? + +00:14:08.000 --> 00:14:09.680 +[Speaker 1]: No, just thank you for this wonderful... + +00:14:09.680 --> 00:14:11.080 +I'm going to copy this. + +00:14:11.660 --> 00:14:13.280 +I don't think I listened to the talk by + +00:14:13.280 --> 00:14:15.200 +Sascha yet, but I'm going to do that because + +00:14:15.200 --> 00:14:18.080 +I really want to copy this conference format. + +00:14:18.080 --> 00:14:19.860 +I think that is the conference format of the + +00:14:19.860 --> 00:14:21.820 +future, using volunteers to put together + +00:14:21.820 --> 00:14:23.100 +conferences. So I can't wait. + +00:14:23.100 --> 00:14:24.720 +Nobody wants to come to Batesville where I + +00:14:24.720 --> 00:14:25.840 +am, but thank you so much. + +00:14:25.840 --> 00:14:27.180 +That was really super professional. + +00:14:27.180 --> 00:14:28.040 +I love that. + +00:14:28.980 --> 00:14:32.420 +[Speaker 0]: Great. Okay, we are almost perfectly on time. + +00:14:32.420 --> 00:14:35.420 +I think we caught up about 1 or 2 seconds + +00:14:35.420 --> 00:14:37.200 +into the last sentence you said but otherwise + +00:14:37.200 --> 00:14:38.960 +we were splendidly on time. + +00:14:38.960 --> 00:14:40.260 +So thank you so much Marcus. + +00:14:40.440 --> 00:14:43.140 +[Speaker 1]: You're welcome. So I wanted to say a little + +00:14:43.140 --> 00:14:46.660 +bit about that question about handling EDA. + +00:14:51.220 --> 00:14:52.960 +[Speaker 0]: Can you see the chat on the left? + +00:14:52.960 --> 00:14:54.720 +Because people have started asking questions + +00:14:54.720 --> 00:14:56.180 +on the left. Can you see the chat? + +00:14:49.460 --> 00:14:56.866 +[Speaker 1]: I mean I used email. Sorry, + +00:14:58.860 --> 00:15:00.820 +[Speaker 0]: So you've got multiple avenues for questions. + +00:15:01.020 --> 00:15:01.166 +[Speaker 2]: You can + +00:15:01.166 --> 00:15:02.380 +[Speaker 0]: still answer questions in the chat. + +00:14:57.053 --> 00:15:03.760 +[Speaker 1]: sorry, sorry. Okay, I'm just going to go into + +00:15:03.760 --> 00:15:05.240 +that. Yeah, that's fine. + +00:15:05.240 --> 00:15:06.760 +[Speaker 0]: Sure, I'll need to go now. + +00:15:06.760 --> 00:15:08.560 +So Marcus, have a great day and I'll probably + +00:15:08.560 --> 00:15:09.360 +see you later. + +00:15:10.160 --> 00:15:12.280 +[Speaker 1]: Yeah, thank you. Sorry. + +00:15:13.140 --> 00:15:15.620 +Bye bye. There was a question about the, + +00:15:15.620 --> 00:15:17.560 +I wanted to ask the answer the question about + +00:15:17.560 --> 00:15:21.760 +EDA, large data sets. So, + +00:15:21.760 --> 00:15:24.660 +I mean, I teach undergraduate now, + +00:15:25.080 --> 00:15:28.100 +so there's a limited number of courses, + +00:15:28.660 --> 00:15:32.360 +like where I use, actually have big data + +00:15:32.360 --> 00:15:36.100 +issues. And I mean I'm not saying that I'm + +00:15:36.100 --> 00:15:38.760 +not that I don't run into performance issues + +00:15:38.760 --> 00:15:40.580 +with Emacs. I obviously do. + +00:15:40.680 --> 00:15:43.680 +But like the performance issues in Emacs are + +00:15:43.680 --> 00:15:45.780 +comparable to performance issues for example + +00:15:45.780 --> 00:15:49.580 +when using R. In R everything is in memory So + +00:15:49.640 --> 00:15:52.700 +you are limited to the available, + +00:15:52.840 --> 00:15:56.020 +what is it, 2 gigabyte or whatever memory of + +00:15:56.020 --> 00:15:58.180 +your computer. So you would have to find + +00:15:58.180 --> 00:16:00.360 +other infrastructure solutions anyway. + +00:16:00.660 --> 00:16:05.860 +The advantage of using Emacs is that I can, + +00:16:05.860 --> 00:16:07.620 +within 1 Org Mode file, + +00:16:08.140 --> 00:16:10.220 +connect to an external database. + +00:16:11.760 --> 00:16:13.840 +I can even, as probably most of you know, + +00:16:13.840 --> 00:16:17.860 +I can even use it as a text-based web browser + +00:16:17.860 --> 00:16:20.640 +if I want to. So I could look at individual + +00:16:22.940 --> 00:16:26.820 +files. And the other point of EDA of course + +00:16:26.820 --> 00:16:30.640 +is that you're not supposed to look at the + +00:16:30.640 --> 00:16:33.260 +tables. You're supposed to get the basic + +00:16:38.620 --> 00:16:41.300 +frame of your data. Is there a header? + +00:16:41.460 --> 00:16:43.780 +What's the approximate size and stuff like + +00:16:43.780 --> 00:16:45.940 +that? And then you're supposed to import it + +00:16:45.940 --> 00:16:47.580 +into a data frame ideally, + +00:16:47.960 --> 00:16:51.260 +at least in portions. And I don't think, + +00:16:53.240 --> 00:16:56.260 +yeah, so that's it. But the full answer is + +00:16:56.260 --> 00:16:59.980 +that I have not done big data analysis in + +00:16:59.980 --> 00:17:02.280 +Emacs. So that's actually a really nice + +00:17:02.380 --> 00:17:06.060 +extension. I'm going to write that down as a + +00:17:06.060 --> 00:17:08.260 +thing to talk about in some future talk. + +00:17:08.260 --> 00:17:10.819 +Okay, so ADA with big data. + +00:17:11.599 --> 00:17:13.940 +Even though interesting would be to know what + +00:17:13.940 --> 00:17:16.560 +kind of size of data you're actually talking + +00:17:16.560 --> 00:17:19.300 +about. So I don't know, + +00:17:20.920 --> 00:17:25.940 +what is it, upwards of 1 terabyte or + +00:17:25.940 --> 00:17:27.520 +something like that, I don't know. + +00:17:27.520 --> 00:17:29.020 +That'd be interesting to know. + +00:17:31.560 --> 00:17:34.940 +Haven't done that in class. + +00:17:39.240 --> 00:17:40.460 +So there's another question. + +00:17:41.240 --> 00:17:43.020 +Proportion of students that you think would + +00:17:43.020 --> 00:17:44.820 +keep on using Emacs after your course? + +00:17:44.820 --> 00:17:46.000 +That's not a difficult question, + +00:17:46.000 --> 00:17:47.880 +because as I said, I have very small classes. + +00:17:47.880 --> 00:17:49.200 +I've been here since 2 years. + +00:17:49.200 --> 00:17:51.540 +So I'm in touch with almost all the students. + +00:17:51.580 --> 00:17:54.760 +In fact, I'm getting them work after school. + +00:17:54.760 --> 00:17:55.980 +So that's really cool. + +00:17:56.200 --> 00:18:00.660 +And everybody who took to Emacs really + +00:18:00.660 --> 00:18:03.900 +seriously, so probably about 25% or so keep + +00:18:03.900 --> 00:18:06.160 +using Emacs after, afterwards. + +00:18:06.560 --> 00:18:08.360 +I mean, even in the job, + +00:18:08.360 --> 00:18:10.080 +right, in the professional field. + +00:18:10.680 --> 00:18:13.080 +Who, those who keep using Emacs after the + +00:18:13.080 --> 00:18:15.180 +course, I think the number is greater, + +00:18:15.180 --> 00:18:16.920 +but I have not followed up on that. + +00:18:16.920 --> 00:18:23.140 +I have to, my guess is more than half, + +00:18:23.140 --> 00:18:25.360 +I would say, half or more than half. + +00:18:26.660 --> 00:18:27.880 +Oh, Aaron, thank you so much. + +00:18:27.880 --> 00:18:31.320 +That's very sweet. But I didn't think the + +00:18:31.320 --> 00:18:32.300 +presentation was great. + +00:18:32.300 --> 00:18:33.840 +I was thinking about redoing it, + +00:18:33.840 --> 00:18:35.700 +but this is actually the first take. + +00:18:36.280 --> 00:18:38.860 +It was late, I had lots of other stuff to do. + +00:18:40.840 --> 00:18:44.700 +I think what I'm more interested in than + +00:18:44.700 --> 00:18:47.260 +papers is probably this idea of making + +00:18:48.320 --> 00:18:51.020 +Emacs-based data science videos because there + +00:18:51.020 --> 00:18:52.120 +aren't many out there. + +00:18:52.120 --> 00:18:53.600 +Most of the people who do, + +00:18:54.920 --> 00:18:57.240 +and computer science, most people who do that + +00:18:57.240 --> 00:18:59.240 +are not either developers and certainly not + +00:18:59.240 --> 00:19:02.080 +teachers. So I think that's a good idea. + +00:19:02.080 --> 00:19:03.740 +I'm gonna pick that up. + +00:19:03.860 --> 00:19:15.540 +So to do more Remax based data science videos + +00:19:19.120 --> 00:19:20.200 +Is there anything else? + +00:19:20.800 --> 00:19:22.360 +More people. There are some people here in + +00:19:22.360 --> 00:19:23.300 +the room still. + +00:19:23.800 --> 00:19:26.100 +[Speaker 2]: If you do a PSVL on work. + +00:19:27.040 --> 00:19:31.140 +What? Or wiki. What's my YouTube channel? + +00:19:34.460 --> 00:19:36.220 +[Speaker 1]: Oh, yeah, I'm going to give you the, + +00:19:36.560 --> 00:19:38.520 +I've got a bunch of different YouTube + +00:19:38.520 --> 00:19:40.720 +channels. I'm going to put them in the + +00:19:40.720 --> 00:19:43.240 +comments to my talk. Hold on, + +00:19:43.660 --> 00:19:46.500 +the 1 where I have the latest Emacs videos, + +00:19:46.640 --> 00:19:48.740 +you find my name, there's nobody in the world + +00:19:48.740 --> 00:19:51.060 +with my name. So if you look for Gerten Krag + +00:19:52.120 --> 00:19:55.740 +on YouTube, then you will find it. + +00:19:59.120 --> 00:20:00.300 +But I got a bunch of them. + +00:20:00.300 --> 00:20:01.900 +Hold on, I'm going to give you the... + +00:20:13.260 --> 00:20:20.040 +My channel. Okay, This 1 has only got a few + +00:20:20.220 --> 00:20:24.300 +videos. But so there's 1 with a lot more. + +00:20:25.380 --> 00:20:32.720 +Few recent videos. And I'm going to post + +00:20:32.740 --> 00:20:41.320 +more. Other ones in the comments of this + +00:20:41.320 --> 00:20:44.320 +video. Okay, what else? + +00:20:48.780 --> 00:20:51.140 +I'm trying to find my way back to the button. + +00:20:55.440 --> 00:20:59.200 +Okay, cool. Oh, yes, thank you. + +00:20:59.200 --> 00:21:01.500 +I will. That's very good. + +00:21:01.500 --> 00:21:03.120 +Thank you so much. Of course, + +00:21:03.120 --> 00:21:05.940 +I use Vork. I hadn't even thought of it. + +00:21:06.360 --> 00:21:15.140 +Very good. It's interesting, + +00:21:15.860 --> 00:21:18.020 +that's something that comes to my mind. + +00:21:18.120 --> 00:21:19.700 +When I was a young student, + +00:21:19.740 --> 00:21:24.020 +right, people who used Emacs and the web + +00:21:24.020 --> 00:21:25.920 +wasn't particularly large. + +00:21:25.960 --> 00:21:29.440 +So the volunteers would automatically make + +00:21:29.440 --> 00:21:31.420 +videos but not for commercial purposes. + +00:21:31.560 --> 00:21:34.740 +Now you have an army of people who make + +00:21:34.740 --> 00:21:37.700 +commercial videos and the videos are usually + +00:21:38.240 --> 00:21:41.020 +good for the first 10% of every content, + +00:21:41.040 --> 00:21:42.540 +but as soon as it gets a little more + +00:21:42.540 --> 00:21:44.760 +difficult, they either don't know what to do + +00:21:44.760 --> 00:21:48.600 +anymore or they don't do it because it's not + +00:21:48.600 --> 00:21:50.980 +commercially viable. The number of people who + +00:21:50.980 --> 00:21:53.720 +move on is gets smaller and smaller and + +00:21:53.720 --> 00:21:55.740 +smaller. So there's no commerce anymore. + +00:21:55.960 --> 00:21:57.840 +But when I was a student, + +00:21:58.740 --> 00:22:01.020 +pretty much all the documentation everywhere + +00:22:01.100 --> 00:22:02.360 +was created by volunteers, + +00:22:02.500 --> 00:22:04.840 +just like this conference or like anything in + +00:22:04.840 --> 00:22:09.520 +org mode. And that doesn't seem to be much of + +00:22:09.520 --> 00:22:12.760 +a trend anymore, but maybe we can resurrect + +00:22:12.860 --> 00:22:22.960 +it. So yes, I'm definitely gonna contribute + +00:22:22.960 --> 00:22:26.760 +to that. Multiple people are typing here. + +00:22:30.280 --> 00:22:36.180 +Oh, sorry. Yes. Thank you so much. + +00:22:37.060 --> 00:22:40.920 +I'm gonna put that, I'm gonna rectify that in + +00:22:40.920 --> 00:22:45.260 +the comment. Having said that, + +00:22:45.260 --> 00:22:49.820 +I am not 100% sure that I didn't lie here. + +00:22:50.500 --> 00:22:52.760 +May just be because I didn't have much time + +00:22:52.760 --> 00:22:54.340 +to put the presentation together. + +00:22:54.340 --> 00:22:56.820 +And it's perfectly possible that that's + +00:22:56.820 --> 00:22:59.760 +actually Google slides and not all reveal. + +00:23:00.040 --> 00:23:02.360 +In the classroom when I present and just do + +00:23:02.360 --> 00:23:04.100 +lectures, I always do reveal, + +00:23:04.600 --> 00:23:07.900 +but most of the time I do a tree slide. + +00:23:08.640 --> 00:23:10.840 +That's the quickest way to do it for me. + +00:23:10.840 --> 00:23:15.060 +So, so presentation. Hold on, + +00:23:15.060 --> 00:23:16.580 +Let me just copy this 1. + +00:23:17.960 --> 00:23:20.780 +Make sure that this doesn't get lost. + +00:23:21.880 --> 00:23:23.220 +Thank you so much for that. + +00:23:24.280 --> 00:23:26.100 +And presentations in class. + +00:23:28.780 --> 00:23:30.320 +I use sometimes org-present, + +00:23:30.660 --> 00:23:32.860 +but there are issues with the font sometimes. + +00:23:33.740 --> 00:23:36.960 +I use Treeslide most of the time and Org + +00:23:44.240 --> 00:23:44.740 +[Speaker 2]: tool. + +00:23:36.960 --> 00:23:46.780 +[Speaker 1]: Reveal. But this 1 is my top Of course, + +00:23:46.780 --> 00:23:49.140 +this is not org, so forget about that. + +00:24:02.660 --> 00:24:08.220 +Okay. Yeah, so you can send me your, + +00:24:10.680 --> 00:24:12.160 +you've got my email, I think, + +00:24:12.160 --> 00:24:14.060 +on the end, if you're interested in following + +00:24:14.060 --> 00:24:16.360 +up or letting me know about your stuff. + +00:24:16.680 --> 00:24:18.220 +It might be interesting to, + +00:24:18.480 --> 00:24:20.040 +I don't know, might be interesting to put + +00:24:20.040 --> 00:24:22.040 +together a conference or a little seminar + +00:24:22.040 --> 00:24:22.980 +just for educators. + +00:24:37.500 --> 00:24:39.025 +DF is still typing, I'm waiting. + +00:24:39.025 --> 00:24:39.780 +I'm waiting. + +00:24:44.840 --> 00:24:46.400 +[Speaker 2]: Actually, our mod maintainer, + +00:24:46.700 --> 00:24:52.340 +Bastien, was talking about possibility to + +00:24:52.340 --> 00:24:54.120 +have just org mod conference. + +00:24:55.760 --> 00:24:59.180 +But the question is, is it worth making a + +00:24:54.780 --> 00:25:02.940 +[Speaker 1]: Yeah. A whole separate 1 what? + +00:24:59.180 --> 00:25:05.020 +[Speaker 2]: whole separate 1? A whole separate org + +00:25:07.120 --> 00:25:09.600 +[Speaker 1]: Oh, I see. Yeah, probably would be. + +00:25:10.840 --> 00:25:11.340 +Actually. + +00:25:05.020 --> 00:25:13.940 +[Speaker 2]: dedicated conference. It's just like you see + +00:25:13.940 --> 00:25:15.980 +how EmacsConf is well done. + +00:25:16.800 --> 00:25:19.340 +So it's like creating anything that has good + +00:25:22.500 --> 00:25:25.540 +[Speaker 1]: Yes. No, I think that's a good idea. + +00:25:25.640 --> 00:25:26.620 +Yeah, I mean. + +00:25:19.340 --> 00:25:30.480 +[Speaker 2]: is tricky. I mean, Okay, + +00:25:30.480 --> 00:25:32.920 +it's anywhere, like half of Emacs is anywhere + +00:25:32.920 --> 00:25:36.880 +remote. So it's almost the same. + +00:25:37.500 --> 00:25:40.200 +[Speaker 1]: Yeah. Well, I suppose at this point, + +00:25:40.200 --> 00:25:41.520 +I don't know if that's what you mean. + +00:25:41.520 --> 00:25:45.020 +Org Mode is probably what attracts people to + +00:25:45.020 --> 00:25:47.040 +Emacs in the first place. + +00:25:47.040 --> 00:25:51.040 +Like, I suppose Org Roam is the, + +00:25:51.260 --> 00:25:54.600 +maybe the biggest 1 for people even outside + +00:25:54.600 --> 00:25:58.080 +of computer science. I use Org.ROM + +00:25:58.280 --> 00:26:02.760 +for everything. But there are... + +00:26:04.760 --> 00:26:05.840 +I mean, the thresholds... + +00:26:06.220 --> 00:26:07.900 +I think that the maintainer or maybe the + +00:26:07.900 --> 00:26:10.520 +creator of Org.MODE has claimed and said for + +00:26:10.520 --> 00:26:13.140 +many years that Org Mode itself doesn't + +00:26:13.140 --> 00:26:14.680 +actually necessarily need Emacs. + +00:26:14.680 --> 00:26:17.360 +You can have it as a completely separate + +00:26:17.360 --> 00:26:19.740 +application as well. But I, + +00:26:19.760 --> 00:26:21.040 +for a number of reasons, + +00:26:21.040 --> 00:26:23.440 +I don't like that. I really like the idea to + +00:26:28.434 --> 00:26:30.620 +[Speaker 2]: why- The current strategy is that It has to + +00:26:30.620 --> 00:26:33.580 +be Emacs because the configurability is 1 of + +00:26:33.580 --> 00:26:35.140 +the strong points anyway. + +00:26:23.440 --> 00:26:35.820 +[Speaker 1]: have it inside Emacs. The reason That's true. + +00:26:35.820 --> 00:26:37.620 +[Speaker 2]: You cannot make a separate application. + +00:26:37.840 --> 00:26:38.080 +No, + +00:26:38.080 --> 00:26:39.800 +[Speaker 1]: that's true. I was going to say that. + +00:26:39.800 --> 00:26:41.500 +The thing is you use the flexibility. + +00:26:41.680 --> 00:26:43.220 +Plus, you also use the, + +00:26:43.440 --> 00:26:46.080 +I don't know if that's the right word, + +00:26:46.080 --> 00:26:48.760 +but you use there's something about the free + +00:26:48.760 --> 00:26:52.600 +ideology of Emacs that is what attracted me + +00:26:52.600 --> 00:26:56.260 +to it in the first place when I was younger + +00:26:56.460 --> 00:27:00.290 +and that I find even more important now. + +00:27:00.765 --> 00:27:03.520 +So what they say the community aspect, + +00:27:06.220 --> 00:27:08.800 +the reason, the main reason why Python is so + +00:27:08.800 --> 00:27:13.100 +big today, really. So yeah. + +00:27:15.060 --> 00:27:17.860 +[Speaker 2]: But in terms of going out of Emacs, + +00:27:17.860 --> 00:27:21.300 +it's org syntax that is supposed to be like + +00:27:21.820 --> 00:27:23.260 +breaking out of Emacs. + +00:27:24.960 --> 00:27:28.860 +So like there's a plan to lay out the actual + +00:27:28.860 --> 00:27:31.420 +standard document so that you can register + +00:27:31.440 --> 00:27:32.540 +the format officially. + +00:27:23.860 --> 00:27:34.760 +[Speaker 1]: Yeah. Yeah, I think I've heard that too. + +00:27:34.760 --> 00:27:36.560 +I've not followed up on it much. + +00:27:36.880 --> 00:27:39.320 +I don't know what the, + +00:27:39.400 --> 00:27:41.260 +I mean, that probably would, + +00:27:41.480 --> 00:27:43.040 +it would strength, very likely, + +00:27:43.040 --> 00:27:45.100 +if you do that, it would at least for a short + +00:27:45.100 --> 00:27:47.660 +time, strengthen org mode and weaken emacs. + +00:27:49.420 --> 00:27:50.880 +I don't know what other examples, + +00:27:51.580 --> 00:27:54.660 +if there are other examples of applications + +00:27:55.120 --> 00:27:57.840 +pulled out of IDEs like that. + +00:27:57.840 --> 00:27:59.480 +I'm not aware of any others. + +00:28:00.300 --> 00:28:02.680 +[Speaker 2]: Actually, people are trying to make + +00:28:02.680 --> 00:28:04.920 +three-seater drama. People are trying to make + +00:28:04.920 --> 00:28:06.240 +like some external parsers, + +00:28:06.460 --> 00:28:10.320 +a lot of them. And a lot of stuff is done on + +00:28:10.320 --> 00:28:12.940 +mobile part. I can draw it to iOS, + +00:28:13.440 --> 00:28:17.780 +especially recently. So things that are Emacs + +00:28:17.780 --> 00:28:19.780 +independent are demanded. + +00:28:20.660 --> 00:28:23.040 +[Speaker 1]: Okay, yeah. I have no doubt that there is a + +00:28:25.440 --> 00:28:26.620 +[Speaker 2]: Especially in the environment, + +00:28:27.040 --> 00:28:28.040 +like every time. + +00:28:23.040 --> 00:28:30.680 +[Speaker 1]: demand. Yeah. I mean, I didn't get into that + +00:28:30.680 --> 00:28:35.020 +very much. I have some of my students have 0 + +00:28:35.020 --> 00:28:36.900 +affinity with computers. + +00:28:38.240 --> 00:28:39.900 +They really don't know their way around their + +00:28:39.900 --> 00:28:44.320 +computers at all. And so for them, + +00:28:46.860 --> 00:28:51.440 +It is quite important to learn how to find + +00:28:51.440 --> 00:28:56.520 +your way around Emacs because it's like a + +00:28:56.520 --> 00:28:57.820 +little operating system, + +00:28:57.920 --> 00:29:00.300 +but it's not. It's an operating system + +00:29:00.300 --> 00:29:03.960 +without much of the obscurity. + +00:29:05.080 --> 00:29:07.960 +And the alternative to that would be to + +00:29:07.960 --> 00:29:10.520 +simply let them work only on the command + +00:29:10.520 --> 00:29:12.480 +line, which is another possibility. + +00:29:13.480 --> 00:29:16.160 +But, you know, there of course you are + +00:29:16.160 --> 00:29:20.540 +limited with regard to if you want to swap + +00:29:20.540 --> 00:29:23.500 +languages. So for example, + +00:29:23.940 --> 00:29:26.000 +quite often I find myself in the situation I + +00:29:26.000 --> 00:29:28.780 +teach data science in R and Python and in + +00:29:28.780 --> 00:29:31.520 +Emacs org mode I can demonstrate both of + +00:29:31.520 --> 00:29:35.100 +these side by side in the same file. + +00:29:35.280 --> 00:29:38.700 +And that's a great advantage. + +00:29:39.800 --> 00:29:42.540 +Not to overburden the students when they are + +00:29:43.060 --> 00:29:45.100 +at the beginning with things that you don't + +00:29:45.100 --> 00:29:47.620 +want them to necessarily learn about. + +00:29:48.480 --> 00:29:51.000 +And plus the thing what I like as a graduate + +00:29:51.000 --> 00:29:54.440 +student when I stepped onto Emacs was that it + +00:29:54.440 --> 00:30:00.140 +was infinite possibilities to lose myself in + +00:30:00.140 --> 00:30:03.060 +Emacs and you know go on and learn more stuff + +00:30:03.060 --> 00:30:06.680 +about it. But it's such a long time ago that + +00:30:07.300 --> 00:30:10.360 +I barely dare to mention it anymore. + +00:30:11.600 --> 00:30:12.880 +[Speaker 2]: For command line, actually, + +00:30:12.880 --> 00:30:17.080 +it's since the Jupyter notebooks and that + +00:30:17.080 --> 00:30:19.400 +Google thing they are running. + +00:30:20.820 --> 00:30:23.820 +It's getting so popular that it's clear that + +00:30:23.820 --> 00:30:26.760 +command line is just losing in popularity in + +00:30:28.580 --> 00:30:31.920 +[Speaker 1]: well, yes and no. I mean, + +00:30:26.760 --> 00:30:33.360 +[Speaker 2]: this. Yeah, of course, + +00:30:36.100 --> 00:30:38.400 +Not the usage. People are still using it, + +00:30:38.400 --> 00:30:38.900 +obviously. + +00:30:39.520 --> 00:30:41.020 +[Speaker 1]: I mean, in Google Colab, + +00:30:41.200 --> 00:30:43.620 +only the paid version allows you to go to the + +00:30:43.620 --> 00:30:45.460 +terminal and use the command line. + +00:30:46.620 --> 00:30:48.580 +But of course, the traction, + +00:30:48.580 --> 00:30:50.140 +and I think that's kind of interesting, + +00:30:50.660 --> 00:30:54.680 +1 of the reasons why IPython or any of the + +00:30:54.680 --> 00:30:56.960 +Jupyter notebooks are so cool is because you + +00:30:56.960 --> 00:30:59.940 +can use a lot of shell commands from the + +00:31:00.240 --> 00:31:05.080 +IPython shell. There's a whole bunch of magic + +00:31:05.080 --> 00:31:07.000 +commands which are quite powerful. + +00:31:07.040 --> 00:31:10.020 +I mean the the 1 that comes to mind is time. + +00:31:10.680 --> 00:31:12.940 +The time command for example you know gives + +00:31:12.940 --> 00:31:15.720 +you a really nice performance quick + +00:31:15.720 --> 00:31:17.660 +performance check. There's a bunch of + +00:31:17.660 --> 00:31:19.780 +different, I think probably close to a + +00:31:19.780 --> 00:31:22.340 +hundred magic commands that you can use in + +00:31:22.340 --> 00:31:25.600 +Jupyter. But I don't know JupyterLab too + +00:31:25.600 --> 00:31:28.840 +well, but I noticed that the companies that + +00:31:28.840 --> 00:31:31.080 +do online training, And they are usually the + +00:31:31.080 --> 00:31:34.920 +ones that are closest to what beginners want, + +00:31:34.920 --> 00:31:36.100 +especially in business. + +00:31:36.280 --> 00:31:38.220 +And what those companies do is they, + +00:31:38.560 --> 00:31:41.720 +you know, they take, they take JupyterLab and + +00:31:41.720 --> 00:31:43.740 +turn it into a presentation of their own. + +00:31:43.740 --> 00:31:45.320 +Another 1 is Notable, notable.io. + +00:31:46.840 --> 00:31:49.900 +That's another 1. They took JupyterLab and + +00:31:49.900 --> 00:31:51.320 +turned it into something commercial. + +00:31:51.340 --> 00:31:52.920 +It's boosted up a little bit. + +00:31:55.840 --> 00:32:00.480 +And so the shell inside the JupyterLab has + +00:32:00.480 --> 00:32:03.120 +some of the most more important shell + +00:32:03.120 --> 00:32:05.440 +properties. And so people still use the + +00:32:05.440 --> 00:32:07.080 +command line without knowing that they use + +00:32:07.080 --> 00:32:13.100 +the command line. But I also like doing, + +00:32:13.680 --> 00:32:15.300 +how do I use org-roam? + +00:32:19.360 --> 00:32:22.020 +Well, I use it, I do not have not used it + +00:32:22.020 --> 00:32:23.000 +with the students yet, + +00:32:23.000 --> 00:32:25.020 +only the best students have sort of seen me + +00:32:25.020 --> 00:32:29.780 +use it and copied it. But I use it probably + +00:32:29.780 --> 00:32:32.000 +in a very naive, trivial way. + +00:32:32.000 --> 00:32:33.620 +I can't say that I am, + +00:32:34.300 --> 00:32:36.960 +that I have a very sophisticated use. + +00:32:37.200 --> 00:32:39.640 +I basically, I like the fact that, + +00:32:39.640 --> 00:32:43.100 +I mean, it's built on the original concept of + +00:32:43.100 --> 00:32:44.540 +the, with the German word, + +00:32:44.540 --> 00:32:48.280 +Zettelkasten, right? Which is that you do not + +00:32:48.280 --> 00:32:50.940 +have to think about a taxonomy because as you + +00:32:50.940 --> 00:32:53.800 +move along, your taxonomy changes all the + +00:32:53.800 --> 00:32:55.580 +time. You know, what you think is important + +00:32:55.580 --> 00:32:57.320 +at the beginning, your root node, + +00:32:57.440 --> 00:32:58.940 +as you go along, you realize, + +00:32:58.940 --> 00:33:00.680 +oh, that's not the root node at all. + +00:33:00.680 --> 00:33:02.640 +There's a higher level and a higher level. + +00:33:02.640 --> 00:33:04.740 +And some of the lower levels are at the lower + +00:33:04.740 --> 00:33:06.300 +level, actually the higher level. + +00:33:06.320 --> 00:33:10.460 +So you're beginning to create hierarchies + +00:33:10.760 --> 00:33:14.340 +that are out of date as soon as you create + +00:33:14.340 --> 00:33:16.360 +the hierarchy. So what is the idea of the + +00:33:16.360 --> 00:33:18.480 +tittle custom is that anything that comes to + +00:33:18.480 --> 00:33:21.100 +your mind you can throw in the custom the box + +00:33:21.160 --> 00:33:26.580 +it literally means Box of notes and That's + +00:33:26.580 --> 00:33:27.740 +what I appreciate about it. + +00:33:27.740 --> 00:33:32.920 +So I create a I create a note pretty much for + +00:33:32.920 --> 00:33:35.780 +anything I do, but I've only used it for + +00:33:35.860 --> 00:33:38.160 +about a year and a half or so, + +00:33:38.220 --> 00:33:39.740 +or grown, maybe a year. + +00:33:40.680 --> 00:33:43.700 +So I can see that I'm coming up against the + +00:33:43.700 --> 00:33:46.980 +Zettelkasten or note box problems, + +00:33:47.120 --> 00:33:50.860 +which is that I've got so many notes now that + +00:33:50.860 --> 00:33:52.960 +unless I have clever aliases, + +00:33:54.180 --> 00:33:56.680 +there is a chance that I might forget that I + +00:33:58.820 --> 00:34:00.400 +[Speaker 2]: That's why you need meta notes. + +00:33:56.680 --> 00:34:01.600 +[Speaker 1]: have a note. So I need a- Yes, + +00:34:02.780 --> 00:34:04.920 +[Speaker 2]: In other words, a summarization is important, + +00:34:04.940 --> 00:34:06.800 +no matter what system you use. + +00:34:01.740 --> 00:34:09.739 +[Speaker 1]: yes. But what I'm trying to say is that's a + +00:34:09.739 --> 00:34:11.260 +different approach than hierarchies, + +00:34:11.480 --> 00:34:13.620 +right? It's the same, it's the same, + +00:34:13.620 --> 00:34:15.960 +it's the same principle as a relational + +00:34:16.080 --> 00:34:18.719 +database versus a hierarchical database. + +00:34:19.120 --> 00:34:23.360 +Same thing. So, yeah, and I've not used that. + +00:34:23.360 --> 00:34:25.400 +I've not really used, actually I have cut + +00:34:25.400 --> 00:34:27.020 +meta notes, of course I do. + +00:34:27.100 --> 00:34:29.000 +So notes that point to other notes. + +00:34:29.487 --> 00:34:34.924 +Yes, of course. I use those. + +00:34:35.412 --> 00:34:38.800 +I have not taught that part to the students + +00:34:38.880 --> 00:34:42.860 +because I do project work with the students, + +00:34:45.040 --> 00:34:46.320 +but there's only so much time. + +00:34:46.320 --> 00:34:48.219 +I'm already, I mean, already, + +00:34:48.340 --> 00:34:51.000 +I don't think there's any class that where I + +00:34:51.000 --> 00:34:55.860 +am able to use more than 30% of my material. + +00:34:55.880 --> 00:34:57.620 +And the reason is that when the students come + +00:34:57.620 --> 00:34:59.220 +to class, which is I pointed out in the + +00:34:59.220 --> 00:35:01.100 +video, they know so little. + +00:35:01.840 --> 00:35:03.720 +And most of the students, + +00:35:03.720 --> 00:35:04.960 +at least in liberal arts, + +00:35:04.960 --> 00:35:10.280 +spend just too little time outside of class, + +00:35:10.760 --> 00:35:11.600 +getting there, you know, + +00:35:11.600 --> 00:35:13.040 +drilling down into the, + +00:35:13.040 --> 00:35:14.640 +into the, into the infrastructure, + +00:35:14.860 --> 00:35:17.060 +into the work. Only, only the best students + +00:35:17.060 --> 00:35:19.320 +do that. The ones that really catch fire. + +00:35:20.080 --> 00:35:22.280 +[Speaker 2]: Don't you have something like a course + +00:35:22.280 --> 00:35:23.760 +project at the end? + +00:35:24.140 --> 00:35:25.760 +[Speaker 1]: Yes, I have course, not at the end. + +00:35:25.760 --> 00:35:27.720 +I use Scrum. Maybe I shouldn't, + +00:35:27.720 --> 00:35:29.640 +but I've used Scrum for many years. + +00:35:30.040 --> 00:35:32.600 +So I have course projects that start at the + +00:35:32.600 --> 00:35:35.280 +beginning and they do sprint reviews every 3 + +00:35:35.280 --> 00:35:40.640 +or 4 weeks. So term end projects I find + +00:35:40.640 --> 00:35:43.080 +completely useless because the students do + +00:35:43.080 --> 00:35:45.060 +the work at the very end of the term. + +00:35:46.220 --> 00:35:49.600 +[Speaker 2]: no, by determined I mean they don't start at + +00:35:49.600 --> 00:35:51.880 +the end, they just report at the end. + +00:35:45.060 --> 00:35:52.960 +[Speaker 1]: And so I... Oh I use the IMRAD, + +00:35:52.960 --> 00:35:54.300 +I use the IMRAD method. + +00:35:54.340 --> 00:35:58.160 +So I use IMRAD, basically IMRAD plus, + +00:35:58.700 --> 00:36:00.300 +plus Scrum, right? So, + +00:36:00.300 --> 00:36:02.220 +So the first sprint review is introductory, + +00:36:02.500 --> 00:36:03.480 +the research proposal, + +00:36:03.540 --> 00:36:05.040 +the second 1 is about methodology, + +00:36:05.060 --> 00:36:06.360 +the third 1 about results, + +00:36:06.360 --> 00:36:08.040 +and the last 1 is their final presentation. + +00:36:09.000 --> 00:36:11.100 +And so that's the way I manage the projects, + +00:36:11.160 --> 00:36:16.040 +but that's about as much as I can do with + +00:36:16.040 --> 00:36:17.640 +them. It's a good idea. + +00:36:17.640 --> 00:36:19.780 +I hadn't even thought about using Org-ROM + +00:36:19.900 --> 00:36:22.760 +with them, but to teach them that might be a + +00:36:22.760 --> 00:36:24.180 +good idea, actually. + +00:36:25.360 --> 00:36:27.220 +[Speaker 2]: Well, for Org-ROM, actually, + +00:36:27.400 --> 00:36:32.360 +what I found useful during my graduate is for + +00:36:32.360 --> 00:36:34.740 +literature review. Yes. + +00:36:34.960 --> 00:36:37.360 +The other part of our program that is not + +00:36:37.360 --> 00:36:40.580 +about your like noting down your thoughts is + +00:36:40.580 --> 00:36:42.900 +about writing about literature notes. + +00:36:43.780 --> 00:36:45.480 +[Speaker 1]: Yeah, that's a good idea actually. + +00:36:45.480 --> 00:36:46.320 +And of course, I mean, + +00:36:46.320 --> 00:36:48.180 +there's more stuff that they should learn, + +00:36:48.180 --> 00:36:50.140 +you know, like another 1, + +00:36:50.140 --> 00:36:51.780 +since you mentioned literature, + +00:36:52.420 --> 00:36:54.640 +you know, latex and Bibtech is another + +00:36:55.760 --> 00:36:57.840 +obvious extension of that. + +00:36:58.780 --> 00:37:01.120 +But that is actually a good idea because the + +00:37:01.120 --> 00:37:03.080 +literature is what they have the hardest time + +00:37:04.640 --> 00:37:06.980 +[Speaker 2]: Yeah, like when you need to read like 50 + +00:37:06.980 --> 00:37:07.480 +papers. + +00:37:03.080 --> 00:37:12.480 +[Speaker 1]: with. Last term, since you mentioned that, + +00:37:12.480 --> 00:37:16.220 +I had a really nice experience because 1 of + +00:37:16.220 --> 00:37:18.300 +our librarians, our digital librarian, + +00:37:18.420 --> 00:37:19.920 +came along and talked to the students, + +00:37:19.920 --> 00:37:21.580 +and he taught me about a tool called + +00:37:21.580 --> 00:37:23.540 +litmap.com, which is basically, + +00:37:24.140 --> 00:37:25.420 +I don't know how it's implemented, + +00:37:25.460 --> 00:37:27.180 +but it's basically a graph, + +00:37:28.140 --> 00:37:31.620 +a graph representation of papers organized by + +00:37:31.620 --> 00:37:35.580 +citation. It's very, very cool. + +00:37:35.900 --> 00:37:38.480 +And the students who used to only find, + +00:37:38.480 --> 00:37:41.080 +I don't know, 1 paper and otherwise, + +00:37:41.180 --> 00:37:44.880 +of course, 15 YouTube videos and 100 blogs, + +00:37:45.380 --> 00:37:49.360 +suddenly started finding and reading + +00:37:49.540 --> 00:37:52.120 +scientific papers. It was only because of + +00:37:52.120 --> 00:37:54.900 +this presentation. So you should take the, + +00:37:55.640 --> 00:37:57.580 +I think, I hope that is the right, + +00:37:58.320 --> 00:37:59.560 +that's the right mode, + +00:38:00.280 --> 00:38:02.380 +litmaps. Okay, it's not litmap, + +00:38:02.380 --> 00:38:05.640 +it's called Litmaps. I'm gonna give you an + +00:38:05.640 --> 00:38:09.000 +example. I don't know if I can share this, + +00:38:09.000 --> 00:38:10.240 +if you can look at that. + +00:38:10.240 --> 00:38:13.640 +But basically you create a, + +00:38:13.860 --> 00:38:16.580 +1 can use 1 of your papers as a seed, + +00:38:16.800 --> 00:38:18.840 +and then it will create a graph, + +00:38:19.660 --> 00:38:21.760 +graph representation of it for you. + +00:38:21.960 --> 00:38:25.220 +And this is a powerful tool in itself. + +00:38:25.400 --> 00:38:27.600 +But what I'm saying is that the students + +00:38:27.620 --> 00:38:30.900 +suddenly, their use of literature and that + +00:38:30.900 --> 00:38:32.560 +citation goes to the roof. + +00:38:33.080 --> 00:38:35.680 +And I've been waiting for that for probably + +00:38:36.140 --> 00:38:38.300 +15 years since I've started teaching. + +00:38:38.760 --> 00:38:43.420 +It's crazy. That's really cool. + +00:38:46.500 --> 00:38:47.720 +[Speaker 2]: Here is the same tool, + +00:38:47.720 --> 00:38:49.400 +it's called connected papers. + +00:38:49.440 --> 00:38:53.540 +It's based on the open source citation data. + +00:38:54.140 --> 00:38:56.340 +[Speaker 1]: Yeah, I know that as well, + +00:38:56.500 --> 00:38:57.180 +I think. + +00:39:00.060 --> 00:39:01.560 +[Speaker 2]: It's actually very useful when you just start + +00:39:01.560 --> 00:39:03.960 +learning the topic. It's like you find 1 + +00:39:03.960 --> 00:39:05.800 +paper, then you look into the connections. + +00:39:05.800 --> 00:39:08.260 +You can quickly narrow down to the most + +00:39:08.260 --> 00:39:09.500 +cited, the core papers. + +00:39:10.840 --> 00:39:12.500 +[Speaker 1]: Of course. And that is exactly their + +00:39:12.500 --> 00:39:14.800 +situation, you know, and they're always at + +00:39:14.800 --> 00:39:16.740 +the beginning. As you go on, + +00:39:17.280 --> 00:39:18.680 +you develop different ways, + +00:39:18.680 --> 00:39:20.140 +but for these complete beginners, + +00:39:20.200 --> 00:39:22.680 +that's a good idea. Thank you so much for + +00:39:22.680 --> 00:39:30.520 +that. Okay, guys, anything else? + +00:39:31.240 --> 00:39:32.440 +I've enjoyed the conversation, + +00:39:32.920 --> 00:39:33.960 +so you should definitely, + +00:39:36.000 --> 00:39:37.940 +I'm going to take some of these things away. + +00:39:38.800 --> 00:39:42.340 +Thank you so much for that. + +00:39:42.340 --> 00:39:45.740 +Have you done, Yanta, have you done org mode + +00:39:46.300 --> 00:39:48.200 +documentations yourself on WOC? + +00:39:48.900 --> 00:39:52.120 +Or do you have a sort of a favorite 1? + +00:39:52.120 --> 00:39:53.600 +I mean, I often on walk, + +00:39:53.600 --> 00:39:56.740 +I often use the documentation for code + +00:39:56.740 --> 00:39:59.620 +blocks. I used to when I started doing that + +00:40:00.760 --> 00:40:02.800 +[Speaker 2]: Yeah, because it's only on work. + +00:40:02.800 --> 00:40:04.260 +It's not part of the manual. + +00:39:59.620 --> 00:40:05.280 +[Speaker 1]: for the first time. Yeah, + +00:40:05.280 --> 00:40:07.440 +yeah. And so I've used that a lot. + +00:40:07.780 --> 00:40:09.560 +[Speaker 2]: Have I done? Not really, + +00:40:09.720 --> 00:40:11.460 +mostly fixing the errors. + +00:40:12.260 --> 00:40:12.760 +Okay. + +00:40:14.280 --> 00:40:16.100 +[Speaker 1]: Yeah, I think that's a really good idea. + +00:40:16.440 --> 00:40:19.780 +All right. Well, thank you very much. + +00:40:19.960 --> 00:40:22.360 +And it's great to be at this conference. + +00:40:22.360 --> 00:40:24.440 +I think I'm going to get on. + +00:40:27.660 --> 00:40:29.240 +[Speaker 2]: Thanks for answering all the questions. + +00:40:29.840 --> 00:40:32.560 +And for the talk, It was quite interesting to + +00:40:32.560 --> 00:40:35.660 +see our modules in actual teaching. + +00:40:36.200 --> 00:40:38.600 +[Speaker 1]: Yes, thank you. And I got to thank Daniel + +00:40:38.600 --> 00:40:40.840 +German from Canada, the 1 of, + +00:40:40.840 --> 00:40:43.660 +I had him on 1 of the slides because he, + +00:40:43.660 --> 00:40:45.380 +he inspired me to do that. + +00:40:45.380 --> 00:40:47.540 +And, and I wouldn't be at the conference if I + +00:40:47.540 --> 00:40:49.480 +hadn't contacted him and said oh here's my + +00:40:49.480 --> 00:40:50.980 +paper and he said oh you should come to the + +00:40:50.980 --> 00:40:52.680 +conference and so that's why I came to the + +00:40:52.680 --> 00:40:58.480 +conference. Thank you very much and as they + +00:40:58.480 --> 00:41:04.100 +say keep in touch. You're welcome. + +00:41:04.100 --> 00:41:05.060 +Okay bye-bye. You're welcome. + +00:41:05.060 --> 00:41:15.820 +Okay, bye-bye. Take a copy of the chat before + +00:41:15.820 --> 00:41:22.360 +you go, if you can. Happy weekend to just bye + +00:41:22.360 --> 00:41:22.860 +bye. + +00:41:34.920 --> 00:41:36.840 +[Speaker 0]: You are currently the only person in this + +00:41:36.840 --> 00:41:37.340 +conference. + +00:42:00.060 --> 00:42:00.560 +[Speaker 1]: You diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt new file mode 100644 index 00000000..6674a23c --- /dev/null +++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt @@ -0,0 +1,53 @@ +WEBVTT + + +00:00:00.000 --> 00:00:54.159 +Introduction + +00:00:54.160 --> 00:02:08.039 +My interest in this topic + +00:02:08.040 --> 00:03:47.639 +What is data science? + +00:03:47.640 --> 00:04:52.839 +Computer science is a craft + +00:04:52.840 --> 00:05:36.559 +The problem + +00:05:36.560 --> 00:06:24.119 +The solution: Emacs + Org-mode + +00:06:24.120 --> 00:07:30.359 +Emacs configuration file + +00:07:30.360 --> 00:08:22.039 +Story + code = source + documentation + +00:08:22.040 --> 00:09:59.879 +What is literate programming? + +00:09:59.880 --> 00:11:18.959 +Emacs as a literate programming tool + +00:11:18.960 --> 00:12:11.279 +Case study: basic setup + +00:12:11.280 --> 00:12:45.799 +Emacs + Org-mode notebooks + +00:12:45.800 --> 00:13:40.839 +Onboarding: simplified Emacs tutorial + +00:13:40.840 --> 00:14:48.719 +Instruction + interaction + +00:14:48.720 --> 00:16:15.279 +Assignments + projects + +00:16:15.280 --> 00:18:19.799 +Overall results positive + +00:18:19.800 --> 00:19:27.280 +Conclusion & outlook diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt new file mode 100644 index 00000000..560be0c6 --- /dev/null +++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt @@ -0,0 +1,1193 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.519 +Welcome to my talk, which is pre-recorded, + +00:00:04.520 --> 00:00:06.959 +so please don't blame me if I come across + +00:00:06.960 --> 00:00:08.599 +as wooden and humorless. + +00:00:08.600 --> 00:00:11.319 +It's hard to work up any emotion + +00:00:11.320 --> 00:00:13.879 +when looking at a mechanical eye. + +00:00:13.880 --> 00:00:15.039 +Of course, I am German, + +00:00:15.040 --> 00:00:18.639 +so I am pretty wooden and humorless to begin with. + +00:00:18.640 --> 00:00:20.439 +What else do you need to know about me? + +00:00:20.440 --> 00:00:23.319 +Not much, I suppose, except that I have been + +00:00:23.320 --> 00:00:25.199 +an Emacs user on and off + +00:00:25.200 --> 00:00:26.919 +since my days as a graduate student + +00:00:26.920 --> 00:00:30.079 +in theoretical physics in the 1990s. + +00:00:30.080 --> 00:00:34.679 +I picked Emacs and Org Mode up again + +00:00:34.680 --> 00:00:36.239 +for teaching during COVID + +00:00:36.240 --> 00:00:38.039 +when I had a lot of time on my hands, + +00:00:38.040 --> 00:00:40.359 +and when the teaching and learning needs shifted + +00:00:40.360 --> 00:00:44.239 +because of the exclusive online teaching. + +00:00:44.240 --> 00:00:48.199 +Now I'm going to take my picture away. + +00:00:48.200 --> 00:00:49.559 +You had a good look at me. + +00:00:49.560 --> 00:00:54.159 +I think that's just going to be in the way. + +NOTE My interest in this topic + +00:00:54.160 --> 00:00:57.279 +So my interest in this topic began with + +00:00:57.280 --> 00:00:59.279 +an Emacs talk given by Daniel German + +00:00:59.280 --> 00:01:04.119 +from the University of Victoria in Canada in 2021. + +00:01:04.120 --> 00:01:06.439 +Daniel demonstrated in detail + +00:01:06.440 --> 00:01:09.199 +how he uses Emacs and Org Mode + +00:01:09.200 --> 00:01:12.119 +to prepare and deliver lectures + +00:01:12.120 --> 00:01:14.199 +on different programming languages. + +00:01:14.200 --> 00:01:16.319 +This gave me the idea to try the same thing + +00:01:16.320 --> 00:01:19.999 +with my students with an important alteration. + +00:01:20.000 --> 00:01:23.559 +I wanted to force them to use Emacs and Org Mode + +00:01:23.560 --> 00:01:25.959 +just as most computer science instructors + +00:01:25.960 --> 00:01:29.079 +force their students to use whatever they are using + +00:01:29.080 --> 00:01:32.359 +when they develop their material. + +00:01:32.360 --> 00:01:36.839 +I carried my plan out and mandated Emacs and Org Mode + +00:01:36.840 --> 00:01:40.359 +as the only programming platform and IDE + +00:01:40.360 --> 00:01:43.639 +for three consecutive terms in all my courses, + +00:01:43.640 --> 00:01:45.919 +nine courses in total. + +00:01:45.920 --> 00:01:47.799 +I will give more details later. + +00:01:47.800 --> 00:01:49.919 +I published my results as a case study + +00:01:49.920 --> 00:01:52.279 +in September of this year, + +00:01:52.280 --> 00:01:53.639 +and it contains the missing bits + +00:01:53.640 --> 00:01:56.159 +that I will not talk about today for lack of time, + +00:01:56.160 --> 00:01:58.639 +especially regarding the methodology, + +00:01:58.640 --> 00:02:00.119 +the assessment, et cetera. + +00:02:00.120 --> 00:02:04.999 +Please also use the Q&A to inquire about such details + +00:02:05.000 --> 00:02:08.039 +if they interest you. + +NOTE What is data science? + +00:02:08.040 --> 00:02:12.799 +I probably don't have to explain what computer science is, + +00:02:12.800 --> 00:02:16.359 +but not everyone may know what data science does. + +00:02:16.360 --> 00:02:18.239 +I teach courses in both disciplines + +00:02:18.240 --> 00:02:20.559 +and the boundaries between them are blurred, + +00:02:20.560 --> 00:02:22.639 +so much of what I'm saying about data science + +00:02:22.640 --> 00:02:24.719 +will also be relevant for computer science. + +00:02:24.720 --> 00:02:29.359 +Conceptually, data science is an interdisciplinary affair + +00:02:29.360 --> 00:02:31.999 +that intersects with computer science + +00:02:32.000 --> 00:02:34.959 +and with whatever it is that the data scientist + +00:02:34.960 --> 00:02:39.159 +or his or her clients know very well; their domain. + +00:02:39.160 --> 00:02:42.679 +Because of this interdisciplinary character, + +00:02:42.680 --> 00:02:45.399 +and because their focus is on the data + +00:02:45.400 --> 00:02:48.119 +rather than only on algorithms or mathematics, + +00:02:48.120 --> 00:02:52.719 +successful data scientists need to be more broadly educated + +00:02:52.720 --> 00:02:56.199 +than specialists in computer science or statistics. + +00:02:56.200 --> 00:03:00.519 +In particular, there's a need to master + +00:03:00.520 --> 00:03:03.479 +the entire so-called data science pipeline: + +00:03:03.480 --> 00:03:06.079 +from data cleaning, which you see + +00:03:06.080 --> 00:03:08.879 +on the very left in this slide, + +00:03:08.880 --> 00:03:12.119 +over coding, to statistical modeling, + +00:03:12.120 --> 00:03:14.719 +and to data storytelling through visualization, + +00:03:14.720 --> 00:03:17.159 +which you see on the very right. + +00:03:17.160 --> 00:03:19.079 +This is why until recently, + +00:03:19.080 --> 00:03:22.119 +data science was a graduate-level education + +00:03:22.120 --> 00:03:25.879 +only for software engineers, computer scientists, + +00:03:25.880 --> 00:03:31.679 +statisticians, psychologists, biologists, business people, + +00:03:31.680 --> 00:03:34.279 +or for whoever took a special fancy + +00:03:34.280 --> 00:03:37.719 +to data in their chosen field. + +00:03:37.720 --> 00:03:40.039 +Only with a growing interest in machine learning, + +00:03:40.040 --> 00:03:41.999 +this has changed. + +00:03:42.000 --> 00:03:45.599 +And now we train--or try to train--data scientists + +00:03:45.600 --> 00:03:47.639 +in undergraduate programs as well. + +NOTE Computer science is a craft + +00:03:47.640 --> 00:03:52.399 +Now, what I'm saying here, I think is true + +00:03:52.400 --> 00:03:54.199 +for all areas of computing, + +00:03:54.200 --> 00:03:56.959 +from software engineering to data science. + +00:03:56.960 --> 00:04:00.639 +They are mostly taught and learned like a craft + +00:04:00.640 --> 00:04:03.679 +rather than a science, not through research, + +00:04:03.680 --> 00:04:04.679 +but through drill. + +00:04:04.680 --> 00:04:07.799 +The elements of this drill can be illustrated + +00:04:07.800 --> 00:04:09.959 +by learning how to fix cars. + +00:04:09.960 --> 00:04:12.759 +They include taking a problem apart + +00:04:12.760 --> 00:04:14.119 +with the tools you already know, + +00:04:14.120 --> 00:04:18.239 +learn a lot more tools in the process of doing that, + +00:04:18.240 --> 00:04:20.639 +then solve many, many problems + +00:04:20.640 --> 00:04:22.199 +of increasing difficulty + +00:04:22.200 --> 00:04:25.719 +while being or getting more literate, as it were, + +00:04:25.720 --> 00:04:27.919 +about the mechanics of computing, + +00:04:27.920 --> 00:04:30.759 +including the hardware, the infrastructure, + +00:04:30.760 --> 00:04:32.639 +and finally develop a way of thinking + +00:04:32.640 --> 00:04:35.519 +that allows the learner to identify patterns + +00:04:35.520 --> 00:04:39.719 +to solve new problems better and faster. + +00:04:39.720 --> 00:04:42.479 +Unlike learning how to fix cars, + +00:04:42.480 --> 00:04:44.439 +all of the objects of our interest-- + +00:04:44.440 --> 00:04:48.719 +both hardware and software--are evolving rapidly. + +00:04:48.720 --> 00:04:51.519 +In this field, radical innovation is the rule, + +00:04:51.520 --> 00:04:52.839 +not the exception. + +NOTE The problem + +00:04:52.840 --> 00:04:58.679 +The problem that I identified is that students, + +00:04:58.680 --> 00:05:00.799 +especially undergraduate students + +00:05:00.800 --> 00:05:02.399 +in computer and data science, + +00:05:02.400 --> 00:05:06.439 +often do no longer understand the infrastructure. + +00:05:06.440 --> 00:05:08.919 +Here are a few examples of the problems + +00:05:08.920 --> 00:05:10.079 +that the students seem to have. + +00:05:10.080 --> 00:05:13.599 +They do not understand computer architecture, + +00:05:13.600 --> 00:05:14.599 +except in theory. + +00:05:14.600 --> 00:05:18.519 +They cannot navigate their way around their own computers. + +00:05:18.520 --> 00:05:22.319 +They don't understand the value or the issues of networks. + +00:05:22.320 --> 00:05:25.079 +They are often more interested in convenience + +00:05:25.080 --> 00:05:28.279 +than in customization of the environment. + +00:05:28.280 --> 00:05:31.839 +As a result, the machines which we're meant to control + +00:05:31.840 --> 00:05:35.079 +have all the power--though passively, + +00:05:35.080 --> 00:05:36.559 +of course, for now anyway. + +NOTE The solution: Emacs + Org-mode + +00:05:36.560 --> 00:05:43.679 +Enter Emacs, the self-extensible operating system + +00:05:43.680 --> 00:05:45.999 +disguised as a text editor. + +00:05:46.000 --> 00:05:50.999 +You're at EmacsConf, so of course I don't have to tell you + +00:05:51.000 --> 00:05:52.199 +what Emacs can do. + +00:05:52.200 --> 00:05:54.319 +Here's a rundown on the right-hand side + +00:05:54.320 --> 00:05:56.759 +of some of its most important properties, + +00:05:56.760 --> 00:05:58.959 +and an Org Mode file excerpt + +00:05:58.960 --> 00:06:00.519 +from one of my classes on the left. + +00:06:00.520 --> 00:06:05.239 +What you may not know is how to onboard students who have, + +00:06:05.240 --> 00:06:07.439 +at the start, no interest whatsoever + +00:06:07.440 --> 00:06:08.919 +in leaving their comfort zone, + +00:06:08.920 --> 00:06:12.399 +which is defined by a lifetime of Windows, + +00:06:12.400 --> 00:06:16.319 +pre-configured graphical interfaces, and software bloat. + +00:06:16.320 --> 00:06:19.679 +In fact, when I started this, I wasn't very hopeful, + +00:06:19.680 --> 00:06:22.399 +but the results have made me even more optimistic + +00:06:22.400 --> 00:06:24.119 +than I already am by nature. + +NOTE Emacs configuration file + +00:06:24.120 --> 00:06:28.839 +So to rein in your expectations, + +00:06:28.840 --> 00:06:31.839 +you cannot do entirely without + +00:06:31.840 --> 00:06:33.799 +configuring the student's experience. + +00:06:33.800 --> 00:06:35.279 +An important part of this + +00:06:35.280 --> 00:06:37.999 +is the initial Emacs configuration shown here. + +00:06:38.000 --> 00:06:40.639 +The minimal configuration file, + +00:06:40.640 --> 00:06:42.199 +which you can see on the right-hand side, + +00:06:42.200 --> 00:06:46.679 +allows the students to run code in C and C++, R, SQL, + +00:06:46.680 --> 00:06:48.599 +SQLite, Python, and Bash. + +00:06:48.600 --> 00:06:52.559 +It will allow them to update Emacs packages + +00:06:52.560 --> 00:06:55.039 +from the stable Melpa repository, + +00:06:55.040 --> 00:06:58.599 +and it will allow them to create code blocks easily + +00:06:58.600 --> 00:07:01.919 +using skeleton commands for code blocks, + +00:07:01.920 --> 00:07:06.279 +and to auto-load the Emacs Speaks Statistics package, + +00:07:06.280 --> 00:07:09.759 +which you particularly need when you run R in Emacs, + +00:07:09.760 --> 00:07:14.399 +and lastly, to disable toolbar and graphical menu bars. + +00:07:14.400 --> 00:07:18.999 +To do that encourages the exclusive use of the keyboard + +00:07:19.000 --> 00:07:23.199 +to control Emacs, and to stop the students + +00:07:23.200 --> 00:07:25.839 +from flicking all the time to the mouse; + +00:07:25.840 --> 00:07:30.359 +seems to be an essential part of getting used to Emacs. + +NOTE Story + code = source + documentation + +00:07:30.360 --> 00:07:38.839 +Now Org Mode was included in Emacs in 2006 as a major mode, + +00:07:38.840 --> 00:07:41.959 +and as you know, it's a structured plain text format + +00:07:41.960 --> 00:07:45.039 +with notebook live code execution. + +00:07:45.040 --> 00:07:47.839 +It's an ideal platform for literate programming, + +00:07:47.840 --> 00:07:52.359 +which is a term for programming that intermingles code, + +00:07:52.360 --> 00:07:55.839 +documentation, and output within a single document, + +00:07:55.840 --> 00:07:59.519 +and that can, as you can see here from an org file, + +00:07:59.520 --> 00:08:02.559 +either be tangled into source code + +00:08:02.560 --> 00:08:06.999 +or woven into a documentation file, which could be PDF, + +00:08:07.000 --> 00:08:11.039 +could be Markdown, could be OpenOffice, + +00:08:11.040 --> 00:08:13.919 +could be a notebook format. + +00:08:13.920 --> 00:08:18.479 +This methodology was conceived by Donald Knuth in 1984, + +00:08:18.480 --> 00:08:22.039 +and it is therefore even older than Emacs itself. + +NOTE What is literate programming? + +00:08:22.040 --> 00:08:27.199 +The main purpose of literate programming is not only + +00:08:27.200 --> 00:08:31.119 +to make code or documentation or output more manageable, + +00:08:31.120 --> 00:08:34.759 +but to allow humans to create a data story with ease + +00:08:34.760 --> 00:08:37.199 +from a single source. + +00:08:37.200 --> 00:08:40.359 +So what you see on the slide on the left-hand side + +00:08:40.360 --> 00:08:45.479 +is the story and code inside a Org Mode file. + +00:08:45.480 --> 00:08:49.479 +The file starts with some documentation, + +00:08:49.480 --> 00:08:52.519 +then with the white background is the code, + +00:08:52.520 --> 00:08:56.239 +and at the bottom you see an output file, + +00:08:56.240 --> 00:09:00.159 +which is not shown here on the slide itself. + +00:09:00.160 --> 00:09:02.839 +In the middle, you have the source code, + +00:09:02.840 --> 00:09:05.759 +which is the result of tangling + +00:09:05.760 --> 00:09:10.799 +or of opening a buffer inside org-mode. + +00:09:10.800 --> 00:09:16.119 +And on the very right-hand side, you have a PDF-- + +00:09:16.120 --> 00:09:20.159 +actually this HTML rendering of the very same file + +00:09:20.160 --> 00:09:22.599 +that you see on the very left. + +00:09:22.600 --> 00:09:26.479 +So the humans look at some of this code, + +00:09:26.480 --> 00:09:29.879 +and the machines will look at other parts of the code. + +00:09:29.880 --> 00:09:33.359 +I actually did all my programming in a literate way + +00:09:33.360 --> 00:09:35.959 +even in the early 1990s, not using org-mode, + +00:09:35.960 --> 00:09:36.799 +which didn't exist yet, + +00:09:36.800 --> 00:09:40.319 +but using Norman Ramsey's Noweb preprocessor. + +00:09:40.320 --> 00:09:43.399 +And I still use it inside org-mode today. + +00:09:43.400 --> 00:09:47.439 +This preprocessor, Noweb, allows you to tangle code + +00:09:47.440 --> 00:09:50.079 +from within an org-mode file that's a self-standing file, + +00:09:50.080 --> 00:09:52.799 +much like org-mode's edit functions, + +00:09:52.800 --> 00:09:55.639 +which export code blocks into buffers + +00:09:55.640 --> 00:09:59.879 +in whatever language the code block is written. + +NOTE Emacs as a literate programming tool + +00:09:59.880 --> 00:10:02.719 +In data science, these interactive notebooks + +00:10:02.720 --> 00:10:05.999 +in one of the interpreted languages like Julia, + +00:10:06.000 --> 00:10:07.839 +Python, or R dominate. + +00:10:07.840 --> 00:10:10.239 +The basis technology, + +00:10:10.240 --> 00:10:12.759 +is that of Jupyter notebooks, which take their name + +00:10:12.760 --> 00:10:14.439 +from Julia, Python, and R. + +00:10:14.440 --> 00:10:19.199 +And these notebooks use a spruced-up shell (for example, + +00:10:19.200 --> 00:10:23.079 +IPython for Python) with an option to add SQL cells. + +00:10:23.080 --> 00:10:28.079 +Org Mode inside Emacs has a large number of advantages-- + +00:10:28.080 --> 00:10:31.479 +some of them are listed here--over these notebooks. + +00:10:31.480 --> 00:10:33.679 +Two of these stand out particularly. + +00:10:33.680 --> 00:10:39.439 +Different languages can be mixed, as shown in the image, + +00:10:39.440 --> 00:10:43.439 +while in Jupyter notebooks, a notebook is limited to + +00:10:43.440 --> 00:10:45.639 +running a kernel in one language only. + +00:10:45.640 --> 00:10:48.159 +So the content of the notebook-- + +00:10:48.160 --> 00:10:50.319 +its document code or output part-- + +00:10:50.320 --> 00:10:52.879 +can be exported in a variety of formats, + +00:10:52.880 --> 00:10:55.479 +which makes it much easier to share with others + +00:10:55.480 --> 00:10:58.479 +and to use one's work in different reporting formats; + +00:10:58.480 --> 00:11:02.399 +for example, to read it out into a LaTeX publication. + +00:11:02.400 --> 00:11:08.319 +Actually, to come back to this, + +00:11:08.320 --> 00:11:11.039 +the file does not show different languages. + +00:11:11.040 --> 00:11:14.159 +That is something you can see in a paper of mine, + +00:11:14.160 --> 00:11:18.959 +in one of the figures. + +NOTE Case study: basic setup + +00:11:18.960 --> 00:11:22.719 +Now, coming to the case study itself, + +00:11:22.720 --> 00:11:25.039 +here are some of the overall results of the case study. + +00:11:25.040 --> 00:11:29.039 +Now, the courses ranged from introductory to advanced, + +00:11:29.040 --> 00:11:32.039 +as you can see here in the table on the left-hand side. + +00:11:32.040 --> 00:11:37.199 +The topics covered different programming applications. + +00:11:37.200 --> 00:11:38.679 +The courses were taught + +00:11:38.680 --> 00:11:41.039 +over a period of three consecutive terms. + +00:11:41.040 --> 00:11:45.839 +There was between 6 and 28 participants per course. + +00:11:45.840 --> 00:11:49.239 +I used a few other tools besides Emacs: + +00:11:49.240 --> 00:11:51.919 +GitHub as the main repository for all the material, + +00:11:51.920 --> 00:11:55.239 +Datacamp for structured online lessons and exercises, + +00:11:55.240 --> 00:11:57.359 +Canvas as a learning management system, + +00:11:57.360 --> 00:12:00.919 +and Zoom to record the sessions for later use. + +00:12:00.920 --> 00:12:03.279 +Now, the material for all these courses + +00:12:03.280 --> 00:12:05.399 +is openly available on GitHub, + +00:12:05.400 --> 00:12:11.279 +and the address is on the slide at the bottom. + +NOTE Emacs + Org-mode notebooks + +00:12:11.280 --> 00:12:15.879 +I'm now going to briefly comment on + +00:12:15.880 --> 00:12:18.799 +the most important aspects of using Emacs and Org Mode + +00:12:18.800 --> 00:12:20.119 +in and outside of class. + +00:12:20.120 --> 00:12:24.039 +Essentially, these two--Emacs and Org Mode-- + +00:12:24.040 --> 00:12:26.239 +were used all the time for almost everything + +00:12:26.240 --> 00:12:29.239 +that the students were doing in and outside of class. + +00:12:29.240 --> 00:12:32.319 +The only exception were multiple choice tests + +00:12:32.320 --> 00:12:34.039 +and online assignments + +00:12:34.040 --> 00:12:35.599 +on the Datacamp learning platform + +00:12:35.600 --> 00:12:37.199 +in the data science courses. + +00:12:37.200 --> 00:12:39.999 +But everything else--code-along lectures, home assignments, + +00:12:40.000 --> 00:12:42.439 +student projects, practice in class-- + +00:12:42.440 --> 00:12:45.799 +was done with these two tools. + +NOTE Onboarding: simplified Emacs tutorial + +00:12:45.800 --> 00:12:47.999 +To facilitate the onboarding, + +00:12:48.000 --> 00:12:50.999 +so to get students used to Emacs in the first place, + +00:12:51.000 --> 00:12:53.279 +I developed a simplified Emacs tutorial, + +00:12:53.280 --> 00:12:56.519 +which was focused on the basics of literate programming. + +00:12:56.520 --> 00:12:59.999 +It included navigation in major modes, + +00:13:00.000 --> 00:13:02.839 +managing files and buffers, customizing the interface, + +00:13:02.840 --> 00:13:04.039 +and keyboard shortcuts. + +00:13:04.040 --> 00:13:06.319 +It was considerably shorter; + +00:13:06.320 --> 00:13:12.879 +about a quarter of the size of the standard Emacs tutorial, + +00:13:12.880 --> 00:13:14.319 +which contains a lot more stuff. + +00:13:14.320 --> 00:13:16.759 +As a result of this onboarding, + +00:13:16.760 --> 00:13:18.279 +by the end of the second week, + +00:13:18.280 --> 00:13:19.919 +most students were able + +00:13:19.920 --> 00:13:22.639 +to use Emacs and Org Mode competently + +00:13:22.640 --> 00:13:25.079 +for their assignments in and outside of class, + +00:13:25.080 --> 00:13:29.639 +completely independent of their previous exposure + +00:13:29.640 --> 00:13:31.199 +to any of these tools. + +00:13:31.200 --> 00:13:35.399 +Most of the students, in fact, had never heard of Emacs. + +00:13:35.400 --> 00:13:40.839 +All the classes were taught physically in a computer lab. + +NOTE Instruction + interaction + +00:13:40.840 --> 00:13:42.759 +Emacs with Org Mode + +00:13:42.760 --> 00:13:45.479 +and the necessary languages for the class + +00:13:45.480 --> 00:13:47.359 +were pre-installed on the computers. + +00:13:47.360 --> 00:13:50.199 +The computers ran Windows, unfortunately, + +00:13:50.200 --> 00:13:52.759 +like most of the students' personal computers. + +00:13:52.760 --> 00:13:57.479 +A typical class involved a lecture delivered by me + +00:13:57.480 --> 00:13:59.159 +in Emacs as a code-along. + +00:13:59.160 --> 00:14:01.559 +The students would get an Org Mode file + +00:14:01.560 --> 00:14:03.399 +with all the code removed. + +00:14:03.400 --> 00:14:04.599 +You can see an example here + +00:14:04.600 --> 00:14:06.799 +on the slide on the right-hand side. + +00:14:06.800 --> 00:14:12.239 +This example is actually only one line of code in blue, + +00:14:12.240 --> 00:14:15.039 +visible at the bottom for an award file. + +00:14:15.040 --> 00:14:17.919 +Then the students submitted home assignments + +00:14:17.920 --> 00:14:21.159 +also as Org Mode files, complete with documentation, + +00:14:21.160 --> 00:14:23.479 +code and sample output. + +00:14:23.480 --> 00:14:26.999 +Working this way makes the classes highly interactive. + +00:14:27.000 --> 00:14:28.879 +So the students are busy coding + +00:14:28.880 --> 00:14:31.639 +and they learn to control their environment better + +00:14:31.640 --> 00:14:34.919 +all the time. + +00:14:34.920 --> 00:14:38.599 +In my classes, the students have to complete + +00:14:38.600 --> 00:14:41.359 +an independent, agile research project + +00:14:41.360 --> 00:14:44.239 +using an adaptation of Scrum as a methodology. + +00:14:44.240 --> 00:14:48.079 +You can find examples of these rather high-octane projects + +00:14:48.080 --> 00:14:48.719 +in my paper. + +NOTE Assignments + projects + +00:14:48.720 --> 00:14:52.679 +Now, using literate programming for the projects + +00:14:52.680 --> 00:14:54.399 +provided some unique benefits. + +00:14:54.400 --> 00:14:57.959 +By having to continuously interweave documentation, + +00:14:57.960 --> 00:15:01.599 +references and output alongside functional code, + +00:15:01.600 --> 00:15:04.319 +the students learn to communicate their work + +00:15:04.320 --> 00:15:05.599 +throughout the term + +00:15:05.600 --> 00:15:07.559 +in various stages of completion, + +00:15:07.560 --> 00:15:09.839 +from the research question at the start, + +00:15:09.840 --> 00:15:12.879 +over the prototype to the finished product. + +00:15:12.880 --> 00:15:14.999 +And here on the right-hand side, + +00:15:15.000 --> 00:15:17.479 +you can see one of those assignments + +00:15:17.480 --> 00:15:18.839 +that the students received, + +00:15:18.840 --> 00:15:24.959 +including some of the metadata for their Org Mode files + +00:15:24.960 --> 00:15:26.159 +in the beginning of the course. + +00:15:26.160 --> 00:15:32.599 +Here are two graphs that I created early on + +00:15:32.600 --> 00:15:34.319 +when I started doing this. + +00:15:34.320 --> 00:15:36.439 +They show how the test results of the students + +00:15:36.440 --> 00:15:39.639 +in two different courses, actually three courses, + +00:15:39.640 --> 00:15:41.719 +changed from before to after + +00:15:41.720 --> 00:15:45.919 +introducing literate programming with Emacs and Org Mode. + +00:15:45.920 --> 00:15:49.559 +So you see the before and after + +00:15:49.560 --> 00:15:53.479 +introducing literate programming in the red curve before + +00:15:53.480 --> 00:15:54.919 +and the blue curve afterwards. + +00:15:54.920 --> 00:15:58.519 +And the improvement, especially on the right-hand side, + +00:15:58.520 --> 00:15:59.719 +is quite significant. + +00:15:59.720 --> 00:16:01.999 +It was this performance improvement, + +00:16:02.000 --> 00:16:05.119 +apart from the students who were voicing their support, + +00:16:05.120 --> 00:16:07.999 +that made me extend the Emacs experiment + +00:16:08.000 --> 00:16:09.159 +after the first term + +00:16:09.160 --> 00:16:15.279 +and continue for the following two terms. + +NOTE Overall results positive + +00:16:15.280 --> 00:16:18.839 +The courses... Coming to the result, the overall result... + +00:16:18.840 --> 00:16:20.999 +The courses were formally and informally + +00:16:21.000 --> 00:16:23.119 +also evaluated by the students, + +00:16:23.120 --> 00:16:24.599 +but you need to look at my paper + +00:16:24.600 --> 00:16:27.039 +for some explicit student comments, + +00:16:27.040 --> 00:16:28.199 +which you will find there. + +00:16:28.200 --> 00:16:29.879 +Here, I'm giving you only the summary. + +00:16:29.880 --> 00:16:34.519 +So first of all, Emacs proved to be hard to learn for some, + +00:16:34.520 --> 00:16:37.839 +but all students succeeded in all courses, + +00:16:37.840 --> 00:16:39.519 +independent of the level of + +00:16:39.520 --> 00:16:40.959 +their previous knowledge and skill. + +00:16:40.960 --> 00:16:45.919 +The documentation practices remained pretty uneven. + +00:16:45.920 --> 00:16:49.639 +So some students wrote a lot, others wrote little. + +00:16:49.640 --> 00:16:52.999 +But they were overall much higher than in classes + +00:16:53.000 --> 00:16:57.279 +without the use of Emacs and Org Mode. + +00:16:57.280 --> 00:16:59.559 +The interactivity enabled through Emacs + +00:16:59.560 --> 00:17:01.599 +was highly praised by the students + +00:17:01.600 --> 00:17:05.039 +and always identified on the evaluations. + +00:17:05.040 --> 00:17:08.559 +And lastly and most importantly, given the problems + +00:17:08.560 --> 00:17:13.279 +that I identified earlier, the computing file + +00:17:13.280 --> 00:17:15.079 +and data handling competence + +00:17:15.080 --> 00:17:18.279 +of the students who worked with Emacs throughout + +00:17:18.280 --> 00:17:23.399 +opening Emacs shells, running programs through Emacs, + +00:17:23.400 --> 00:17:26.999 +these skills increased massively. + +00:17:27.000 --> 00:17:30.599 +In the published paper, I have expressed + +00:17:30.600 --> 00:17:32.839 +a little more doubt than you see on this slide. + +00:17:32.840 --> 00:17:38.359 +But now, actually, I'm feeling quite hopeful again, + +00:17:38.360 --> 00:17:41.879 +especially because recently for one term, + +00:17:41.880 --> 00:17:47.679 +I have returned to Jupyter notebooks. + +00:17:47.680 --> 00:17:50.599 +In the current term, I abandoned Emacs again + +00:17:50.600 --> 00:17:53.119 +for online Jupyter notebook installations. + +00:17:53.120 --> 00:17:55.679 +The reason is that these Jupyter notebooks + +00:17:55.680 --> 00:18:00.159 +that I use from DataCamp have generative AI support + +00:18:00.160 --> 00:18:03.439 +from ChatGPT integrated into the notebook. + +00:18:03.440 --> 00:18:04.919 +And I wanted to try that. + +00:18:04.920 --> 00:18:08.519 +But after one term without Emacs, + +00:18:08.520 --> 00:18:10.199 +I regret that decision now. + +00:18:10.200 --> 00:18:13.199 +The AI advantage does not make up + +00:18:13.200 --> 00:18:15.119 +for the loss of the immersion + +00:18:15.120 --> 00:18:19.799 +that Emacs and Org Mode deliver. + +NOTE Conclusion & outlook + +00:18:19.800 --> 00:18:21.399 +And here's the summary. + +00:18:21.400 --> 00:18:23.759 +When learning computer and data science, + +00:18:23.760 --> 00:18:25.679 +immersion is everything. + +00:18:25.680 --> 00:18:29.479 +The best students will aim at immersion anyway. + +00:18:29.480 --> 00:18:31.239 +But for the majority of students, + +00:18:31.240 --> 00:18:33.679 +immersion must happen in class. + +00:18:33.680 --> 00:18:39.839 +Emacs and Org Mode performed throughout very well + +00:18:39.840 --> 00:18:42.319 +as the central literary programming platform. + +00:18:42.320 --> 00:18:45.959 +And the pre-configuring and the onboarding, + +00:18:45.960 --> 00:18:48.959 +which I showed to you, were very important + +00:18:48.960 --> 00:18:50.359 +to train the students quickly. + +00:18:50.360 --> 00:18:54.479 +In the paper, I also speculated on the impact + +00:18:54.480 --> 00:18:57.919 +of low-code, no-code, and AI coding assistance. + +00:18:57.920 --> 00:19:00.239 +And my general view on this is that + +00:19:00.240 --> 00:19:01.799 +the arrival of these tools + +00:19:01.800 --> 00:19:04.319 +make literary programming as an immersive technique + +00:19:04.320 --> 00:19:08.399 +focused on teaching a broad range of skills + +00:19:08.400 --> 00:19:09.719 +even more important. + +00:19:09.720 --> 00:19:13.079 +So even with AI--or especially with AI-- + +00:19:13.080 --> 00:19:16.799 +this kind of approach, I think, could be critical. + +00:19:16.800 --> 00:19:18.439 +And that's it. + +00:19:18.440 --> 00:19:19.839 +I'm at the end of my presentation. + +00:19:19.840 --> 00:19:21.719 +Thank you very much for your attention. + +00:19:21.720 --> 00:19:22.839 +And I'm looking forward to the Q&A. + +00:19:22.840 --> 00:19:27.280 +Thank you. diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt new file mode 100644 index 00000000..bc1bfff5 --- /dev/null +++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt @@ -0,0 +1,1406 @@ +WEBVTT + + +00:00:08.740 --> 00:00:09.240 +[Speaker 0]: Do we have any listeners? + +00:00:13.340 --> 00:00:13.840 +It's you and I. I have a question. + +00:00:16.420 --> 00:00:16.640 +How many tests do you have for hyperbole and + +00:00:18.800 --> 00:00:19.279 +How would you rate the test coverage compared + +00:00:21.279 --> 00:00:21.500 +to other packages? Well, + +00:00:28.279 --> 00:00:28.700 +that's a tricky 1. Shall I spell it out loud + +00:00:31.100 --> 00:00:31.600 +and then maybe type it at the same time? + +00:00:36.420 --> 00:00:36.920 +So, I believe it's around like more than 300 + +00:00:43.660 --> 00:00:44.059 +test cases now. But I cannot compare the test + +00:00:45.220 --> 00:00:45.720 +coverage to any other + +00:01:00.020 --> 00:01:00.520 +other package. Maybe I can type that later. + +00:01:01.560 --> 00:01:02.060 +What do you say, Badal? + +00:01:02.660 --> 00:01:02.900 +[Speaker 1]: package. I have no knowledge of any Yeah, + +00:01:03.840 --> 00:01:04.239 +sure, yeah, that's totally fine. + +00:01:05.660 --> 00:01:06.160 +Feel free to just answer them with voice. + +00:01:08.720 --> 00:01:09.220 +[Speaker 0]: Yeah, yeah. There's another question. + +00:01:10.520 --> 00:01:10.920 +1 small suggestion to me, + +00:01:11.440 --> 00:01:11.940 +should means optional, + +00:01:13.660 --> 00:01:14.160 +where shall or must means required. + +00:01:15.940 --> 00:01:16.220 +Not sure if it is too late to make a major + +00:01:17.220 --> 00:01:17.540 +grammar change like that. + +00:01:18.080 --> 00:01:18.580 +Very nice presentation. + +00:01:19.840 --> 00:01:20.340 +So thanks for presentation, + +00:01:24.380 --> 00:01:24.780 +but the package ERT, well, + +00:01:27.920 --> 00:01:28.080 +it's not something that we have come up with. + +00:01:28.920 --> 00:01:29.340 +It's a standard package. + +00:01:32.320 --> 00:01:32.560 +So I believe it has been around for a long + +00:01:37.760 --> 00:01:38.000 +time. So, but please feel free to make + +00:01:39.680 --> 00:01:40.180 +suggestions and maybe you can, + +00:01:43.660 --> 00:01:43.860 +you know, like do a copy or like an alias for + +00:01:46.080 --> 00:01:46.200 +that. If you believe it makes more sense for + +00:01:48.080 --> 00:01:48.580 +your test cases to have that instead. + +00:01:53.540 --> 00:01:53.720 +And then we have another question here. + +00:01:55.540 --> 00:01:55.680 +For your info, you may find this helpful for + +00:01:58.780 --> 00:01:59.020 +running MX test lint both from a command line + +00:02:01.220 --> 00:02:01.720 +and from within MX with a transit menu. + +00:02:03.600 --> 00:02:04.040 +GitHub alpha papa make sure, + +00:02:06.760 --> 00:02:07.100 +yes. It also works on remote CI. + +00:02:08.240 --> 00:02:08.740 +Yeah, thank you, Alpha Papa. + +00:02:10.580 --> 00:02:11.080 +I think I've looked into that, + +00:02:13.440 --> 00:02:13.940 +but we haven't made any use of that. + +00:02:17.920 --> 00:02:18.080 +But maybe you'll inspire me to give it + +00:02:18.400 --> 00:02:18.900 +another look. + +00:02:29.260 --> 00:02:29.760 +[Speaker 2]: Hey guys. + +00:02:34.120 --> 00:02:34.460 +[Speaker 0]: I remember, I recognize that voice. + +00:02:37.160 --> 00:02:37.660 +Hi, Bob. Hey, how are you? + +00:02:40.240 --> 00:02:40.580 +Congratulations, man. Thanks, + +00:02:43.020 --> 00:02:43.320 +Hugh. Thank you. I have another question + +00:02:45.520 --> 00:02:45.900 +here. It is easy to run ad hoc tests inside + +00:02:48.400 --> 00:02:48.600 +an Emacs session given the command line + +00:02:51.180 --> 00:02:51.560 +scripts you need to run to get the batch test + +00:02:54.960 --> 00:02:55.120 +session running? You said it's to run an + +00:03:05.680 --> 00:03:05.920 +ad-hoc test. I'm not sure I understand that + +00:03:14.440 --> 00:03:14.940 +question. Yes, please. + +00:03:15.660 --> 00:03:16.160 +[Speaker 1]: Maybe I can rephrase. Sure. + +00:03:19.900 --> 00:03:20.400 +So I think what I understand is that since + +00:03:22.540 --> 00:03:23.040 +you have to use some of these command lines + +00:03:25.440 --> 00:03:25.940 +scripts to get a batch test session running, + +00:03:28.780 --> 00:03:29.180 +is it easy to run ad hoc tests in an Emacs + +00:03:30.700 --> 00:03:30.900 +session or does that, like in your + +00:03:32.040 --> 00:03:32.540 +experience, has that been difficult? + +00:03:36.820 --> 00:03:37.320 +[Speaker 0]: Well, from the command line, + +00:03:38.660 --> 00:03:38.940 +if you look at the command line, + +00:03:44.160 --> 00:03:44.340 +you'll see that it's only like a few image + +00:03:46.480 --> 00:03:46.980 +functions to call to get that behavior to run + +00:03:55.080 --> 00:03:55.240 +the batch tests. So I think we made some + +00:03:57.100 --> 00:03:57.600 +support function for that in hyperbole. + +00:04:02.800 --> 00:04:02.960 +So it's not, I don't think it's possible out + +00:04:05.540 --> 00:04:06.040 +of the box to do it, but it's not complicated + +00:04:08.060 --> 00:04:08.560 +to do it. + +00:04:12.190 --> 00:04:12.340 +[Speaker 2]: You can define a test anytime, + +00:04:14.780 --> 00:04:15.280 +right? Just like a new function. + +00:04:18.899 --> 00:04:19.240 +So that's ad hoc. You just write your test + +00:04:20.019 --> 00:04:20.519 +and you can run it. + +00:04:22.900 --> 00:04:23.400 +[Speaker 0]: Yeah, yeah, I mean, of course, + +00:04:25.900 --> 00:04:26.180 +but I got the impression it was about running + +00:04:28.620 --> 00:04:29.060 +all your tests like we did with the command + +00:04:35.740 --> 00:04:36.020 +line. Well, so the question is more about how + +00:04:38.260 --> 00:04:38.600 +would you run all your test cases from within + +00:04:44.860 --> 00:04:45.140 +Emacs? And the easy answer to that is + +00:04:48.420 --> 00:04:48.860 +actually you load all your test case files, + +00:04:51.760 --> 00:04:52.080 +and then you run ERT with the T as the test + +00:04:53.600 --> 00:04:53.880 +selector and then it will run all your test + +00:04:53.880 --> 00:04:54.380 +cases. + +00:05:01.780 --> 00:05:01.960 +[Speaker 1]: Right. And I think they have expanded on + +00:05:03.180 --> 00:05:03.520 +their question a little bit as well, + +00:05:04.960 --> 00:05:05.220 +clarifying that. In other words, + +00:05:07.200 --> 00:05:07.360 +can you tweak tests in an Emacs session and + +00:05:08.860 --> 00:05:09.360 +run them right away? Which I believe, + +00:05:11.400 --> 00:05:11.640 +if I understand correctly what Bob was + +00:05:13.820 --> 00:05:14.320 +saying, you can basically define or redefine + +00:05:15.920 --> 00:05:16.080 +functions on the fly and then have them be + +00:05:16.440 --> 00:05:16.940 +run, right? + +00:05:22.200 --> 00:05:22.360 +[Speaker 0]: Yes, yes. You just go into that test case and + +00:05:24.120 --> 00:05:24.620 +you just change it and you run it again. + +00:05:29.060 --> 00:05:29.200 +And either you have to sort of load it or you + +00:05:31.560 --> 00:05:32.060 +can use like the commercial thing I did. + +00:05:36.140 --> 00:05:36.340 +You use hyperbole and just hit meta return on + +00:05:38.560 --> 00:05:38.860 +the test case and it will load it and run the + +00:05:42.240 --> 00:05:42.360 +test case again. So that's of course what you + +00:05:44.220 --> 00:05:44.720 +normally do when you're defining a test or + +00:05:47.440 --> 00:05:47.940 +debug a test case or develop a test case. + +00:05:49.960 --> 00:05:50.460 +Just start with something small, + +00:05:52.700 --> 00:05:53.200 +just make sure maybe you can prepare the test + +00:05:55.320 --> 00:05:55.680 +properly and run it again and again and again + +00:05:56.720 --> 00:05:57.220 +until you're ready with it. + +00:05:59.760 --> 00:05:59.960 +That's a good point. You can definitely do + +00:06:02.800 --> 00:06:03.280 +that and that's part of how I normally + +00:06:06.420 --> 00:06:06.920 +develop the test cases that I mean start with + +00:06:09.160 --> 00:06:09.400 +something small so I can see that I get there + +00:06:12.180 --> 00:06:12.240 +maybe the right input in the buffer that I + +00:06:14.180 --> 00:06:14.340 +want to test on or something and I expand on + +00:06:18.160 --> 00:06:18.400 +that more and more and add more and more more + +00:06:18.460 --> 00:06:18.960 +and more more + +00:06:31.040 --> 00:06:31.540 +[Speaker 2]: tests to it. You might tell them a bit about + +00:06:33.280 --> 00:06:33.480 +how many test cases you have. + +00:06:36.020 --> 00:06:36.440 +I guess you commented on that and like what + +00:06:40.320 --> 00:06:40.820 +happens, you know, with the CICD pipeline, + +00:06:43.780 --> 00:06:44.020 +every time we commit, you know, + +00:06:46.360 --> 00:06:46.560 +across all the versions and what you have set + +00:06:48.760 --> 00:06:49.040 +up there because you know I wish people could + +00:06:53.940 --> 00:06:54.140 +see it. You can go and check on GitHub and + +00:06:57.440 --> 00:06:57.720 +you can see the logs right of any of the + +00:06:59.760 --> 00:06:59.960 +builds and but tell them a bit about that + +00:07:01.080 --> 00:07:01.320 +Mats because I think that's pretty + +00:07:01.320 --> 00:07:01.820 +impressive. + +00:07:07.280 --> 00:07:07.760 +[Speaker 0]: Well, that's part of more the CI, + +00:07:11.760 --> 00:07:12.160 +CD, part of how we developed this using + +00:07:15.460 --> 00:07:15.580 +GitHub and workflows that you get out of the + +00:07:20.740 --> 00:07:20.900 +box from there. So this more than 300 test + +00:07:23.440 --> 00:07:23.720 +cases on our round for I think 5 different + +00:07:26.480 --> 00:07:26.980 +versions of Emacs when we do a pull request + +00:07:33.900 --> 00:07:34.400 +or a commit. So that's a good way to ensure + +00:07:38.040 --> 00:07:38.540 +that it works from version 27.2 + +00:07:42.240 --> 00:07:42.740 +up to the latest master version because + +00:07:45.860 --> 00:07:46.360 +there's some changes in Emacs over different + +00:07:48.940 --> 00:07:49.340 +versions that can affect your functions or + +00:07:49.600 --> 00:07:50.100 +your code. + +00:07:56.580 --> 00:07:56.720 +[Speaker 2]: They all run in parallel and so typically in + +00:08:00.580 --> 00:08:00.780 +under 60 seconds I think you've got all of + +00:08:03.960 --> 00:08:04.460 +them run so you've got pretty extensive + +00:08:08.860 --> 00:08:09.240 +testing which does catch interesting bugs + +00:08:09.760 --> 00:08:10.260 +here and there, right? + +00:08:13.320 --> 00:08:13.820 +[Speaker 0]: Yes, of course it does. + +00:08:18.060 --> 00:08:18.560 +I mean, you normally develop with 1 version + +00:08:20.280 --> 00:08:20.540 +and then you think everything is okay. + +00:08:21.720 --> 00:08:21.820 +But then when you're tested with the + +00:08:23.460 --> 00:08:23.960 +different versions, you find out that there + +00:08:26.080 --> 00:08:26.580 +are some changes and there are things you + +00:08:30.140 --> 00:08:30.400 +might not sort of keep track of what's + +00:08:34.340 --> 00:08:34.640 +happening also. So that's a way to get + +00:08:38.559 --> 00:08:38.940 +noticed that the core developers of Emacs + +00:08:41.120 --> 00:08:41.480 +have changed something that you sort of based + +00:08:44.380 --> 00:08:44.840 +your code on. Now I got another question + +00:08:47.900 --> 00:08:48.160 +here. Did you have to change hyperbole code + +00:08:50.580 --> 00:08:50.760 +and design to be more readily testable as you + +00:08:52.160 --> 00:08:52.660 +were increasing your test coverage? + +00:08:55.520 --> 00:08:56.020 +Well, we haven't done that to a lot, + +00:09:00.160 --> 00:09:00.320 +to a big degree, although I believe that that + +00:09:03.760 --> 00:09:04.260 +is an important thing for sort of the future + +00:09:06.020 --> 00:09:06.500 +to do that because some of the hyperbolic + +00:09:08.520 --> 00:09:08.720 +functions are very complicated and long and + +00:09:10.640 --> 00:09:11.140 +that makes testing them rather difficult. + +00:09:14.660 --> 00:09:14.900 +So, at a few places we have sort of broken up + +00:09:17.260 --> 00:09:17.720 +functions in smaller pieces so it'd be easier + +00:09:20.280 --> 00:09:20.660 +to do like unit tests of the different parts + +00:09:27.740 --> 00:09:27.980 +of it. But there's a lot of more work that + +00:09:28.680 --> 00:09:29.180 +has to be done there. + +00:09:33.820 --> 00:09:34.020 +[Speaker 2]: 1 of the nice things is you know the great + +00:09:36.760 --> 00:09:36.820 +environment in Lisp where we're able to do a + +00:09:40.520 --> 00:09:40.900 +lot of interactive bottom-up testing before + +00:09:42.840 --> 00:09:43.280 +we even get to lighting tech pieces. + +00:09:48.740 --> 00:09:49.140 +So it does tend to be more higher level bugs, + +00:09:51.140 --> 00:09:51.640 +I think, that get caught in cross-functional + +00:09:55.940 --> 00:09:56.100 +interaction. We had 1 recently that was an + +00:09:58.100 --> 00:09:58.600 +Emacs version change. It had been a function + +00:10:01.100 --> 00:10:01.600 +that had existed for a long time. + +00:10:03.340 --> 00:10:03.840 +It had an and rest in it, + +00:10:05.740 --> 00:10:06.240 +in its argument list, so it would assemble + +00:10:08.600 --> 00:10:09.100 +the list of arguments from individual + +00:10:10.320 --> 00:10:10.820 +arguments that you would give it, + +00:10:13.100 --> 00:10:13.600 +and they decided in a recent version, + +00:10:15.200 --> 00:10:15.700 +I think with Stefan's input, + +00:10:19.400 --> 00:10:19.840 +to change that to a list and allow the prior + +00:10:22.740 --> 00:10:22.900 +behavior, but it would issue a warning if you + +00:10:23.620 --> 00:10:24.060 +use the prior behavior. + +00:10:25.560 --> 00:10:25.840 +So all of a sudden, the way you were supposed + +00:10:27.180 --> 00:10:27.680 +to do it became semi-invalid. + +00:10:30.440 --> 00:10:30.940 +And so we started getting the warning, + +00:10:32.760 --> 00:10:33.040 +and we've tried to eliminate all those + +00:10:35.600 --> 00:10:36.060 +warnings in recent hyperbole developments. + +00:10:37.120 --> 00:10:37.620 +So we're like, what do we do? + +00:10:39.020 --> 00:10:39.440 +You know, because we wanted to be backward + +00:10:42.140 --> 00:10:42.640 +compatible to where you couldn't use a list. + +00:10:44.620 --> 00:10:45.120 +It required you to use individual arguments. + +00:10:48.380 --> 00:10:48.560 +And now it's sort of requiring you to do + +00:10:51.660 --> 00:10:51.820 +that. And all of that was caused by the + +00:10:52.940 --> 00:10:53.440 +automatic testing on it. + +00:11:08.680 --> 00:11:08.860 +So you said, Max, you were going to tell us + +00:11:12.740 --> 00:11:13.220 +what you learned. So what are the major + +00:11:15.368 --> 00:11:15.396 +things that you learned in doing all of this + +00:11:15.680 --> 00:11:16.180 +work? All of this work? + +00:11:26.520 --> 00:11:26.740 +[Speaker 0]: Well, I tried to cover some of it in the + +00:11:29.380 --> 00:11:29.800 +presentation, but as I was going along, + +00:11:33.420 --> 00:11:33.920 +the presentation became like twice as long as + +00:11:36.180 --> 00:11:36.680 +fitted into the time we had so I had to cut + +00:11:42.380 --> 00:11:42.880 +it out. But I think some of the core things + +00:11:44.340 --> 00:11:44.840 +still is in the presentation. + +00:11:49.560 --> 00:11:50.060 +From a personal perspective, + +00:11:52.440 --> 00:11:52.940 +And this might not be hard to realize, + +00:11:56.960 --> 00:11:57.460 +but forcing yourself to test functions, + +00:12:02.900 --> 00:12:03.060 +test code really forces you to understand the + +00:12:05.080 --> 00:12:05.280 +code a little bit better in a way that sort + +00:12:07.300 --> 00:12:07.400 +of makes it easier than just to read the + +00:12:11.460 --> 00:12:11.960 +code. I don't know how it is for the rest + +00:12:13.780 --> 00:12:13.980 +listening to this, but for me it works so + +00:12:16.580 --> 00:12:17.080 +that if I just read the code then I don't + +00:12:20.140 --> 00:12:20.320 +sort of become as sharp as I should be but if + +00:12:22.500 --> 00:12:22.640 +I try to write the test case for it then I + +00:12:24.680 --> 00:12:24.880 +really need to understand better of all the + +00:12:27.660 --> 00:12:28.160 +edge cases and all the sort of states and etc + +00:12:30.060 --> 00:12:30.320 +that is involved and I think that's That's + +00:12:33.080 --> 00:12:33.200 +what's sort of 1 of the learning things I + +00:12:34.960 --> 00:12:35.280 +wanted to communicate as well that I don't + +00:12:38.940 --> 00:12:39.080 +think I covered in detail in the + +00:12:41.480 --> 00:12:41.980 +presentation. Maybe all this, + +00:12:48.060 --> 00:12:48.340 +but try it. 1 other sort of more from the fun + +00:12:50.740 --> 00:12:51.000 +side is that I really think it's fun to write + +00:12:55.080 --> 00:12:55.440 +the test. So if you haven't tests in your + +00:12:58.020 --> 00:12:58.520 +package, you should start doing that because + +00:13:05.740 --> 00:13:06.080 +it is fun. It might feel like some extra + +00:13:08.080 --> 00:13:08.580 +work, but it really pays off in the long run, + +00:13:10.320 --> 00:13:10.760 +especially if you have it in like a pipeline + +00:13:12.520 --> 00:13:12.980 +and where you can run it regularly when you + +00:13:13.940 --> 00:13:14.380 +do new commits, et cetera. + +00:13:16.560 --> 00:13:17.060 +So, I mean, that's maybe obvious from, + +00:13:19.160 --> 00:13:19.440 +if you look from the commercial side or your + +00:13:21.080 --> 00:13:21.340 +work side to do it like that. + +00:13:22.260 --> 00:13:22.660 +But even for your hobby project, + +00:13:26.260 --> 00:13:26.760 +it can be very sort of pay off really well. + +00:13:32.900 --> 00:13:33.160 +[Speaker 2]: It's worked really well when we're adding new + +00:13:35.020 --> 00:13:35.180 +functionality or we're changing some of the + +00:13:36.560 --> 00:13:37.060 +plumbing in the system. + +00:13:40.400 --> 00:13:40.580 +You know, you go and you do some surgery and + +00:13:41.320 --> 00:13:41.820 +then you run the tests. + +00:13:45.400 --> 00:13:45.900 +And sometimes 6 to 10 tests will fail. + +00:13:48.260 --> 00:13:48.420 +And you find there, you know, + +00:13:50.460 --> 00:13:50.660 +it tends to be they're all interconnected and + +00:13:52.920 --> 00:13:53.320 +it leads you back to the single source. + +00:13:56.660 --> 00:13:56.980 +You fix that and you know it could be an edge + +00:14:00.560 --> 00:14:00.760 +case and off by 1 or Sometimes it's an + +00:14:03.520 --> 00:14:03.800 +assumption about the way something is used + +00:14:05.980 --> 00:14:06.480 +and it's not actually always true. + +00:14:09.520 --> 00:14:10.020 +And so, Matt's just really good at + +00:14:13.540 --> 00:14:14.040 +identifying some of those scenarios and + +00:14:17.480 --> 00:14:17.980 +keeping us honest, I guess I would say. + +00:14:22.900 --> 00:14:23.400 +So I love, I run it as much as I before, + +00:14:26.400 --> 00:14:26.900 +you know, even before I commit something. + +00:14:29.960 --> 00:14:30.060 +So I get to see, you know, + +00:14:30.940 --> 00:14:31.440 +if anything has progressed. + +00:14:39.480 --> 00:14:39.920 +So yeah, I really recommend this process to + +00:14:42.120 --> 00:14:42.620 +people. I haven't seen it done. + +00:14:45.720 --> 00:14:46.080 +I don't think that, I don't know any other + +00:14:47.800 --> 00:14:48.300 +package that has done it to this level. + +00:14:51.560 --> 00:14:51.820 +And it's been working really great for us. + +00:14:55.440 --> 00:14:55.640 +And I think, well, we'll see too when we + +00:14:56.780 --> 00:14:57.280 +release to the general public. + +00:15:04.380 --> 00:15:04.540 +[Speaker 0]: But Bob, also, maybe the test part of + +00:15:06.400 --> 00:15:06.560 +different packages is not the first thing you + +00:15:08.900 --> 00:15:09.100 +look at. So I know there are packages that + +00:15:10.960 --> 00:15:11.380 +have testing, a lot of testing, + +00:15:13.860 --> 00:15:14.160 +but how much, much testing they have or not, + +00:15:16.060 --> 00:15:16.220 +I don't know. It's not what you normally look + +00:15:17.900 --> 00:15:18.400 +into when you look at someone's else code. + +00:15:20.600 --> 00:15:20.820 +You look maybe on the functionality side but + +00:15:22.760 --> 00:15:23.000 +not on how they've done the sort of the + +00:15:26.540 --> 00:15:26.760 +quality side. So there could be other + +00:15:28.780 --> 00:15:29.280 +packages out there that are well equipped. + +00:15:31.800 --> 00:15:32.300 +[Speaker 2]: I hope so. I hope so. + +00:15:39.860 --> 00:15:40.180 +[Speaker 0]: What's the craziest bug you found when + +00:15:44.700 --> 00:15:45.200 +writing these tests? Well, + +00:15:50.760 --> 00:15:50.940 +What springs to my mind just now is that we + +00:15:52.760 --> 00:15:52.960 +were doing some tests or I would do some + +00:15:55.920 --> 00:15:56.420 +tests for when you narrow, + +00:15:57.940 --> 00:15:58.440 +what do you say that? When you, + +00:16:04.500 --> 00:16:05.000 +in outlining, when you sort of compress + +00:16:06.480 --> 00:16:06.980 +things in an outline, so you just, + +00:16:08.540 --> 00:16:09.040 +sorry Bob, maybe you have it, + +00:16:12.100 --> 00:16:12.600 +[Speaker 2]: When you hide text. + +00:16:12.740 --> 00:16:13.240 +[Speaker 0]: What I'm looking for? Yeah, + +00:16:15.580 --> 00:16:15.920 +when you hide. So I was doing some cursor + +00:16:17.780 --> 00:16:17.980 +movement over that. And I always assume that + +00:16:22.540 --> 00:16:22.900 +if you do like a prefix argument to like a + +00:16:23.800 --> 00:16:24.240 +simple cursor movement, + +00:16:26.420 --> 00:16:26.920 +like control F moving 1 character position, + +00:16:28.340 --> 00:16:28.840 +and you would give it the, + +00:16:36.580 --> 00:16:37.080 +and then the prefix, like you want to move + +00:16:39.140 --> 00:16:39.640 +like 2 or 3 positions, + +00:16:43.040 --> 00:16:43.140 +you would do like control U 3 and then + +00:16:44.240 --> 00:16:44.740 +control F and you move 3. + +00:16:46.560 --> 00:16:46.960 +I always assumed that that would be exactly + +00:16:49.240 --> 00:16:49.440 +the same as if you just hit the key control F + +00:16:50.740 --> 00:16:51.240 +3 times, but it's not. + +00:16:53.160 --> 00:16:53.560 +So it's not the bug, it's a feature, + +00:16:54.620 --> 00:16:55.080 +but that was the craziest thing. + +00:16:58.180 --> 00:16:58.360 +I spent the night trying to figure out why + +00:17:00.720 --> 00:17:01.000 +our code was wrong, but It turns out that's + +00:17:03.560 --> 00:17:04.060 +how Emacs behaves. Try it out yourself. + +00:17:07.920 --> 00:17:08.300 +Try to move over the 3 dots at the end of + +00:17:09.140 --> 00:17:09.640 +that and see what happens. + +00:17:14.060 --> 00:17:14.240 +Do it with cursor hitting the key or using a + +00:17:16.260 --> 00:17:16.680 +prefix argument and you see it behaves + +00:17:18.720 --> 00:17:19.220 +differently. That was the craziest thing. + +00:17:21.960 --> 00:17:22.339 +I think there was some other crazy thing or + +00:17:24.280 --> 00:17:24.480 +deep learning also, but I can't come up with + +00:17:26.599 --> 00:17:26.760 +it at the moment. So maybe I can write it in + +00:17:27.900 --> 00:17:28.400 +the Q&A later. + +00:17:31.200 --> 00:17:31.440 +[Speaker 1]: I think we're out of time on the stream, + +00:17:33.360 --> 00:17:33.600 +but people are welcome to join Mats and Bob + +00:17:35.280 --> 00:17:35.640 +here on BigBlueButton to further discuss + +00:17:36.480 --> 00:17:36.980 +this. Thank you both. + +00:17:38.674 --> 00:17:38.792 +[Speaker 0]: Okay, thank you. Thanks, + +00:17:46.100 --> 00:17:46.600 +Makaay. Thank you. I don't know, + +00:17:48.740 --> 00:17:49.240 +Is it only me and Bob here? + +00:17:50.680 --> 00:17:51.180 +So Bob, do you want to say something? + +00:17:57.440 --> 00:17:57.940 +[Speaker 2]: Well, I think it's been a great day. + +00:18:00.720 --> 00:18:01.220 +And I'm glad we did this. + +00:18:02.280 --> 00:18:02.780 +It takes a lot of energy. + +00:18:15.140 --> 00:18:15.640 +I'm just really excited about the progress + +00:18:20.580 --> 00:18:20.740 +that this, and we're actually doing a lot of + +00:18:23.940 --> 00:18:24.160 +QA at work and my professional software work + +00:18:28.500 --> 00:18:28.840 +and looking at you know how we can do more + +00:18:32.980 --> 00:18:33.480 +test driven development and so everybody's + +00:18:35.980 --> 00:18:36.200 +talking about this you know we've got AI over + +00:18:37.540 --> 00:18:38.040 +here that can generate test cases. + +00:18:40.200 --> 00:18:40.700 +But, you know, strangely enough, + +00:18:43.100 --> 00:18:43.380 +with the rapidity of development and web + +00:18:46.720 --> 00:18:47.220 +applications, I think the level of testing + +00:18:50.140 --> 00:18:50.280 +has gone down in recent years compared to + +00:18:51.500 --> 00:18:51.780 +where it used to be, right? + +00:18:53.040 --> 00:18:53.540 +Because the pace has gone up. + +00:18:57.340 --> 00:18:57.840 +And so I think it's starting to turn again + +00:18:58.740 --> 00:18:59.240 +where people are saying, + +00:19:01.940 --> 00:19:02.440 +we can't just release crap into the + +00:19:08.120 --> 00:19:08.620 +Webisphere and we have to better ourselves. + +00:19:13.620 --> 00:19:13.820 +And with all these advanced tool sets that + +00:19:16.100 --> 00:19:16.600 +you have, that you can do CICD testing, + +00:19:19.860 --> 00:19:20.180 +you know, I just, I just see it coming + +00:19:21.900 --> 00:19:22.100 +around, you know, as people develop new + +00:19:24.000 --> 00:19:24.160 +things. So That's kind of exciting to me + +00:19:26.980 --> 00:19:27.480 +because I came from a manufacturing culture + +00:19:30.300 --> 00:19:30.780 +originally where we, our company actually + +00:19:33.800 --> 00:19:34.300 +started a lot of the manufacturing quality + +00:19:37.420 --> 00:19:37.920 +efforts that you saw in Japan and elsewhere + +00:19:40.600 --> 00:19:40.740 +in America for a long time and that was you + +00:19:42.040 --> 00:19:42.540 +know entirely through testing. + +00:19:46.640 --> 00:19:47.020 +We used to just build incredible test cases + +00:19:49.120 --> 00:19:49.320 +because we were combining software with + +00:19:51.100 --> 00:19:51.380 +hardware. And if, you know, + +00:19:53.460 --> 00:19:53.600 +the hardware doesn't work and you ship a + +00:19:55.080 --> 00:19:55.520 +million units, you're, + +00:19:57.340 --> 00:19:57.840 +you're in trouble. So, + +00:20:00.260 --> 00:20:00.760 +that was just something we had to do. + +00:20:04.280 --> 00:20:04.780 +And so it's nice to start to see that curve + +00:20:07.020 --> 00:20:07.520 +come around. And I think, + +00:20:10.380 --> 00:20:10.880 +you know, Matt Vance is very modest, + +00:20:16.680 --> 00:20:16.920 +but I think he's really the 1 that started us + +00:20:20.400 --> 00:20:20.580 +down this path and really made it into a + +00:20:24.620 --> 00:20:24.840 +reality. So everybody else just gets to + +00:20:25.760 --> 00:20:26.260 +benefit from that work. + +00:20:27.540 --> 00:20:28.040 +So thanks. + +00:20:32.760 --> 00:20:33.260 +[Speaker 1]: That's awesome. + +00:20:39.960 --> 00:20:40.460 +[Speaker 0]: Thanks. Okay. Yeah. So if there's nothing + +00:20:43.200 --> 00:20:43.520 +more here, then maybe we should just close + +00:20:45.440 --> 00:20:45.940 +this and I go over to write in the etherpad + +00:20:47.960 --> 00:20:48.460 +the replies we had. + +00:20:51.900 --> 00:20:52.120 +[Speaker 1]: Right, yeah, I think, let's see, + +00:20:53.520 --> 00:20:53.760 +I see 1 other person here, + +00:20:55.080 --> 00:20:55.580 +I believe Ihor just joined us. + +00:20:58.780 --> 00:20:59.060 +Yeah. Yeah, so if you do want to discuss with + +00:21:00.220 --> 00:21:00.480 +Mats and Bob, you're welcome to, + +00:21:02.200 --> 00:21:02.700 +otherwise, yeah, we can close the room now. + +00:21:05.800 --> 00:21:06.020 +[Speaker 3]: Well, I think I missed most of the talk + +00:21:06.900 --> 00:21:07.400 +because I had power outage, + +00:21:12.180 --> 00:21:12.440 +but the part I heard was about the mock + +00:21:16.860 --> 00:21:17.220 +library. And you mentioned that you don't + +00:21:20.200 --> 00:21:20.700 +like CL-let, but instead you use mock. + +00:21:29.700 --> 00:21:29.800 +[Speaker 0]: Yeah, I was more saying that you have to do a + +00:21:31.560 --> 00:21:32.040 +lot more work when you use the CL letdef. + +00:21:34.540 --> 00:21:34.780 +It's for more ambitious and maybe more + +00:21:37.000 --> 00:21:37.500 +complicated cases where you want to really + +00:21:38.840 --> 00:21:39.340 +make a new implementation, + +00:21:41.940 --> 00:21:42.440 +test implementation. If you use the mock, + +00:21:44.380 --> 00:21:44.880 +you get a lot of things out of the box, + +00:21:47.440 --> 00:21:47.940 +verifying that you actually, + +00:21:50.820 --> 00:21:51.040 +like the mock was actually called for + +00:21:53.320 --> 00:21:53.820 +instance, whereas if you do with the CLLatf, + +00:21:56.520 --> 00:21:56.780 +you would have to take correct track of that + +00:22:02.020 --> 00:22:02.520 +yourself. And so, so a lot of more work. + +00:22:03.760 --> 00:22:04.260 +Oh yeah. + +00:22:07.940 --> 00:22:08.200 +[Speaker 3]: I'm saying that most of the time CLLess is + +00:22:09.720 --> 00:22:10.220 +used for simple cases actually. + +00:22:12.320 --> 00:22:12.820 +Because, just for example, + +00:22:15.100 --> 00:22:15.600 +the function always returns the same. + +00:22:17.980 --> 00:22:18.420 +And it tends to be simple lambda that ignores + +00:22:19.040 --> 00:22:19.540 +all the input arguments. + +00:22:23.000 --> 00:22:23.480 +So that's really trivial most of the time but + +00:22:25.520 --> 00:22:25.920 +I actually thought the opposite that mock is + +00:22:27.640 --> 00:22:28.140 +supposed to be used for non-trivial cases. + +00:22:32.280 --> 00:22:32.520 +[Speaker 0]: Sorry, what was the question? + +00:22:35.280 --> 00:22:35.780 +Mock was supposed to be used for non-trivial. + +00:22:47.680 --> 00:22:48.180 +Yeah I mean I don't know how to explain this. + +00:22:50.140 --> 00:22:50.640 +I mean, CLF can be used for non-trivial + +00:22:54.400 --> 00:22:54.840 +definitely. You can define then any behavior + +00:22:56.180 --> 00:22:56.680 +you want. You can write your own function, + +00:22:58.440 --> 00:22:58.660 +but you need to keep track of whether that + +00:22:59.620 --> 00:23:00.100 +function is called or not, + +00:23:06.260 --> 00:23:06.380 +for instance. So you have to make note of + +00:23:08.440 --> 00:23:08.940 +that the function was called so you can fire + +00:23:12.440 --> 00:23:12.800 +sort of an error in case your function wasn't + +00:23:16.960 --> 00:23:17.440 +called because that would be 1 error case. + +00:23:20.660 --> 00:23:20.860 +[Speaker 3]: So you mean the mock fires an error if the + +00:23:22.580 --> 00:23:23.080 +mocked function was actually not called? + +00:23:30.060 --> 00:23:30.560 +[Speaker 0]: Yes, it does. Yes. So if your assumptions, + +00:23:33.900 --> 00:23:34.120 +you sort of document with the mock also your + +00:23:37.080 --> 00:23:37.220 +assumptions how your code is going to be + +00:23:40.020 --> 00:23:40.380 +called. And if those are wrong, + +00:23:41.120 --> 00:23:41.540 +you will get an error. + +00:23:43.680 --> 00:23:44.060 +So you would, so if the implementation would + +00:23:44.840 --> 00:23:45.100 +maybe change, for instance, + +00:23:46.640 --> 00:23:47.140 +and not call the thing you're mocking, + +00:23:50.460 --> 00:23:50.960 +then you will notice that. + +00:23:53.100 --> 00:23:53.560 +But if you see a letdef, + +00:23:54.840 --> 00:23:55.040 +then you will have to keep track of that + +00:23:57.560 --> 00:23:58.060 +yourself. Okay, I see. + +00:23:58.260 --> 00:23:58.760 +I see. + +00:24:01.240 --> 00:24:01.740 +[Speaker 3]: And you know, our mode also uses a lot of + +00:24:09.340 --> 00:24:09.620 +test. In our mode, we have a lot of tests + +00:24:13.940 --> 00:24:14.440 +[Speaker 0]: Ah, okay. Yeah. Yeah. I'm sure I have. + +00:24:15.900 --> 00:24:16.400 +[Speaker 3]: also. We rely on CLLatF for, + +00:24:19.220 --> 00:24:19.720 +we don't use third-party libraries at all. + +00:24:22.140 --> 00:24:22.640 +[Speaker 0]: Oh, you use CLLatF, okay. + +00:24:26.680 --> 00:24:27.180 +Yeah. Yeah. Yeah. At First I found it very + +00:24:29.480 --> 00:24:29.700 +powerful to use that, but then I sort of, + +00:24:32.120 --> 00:24:32.320 +I learned more about how we can use the + +00:24:34.340 --> 00:24:34.840 +mocking library for what I needed. + +00:24:36.900 --> 00:24:37.400 +And I prefer that at the moment. + +00:24:40.560 --> 00:24:41.060 +[Speaker 3]: I see, that is interesting. + +00:24:42.500 --> 00:24:42.700 +Because I had seen it, + +00:24:45.440 --> 00:24:45.600 +but I didn't consider that it's gonna be + +00:24:46.800 --> 00:24:47.300 +useful even in simple cases. + +00:24:52.640 --> 00:24:53.140 +[Speaker 0]: It has its limitations. + +00:24:58.260 --> 00:24:58.760 +So it's like life, how you turn depends. + +00:25:03.740 --> 00:25:04.020 +But maybe I should look more into the org + +00:25:05.880 --> 00:25:06.100 +mode and the test case to learn more about + +00:25:07.480 --> 00:25:07.980 +that. So thanks for pointing that out. + +00:25:14.620 --> 00:25:15.120 +[Speaker 3]: We are trying to cover as much as we can. + +00:25:17.520 --> 00:25:17.740 +It's almost impossible for org. + +00:25:20.500 --> 00:25:21.000 +But yeah, we keep adding more tests. + +00:25:22.780 --> 00:25:23.280 +[Speaker 0]: That's great. + +00:25:52.720 --> 00:25:53.200 +Someone's typing. I don't know. + +00:25:54.340 --> 00:25:54.840 +Any more questions? No? + +00:26:01.060 --> 00:26:01.560 +Okay, then I'll go back and try to document + +00:26:05.200 --> 00:26:05.360 +this in the etherpad. Thank you everybody for + +00:26:08.860 --> 00:26:09.160 +[Speaker 1]: Thank you guys. Great work. + +00:26:09.400 --> 00:26:09.900 +[Speaker 0]: joining. Great. Thank you. + +00:26:11.100 --> 00:26:11.600 +Take care. Bye-bye. + +00:26:15.060 --> 00:26:15.560 +[Speaker 1]: Take care. Bye. Silence. diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt new file mode 100644 index 00000000..ea8a679b --- /dev/null +++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt @@ -0,0 +1,68 @@ +WEBVTT + + +00:00:03.120 --> 00:03:11.159 +Introduction + +00:03:11.160 --> 00:04:14.359 +ERT: Emacs Lisp Regression Testing + +00:04:14.360 --> 00:04:56.919 +Assertions with `should` + +00:04:56.920 --> 00:06:54.559 +Running a test case + +00:06:54.560 --> 00:07:46.960 +Debug a test + +00:07:50.380 --> 00:09:10.479 +Commercial break: Hyperbole + +00:09:10.480 --> 00:10:39.119 +Instrument function on the fly + +00:10:39.120 --> 00:14:41.239 +Mocking + +00:14:41.240 --> 00:15:24.099 +cl-letf + +00:15:24.100 --> 00:15:55.719 +Hooks + +00:15:55.720 --> 00:17:05.099 +Side effects and initial buffer state + +00:17:05.100 --> 00:17:16.519 +with-temp-buffer + +00:17:16.520 --> 00:17:33.287 +make-temp-file + +00:17:33.288 --> 00:18:09.919 +buffer-string + +00:18:09.920 --> 00:18:51.979 +buffer-name + +00:18:51.980 --> 00:19:02.679 +major-mode + +00:19:02.680 --> 00:20:15.099 +unwind-protect + +00:20:15.100 --> 00:21:38.459 +Input, with-simulated-input + +00:21:38.460 --> 00:23:03.219 +Running all tests + +00:23:03.220 --> 00:24:05.059 +Batch mode + +00:24:05.060 --> 00:26:05.160 +Skipping tests + +00:26:08.460 --> 00:26:55.240 +Conclusion diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt new file mode 100644 index 00000000..d07b8201 --- /dev/null +++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt @@ -0,0 +1,1371 @@ +WEBVTT captioned by sachac, checked by sachac + +NOTE Introduction + +00:00:03.120 --> 00:00:07.439 +Hi everyone! I'm Mats Lidell. + +00:00:07.440 --> 00:00:09.879 +I'm going to talk about my journey + +00:00:09.880 --> 00:00:12.480 +writing test cases for GNU Hyperbole + +00:00:12.481 --> 00:00:19.399 +and what I learned on the way. + +00:00:19.400 --> 00:00:24.079 +So, why write tests for GNU Hyperbole? + +00:00:24.080 --> 00:00:25.679 +There is some background. + +00:00:25.680 --> 00:00:27.959 +I'm the co-maintainer of GNU Hyperbole + +00:00:27.960 --> 00:00:33.479 +together with Bob Weiner. Bob is the author of the package. + +00:00:33.480 --> 00:00:34.680 +The package is available through + +00:00:34.681 --> 00:00:38.799 +the Emacs package manager and GNU Elpa + +00:00:38.800 --> 00:00:42.599 +if you would want to try it out. + +00:00:42.600 --> 00:00:46.359 +The package has some age. I think it dates back to + +00:00:46.360 --> 00:00:50.119 +a first release around 1993, which is also + +00:00:50.120 --> 00:00:54.799 +when I got in contact with the package the first time. + +00:00:54.800 --> 00:00:58.239 +I was a user of the package for many years. + +00:00:58.240 --> 00:01:03.119 +Later, I became the maintainer of the package for the FSF. + +00:01:03.120 --> 00:01:04.679 +That was although I did not have + +00:01:04.680 --> 00:01:09.039 +much knowledge of Emacs Lisp, + +00:01:09.040 --> 00:01:12.679 +and I still have a lot to learn. + +00:01:12.680 --> 00:01:15.959 +A few years ago, we started to work actively on the package, + +00:01:15.960 --> 00:01:20.839 +with setting up goals and having meetings. + +00:01:20.840 --> 00:01:24.959 +So my starting point is that I had experience + +00:01:24.960 --> 00:01:27.439 +with test automation from development + +00:01:27.440 --> 00:01:30.599 +in C++, Java and Python + +00:01:30.600 --> 00:01:37.239 +using different x-unit frameworks like cppunit, junit. + +00:01:37.240 --> 00:01:40.039 +That was in my daytime work where + +00:01:40.040 --> 00:01:41.959 +the technique of using pull requests + +00:01:41.960 --> 00:01:46.719 +with changes backed up by tests were the daily routine. + +00:01:46.720 --> 00:01:49.199 +It was really a requirement for a change to go in + +00:01:49.200 --> 00:01:52.159 +to have supporting test cases. + +00:01:52.160 --> 00:01:58.559 +I believe, a quite common setup and requirement these days. + +00:01:58.560 --> 00:02:02.039 +I also had been an Emacs user for many years, + +00:02:02.040 --> 00:02:04.279 +but with focus on being a user. + +00:02:04.280 --> 00:02:09.839 +So as I mentioned, I have limited Emacs Lisp knowledge. + +00:02:09.840 --> 00:02:11.359 +When we decided to start + +00:02:11.360 --> 00:02:13.959 +to work actively on Hyperbole again, + +00:02:13.960 --> 00:02:15.519 +it was natural for me to look into + +00:02:15.520 --> 00:02:18.679 +raising the quality by adding unit tests. + +00:02:18.680 --> 00:02:20.679 +This also goes hand in hand + +00:02:20.680 --> 00:02:25.239 +with running these regularly as part of a build process. + +00:02:25.240 --> 00:02:28.439 +All in all, following the current best practice + +00:02:28.440 --> 00:02:31.359 +of software development. + +00:02:31.360 --> 00:02:36.479 +But since Hyperbole had no tests at all, + +00:02:36.480 --> 00:02:38.719 +it would not be enough just to add tests + +00:02:38.720 --> 00:02:41.799 +for new or changed functionality. + +00:02:41.800 --> 00:02:44.639 +We wanted to add it even broader; ideally, everywhere. + +00:02:44.640 --> 00:02:48.399 +So work started with adding tests here and there + +00:02:48.400 --> 00:02:52.039 +based on our gut feeling where it would be most useful. + +00:02:52.040 --> 00:02:55.799 +This work is still ongoing. + +00:02:55.800 --> 00:02:58.119 +So this is where my journey starts + +00:02:58.120 --> 00:03:00.759 +with much functionality to test, + +00:03:00.760 --> 00:03:03.359 +no knowledge of what testing frameworks existed, + +00:03:03.360 --> 00:03:11.159 +and not really knowing a lot about Emacs Lisp at all. + +NOTE ERT: Emacs Lisp Regression Testing + +00:03:11.160 --> 00:03:13.799 +Luckily there is a package for writing tests in Emacs. + +00:03:13.800 --> 00:03:17.919 +It is called ERT: Emacs Lisp Regression Testing. + +00:03:17.920 --> 00:03:20.959 +It contains both support for defining tests and running them. + +00:03:20.960 --> 00:03:24.639 +Defining a test is done with the macro `ert-deftest`. + +00:03:24.640 --> 00:03:28.919 +In its simplest form, a test has a name, a doc string, and a body. + +00:03:28.920 --> 00:03:31.439 +The doc string is where you typically can give + +00:03:31.440 --> 00:03:33.799 +a detailed description of the test + +00:03:33.800 --> 00:03:35.559 +and has space for more info + +00:03:35.560 --> 00:03:42.279 +than what can be given in the test name. + +00:03:42.280 --> 00:03:45.239 +The body is where all the interesting things happen. + +00:03:45.240 --> 00:03:51.959 +It is here you prepare the test, run it and verify the outcome. + +00:03:51.960 --> 00:03:54.239 +Schematically, it looks like this. + +00:03:54.240 --> 00:04:00.239 +You have the ert-deftest, you have the test name, + +00:04:00.240 --> 00:04:02.799 +and the doc string, and then the body. + +00:04:02.800 --> 00:04:06.559 +It is in the body where everything interesting happens. + +00:04:06.560 --> 00:04:09.759 +The test is prepared, the function of the test is executed, + +00:04:09.760 --> 00:04:13.119 +and the outcome of the test is evaluated. + +00:04:13.120 --> 00:04:14.359 +Did the test succeed or not? + +NOTE Assertions with `should` + +00:04:14.360 --> 00:04:18.479 +The verification of a test is performed with + +00:04:18.480 --> 00:04:21.479 +one or more so-called assertions. + +00:04:21.480 --> 00:04:24.999 +In ERT, they are implemented + +00:04:25.000 --> 00:04:26.599 +with the macro `should` + +00:04:26.600 --> 00:04:33.559 +together with a set of related macros. + +00:04:33.560 --> 00:04:35.519 +`should` takes a form as argument, + +00:04:35.520 --> 00:04:37.839 +and if the form evaluates to nil, + +00:04:37.840 --> 00:04:48.580 +the test has failed. So let's look at an example. + +00:04:48.581 --> 00:04:51.919 +This simple test verifies that the function `+` + +00:04:51.920 --> 00:04:56.919 +can add the numbers 2 and 3 and get the result 5. + +NOTE Running a test case + +00:04:56.920 --> 00:05:01.959 +So now we have defined a test case. How do we run it? + +00:05:01.960 --> 00:05:03.919 +The ERT package has the function (or + +00:05:03.920 --> 00:05:09.519 +rather convenience alias) `ert`. It takes a test selector. + +00:05:09.520 --> 00:05:19.759 +The test name works as a selector for running just one test. + +00:05:19.760 --> 00:05:27.900 +So here we have the example. Let's evaluate it. + +00:05:27.901 --> 00:05:34.519 +We define it and then we run it using ERT. + +00:05:34.520 --> 00:05:42.399 +As you see, we get prompted for a test selector + +00:05:42.400 --> 00:05:46.319 +but we only have one test case defined at the moment. + +00:05:46.320 --> 00:05:55.919 +It's the example 0. So let's hit RET. + +00:05:55.920 --> 00:05:58.959 +As you see here, we get some output + +00:05:58.960 --> 00:06:01.359 +describing what we have just done. + +00:06:01.360 --> 00:06:04.839 +There is one test case it has passed, zero failed, + +00:06:04.840 --> 00:06:07.839 +zero skipped, total 1 of 1 test case + +00:06:07.840 --> 00:06:14.439 +and some time stamps for the execution. + +00:06:14.440 --> 00:06:18.519 +We also see this green mark here indicating one test case + +00:06:18.520 --> 00:06:23.039 +and that it was successful. + +00:06:23.040 --> 00:06:29.659 +For inspecting the test, we can hit the letter `l` + +00:06:29.660 --> 00:06:32.839 +which shows all the `should` forms + +00:06:32.840 --> 00:06:37.779 +that was executed during this test case. + +00:06:37.780 --> 00:06:39.919 +So here we see that we have the `should`, + +00:06:39.920 --> 00:06:47.999 +one `should` executed, and we see the form equals to 2, + +00:06:48.000 --> 00:06:49.799 +and it was 5 equals to 5. + +00:06:49.800 --> 00:06:54.559 +So a good example of a successful test case. + +NOTE Debug a test + +00:06:54.560 --> 00:06:57.919 +So now we've seen how we can run a test case. + +00:06:57.920 --> 00:07:03.799 +Can we debug it? Yes. For debugging a test case, + +00:07:03.800 --> 00:07:07.939 +the `ert-deftest` can be set up using `edebug-defun`, + +00:07:07.940 --> 00:07:10.319 +just as a function or macro is set up + +00:07:10.320 --> 00:07:18.819 +or instrumented for debugging. So let's try that. + +00:07:18.820 --> 00:07:24.119 +So we try `edebug-defun` here. + +00:07:24.120 --> 00:07:28.279 +Now it's instrumented for debugging. + +00:07:28.280 --> 00:07:35.659 +And we run it, `ert`, and we're inside the debugger, + +00:07:35.660 --> 00:07:40.679 +and we can inspect here what's happening. + +00:07:40.680 --> 00:07:46.960 +Step through it and yes it succeeded just as before. + +NOTE Commercial break: Hyperbole + +00:07:50.380 --> 00:07:56.879 +It's time for a commercial break! + +00:07:56.880 --> 00:08:00.079 +Hyperbole itself can help with running tests + +00:08:00.080 --> 00:08:03.639 +and also help with running them in debug mode. + +00:08:03.640 --> 00:08:08.519 +That is because hyperbole identifies the `ert-deftest` + +00:08:08.520 --> 00:08:12.679 +as an implicit button. An implicit button is basically + +00:08:12.680 --> 00:08:13.759 +a string or pattern + +00:08:13.760 --> 00:08:16.799 +that Hyperbole has assigned some meaning to. + +00:08:16.800 --> 00:08:19.959 +For the string `ert-deftest`, it is to run the test case. + +00:08:19.960 --> 00:08:24.559 +You activate the button with the action-key. + +00:08:24.560 --> 00:08:27.079 +The standard binding is the middle mouse button, + +00:08:27.080 --> 00:08:33.040 +or from the keyboard, M-RET. + +00:08:33.041 --> 00:08:34.799 +So let's try that. + +00:08:34.800 --> 00:08:42.219 +We move the cursor here and then we type M-RET. + +00:08:42.220 --> 00:08:47.959 +And boom, the test case was executed. + +00:08:47.960 --> 00:08:54.479 +And to run it in debug mode we type C-u M-RET + +00:08:54.480 --> 00:08:57.719 +to get the assist key, and then we're in the debugger. + +00:08:57.720 --> 00:09:10.479 +So that's pretty useful and convenient. + +NOTE Instrument function on the fly + +00:09:10.480 --> 00:09:13.719 +A related useful feature here is the step-in functionality + +00:09:13.720 --> 00:09:16.399 +bound to the letter i in `debug-mode`. + +00:09:16.400 --> 00:09:18.119 +It allows you to step into a function + +00:09:18.120 --> 00:09:20.479 +and continue debugging from there. + +00:09:20.480 --> 00:09:22.839 +For the cases where your test does not do what you want, + +00:09:22.840 --> 00:09:25.119 +looking at what happens in the function of the test + +00:09:25.120 --> 00:09:37.259 +can be really useful. Let's try that with another example. + +00:09:37.260 --> 00:09:43.359 +So here we have two helper functions, one `f1-add`, + +00:09:43.360 --> 00:09:47.439 +that use the built-in `+` function + +00:09:47.440 --> 00:09:52.239 +and then we have `my-add` that uses that function. + +00:09:52.240 --> 00:09:59.399 +So we're going to test myadd. + +00:09:59.400 --> 00:10:02.919 +And then let's run this. + +00:10:02.920 --> 00:10:05.959 +Let's run this using hyperbole in debug mode + +00:10:05.960 --> 00:10:10.079 +C-u M-RET. We're in the debugger again, + +00:10:10.080 --> 00:10:15.639 +and let's step up front to my function under test + +00:10:15.640 --> 00:10:19.359 +and then press `i` for getting it instrumented + +00:10:19.360 --> 00:10:23.019 +and going into it for debugging. + +00:10:23.020 --> 00:10:25.139 +And here we can expect that it's getting + +00:10:25.140 --> 00:10:26.559 +the arguments 1 and 3, + +00:10:26.560 --> 00:10:30.999 +and it returns the result 4 as expected. + +00:10:31.000 --> 00:10:39.119 +And yes, of course, our test case will then succeed. + +NOTE Mocking + +00:10:39.120 --> 00:10:41.839 +The next tool in our toolbox is mocking. + +00:10:41.840 --> 00:10:46.239 +Mocking is needed when we want to simulate the response + +00:10:46.240 --> 00:10:49.279 +from a function used by the function under test. + +00:10:49.280 --> 00:10:53.139 +That is the implementation of the function. + +00:10:53.140 --> 00:10:56.119 +This could be for various reasons. + +00:10:56.120 --> 00:11:00.879 +One example could be because it would be hard or impossible + +00:11:00.880 --> 00:11:04.199 +in the test setup to get the behavior you want to test for, + +00:11:04.200 --> 00:11:06.279 +like an external error case. + +00:11:06.280 --> 00:11:08.679 +But the mock can also be used to verify + +00:11:08.680 --> 00:11:11.619 +that the function is called with a specific argument. + +00:11:11.620 --> 00:11:14.559 +We can view it as a way to isolate the function on the test + +00:11:14.560 --> 00:11:16.719 +from its dependencies. + +00:11:16.720 --> 00:11:18.959 +So in order to test the function in isolation, + +00:11:18.960 --> 00:11:22.079 +we need to cut out any dependencies to external behavior. + +00:11:22.080 --> 00:11:25.839 +Most obvious would be dependencies to external resources, + +00:11:25.840 --> 00:11:27.639 +such as web pages. As an example: + +00:11:27.640 --> 00:11:30.639 +Hyperbole contains functionality to link you to + +00:11:30.640 --> 00:11:34.239 +social media resources and other resources on the net. + +00:11:34.240 --> 00:11:37.899 +Testing that would require the test system to call out + +00:11:37.900 --> 00:11:39.639 +to the social media resources + +00:11:39.640 --> 00:11:43.539 +and would depend on it being available, etc. + +00:11:43.540 --> 00:11:45.479 +Nothing technically stops a test case + +00:11:45.480 --> 00:11:47.239 +to depend on the external resources, + +00:11:47.240 --> 00:11:51.319 +but would, if nothing else, be flaky or slow. + +00:11:51.320 --> 00:11:53.759 +It could be part of an end-to-end suite + +00:11:53.760 --> 00:11:57.179 +where we want to test that it works all the way. + +00:11:57.180 --> 00:11:59.719 +In this case, we want to look at the isolated case + +00:11:59.720 --> 00:12:04.099 +that can be run with no dependency on external resources. + +00:12:04.100 --> 00:12:06.679 +What you want to do is to replace the function with a mock + +00:12:06.680 --> 00:12:10.339 +that behaves as the real function would do. + +00:12:10.340 --> 00:12:11.639 +The package I have found + +00:12:11.640 --> 00:12:14.319 +and have used for mocking is `el-mock`. + +00:12:14.320 --> 00:12:21.839 +The workhorse in this package is the `with-mock` macro. + +00:12:21.840 --> 00:12:26.519 +It looks like this: `with-mock` followed by a body. + +00:12:26.520 --> 00:12:30.439 +In the execution of the body, stubs and mocks + +00:12:30.440 --> 00:12:32.899 +defined in the body is respected. + +00:12:32.900 --> 00:12:39.199 +Let's look at some examples to make that clearer. + +00:12:39.200 --> 00:12:42.079 +In this case, we have the macro `with-mock`. + +00:12:42.080 --> 00:12:43.959 +It works so that the expression + +00:12:43.960 --> 00:12:48.639 +`stub + => 10` is interpreted + +00:12:48.640 --> 00:12:51.919 +so that the function `+` will be replaced with the stub. + +00:12:51.920 --> 00:12:56.779 +The stub will return 10 regardless how it is called. + +00:12:56.780 --> 00:12:58.119 +Note that the stub function + +00:12:58.120 --> 00:13:00.199 +does not have to be called at this level + +00:13:00.200 --> 00:13:02.799 +but could be called at any level in the call chain. + +00:13:02.800 --> 00:13:07.479 +By knowing how the function under test is implemented + +00:13:07.480 --> 00:13:09.319 +and how the implementation works, + +00:13:09.320 --> 00:13:11.959 +you can find function calls you want to mock + +00:13:11.960 --> 00:13:14.999 +to force certain behavior that you want to test, + +00:13:15.000 --> 00:13:18.999 +or to avoid calls to external resources, slow calls, etc. + +00:13:19.000 --> 00:13:21.959 +Simply isolate the function under test + +00:13:21.960 --> 00:13:26.119 +and simulate its environment. + +00:13:26.120 --> 00:13:28.639 +Mock is a little bit more sophisticated + +00:13:28.640 --> 00:13:30.079 +and depends on the arguments + +00:13:30.080 --> 00:13:31.479 +that the mock function is called with. + +00:13:31.480 --> 00:13:33.847 +Or more precise, it is checked + +00:13:33.848 --> 00:13:35.519 +after the `with-mock` clause + +00:13:35.520 --> 00:13:38.079 +that the arguments match the arguments it was called with + +00:13:38.080 --> 00:13:39.759 +or even if it was called at all. + +00:13:39.760 --> 00:13:41.839 +If it is called with other arguments + +00:13:41.840 --> 00:13:43.719 +there will be an error, + +00:13:43.720 --> 00:13:46.479 +and if it's not called, it is also an error. + +00:13:46.480 --> 00:13:48.359 +So this way, we are sure that the function + +00:13:48.360 --> 00:13:51.319 +we were expected to be called actually was called. + +00:13:51.320 --> 00:13:53.399 +An important piece of the testing. + +00:13:53.400 --> 00:13:56.239 +So we are sure that the mock we have provided + +00:13:56.240 --> 00:14:03.999 +actually is triggered by the test case. + +00:14:04.000 --> 00:14:08.159 +So here we have an example of `with-mock` + +00:14:08.160 --> 00:14:18.879 +where the `f1-add` function is mocked, + +00:14:18.880 --> 00:14:21.999 +so that if it's called with 2 and 3 as arguments, + +00:14:22.000 --> 00:14:24.919 +it will return 10. Then we have a test case + +00:14:24.920 --> 00:14:27.999 +where we try the `my-add` function, + +00:14:28.000 --> 00:14:30.319 +as you might remember, and call that with 2 and 3 + +00:14:30.320 --> 00:14:32.799 +and see that it should also then return 10 + +00:14:32.800 --> 00:14:41.239 +because it's using `f1-add`. + +NOTE cl-letf + +00:14:41.240 --> 00:14:44.559 +Moving over to `cl-letf`. + +00:14:44.560 --> 00:14:47.679 +In rare occasions, the limitations of `el-mock` means + +00:14:47.680 --> 00:14:50.239 +you would want to implement a full-fledged function + +00:14:50.240 --> 00:14:52.979 +to be used under test. + +00:14:52.980 --> 00:14:55.439 +Then the macro `cl-letf` can be useful. + +00:14:55.440 --> 00:14:57.879 +However, you need to handle the case yourself + +00:14:57.880 --> 00:15:00.099 +if the function was not called. + +00:15:00.100 --> 00:15:03.519 +Looking through the test cases where I have used `cl-letf`, + +00:15:03.520 --> 00:15:06.119 +I think most can be implemented using plain mocking. + +00:15:06.120 --> 00:15:11.239 +Cases left is where the args to the mock might be different + +00:15:11.240 --> 00:15:13.739 +due to environment issues. + +00:15:13.740 --> 00:15:24.099 +In that case, a static mock will not work. + +NOTE Hooks + +00:15:24.100 --> 00:15:30.719 +Another trick is that functions that uses hooks. + +00:15:30.720 --> 00:15:35.639 +You can overload or replace the hooks to do the testing. + +00:15:35.640 --> 00:15:40.759 +So you can use the hook function just to do the verification + +00:15:40.760 --> 00:15:43.119 +and not do anything useful in the hook. + +00:15:43.120 --> 00:15:45.079 +Also, here you need to be careful + +00:15:45.080 --> 00:15:55.719 +to make sure the test handler is called and nothing else. + +NOTE Side effects and initial buffer state + +00:15:55.720 --> 00:15:57.679 +So far we have been talking about testing + +00:15:57.680 --> 00:15:59.039 +and what the function returns. + +00:15:59.040 --> 00:16:01.119 +In the best of words, we have a pure function + +00:16:01.120 --> 00:16:02.959 +that only depends on its arguments + +00:16:02.960 --> 00:16:04.939 +and produces no side effects. + +00:16:04.940 --> 00:16:06.899 +Many operations produce side effects + +00:16:06.900 --> 00:16:09.479 +or operate on the contents of buffers + +00:16:09.480 --> 00:16:12.379 +such as writing a message in the message buffer, + +00:16:12.380 --> 00:16:15.659 +change the state of a buffer, move point etc. + +00:16:15.660 --> 00:16:18.859 +Hyperbole is not an exception. Quite the contrary. + +00:16:18.860 --> 00:16:20.839 +Much of the functions creating links + +00:16:20.840 --> 00:16:24.420 +are just about updating buffers. + +00:16:24.421 --> 00:16:28.559 +This poses a special problem for tests. + +00:16:28.560 --> 00:16:29.839 +The test gets longer + +00:16:29.840 --> 00:16:31.919 +since you need to create buffers and files, + +00:16:31.920 --> 00:16:33.279 +initialize the contents. + +00:16:33.280 --> 00:16:35.159 +Verifying the outcome becomes trickier + +00:16:35.160 --> 00:16:39.019 +since you need to make sure you look at the right place. + +00:16:39.020 --> 00:16:41.039 +At the end of the test, you need to clean up, + +00:16:41.040 --> 00:16:43.439 +both for not leaving a lot of garbage + +00:16:43.440 --> 00:16:45.279 +in buffers and files around, + +00:16:45.280 --> 00:16:48.479 +and even worse, not cause later tests + +00:16:48.480 --> 00:16:50.959 +to depend on the leftovers from the other tests. + +00:16:50.960 --> 00:16:53.079 +Here are some functions and variables + +00:16:53.080 --> 00:17:05.099 +I have found useful for this. + +NOTE with-temp-buffer + +00:17:05.100 --> 00:17:09.199 +For creating tests: `with-temp-buffer`: + +00:17:09.200 --> 00:17:11.919 +it provides you a temp buffer that you visit, + +00:17:11.920 --> 00:17:13.719 +and afterwards, there is no need to clean up. + +00:17:13.720 --> 00:17:16.519 +This is the first choice if that is all you need. + +NOTE make-temp-file + +00:17:16.520 --> 00:17:20.519 +`make-temp-file`: If you need a file, + +00:17:20.520 --> 00:17:21.959 +this is the function to use. + +00:17:21.960 --> 00:17:24.279 +It creates a temp file or a directory. + +00:17:24.280 --> 00:17:26.959 +The file can be filled with initial contents. + +00:17:26.960 --> 00:17:31.019 +This needs to be cleaned up after a test. + +00:17:31.020 --> 00:17:33.287 +Moving on to verifying and debugging: + +NOTE buffer-string + +00:17:33.288 --> 00:17:38.247 +`buffer-string`: returns the full contents + +00:17:38.248 --> 00:17:39.499 +of the buffer as a string. + +00:17:39.500 --> 00:17:41.399 +That can sound a bit voluminous, + +00:17:41.400 --> 00:17:46.139 +but since tests are normally small, this often works well. + +00:17:46.140 --> 00:17:48.439 +I have in particular found good use of comparing + +00:17:48.440 --> 00:17:50.399 +the contents of buffers with the empty string. + +00:17:50.400 --> 00:17:53.359 +That would give an error, but as we have seen + +00:17:53.360 --> 00:17:56.079 +with the output produced by the `should` assertion, + +00:17:56.080 --> 00:17:58.079 +this is almost like a print statement + +00:17:58.080 --> 00:18:01.199 +and can be compared with the good old technique + +00:18:01.200 --> 00:18:04.399 +of debugging with print statements. + +00:18:04.400 --> 00:18:06.247 +There might be other ways to do the same + +00:18:06.248 --> 00:18:09.919 +as we saw with debugging. + +NOTE buffer-name + +00:18:09.920 --> 00:18:13.719 +buffer-name: Getting the buffer name is good + +00:18:13.720 --> 00:18:16.239 +to verify what buffer we are looking at. + +00:18:16.240 --> 00:18:18.359 +I often found it useful to check + +00:18:18.360 --> 00:18:21.119 +that my assumptions on what buffer I am acting on + +00:18:21.120 --> 00:18:23.399 +is correct by adding `should` clauses + +00:18:23.400 --> 00:18:25.399 +in the middle of the test execution + +00:18:25.400 --> 00:18:27.399 +or after preparing the test input. + +00:18:27.400 --> 00:18:31.679 +Sometimes Emacs can switch buffers in strange ways, + +00:18:31.680 --> 00:18:34.199 +maybe because the test case is badly written, + +00:18:34.200 --> 00:18:37.239 +and making sure your assumptions are correct + +00:18:37.240 --> 00:18:40.339 +is a good sanity check. + +00:18:40.340 --> 00:18:42.239 +Even the ert package does + +00:18:42.240 --> 00:18:44.879 +some buffer and windows manipulation for its reporting + +00:18:44.880 --> 00:18:47.487 +that I have not fully learned how to master, + +00:18:47.488 --> 00:18:51.979 +so assertion for checking the sanity of the test is good. + +NOTE major-mode + +00:18:51.980 --> 00:18:55.679 +Finally, `major-mode`: Verify the buffer has the proper mode. + +00:18:55.680 --> 00:19:02.679 +Can also be very useful and is a good sanity check. + +NOTE unwind-protect + +00:19:02.680 --> 00:19:06.599 +Finally, cleaning up. `unwind-protect`. + +00:19:06.600 --> 00:19:09.039 +The tool for cleaning up is the `unwind-protect` form + +00:19:09.040 --> 00:19:12.479 +which ensures that the unwind forms + +00:19:12.480 --> 00:19:15.439 +always are executed regardless of the outcome of the body. + +00:19:15.440 --> 00:19:20.419 +So if your test fails, you are sure the cleanup is executed. + +00:19:20.420 --> 00:19:22.759 +Let's look at unwind-protect together with + +00:19:22.760 --> 00:19:30.519 +the temporary file example. Many tests look like this. + +00:19:30.520 --> 00:19:35.279 +You create some resource, you call `unwind-protect`, + +00:19:35.280 --> 00:19:42.759 +you do the test, and then afterwards you do the cleanup. + +00:19:42.760 --> 00:19:46.359 +The cleanup for a file and a buffer is so common, + +00:19:46.360 --> 00:19:50.999 +so I have created a helper for that. + +00:19:51.000 --> 00:19:56.559 +It looks like this. + +00:19:56.560 --> 00:19:59.179 +The trick with the `buffer-modified` flag + +00:19:59.180 --> 00:20:00.719 +is to avoid getting prompted + +00:20:00.720 --> 00:20:03.219 +for killing a buffer that is not saved. + +00:20:03.220 --> 00:20:05.439 +The test buffers are often in the state + +00:20:05.440 --> 00:20:15.099 +where they have not been saved but modified. + +NOTE Input, with-simulated-input + +00:20:15.100 --> 00:20:19.679 +Another problem for tests are input. + +00:20:19.680 --> 00:20:21.559 +In the middle of execution a function + +00:20:21.560 --> 00:20:24.039 +might want to have some interaction with the user. + +00:20:24.040 --> 00:20:26.959 +Testing this poses a problem, not only in that + +00:20:26.960 --> 00:20:31.199 +the input matters, but also as how even to get the test case + +00:20:31.200 --> 00:20:34.079 +to recognize the input!? + +00:20:34.080 --> 00:20:36.039 +Ideally the tests are run in batch mode, + +00:20:36.040 --> 00:20:38.919 +which in some sense means no user interaction. + +00:20:38.920 --> 00:20:42.999 +In batch mode, there is no event loop running. + +00:20:43.000 --> 00:20:47.179 +Fortunately, there is a package `with-simulated-input` + +00:20:47.180 --> 00:20:53.259 +that gets you around these issues. + +00:20:53.260 --> 00:20:55.399 +This is a macro that allows us + +00:20:55.400 --> 00:20:56.999 +to define a set of characters + +00:20:57.000 --> 00:20:59.079 +that will be read by the function under the test, + +00:20:59.080 --> 00:21:02.579 +and all of this works in batch mode. It looks like this. + +00:21:02.580 --> 00:21:04.159 +We have `with-simulated-input`, + +00:21:04.160 --> 00:21:09.839 +and then a string of characters, and then a body. + +00:21:09.840 --> 00:21:11.647 +The form takes a string of keys + +00:21:11.648 --> 00:21:13.119 +and runs the rest of the body, + +00:21:13.120 --> 00:21:15.439 +and if there are input required, + +00:21:15.440 --> 00:21:18.119 +it is picked from the string of keys. + +00:21:18.120 --> 00:21:20.421 +In our example, the `read-string` call + +00:21:20.422 --> 00:21:21.719 +will read up until RET, + +00:21:21.720 --> 00:21:26.119 +and then return the characters read. + +00:21:26.120 --> 00:21:29.639 +As you see in the example, space needs to be provided + +00:21:29.640 --> 00:21:38.459 +by the string SPC, as return by the string RET. + +NOTE Running all tests + +00:21:38.460 --> 00:21:40.799 +So now we have seen ways to create test cases + +00:21:40.800 --> 00:21:43.219 +and even make it possible to run some of them + +00:21:43.220 --> 00:21:44.679 +that has I/O in batch mode. + +00:21:44.680 --> 00:21:47.279 +But the initial goal was to run them all at once. + +00:21:47.280 --> 00:21:48.919 +How do you do that? + +00:21:48.920 --> 00:21:51.759 +Let's go back to the `ert` command. + +00:21:51.760 --> 00:21:53.799 +It prompts for a test selector. + +00:21:53.800 --> 00:21:56.279 +If we give it the selector `t`, + +00:21:56.280 --> 00:21:59.259 +it will run all tests we have currently defined. + +00:21:59.260 --> 00:22:05.779 +Let's try that with the subset of the Hyperbole tests. + +00:22:05.780 --> 00:22:09.559 +Here is the test folder in the Hyperbole directory. + +00:22:09.560 --> 00:22:18.819 +Let's go up here and load all the demo tests. + +00:22:18.820 --> 00:22:21.207 +And then try to run `ert`. + +00:22:21.208 --> 00:22:26.119 +Now we see that we have a bunch of test cases. + +00:22:26.120 --> 00:22:27.919 +We can all run them individually, + +00:22:27.920 --> 00:22:31.719 +but we can run them with `t` instead. + +00:22:31.720 --> 00:22:35.459 +We will run them all at once. + +00:22:35.460 --> 00:22:51.419 +So now, ert is executing all our test cases. + +00:22:51.420 --> 00:22:57.079 +So here we have a nice green display + +00:22:57.080 --> 00:23:03.219 +with all the test cases. + +NOTE Batch mode + +00:23:03.220 --> 00:23:08.159 +So that was fine, but we were still running it manually + +00:23:08.160 --> 00:23:11.980 +by calling ert. How could we run it from the command line? + +00:23:17.180 --> 00:23:21.499 +Ert comes with functions for running it in batch mode. + +00:23:21.500 --> 00:23:25.639 +For Hyperbole, we use `make` for repetitive tasks. + +00:23:25.640 --> 00:23:27.119 +So we have a make target + +00:23:27.120 --> 00:23:29.279 +that uses the ert batch functionality, + +00:23:29.280 --> 00:23:33.259 +and this is the line from the Makefile. + +00:23:33.260 --> 00:23:35.479 +This is a bit detailed, + +00:23:35.480 --> 00:23:37.539 +but you see that we have a part here + +00:23:37.540 --> 00:23:40.779 +where we load the test dependencies. + +00:23:40.780 --> 00:23:43.520 +For getting the packages + +00:23:43.521 --> 00:23:48.459 +such as `el-mock` and `with-simulated-input` etc. loaded. + +00:23:48.460 --> 00:23:53.559 +We also have... I also want to point out here the call to + +00:23:53.560 --> 00:23:58.159 +or the setting of `auto-save-default` to `nil` + +00:23:58.160 --> 00:24:02.439 +to get away with the prompt for excessive backup files + +00:24:02.440 --> 00:24:05.059 +that can pile up after running the tests a few times. + +NOTE Skipping tests + +00:24:05.060 --> 00:24:06.879 +Even with the help of simulated input, + +00:24:06.880 --> 00:24:08.919 +not all tests can be run in batch mode. + +00:24:08.920 --> 00:24:10.559 +They would simply not work there + +00:24:10.560 --> 00:24:12.439 +and have to be run in an interactive Emacs + +00:24:12.440 --> 00:24:14.179 +with the running event loop. + +00:24:14.180 --> 00:24:17.919 +One trick still to be able to use batch mode for automation + +00:24:17.920 --> 00:24:20.319 +is to put the guard at the top of each test case + +00:24:20.320 --> 00:24:22.559 +as the first thing to be executed, + +00:24:22.560 --> 00:24:25.719 +so that it kicks in before anything else and stops Emacs + +00:24:25.720 --> 00:24:27.199 +to try to run the test case. + +00:24:27.200 --> 00:24:35.519 +Now, it looks like this: `(skip-unless (not noninteractive))`. + +00:24:35.520 --> 00:24:38.639 +So when ert sees that the test should be skipped, it skips it + +00:24:38.640 --> 00:24:40.439 +and makes a note of that, + +00:24:40.440 --> 00:24:44.579 +so you will see how many tests that have been skipped. + +00:24:44.580 --> 00:24:47.559 +Too bad. We have a number of test cases defined, + +00:24:47.560 --> 00:24:51.359 +and to run them, we need to run them manually. Well sort of. + +00:24:51.360 --> 00:24:53.807 +Not being able to run all tests easily + +00:24:53.808 --> 00:24:58.419 +is a bit counterproductive + +00:24:58.420 --> 00:25:00.999 +since our goal is to run all tests. + +00:25:01.000 --> 00:25:04.719 +There is however no ert function to run tests in batch mode + +00:25:04.720 --> 00:25:06.779 +with an interactive Emacs. + +00:25:06.780 --> 00:25:08.479 +The closest I have got is either + +00:25:08.480 --> 00:25:10.079 +to start the Emacs from the command line + +00:25:10.080 --> 00:25:12.439 +calling the ert function as we just have seen, + +00:25:12.440 --> 00:25:14.799 +and then killing it manually when done; + +00:25:14.800 --> 00:25:19.599 +or add a function to extract the contents of the ERT buffer + +00:25:19.600 --> 00:25:24.599 +when done and echo it to standard output. + +00:25:24.600 --> 00:25:27.800 +This is how it looks in the Makefile + +00:25:27.801 --> 00:25:31.207 +to get the behavior of cutting and paste, + +00:25:31.208 --> 00:25:34.580 +getting the ERT output into a file + +00:25:34.581 --> 00:25:36.239 +so we can then kill Emacs + +00:25:36.240 --> 00:25:44.799 +and spit out the content of the ERT buffer. + +00:25:44.800 --> 00:25:47.739 +One final word here is that + +00:25:47.740 --> 00:25:54.559 +when you run this in a continuous integration pipeline, + +00:25:54.560 --> 00:25:59.399 +you might not have a TTY for getting Emacs to start, + +00:25:59.400 --> 00:26:03.200 +and that is then another problem + +00:26:03.201 --> 00:26:05.160 +with getting the interactive mode. + +NOTE Conclusion + +00:26:08.460 --> 00:26:11.120 +We have reached the end of the talk. + +00:26:11.121 --> 00:26:14.159 +If you have any new ideas + +00:26:14.160 --> 00:26:16.759 +or have some suggestions for improvements, + +00:26:16.760 --> 00:26:18.239 +feel free to reach out + +00:26:18.240 --> 00:26:21.100 +because I am still on the learning curve of writing, + +00:26:21.101 --> 00:26:25.299 +how to write good test cases. + +00:26:25.300 --> 00:26:27.639 +If you look at the test cases we have in Hyperbole + +00:26:27.640 --> 00:26:29.799 +and you think they might contradict what I am saying here, + +00:26:29.800 --> 00:26:32.579 +it is OK. It is probably right. + +00:26:32.580 --> 00:26:34.599 +I have changed the style as I go + +00:26:34.600 --> 00:26:36.639 +and we have not yet refactored all tests + +00:26:36.640 --> 00:26:38.579 +to benefit from new designs. + +00:26:38.580 --> 00:26:40.599 +That is also the beauty of the test case. + +00:26:40.600 --> 00:26:43.319 +As long as it serves its purpose, it is not terrible + +00:26:43.320 --> 00:26:47.799 +if it is not optimal or not having the best style. + +00:26:47.800 --> 00:26:55.240 +And yes, thanks for listening. Bye. diff --git a/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt new file mode 100644 index 00000000..a10fafef --- /dev/null +++ b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt @@ -0,0 +1,788 @@ +WEBVTT + + +00:00:01.220 --> 00:00:03.580 +Hello, I'm Alexey Bychkadov, + +00:00:03.740 --> 00:00:06.899 +and I'm talking about unentangling projects + +00:00:06.899 --> 00:00:09.679 +and repositories, or maybe entangling them, + +00:00:09.679 --> 00:00:11.340 +depending on how you look at that. + +00:00:12.980 --> 00:00:15.740 +So there's going to be a short workflow note. + +00:00:16.619 --> 00:00:19.460 +I work as a researcher, + +00:00:19.940 --> 00:00:23.380 +So there are 3 main components to my work, + +00:00:23.680 --> 00:00:26.000 +I guess. First, I think, + +00:00:26.000 --> 00:00:28.140 +so I try to come up with a new ideas that + +00:00:28.140 --> 00:00:31.580 +usually results in some collection of notes I + +00:00:31.580 --> 00:00:33.760 +have. Second, I try things out. + +00:00:33.760 --> 00:00:36.180 +So it usually means that I write code. + +00:00:36.820 --> 00:00:38.540 +And third, I communicate. + +00:00:38.739 --> 00:00:40.739 +So I prepare papers, presentations, + +00:00:41.260 --> 00:00:43.160 +memos, and so on and so forth. + +00:00:44.120 --> 00:00:47.940 +And so The workflow problem I had is + +00:00:49.160 --> 00:00:53.000 +sometimes all this does not really fit into a + +00:00:53.000 --> 00:00:56.180 +concept of a single repository per project. + +00:00:56.200 --> 00:00:57.540 +So I might want to have, + +00:00:58.180 --> 00:01:01.160 +for example, a source code in 1 repository + +00:01:01.320 --> 00:01:03.480 +and then I would like to have a paper in + +00:01:03.480 --> 00:01:05.200 +another 1 and then I want to have a + +00:01:05.200 --> 00:01:08.620 +collection of notes somewhere unrelated to + +00:01:08.620 --> 00:01:12.500 +those 2. Emacs is pretty good at supporting + +00:01:12.500 --> 00:01:15.840 +your workflows and I figured I should share + +00:01:16.240 --> 00:01:18.100 +what I used and what works for me. + +00:01:20.560 --> 00:01:24.900 +So, from the technical perspective, + +00:01:26.479 --> 00:01:27.940 +things are pretty easy. + +00:01:27.940 --> 00:01:30.720 +So I use a collection of pretty standard + +00:01:30.720 --> 00:01:33.240 +components of Emacs. So it's a projectile org + +00:01:33.240 --> 00:01:35.360 +mode with this capture templates and other + +00:01:35.360 --> 00:01:38.100 +things. Then I sustained a collection of + +00:01:38.100 --> 00:01:40.360 +nodes in something that is called org-roam, + +00:01:40.680 --> 00:01:43.520 +which is essentially it's a glorified + +00:01:43.580 --> 00:01:45.580 +collection of org mode files. + +00:01:46.100 --> 00:01:48.160 +Then I used directory local variables, + +00:01:48.260 --> 00:01:51.140 +maybe a C text to jump through the source + +00:01:51.140 --> 00:01:54.920 +code and very, very little LELisp glue to + +00:01:54.920 --> 00:01:57.620 +make this all work, but that's not really + +00:01:58.620 --> 00:02:00.400 +rocket science. So that's the workflow I + +00:02:00.400 --> 00:02:02.180 +would like to talk about today. + +00:02:04.860 --> 00:02:07.120 +So what I mean by all that, + +00:02:07.960 --> 00:02:10.280 +it's pretty straightforward to make Emacs, + +00:02:10.680 --> 00:02:12.720 +to make it easy to jump around a single + +00:02:12.720 --> 00:02:14.980 +repository in Emacs. So if I, + +00:02:15.060 --> 00:02:16.640 +Now I have Doom Emacs, + +00:02:16.640 --> 00:02:18.740 +but that's not really specific to a Doom + +00:02:19.120 --> 00:02:23.160 +that'll work in any Emacs configuration. + +00:02:23.400 --> 00:02:27.720 +Well, key bindings might be different, + +00:02:27.720 --> 00:02:28.820 +but that's not the point, + +00:02:28.820 --> 00:02:29.940 +I guess, for the workflow. + +00:02:30.060 --> 00:02:31.960 +So if I hit space 2 times, + +00:02:31.960 --> 00:02:34.640 +I have all the list of files within my + +00:02:34.640 --> 00:02:38.200 +project, right? So if I create a couple of + +00:02:38.200 --> 00:02:42.780 +custom shortcuts, so if I press a magic + +00:02:42.780 --> 00:02:45.280 +button, hyper-OP, don't worry about + +00:02:45.280 --> 00:02:47.460 +hyper-key. So I want it to have a modifier + +00:02:47.560 --> 00:02:50.140 +key all to myself, so that would, + +00:02:50.320 --> 00:02:53.200 +no program on my computer would use that + +00:02:53.200 --> 00:02:55.680 +except Emacs. Emacs would use that only when + +00:02:55.680 --> 00:02:57.540 +I tell it to, so I have a hyper key instead + +00:02:57.540 --> 00:03:00.720 +of caps lock. That's pretty easy to do in GNU + +00:03:00.720 --> 00:03:04.940 +Linux system. So when I press this magic + +00:03:04.940 --> 00:03:07.400 +keys, I have a menu that's a normal key + +00:03:07.400 --> 00:03:09.940 +binding. Yeah, essentially an Emacs. + +00:03:10.240 --> 00:03:12.260 +And if I hit, for example, + +00:03:12.540 --> 00:03:15.200 +R, I end up in a readme file within this + +00:03:15.200 --> 00:03:17.320 +specific repository I was sitting in, + +00:03:17.320 --> 00:03:19.000 +right? So if I want to document something + +00:03:19.000 --> 00:03:21.420 +real quick, I go to the readme file. + +00:03:21.680 --> 00:03:25.280 +Then I could go to a change log file, + +00:03:25.280 --> 00:03:27.440 +right? So I have a list of changes and the + +00:03:27.440 --> 00:03:29.480 +way it works usually, for example, + +00:03:29.480 --> 00:03:31.140 +if I'm working in some code, + +00:03:32.220 --> 00:03:34.280 +I created a couple of dummy files in there, + +00:03:34.280 --> 00:03:36.560 +so I'm working in some code and then I + +00:03:36.560 --> 00:03:41.780 +implemented something and I can just use the + +00:03:42.020 --> 00:03:46.860 +org mode capture mechanisms to keep track of + +00:03:46.860 --> 00:03:48.880 +what I want to discuss with colleagues next + +00:03:48.880 --> 00:03:52.160 +time. For example, I could just hit capture + +00:03:52.440 --> 00:03:56.200 +repo specific changelog entry and I + +00:03:56.200 --> 00:04:02.620 +implemented a feature and I can continue + +00:04:02.620 --> 00:04:04.340 +working without this context switching. + +00:04:04.340 --> 00:04:06.500 +And then if I want to go to the change log, + +00:04:06.880 --> 00:04:11.320 +well, it is there. And next time I talk to + +00:04:11.320 --> 00:04:12.720 +the colleagues about the source code, + +00:04:12.720 --> 00:04:14.340 +I can open the change log and go through + +00:04:14.340 --> 00:04:16.800 +entries 1 by 1 and discuss what I haven't + +00:04:16.800 --> 00:04:18.980 +implemented last time. + +00:04:19.540 --> 00:04:22.580 +I could go to project specific, + +00:04:24.100 --> 00:04:26.320 +sorry, to repo specific to-do list. + +00:04:26.320 --> 00:04:29.020 +And I have list of to-dos that would leave + +00:04:29.020 --> 00:04:31.320 +within a repository. And for example, + +00:04:31.320 --> 00:04:34.020 +I could have a high level structure here, + +00:04:34.640 --> 00:04:36.460 +work distribution between team members and + +00:04:36.460 --> 00:04:39.380 +other things that sort of face outer world, + +00:04:39.380 --> 00:04:41.260 +so to speak. And of course, + +00:04:42.840 --> 00:04:45.400 +there are very many ways to jump through the + +00:04:45.400 --> 00:04:46.420 +source code conveniently. + +00:04:46.560 --> 00:04:49.960 +I ended up not using language servers I use a + +00:04:49.960 --> 00:04:53.320 +special program called ctags and so the way + +00:04:53.320 --> 00:04:56.420 +it works is just I call projectile regenerate + +00:04:56.680 --> 00:05:00.460 +tags and it creates the special tags file + +00:05:00.460 --> 00:05:05.260 +within the repository and then I can again + +00:05:06.240 --> 00:05:11.260 +run it I usually just hit a single keystroke + +00:05:11.520 --> 00:05:14.060 +and here is all the symbols that are there in + +00:05:14.060 --> 00:05:17.160 +my source code, regardless of the language, + +00:05:17.160 --> 00:05:19.540 +right? So I can jump to the main function and + +00:05:19.540 --> 00:05:21.020 +that'll be a C++ file. + +00:05:21.020 --> 00:05:22.740 +Or I could go to the super function, + +00:05:22.740 --> 00:05:25.340 +which I had in my Python file. + +00:05:25.380 --> 00:05:27.120 +And this comes in pretty convenient if I have + +00:05:27.120 --> 00:05:28.220 +a mixture of languages. + +00:05:28.360 --> 00:05:30.800 +Sometimes I can have some algorithm specific + +00:05:30.800 --> 00:05:33.000 +code in Julia, and then I can have some + +00:05:33.280 --> 00:05:35.380 +Python glue within the same source code + +00:05:35.380 --> 00:05:37.940 +repository, it makes it really convenient to + +00:05:39.720 --> 00:05:41.780 +jump between all of those. + +00:05:43.080 --> 00:05:46.980 +But I have a few problems here. + +00:05:47.360 --> 00:05:49.800 +So just to give you a little bit of context, + +00:05:49.860 --> 00:05:53.100 +for example, here is a real project that + +00:05:53.100 --> 00:05:54.440 +corresponds to real paper. + +00:05:55.840 --> 00:05:59.060 +I have a single note about that project where + +00:05:59.060 --> 00:06:01.780 +I keep all the things related to that project + +00:06:01.780 --> 00:06:03.260 +here, but that's a private note. + +00:06:03.260 --> 00:06:04.860 +So for example, again, + +00:06:04.860 --> 00:06:08.040 +I hit a special key that invokes my org-roam + +00:06:08.640 --> 00:06:12.680 +function that gives me a menu of my notes. + +00:06:13.080 --> 00:06:15.200 +And so here is the paper, + +00:06:15.200 --> 00:06:17.500 +essentially. And I can have a paper timeline, + +00:06:17.900 --> 00:06:21.180 +and I can have a list of all the dates what + +00:06:21.180 --> 00:06:23.940 +happened to the paper with links to my email, + +00:06:24.060 --> 00:06:27.700 +right? So for example if I hit this link that + +00:06:27.700 --> 00:06:30.160 +will open a specific email and that doesn't + +00:06:30.160 --> 00:06:31.280 +work outside of my computer, + +00:06:31.280 --> 00:06:33.140 +doesn't make any sense to keep it in the + +00:06:33.340 --> 00:06:35.500 +outer world facing repository, + +00:06:35.500 --> 00:06:37.360 +for example. So that's something to myself, + +00:06:37.360 --> 00:06:41.420 +right? Sometimes I want to have like this + +00:06:41.480 --> 00:06:43.940 +list of working notes, + +00:06:43.940 --> 00:06:45.780 +right, that contain like, + +00:06:45.780 --> 00:06:49.200 +for example, yeah, I might produce this kind + +00:06:49.200 --> 00:06:50.620 +of things for internal discussion, + +00:06:50.640 --> 00:06:52.500 +right? It has some marks, + +00:06:52.500 --> 00:06:54.620 +it has some margin notes and things like + +00:06:54.620 --> 00:06:57.620 +that. Maybe again, health-based ideas that + +00:06:57.620 --> 00:07:00.300 +may or may not end up in a repository, + +00:07:01.020 --> 00:07:03.220 +in the final paper or in a source code, + +00:07:03.220 --> 00:07:05.880 +but still I want to have it somewhere. + +00:07:07.120 --> 00:07:08.600 +And well, long story short, + +00:07:08.800 --> 00:07:11.680 +I need a project folder that would be + +00:07:11.680 --> 00:07:16.120 +unrelated to the source code or to the source + +00:07:16.120 --> 00:07:19.440 +code repository or to the paper itself or a + +00:07:19.440 --> 00:07:22.780 +final report, right? And 1 way, + +00:07:22.960 --> 00:07:24.720 +as usual, there are multiple ways to achieve + +00:07:24.720 --> 00:07:27.660 +that, I suppose. And 1 way to do that is, + +00:07:29.040 --> 00:07:33.160 +so I create a special folder within my + +00:07:33.160 --> 00:07:38.100 +org-roam storage. So it's a special folder + +00:07:38.240 --> 00:07:40.940 +outside of Henry Postories that got backed up + +00:07:40.940 --> 00:07:43.940 +to my hard drive with certain redundancy, + +00:07:44.080 --> 00:07:46.720 +but I don't really need like version control, + +00:07:46.720 --> 00:07:48.280 +full blown version control for that. + +00:07:48.280 --> 00:07:49.760 +I'm okay with just having a couple of + +00:07:49.760 --> 00:07:52.900 +backups, right? So this is the folder you see + +00:07:52.900 --> 00:07:55.320 +here. So PKB stands for personal knowledge + +00:07:55.320 --> 00:07:58.020 +base, and I have a folder project notes in + +00:07:58.020 --> 00:08:01.520 +there, right? So, and How does it work? + +00:08:01.680 --> 00:08:04.940 +So I have a folder per project in there, + +00:08:05.020 --> 00:08:07.900 +essentially. And here I can have all the + +00:08:07.900 --> 00:08:11.480 +stuff that kind of belongs to me and I do not + +00:08:11.480 --> 00:08:14.180 +publish it anywhere. And then, + +00:08:15.420 --> 00:08:20.280 +For example, a source code repository knows + +00:08:20.460 --> 00:08:23.240 +about that folder and a paper repository + +00:08:23.460 --> 00:08:25.120 +knows about that folder. + +00:08:25.120 --> 00:08:26.820 +And anything else that might leave in + +00:08:26.820 --> 00:08:28.820 +separate places all over my system can know + +00:08:28.820 --> 00:08:30.800 +about that folder. How do I achieve that? + +00:08:30.940 --> 00:08:33.539 +Well, essentially this is 1 of the use cases + +00:08:34.400 --> 00:08:35.940 +for the directory local variables, + +00:08:36.360 --> 00:08:39.100 +right? So for example, + +00:08:39.520 --> 00:08:41.539 +how does it work from the user perspective? + +00:08:41.580 --> 00:08:43.760 +So if I hit a special key, + +00:08:44.380 --> 00:08:46.900 +oh, sorry, if I hit a special key, + +00:08:48.280 --> 00:08:51.060 +that would be open project. + +00:08:51.680 --> 00:08:55.920 +And then for example, org mode file, + +00:08:55.920 --> 00:08:58.260 +right? So this is my personal notes about the + +00:08:58.260 --> 00:09:01.260 +maxconf, not specifically about this very + +00:09:01.260 --> 00:09:02.580 +talk, but I can have, you know, + +00:09:02.580 --> 00:09:04.580 +the house baked ideas here again, + +00:09:04.760 --> 00:09:06.680 +presentation tools and things like that. + +00:09:07.440 --> 00:09:09.860 +And how does that happen? + +00:09:09.940 --> 00:09:13.080 +If we try to like look at the code, + +00:09:13.080 --> 00:09:14.660 +the e-list magic here, + +00:09:15.040 --> 00:09:17.560 +what is happening is it's just a couple of + +00:09:17.560 --> 00:09:18.720 +lines of code, in fact, + +00:09:18.720 --> 00:09:21.100 +so let me just press Control, + +00:09:22.540 --> 00:09:28.140 +help key. And so the key I was pressing is + +00:09:28.140 --> 00:09:30.220 +open project or my file. + +00:09:30.480 --> 00:09:32.220 +And so what we see here, + +00:09:32.220 --> 00:09:34.760 +there is a single, so it's just a call to a + +00:09:34.760 --> 00:09:37.200 +find file function. So I opened that file and + +00:09:37.200 --> 00:09:40.580 +there is a special function that figures out + +00:09:40.580 --> 00:09:44.620 +what is the like umbrella project nose file + +00:09:44.620 --> 00:09:46.600 +and that's, again, that's very easy. + +00:09:47.380 --> 00:09:51.420 +So essentially if a variable describing this, + +00:09:51.820 --> 00:09:54.860 +the name for that project is defined, + +00:09:54.860 --> 00:09:57.440 +then I use that as my project folder name. + +00:09:57.440 --> 00:09:59.700 +If not, I take the project name from the + +00:10:00.480 --> 00:10:03.340 +project tile. Well, that's pretty much it. + +00:10:03.340 --> 00:10:08.800 +And how do I define this variable? + +00:10:09.280 --> 00:10:12.500 +Is essentially there is this magical file in + +00:10:12.500 --> 00:10:14.160 +a folder called dear locals, + +00:10:14.440 --> 00:10:17.380 +elist. And I just put it there. + +00:10:17.440 --> 00:10:20.380 +And then whenever I go into that folder or + +00:10:20.380 --> 00:10:22.300 +any of its children folders, + +00:10:22.300 --> 00:10:23.860 +I get this variable defined. + +00:10:24.840 --> 00:10:26.260 +And that's pretty much it. + +00:10:26.280 --> 00:10:28.880 +That's how it works for me. + +00:10:31.860 --> 00:10:34.620 +I guess 1 thing that I wanted to emphasize + +00:10:35.380 --> 00:10:37.360 +specifically about that is of course, + +00:10:37.940 --> 00:10:39.720 +it is a time tracking, + +00:10:39.720 --> 00:10:42.260 +right? So what is I find especially important + +00:10:42.260 --> 00:10:44.280 +when I work in something and I want to clock + +00:10:44.340 --> 00:10:47.620 +time, I usually do not want this information + +00:10:47.800 --> 00:10:50.340 +to be in a source code repository or in a + +00:10:50.340 --> 00:10:52.600 +paper repository because other people I work + +00:10:52.600 --> 00:10:54.840 +with will not be particularly happy about + +00:10:54.840 --> 00:10:57.540 +that, especially if most of them do not use + +00:10:57.540 --> 00:11:00.720 +Emacs and they'll see this long list of org + +00:11:00.720 --> 00:11:03.820 +clocked data and that doesn't look nice in a + +00:11:03.820 --> 00:11:07.540 +plain text format. So what I usually do if I + +00:11:07.540 --> 00:11:10.240 +want to clock in some time and then later + +00:11:10.240 --> 00:11:12.560 +analyze what I've been spending time on, + +00:11:12.560 --> 00:11:16.880 +so I go to my org mode file and I go to the, + +00:11:16.880 --> 00:11:21.820 +my current project to-dos and I clock in + +00:11:21.820 --> 00:11:23.940 +there. And that's how it works. + +00:11:23.940 --> 00:11:28.860 +So again, what comes in handy, + +00:11:28.860 --> 00:11:31.500 +if I hit Control O, I just go back to the + +00:11:31.500 --> 00:11:34.240 +file I jumped in into and that's I jumped + +00:11:34.240 --> 00:11:35.900 +from so that's also pretty handy. + +00:11:36.220 --> 00:11:38.800 +So again no no rocket science in there. + +00:11:40.380 --> 00:11:42.660 +So I create a directory local variable that + +00:11:42.660 --> 00:11:46.100 +helps me to figure out what umbrella project + +00:11:46.620 --> 00:11:49.720 +does this particular folder belongs to. + +00:11:49.940 --> 00:11:53.260 +And this way I make Emacs aware of, + +00:11:53.260 --> 00:11:54.480 +for example, facts like, + +00:11:54.480 --> 00:11:56.740 +so this source code belongs to that project. + +00:11:56.740 --> 00:11:59.080 +And this paper, this repository with a paper + +00:11:59.180 --> 00:12:00.640 +also belongs to that project. + +00:12:01.060 --> 00:12:04.040 +And I can have capture templates that would + +00:12:04.060 --> 00:12:07.580 +save my notes into the my private notes file + +00:12:07.800 --> 00:12:10.460 +and my to-dos and go to my private note files + +00:12:10.920 --> 00:12:12.260 +and so on and so forth. + +00:12:12.260 --> 00:12:15.520 +So I find it pretty simple but that really + +00:12:15.520 --> 00:12:19.540 +helps to reduce this context switching. + +00:12:19.600 --> 00:12:22.040 +And I don't believe it allows me to save + +00:12:22.040 --> 00:12:26.260 +time, but that probably helps me to stay + +00:12:26.260 --> 00:12:28.420 +focused. And this is what is really + +00:12:28.420 --> 00:12:31.400 +important, I believe. So thank you very much. + +00:12:31.400 --> 00:12:33.220 +And if you have any comments or suggestions + +00:12:33.320 --> 00:12:35.940 +to that, please do jump into the discussion. + +00:12:37.120 --> 00:12:38.900 +Yeah, after the talk, thank you. diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt new file mode 100644 index 00000000..0b52ec59 --- /dev/null +++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt @@ -0,0 +1,1202 @@ +WEBVTT + + +00:00:00.000 --> 00:00:01.839 +[Speaker 0]: You can hear us. Can you perhaps do it for + +00:00:01.839 --> 00:00:03.740 +me? Great. The little angels in the + +00:00:03.740 --> 00:00:05.140 +background have done it for me. + +00:00:05.240 --> 00:00:07.759 +So now finally that everything is ready. + +00:00:07.759 --> 00:00:09.099 +Hi James, how are you doing? + +00:00:13.780 --> 00:00:14.599 +Good morning. Hello. Well, + +00:00:14.599 --> 00:00:16.320 +thank you for your talk and sorry for the + +00:00:16.320 --> 00:00:19.240 +little hiccup at the middle we had to pull + +00:00:19.240 --> 00:00:20.900 +out a fire with the audio going out in the + +00:00:20.900 --> 00:00:22.580 +middle and sorry about this. + +00:00:23.140 --> 00:00:24.040 +[Speaker 1]: It's no trouble. + +00:00:25.240 --> 00:00:28.680 +[Speaker 0]: So James, you've obviously told us about your + +00:00:28.680 --> 00:00:30.220 +very fancy setup with the green screen and + +00:00:30.220 --> 00:00:32.840 +I'm sad to see that you haven't put out the + +00:00:32.840 --> 00:00:35.579 +green screen for your BBB session right now. + +00:00:35.579 --> 00:00:37.060 +Do you have it in the background just for + +00:00:37.060 --> 00:00:40.400 +you? Right, okay, it wasn't that far. + +00:00:40.600 --> 00:00:44.180 +Great. So I'm just going to ask, + +00:00:44.180 --> 00:00:47.440 +so this is the first live Q&A that we have + +00:00:47.440 --> 00:00:49.300 +for the session so things might be coming + +00:00:49.300 --> 00:00:51.600 +into place so pardon us if we take a little + +00:00:51.600 --> 00:00:54.340 +bit of time to put the questions on the + +00:00:54.340 --> 00:00:55.780 +screen and all of this. + +00:00:56.400 --> 00:00:57.940 +What I'm going to do, I'm just going to load + +00:00:57.940 --> 00:01:02.660 +up the pad. I would invite James to also open + +00:01:02.660 --> 00:01:04.200 +the pad on his hand. So yeah, + +00:01:04.200 --> 00:01:05.740 +I've got people talking in my ears and it's + +00:01:05.740 --> 00:01:07.740 +been a while since I've last had this. + +00:01:08.260 --> 00:01:11.979 +And okay, so opening the talks right now, + +00:01:12.100 --> 00:01:14.120 +opening the pad if I can find it. + +00:01:14.120 --> 00:01:19.020 +Open up the pad. Okay. + +00:01:19.200 --> 00:01:21.240 +So have you got a pad open on your end, + +00:01:21.240 --> 00:01:22.800 +James? So I can read the question. + +00:01:23.119 --> 00:01:26.740 +So, okay, great. Opening it on my end as + +00:01:26.740 --> 00:01:28.360 +well. What I'm going to do, + +00:01:28.360 --> 00:01:30.360 +folks, I see some of you have joined us. + +00:01:39.900 --> 00:01:42.500 +I'm going to start doing is first taking + +00:01:42.500 --> 00:01:44.220 +questions in the other part because it's a + +00:01:44.220 --> 00:01:46.200 +little faster to ask questions like this. + +00:01:46.520 --> 00:01:48.160 +And then as soon as we've finished, + +00:01:48.160 --> 00:01:49.920 +feel free to unmute yourself and ask your + +00:01:49.920 --> 00:01:54.180 +questions. All right so I've got some + +00:01:54.180 --> 00:01:57.660 +reactions about OBS being cool and yes both + +00:01:57.660 --> 00:01:59.340 +James and I will be able to tell you that + +00:01:59.340 --> 00:02:01.720 +it's very cool we do very fancy stuff like + +00:02:04.060 --> 00:02:05.640 +when I need to talk to production in the + +00:02:05.640 --> 00:02:07.540 +background and all the stuff obviously that + +00:02:07.540 --> 00:02:09.160 +James has been able to show you with a green + +00:02:09.160 --> 00:02:12.800 +screen. So I don't see a whole lot of + +00:02:12.800 --> 00:02:15.560 +questions so far. I see a lot of reactions on + +00:02:16.020 --> 00:02:17.760 +publishing lectures book and of a classic + +00:02:17.760 --> 00:02:19.700 +example is John Kitchens obviously. + +00:02:20.900 --> 00:02:22.180 +Pedagogy first developments. + +00:02:23.360 --> 00:02:24.660 +Macros are a cool idea. + +00:02:25.680 --> 00:02:28.820 +Okay questions. So how do you overlap + +00:02:28.820 --> 00:02:30.160 +yourself with a presentation. + +00:02:30.420 --> 00:02:34.680 +It's so cool. It's quite simple. + +00:02:36.420 --> 00:02:40.200 +[Speaker 1]: OBS provides filters for every... + +00:02:40.200 --> 00:02:42.440 +You can have a separate filter for each video + +00:02:42.440 --> 00:02:44.960 +feed and 1 of the filters that's available is + +00:02:44.960 --> 00:02:47.840 +chroma key. You just choose a color to make + +00:02:47.840 --> 00:02:52.020 +transparent and just make sure that the + +00:02:52.020 --> 00:02:56.140 +webcam is at the top of the composition. + +00:02:57.180 --> 00:03:00.900 +And the thing that surprised me the most was + +00:03:00.900 --> 00:03:05.420 +how quickly my brain was able to mirror + +00:03:05.420 --> 00:03:07.360 +everything and control my body from a + +00:03:07.360 --> 00:03:10.720 +separate point of view like the way weather + +00:03:10.720 --> 00:03:15.300 +broadcasts are done. It took seconds to be + +00:03:15.300 --> 00:03:16.980 +able to do that. Well, + +00:03:16.980 --> 00:03:20.200 +and now I have years of practice because that + +00:03:20.320 --> 00:03:22.740 +set up that you saw that I used to record + +00:03:22.740 --> 00:03:26.960 +this video. I used for years during the + +00:03:26.960 --> 00:03:32.180 +pandemic for 4 or 5 semesters to because my + +00:03:32.180 --> 00:03:33.760 +courses are all have 2, + +00:03:33.760 --> 00:03:36.440 +3, 400 students, except for the English + +00:03:36.440 --> 00:03:38.200 +class, which has, you know, + +00:03:38.200 --> 00:03:41.100 +30 students. And so during the pandemic, + +00:03:41.200 --> 00:03:44.040 +and even after lockdowns were no longer + +00:03:44.040 --> 00:03:46.160 +mandated, I taught online just because I + +00:03:46.160 --> 00:03:48.340 +didn't want to have so many students in the + +00:03:48.340 --> 00:03:49.500 +room at the same time. + +00:03:49.600 --> 00:03:53.680 +So I've yeah, I'm it. I have a lot of + +00:03:53.680 --> 00:03:54.840 +practice doing that. + +00:03:56.120 --> 00:03:58.300 +[Speaker 0]: But it pays off because it looks so natural, + +00:03:58.300 --> 00:04:00.140 +you know, it feels like it's the same thing + +00:04:00.140 --> 00:04:01.520 +with weathercasters, you know, + +00:04:01.520 --> 00:04:03.940 +it sounds very it looks very easy to do, + +00:04:03.940 --> 00:04:05.780 +but it also takes quite a bit of practice. + +00:04:07.020 --> 00:04:08.300 +1 of the things that you also need to + +00:04:08.300 --> 00:04:10.160 +remember if you're using a chroma key that + +00:04:10.160 --> 00:04:11.880 +James has explained is that you need to have + +00:04:11.880 --> 00:04:14.360 +very good lighting, basically for the color + +00:04:14.440 --> 00:04:16.320 +to pop out in the background and for your + +00:04:16.320 --> 00:04:18.360 +body to be easily highlightable. + +00:04:19.399 --> 00:04:21.240 +Okay, were you finished with this question? + +00:04:23.240 --> 00:04:24.980 +[Speaker 1]: Yeah, let's take another 1. + +00:04:25.640 --> 00:04:28.580 +[Speaker 0]: Sure. So how do you deal with video in Beam? + +00:04:28.700 --> 00:04:30.720 +I found it so hard to do that. + +00:04:30.720 --> 00:04:33.060 +PPT on the other end is easier to achieve. + +00:04:36.380 --> 00:04:41.480 +[Speaker 1]: Yeah, so remember that the slides get + +00:04:41.480 --> 00:04:46.960 +produced from Org Mode as PDFs. + +00:04:47.540 --> 00:04:50.080 +Well, and in fact, I even before when I was + +00:04:50.080 --> 00:04:52.540 +using other software to produce slides, + +00:04:52.580 --> 00:04:54.220 +I produced them as PDFs, + +00:04:54.720 --> 00:04:56.840 +precisely because I wanted to be able to mark + +00:04:56.840 --> 00:05:00.040 +them up on on the screen with the stylus. + +00:05:02.100 --> 00:05:05.960 +And so I don't do video in the slides. + +00:05:06.140 --> 00:05:09.140 +I use OBS to switch from static slides that I + +00:05:09.140 --> 00:05:12.540 +mark up with the stylus over to some kind of + +00:05:12.840 --> 00:05:15.360 +video viewer and then back. + +00:05:15.620 --> 00:05:17.820 +And again, that's how I can use Firefox. + +00:05:17.900 --> 00:05:21.880 +I use OBS to switch between Firefox and video + +00:05:22.360 --> 00:05:26.380 +and the Shornell plus plus program where I + +00:05:26.380 --> 00:05:31.060 +can mark up slides. So those functionalities + +00:05:31.160 --> 00:05:35.140 +are that's why I use different software and + +00:05:35.140 --> 00:05:37.440 +pull it all together with OBS so that I can + +00:05:37.440 --> 00:05:41.700 +have lots of functional flexibility. + +00:05:44.660 --> 00:05:47.700 +[Speaker 0]: Great. Do you ever use things like + +00:05:47.700 --> 00:05:50.960 +org-present and stay for the PowerPoint + +00:05:51.060 --> 00:05:53.200 +slides? I'm not sure exactly how to read this + +00:05:53.200 --> 00:05:54.860 +particular question but at least we can focus + +00:05:54.860 --> 00:05:56.840 +on org-present. Are you familiar with what it + +00:05:56.840 --> 00:05:57.340 +is? + +00:05:58.080 --> 00:06:01.920 +[Speaker 1]: I have played around with org-present and + +00:06:02.380 --> 00:06:07.640 +again I guess you could use org-present to + +00:06:07.640 --> 00:06:12.160 +show images and to show headings as slides. + +00:06:13.140 --> 00:06:17.680 +But again, because I'm it's such a crucial + +00:06:18.100 --> 00:06:21.520 +functionality to be able to mark them up with + +00:06:22.120 --> 00:06:25.760 +stylus. I didn't really show this very much, + +00:06:25.760 --> 00:06:27.780 +but I also highlight things the way I would + +00:06:27.780 --> 00:06:30.080 +highlight using a laser pointer on the + +00:06:30.080 --> 00:06:36.300 +screen. And again, I don't see Emacs being + +00:06:36.300 --> 00:06:38.500 +able to do that for another couple of + +00:06:38.560 --> 00:06:42.800 +generations. So really the only thing I use + +00:06:42.800 --> 00:06:47.360 +Emacs for during presentations is to narrow + +00:06:48.940 --> 00:06:52.100 +headings that we can focus on particular text + +00:06:52.600 --> 00:06:53.100 +excerpts. + +00:06:55.680 --> 00:06:59.200 +[Speaker 0]: Right. Yeah. A lot of our presentation at + +00:06:59.200 --> 00:07:00.420 +EmacsConf are usually, + +00:07:00.420 --> 00:07:02.260 +especially the Org Mode ones are done with + +00:07:02.260 --> 00:07:06.740 +OrgPresent. And. Sorry, + +00:07:06.740 --> 00:07:08.920 +I had again someone talk to me in a year. + +00:07:09.240 --> 00:07:11.440 +You know, the problem with EmacsConf is that + +00:07:11.680 --> 00:07:13.440 +every year, you know, you have to relearn a + +00:07:13.440 --> 00:07:16.780 +lot of skills. And by the time we finished by + +00:07:16.780 --> 00:07:19.900 +Sunday evening we are masters of it and then + +00:07:19.900 --> 00:07:21.820 +we forget everything by the time the next + +00:07:21.820 --> 00:07:24.280 +year comes around. What I was going to say is + +00:07:24.280 --> 00:07:26.780 +that org-present is often used by people + +00:07:27.440 --> 00:07:30.940 +inside Emacs conf presenting about org-mode + +00:07:31.100 --> 00:07:32.800 +but yeah whenever you need to do something a + +00:07:32.800 --> 00:07:34.340 +little more visual, it gets a little more + +00:07:34.340 --> 00:07:36.540 +complicated. Some people have tried to do + +00:07:36.540 --> 00:07:39.200 +fancy stuff with SVG, which is probably the + +00:07:39.200 --> 00:07:41.180 +path forward for this type of stuff. + +00:07:41.400 --> 00:07:43.220 +But yeah, if you need to draw, + +00:07:43.380 --> 00:07:44.480 +if you need to highlight, + +00:07:44.760 --> 00:07:46.360 +it is pretty complicated. + +00:07:46.820 --> 00:07:48.340 +Perhaps something that you might want to be + +00:07:48.340 --> 00:07:50.940 +interested, James, in checking out is PDF + +00:07:50.940 --> 00:07:56.040 +tools, which is a way to open up a PDF in + +00:07:56.040 --> 00:07:59.440 +Emacs. And this allows you to have basic PDF + +00:07:59.440 --> 00:08:01.560 +annotations, like putting a little bit of a + +00:08:01.560 --> 00:08:04.160 +Nikon on it. Perhaps you've already played + +00:08:04.160 --> 00:08:04.900 +with it. + +00:08:06.260 --> 00:08:09.980 +[Speaker 1]: I have used that. PDF tools is an incredible + +00:08:10.080 --> 00:08:14.560 +package but until it allows me to make a mark + +00:08:14.560 --> 00:08:18.280 +on the screen that shows up in a video + +00:08:18.280 --> 00:08:21.000 +compositor. It's not going to replace + +00:08:21.420 --> 00:08:21.920 +Shortenel. + +00:08:23.240 --> 00:08:24.600 +[Speaker 0]: Definitely. All right. + +00:08:24.600 --> 00:08:25.940 +Moving on to the next question. + +00:08:26.400 --> 00:08:28.900 +Is the triple-accolade syntax an Org Mode + +00:08:28.900 --> 00:08:31.360 +core feature that I missed so far or did you + +00:08:31.360 --> 00:08:33.120 +program that and thank you for the great + +00:08:33.120 --> 00:08:33.620 +talk. + +00:08:36.659 --> 00:08:38.360 +[Speaker 1]: Thank you very much. No, + +00:08:38.360 --> 00:08:43.220 +it's just part of all of the export backends. + +00:08:43.299 --> 00:08:45.060 +Actually, I think the way it works is it + +00:08:45.060 --> 00:08:47.040 +precedes all of the export backends. + +00:08:47.040 --> 00:08:50.280 +When you export, the first thing that happens + +00:08:50.280 --> 00:08:52.360 +is expansion of macros. + +00:08:52.720 --> 00:08:56.260 +And that's a built-in org mode feature. + +00:08:56.640 --> 00:08:59.690 +It's definitely beyond my Emacs Lisp powers + +00:08:59.690 --> 00:09:01.360 +to be able to have made something that + +00:09:01.360 --> 00:09:06.920 +powerful. That's right. + +00:09:07.020 --> 00:09:08.540 +I have come a long way. + +00:09:02.640 --> 00:09:11.500 +[Speaker 0]: For now. You know, we always, + +00:09:11.720 --> 00:09:13.380 +you know, most of the people who show up to + +00:09:13.380 --> 00:09:15.480 +Max Conf. Especially talking about stuff that + +00:09:15.480 --> 00:09:18.160 +has to do with presentations or what they do + +00:09:18.260 --> 00:09:19.160 +in academia. You know, + +00:09:19.160 --> 00:09:20.520 +they always say, oh, but, + +00:09:20.600 --> 00:09:22.589 +you know, I couldn't have done all this, + +00:09:22.589 --> 00:09:24.260 +you know, it's just far away. + +00:09:24.260 --> 00:09:26.320 +And then they come back 1 year or 2 years + +00:09:26.320 --> 00:09:27.980 +later and then, oh, I've made my entire + +00:09:27.980 --> 00:09:29.680 +library for presentation and stuff like this. + +00:09:29.680 --> 00:09:32.980 +So Be hopeful about what the future holds for + +00:09:32.980 --> 00:09:34.960 +you in terms of coming up with crazy new + +00:09:34.960 --> 00:09:36.720 +features for the entire ecosystem. + +00:09:37.740 --> 00:09:39.100 +[Speaker 1]: Well, let me tell you, + +00:09:39.560 --> 00:09:42.540 +since the pandemic, I have written, + +00:09:42.980 --> 00:09:44.760 +I wrote my first major mode. + +00:09:44.760 --> 00:09:47.000 +It's trivial, but it provides functionality + +00:09:47.220 --> 00:09:52.660 +that is very useful to me and it's it's going + +00:09:52.660 --> 00:09:54.380 +to sound like I'm just trying to butter + +00:09:54.380 --> 00:09:57.260 +everyone up but seeing a lot of the names in + +00:09:57.260 --> 00:10:00.820 +the IRC channel people who have taught me so + +00:10:00.820 --> 00:10:05.220 +much on their YouTube channels and in their + +00:10:05.220 --> 00:10:07.920 +blog posts and on Reddit and on Mastodon. + +00:10:09.600 --> 00:10:12.220 +Without many of the people who are here today + +00:10:12.620 --> 00:10:15.300 +watching my talk, it's very fun to have + +00:10:15.820 --> 00:10:18.160 +people who have helped me learn so much about + +00:10:18.160 --> 00:10:20.140 +Emacs. So thanks to all of you. + +00:10:21.580 --> 00:10:24.140 +[Speaker 0]: Well, and yeah, and now you're becoming part + +00:10:24.140 --> 00:10:27.380 +of this crew of people inspiring others to do + +00:10:27.380 --> 00:10:29.160 +very much the same. So thank you for joining + +00:10:31.460 --> 00:10:32.520 +[Speaker 1]: Thank you very much. + +00:10:29.160 --> 00:10:35.020 +[Speaker 0]: the crew. Great. Moving on to the 2 last + +00:10:35.020 --> 00:10:36.660 +questions and then we'll open up the mic to + +00:10:36.660 --> 00:10:38.340 +other people on Big Blue Button. + +00:10:39.160 --> 00:10:40.900 +What kind of comparative feedback are + +00:10:40.900 --> 00:10:42.740 +students giving you regarding your approach? + +00:10:44.960 --> 00:10:48.340 +[Speaker 1]: Oh, my gosh. Students were ready to during + +00:10:48.340 --> 00:10:53.040 +the pandemic especially when most of the + +00:10:53.040 --> 00:10:55.880 +courses were just being taught over zoom by + +00:10:55.880 --> 00:10:57.340 +people sharing their screen. + +00:10:57.340 --> 00:10:58.660 +[Speaker 0]: Just a second. Sorry. Sorry for the + +00:10:58.660 --> 00:10:59.800 +interruption. Very rude interruption. + +00:10:59.800 --> 00:11:01.220 +We've got the intro for the next talk playing + +00:11:01.220 --> 00:11:02.520 +and I'm not sure what's going on. + +00:11:02.520 --> 00:11:03.580 +Give me just a second. + +00:11:04.440 --> 00:11:04.940 +Sasha. + +00:11:05.060 --> 00:11:05.560 +[Speaker 1]: Okay. + +00:11:19.320 --> 00:11:24.290 +Yeah, I think it's started. + +00:11:26.716 --> 00:11:31.740 +Okay so yeah I think it's not a + +00:11:34.860 --> 00:11:37.760 +[Speaker 0]: sure 1 I got the times wrong apparently + +00:11:37.760 --> 00:11:40.240 +because of the little delay we had getting + +00:11:40.240 --> 00:11:43.740 +the audio fixed up. The good news is that + +00:11:43.740 --> 00:11:45.880 +we're still recording the talk right now and + +00:11:45.880 --> 00:11:47.140 +we still have James around. + +00:11:47.180 --> 00:11:49.740 +Obviously James you're no longer on being + +00:11:49.740 --> 00:11:53.040 +broadcast on General but if you want to keep + +00:11:53.040 --> 00:11:55.800 +answering questions or if you want to anyone + +00:11:55.800 --> 00:11:57.340 +in the room right now wants to ask you + +00:11:57.340 --> 00:11:58.940 +questions feel free to do so. + +00:11:59.440 --> 00:12:01.060 +I'm going to need to hop off because I need + +00:12:01.060 --> 00:12:03.020 +to get other things ready for the next talks + +00:12:04.280 --> 00:12:06.780 +[Speaker 1]: But James, thank you so much. + +00:12:03.080 --> 00:12:10.020 +[Speaker 0]: sadly. Right and so sorry I'm a little tense + +00:12:10.020 --> 00:12:12.660 +obviously because I was not expecting this to + +00:12:12.660 --> 00:12:15.960 +happen and that led to a very abrupt end to + +00:12:15.960 --> 00:12:18.480 +this discussion but people afterwards on + +00:12:18.480 --> 00:12:21.980 +emacsmo.org slash 2023 slash talks will be + +00:12:21.980 --> 00:12:24.020 +able to find all the content here. + +00:12:24.020 --> 00:12:25.420 +So I'll have to leave now. + +00:12:25.840 --> 00:12:28.020 +Thank you so much James for doing the + +00:12:28.020 --> 00:12:30.060 +difficult task of opening up EmacsConf and + +00:12:30.060 --> 00:12:31.980 +I'll probably see you later. + +00:12:32.780 --> 00:12:35.260 +[Speaker 1]: Thank you, Leo. Bye bye. + +00:12:52.020 --> 00:12:57.440 +[Speaker 2]: On your journal program. + +00:12:58.360 --> 00:13:03.500 +Yes. You are using the tablet as a monitor, + +00:13:03.520 --> 00:13:05.940 +right? Touch screen monitor with that? + +00:13:06.480 --> 00:13:08.800 +[Speaker 1]: That's exactly right. So it's a tablet so you + +00:13:08.800 --> 00:13:11.980 +know I can. It has a touch screen and so. + +00:13:13.080 --> 00:13:15.580 +So basically the functionality that that + +00:13:15.580 --> 00:13:20.580 +program provides is to be able to just mark + +00:13:20.580 --> 00:13:22.160 +up PDFs with a stylus, + +00:13:23.360 --> 00:13:25.280 +you know, in the way that you would use any + +00:13:25.280 --> 00:13:30.600 +other tablet. And to be able to take that + +00:13:30.600 --> 00:13:33.420 +video signal and put it into another machine. + +00:13:33.840 --> 00:13:36.100 +That was the that was the key. + +00:13:36.100 --> 00:13:37.340 +That's the killer app. + +00:13:39.340 --> 00:13:41.880 +[Speaker 2]: I've thought about grabbing 1 for the purpose + +00:13:41.940 --> 00:13:45.460 +of like changing my laptop into a tablet to + +00:13:45.460 --> 00:13:49.640 +read manga, browse the web and kind of + +00:13:49.640 --> 00:13:51.840 +curious if it works well like as a wireless + +00:13:52.300 --> 00:13:57.440 +monitor with a tablet or how well it like you + +00:13:57.440 --> 00:14:01.920 +can use Emacs with it in a tablet mode or + +00:14:02.080 --> 00:14:03.000 +were you just + +00:14:03.820 --> 00:14:10.800 +[Speaker 1]: or you just use the tablet that I use is this + +00:14:10.800 --> 00:14:14.340 +is it it's just a Microsoft Surface and so it + +00:14:14.340 --> 00:14:17.780 +comes with a keyboard so you can take the + +00:14:17.780 --> 00:14:20.940 +keyboard off. Yeah, but I use it. + +00:14:20.940 --> 00:14:23.240 +I use it with the keyboard as well. + +00:14:24.560 --> 00:14:25.660 +And I just. + +00:14:30.060 --> 00:14:31.420 +[Speaker 2]: You're cutting off right now + +00:14:53.880 --> 00:15:27.671 +[Speaker 1]: Audio Your audio is cutting off right now. + +00:15:32.680 --> 00:15:34.580 +I bumped the mute button on the mic. + +00:15:36.820 --> 00:15:38.300 +Yeah. So again, this is, + +00:15:38.500 --> 00:15:41.540 +[Speaker 2]: is the 16 mute buttons you use. + +00:15:38.300 --> 00:15:45.660 +[Speaker 1]: this It's just the surface pro 3 that I got + +00:15:45.660 --> 00:15:48.920 +used and it runs Emacs. + +00:15:49.280 --> 00:15:54.300 +I mean it runs. You know Linux really well. + +00:15:54.940 --> 00:15:59.720 +And the trouble is that the hard drive you + +00:15:59.720 --> 00:16:02.920 +know the SSE drive is small and the RAM is + +00:16:02.920 --> 00:16:06.920 +small, but it works for the purposes. + +00:16:07.580 --> 00:16:10.080 +Basically, if I had a couple thousand + +00:16:10.080 --> 00:16:13.860 +dollars, I could probably buy a touchscreen + +00:16:14.280 --> 00:16:17.680 +machine where I could run everything on it + +00:16:17.680 --> 00:16:21.360 +and do the streaming and do the video capture + +00:16:21.380 --> 00:16:25.460 +and do the PDF markup. + +00:16:26.020 --> 00:16:28.480 +But since both of these are so, + +00:16:28.860 --> 00:16:31.980 +the hardware that I use is so old and cheap + +00:16:31.980 --> 00:16:33.800 +and weak I have to split it across 2 + +00:16:33.800 --> 00:16:34.300 +machines. + +00:16:35.020 --> 00:16:37.660 +[Speaker 2]: There's also a beauty in making the stuff + +00:16:37.660 --> 00:16:40.080 +having specific purposes for specific things + +00:16:40.080 --> 00:16:46.020 +where it's just not. Yeah it's like I don't + +00:16:46.020 --> 00:16:49.840 +want a smart TV that plays Netflix I want a + +00:16:50.140 --> 00:16:53.860 +smart TV that has all the smarts that I turn + +00:16:53.860 --> 00:16:58.780 +my smart TV into a TV monitor I don't want to + +00:16:58.780 --> 00:16:59.280 +yeah + +00:17:02.200 --> 00:17:08.539 +[Speaker 1]: I totally feel that ethic I totally I totally + +00:17:08.659 --> 00:17:11.640 +feel that ethic. Oh, on + +00:17:11.760 --> 00:17:15.300 +[Speaker 2]: the some other things like if you want you to + +00:17:15.300 --> 00:17:17.300 +do highlighting in an org mode document. + +00:17:17.300 --> 00:17:19.060 +You can use org web tools. + +00:17:19.060 --> 00:17:20.020 +I wrote this in the notes, + +00:17:20.020 --> 00:17:21.940 +but you can use org web tools to download a + +00:17:21.940 --> 00:17:25.400 +web page and then you can use org remark to + +00:17:25.400 --> 00:17:28.860 +start highlighting in the org mode web page + +00:17:28.860 --> 00:17:30.860 +and then because an org mode document now you + +00:17:30.860 --> 00:17:32.180 +can just edit it directly. + +00:17:35.600 --> 00:17:38.240 +If you want other people to join in on an + +00:17:38.240 --> 00:17:40.680 +Emacs session you could use a package like + +00:17:40.680 --> 00:17:45.040 +what's it called? CRDT.EL + +00:17:47.020 --> 00:17:50.160 +that will allow 2 people with 2 different + +00:17:50.160 --> 00:17:52.820 +Emacs configurations to edit the same buffer. + +00:17:54.140 --> 00:17:58.980 +And you have a host that can host a buffer + +00:17:58.980 --> 00:18:05.960 +too. It works with, and they have 1 optional + +00:18:06.000 --> 00:18:08.180 +extension for org mode that will synchronize + +00:18:08.680 --> 00:18:10.600 +the folding of the org drawers. + +00:18:12.320 --> 00:18:14.720 +[Speaker 1]: Interesting. I will look into that. + +00:18:15.060 --> 00:18:15.560 +Like + +00:18:19.660 --> 00:18:22.720 +[Speaker 2]: having I don't like if you want students like + +00:18:22.720 --> 00:18:25.740 +you have each highlight line mode these are + +00:18:25.740 --> 00:18:27.620 +just some ideas like you can have like + +00:18:27.620 --> 00:18:30.060 +highlight line mode so people can easily see + +00:18:30.060 --> 00:18:35.040 +which line you're on cursor tracking and then + +00:18:35.040 --> 00:18:38.680 +you can have other people join in students or + +00:18:43.180 --> 00:18:45.300 +[Speaker 1]: yeah that's just a possible idea. + +00:18:45.300 --> 00:18:49.680 +Is there anyone else in the in the big blue + +00:18:49.680 --> 00:18:52.180 +button room who has a question? + +00:19:01.360 --> 00:19:03.280 +All right, I'm going to go over to the pad + +00:19:03.280 --> 00:19:05.280 +and see if there are any pending questions I + +00:19:05.280 --> 00:19:07.560 +can address. Thanks, Plasma Strike. + +00:19:27.500 --> 00:19:33.140 +[Speaker 3]: Yep. Which could be PDF, + +00:19:33.340 --> 00:19:36.680 +could be Markdown, could be OpenOffice, + +00:19:38.560 --> 00:19:40.100 +could be a notebook format. + +00:19:40.960 --> 00:19:43.340 +This methodology was conceived by Donald + +00:19:43.340 --> 00:19:51.980 +Knuth in 1984. The main purpose of literal + +00:19:51.980 --> 00:19:54.700 +programming is not only to make code or + +00:19:54.700 --> 00:19:57.220 +documentation or output more manageable, + +00:19:57.800 --> 00:20:01.240 +but to allow humans to create a data story to + +00:20:01.240 --> 00:20:03.420 +be used from a single source. + +00:20:04.540 --> 00:20:06.300 +What you see on the slide on the left-hand + +00:20:06.300 --> 00:20:09.400 +side is the story and code inside an org-mod + +00:20:09.400 --> 00:20:14.440 +file. The file starts with some + +00:20:14.440 --> 00:20:17.720 +documentation, then you write back down this + +00:20:18.420 --> 00:20:22.060 +code, and at the bottom you see the output + +00:20:22.060 --> 00:20:26.540 +file, which is not shown in the slide itself. + +00:20:26.800 --> 00:20:28.440 +In the middle you have the source code, + +00:20:28.440 --> 00:20:33.980 +which is the result of tangling or opening a + +00:20:33.980 --> 00:20:36.880 +buffer inside offload. + +00:20:37.660 --> 00:20:42.380 +On the very right hand side we have a PDF, + +00:20:42.580 --> 00:20:47.740 +actually this HTML, very same file that you + +00:20:47.740 --> 00:20:48.960 +see in memory language. + +00:20:49.600 --> 00:20:53.080 +So the humans look at some of this code and + +00:20:53.080 --> 00:20:55.400 +the machines look at other parts of the code. + +00:20:56.260 --> 00:20:58.320 +I actually did all my programming in the + +00:20:58.320 --> 00:21:00.260 +literary world even in the early 1990s, + +00:21:00.920 --> 00:21:03.040 +not using Org Mode, which didn't exist yet, + +00:21:03.040 --> 00:21:06.160 +but using Norman Ramsey's Norep preprocessor. + +00:21:07.240 --> 00:21:09.720 +They still use it inside the Org-Mode today. + +00:21:10.400 --> 00:21:11.920 +This preprocessor, Norep, + +00:21:11.920 --> 00:21:14.240 +allows you to tangle code from within an + +00:21:14.240 --> 00:21:16.360 +Org-Mode file that is self-standing file, + +00:21:16.360 --> 00:21:18.820 +much like Org-mode's edit functions, + +00:21:19.540 --> 00:21:21.900 +which export code blocks into buffers in + +00:21:21.900 --> 00:21:23.540 +whatever language the code blocks. + +00:21:25.940 --> 00:21:28.760 +In data science, these interactive notebooks, + +00:21:29.640 --> 00:21:32.776 +in 1 of the interpreted languages like Julia, + +00:21:32.776 --> 00:21:34.680 +Python, or R dominating? + +00:21:34.680 --> 00:21:37.420 +The basic technology is that of Jupyter + +00:21:37.420 --> 00:21:39.840 +notebooks, which take their name from Julia, + +00:21:39.860 --> 00:21:43.040 +Python, and R. And these notebooks use a + +00:21:43.040 --> 00:21:44.880 +spruce-dark shell, for example, + +00:21:44.920 --> 00:21:49.240 +IPython, and an option to add SQL cells. + +00:21:50.460 --> 00:21:53.340 +All good inside Emacs has a large number of + +00:21:53.340 --> 00:21:56.800 +advantages. Some of them are listed here over + +00:21:56.800 --> 00:21:59.180 +these notebooks. 2 of these stand out + +00:21:59.180 --> 00:22:02.860 +particularly. Different languages can be + +00:22:02.860 --> 00:22:05.640 +mixed as shown in the image. + +00:22:06.460 --> 00:22:07.700 +While in Jupyter notebooks, + +00:22:07.920 --> 00:22:10.900 +a notebook is limited to running a kernel in + +00:22:10.900 --> 00:22:14.440 +1 language only. The content of the notebook, + +00:22:14.440 --> 00:22:16.980 +its document code or output part can be + +00:22:16.980 --> 00:22:19.020 +exported in a variety of forms. diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt new file mode 100644 index 00000000..e626f55f --- /dev/null +++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt @@ -0,0 +1,47 @@ +WEBVTT + + +00:00:00.000 --> 00:01:12.439 +Introduction + +00:01:12.440 --> 00:01:47.819 +Presenting + +00:01:47.820 --> 00:04:46.609 +Hardware + +00:04:46.610 --> 00:05:30.518 +Example setup + +00:05:30.520 --> 00:07:05.949 +Presentation software: flexibility in function + +00:07:05.950 --> 00:07:59.849 +Live demonstration + +00:07:59.850 --> 00:10:26.059 +OBS + +00:10:26.060 --> 00:10:51.399 +Animation + +00:10:55.790 --> 00:11:42.259 +Emacs + +00:11:42.260 --> 00:13:22.679 +Making slides and handouts with Org Mode + +00:13:22.680 --> 00:16:17.789 +Pedagogy first + +00:16:17.790 --> 00:19:38.249 +org-teach + +00:19:38.330 --> 00:19:47.369 +Blank slides + +00:19:50.050 --> 00:20:19.269 +Animations + +00:20:19.270 --> 00:20:53.169 +Conclusion diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt new file mode 100644 index 00000000..f03826a8 --- /dev/null +++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt @@ -0,0 +1,1557 @@ +WEBVTT captioned by James Howell, checked by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:01.939 +Hello everyone. I'm James Howell. + +00:00:01.940 --> 00:00:03.539 +I teach biochemistry and + +00:00:03.540 --> 00:00:07.219 +molecular biology at Penn State University. + +00:00:07.220 --> 00:00:08.879 +I'm going to talk today + +00:00:08.880 --> 00:00:11.479 +about using Emacs to make all of + +00:00:11.480 --> 00:00:13.619 +the materials for presenting + +00:00:13.620 --> 00:00:15.679 +course meetings in my courses. + +00:00:15.680 --> 00:00:18.819 +Everything that you're going to see today is + +00:00:18.820 --> 00:00:20.439 +what I've made using + +00:00:20.440 --> 00:00:23.519 +the methods that I'm going to describe. + +00:00:26.200 --> 00:00:29.719 +The main point is that you can take + +00:00:29.720 --> 00:00:32.079 +an Org document and + +00:00:32.080 --> 00:00:34.469 +with a single Emacs document, + +00:00:34.470 --> 00:00:39.079 +make both a pretty text document + +00:00:39.080 --> 00:00:40.379 +that a student can have + +00:00:40.380 --> 00:00:42.039 +on the desk and take notes on. + +00:00:42.040 --> 00:00:44.439 +And also, I hope, + +00:00:44.440 --> 00:00:49.039 +fairly useful and attractive slides + +00:00:49.040 --> 00:00:51.339 +like the ones that I'm presenting right now. + +00:00:51.340 --> 00:00:52.859 +Both of these + +00:00:52.860 --> 00:00:56.659 +from a single source document. + +00:00:56.660 --> 00:00:59.259 +Okay. If you'd like + +00:00:59.260 --> 00:01:00.919 +to see the handout that goes along with this, + +00:01:00.920 --> 00:01:02.799 +you can download it + +00:01:02.800 --> 00:01:04.059 +at the [Sourcehut] repository where + +00:01:04.060 --> 00:01:05.959 +I've put— everything's here. + +00:01:05.960 --> 00:01:07.819 +So if you'd like to go look at it, + +00:01:07.820 --> 00:01:09.939 +you can follow with the handout. + +00:01:09.940 --> 00:01:11.239 +So I promised to talk about + +00:01:11.240 --> 00:01:12.439 +both authoring and presenting. + +NOTE Presenting + +00:01:12.440 --> 00:01:14.619 +And first I'm going to talk about presenting. + +00:01:14.620 --> 00:01:16.599 +I'm not the only one who does this. + +00:01:16.600 --> 00:01:19.299 +You might have seen System Crafters [David Wilson] + +00:01:19.300 --> 00:01:20.639 +or Prot's [Protesilaos Stavrou's] channel or + +00:01:20.640 --> 00:01:23.059 +Mike Zemansky's channel on Youtube. + +00:01:23.060 --> 00:01:26.679 +(Prot actually is going to be presenting tomorrow.) + +00:01:26.680 --> 00:01:28.419 +Maybe you've seen this + +00:01:28.420 --> 00:01:30.179 +chemical engineer at Carnegie Mellon, + +00:01:30.180 --> 00:01:32.159 +John Kitchin or Eric Fraga + +00:01:32.160 --> 00:01:34.139 +or Olivier Berger all have made + +00:01:34.140 --> 00:01:36.519 +blog posts about using Org mode + +00:01:36.520 --> 00:01:39.419 +to produce course materials. + +00:01:39.420 --> 00:01:41.459 +This pair Ro and Namkoon + +00:01:41.460 --> 00:01:43.739 +actually published a peer reviewed paper. + +00:01:43.740 --> 00:01:45.739 +There's prior art here + +00:01:45.740 --> 00:01:47.819 +that I'd like to acknowledge. + +NOTE Hardware + +00:01:47.820 --> 00:01:50.839 +Let me talk about my practices: + +00:01:50.840 --> 00:01:51.518 +First, the hardware. + +00:01:51.520 --> 00:01:55.339 +This is the hardware that I'm using to + +00:01:55.340 --> 00:01:59.738 +record this recording at the very moment, + +00:01:59.740 --> 00:02:01.259 +but also I carry these + +00:02:01.260 --> 00:02:05.059 +into every course meeting. + +00:02:05.060 --> 00:02:07.119 +I've done this for quite a while, + +00:02:07.120 --> 00:02:09.618 +this entire semester, + +00:02:09.620 --> 00:02:11.438 +and a few previous semesters + +00:02:11.440 --> 00:02:14.239 +where everything fits in a backpack. + +00:02:14.240 --> 00:02:18.459 +I do every meeting with this tablet— + +00:02:18.460 --> 00:02:20.839 +it's a Microsoft Surface that I put + +00:02:20.840 --> 00:02:26.599 +a Linux distribution on—and this laptop. + +00:02:26.600 --> 00:02:29.599 +I've got a bag full of + +00:02:29.600 --> 00:02:34.078 +dongles and connectors and so forth. + +00:02:34.080 --> 00:02:35.339 +It all fits in a backpack. + +00:02:35.340 --> 00:02:36.259 +This is very mobile. + +00:02:36.260 --> 00:02:38.179 +I can set it up and tear it down + +00:02:38.180 --> 00:02:39.699 +before and after every class + +00:02:39.700 --> 00:02:41.219 +with just a couple minutes. + +00:02:41.220 --> 00:02:42.739 +There's the laptop and the + +00:02:42.740 --> 00:02:45.018 +tablet with a stylus. + +00:02:45.020 --> 00:02:46.579 +Where's my stylus? + +00:02:46.580 --> 00:02:51.498 +So that I can draw... + +00:02:51.500 --> 00:02:52.519 +... which is very useful. + +00:02:52.520 --> 00:02:55.858 +Obviously, I need a camera. + +00:02:55.860 --> 00:02:57.459 +Today, I'm using a desk mic, + +00:02:57.460 --> 00:02:59.099 +but when I'm remote, + +00:02:59.100 --> 00:03:01.738 +I use a lapel mic. + +00:03:01.740 --> 00:03:02.899 +and a video converter, + +00:03:02.900 --> 00:03:04.379 +and I'll show you why that's important. + +00:03:04.380 --> 00:03:09.018 +And then all of the ancillary equipment. + +00:03:09.020 --> 00:03:11.139 +One thing that's nice about using + +00:03:11.140 --> 00:03:14.019 +a completely free software stack is + +00:03:14.020 --> 00:03:15.219 +that it tends to run + +00:03:15.220 --> 00:03:18.318 +on underpowered hardware, + +00:03:18.320 --> 00:03:20.539 +and none of the software cost anything. + +00:03:20.540 --> 00:03:23.219 +I could have spent much less than this + +00:03:23.220 --> 00:03:25.459 +on a used computer and + +00:03:25.460 --> 00:03:28.199 +a used tablet. And everything else, + +00:03:28.200 --> 00:03:30.299 +these are high estimates. + +00:03:30.300 --> 00:03:31.679 +I spent way less than + +00:03:31.680 --> 00:03:34.019 +$1,000 for all of this equipment. + +00:03:34.020 --> 00:03:35.619 +And it's my equipment, + +00:03:35.620 --> 00:03:37.259 +so I have hardware + +00:03:37.260 --> 00:03:38.959 +and software control over it, + +00:03:38.960 --> 00:03:41.099 +Which is nice. + +00:03:41.100 --> 00:03:43.239 +If you have an attitude of upcycling and building, + +00:03:43.240 --> 00:03:45.189 +and [if] this is a hobby anyway, + +00:03:45.190 --> 00:03:47.129 +this is an easy way— + +00:03:47.130 --> 00:03:48.649 +what I'm saying is— + +00:03:48.650 --> 00:03:51.369 +the entry into using these things, + +00:03:51.370 --> 00:03:58.018 +there's certainly a very low cost barrier. + +00:03:58.020 --> 00:04:01.429 +Because the hardware is so weak, + +00:04:01.430 --> 00:04:05.249 +I have the tablet for doing tablet stuff, + +00:04:05.250 --> 00:04:06.629 +and then I use the laptop to + +00:04:06.630 --> 00:04:08.909 +do all of the streaming and recording. + +00:04:08.910 --> 00:04:11.609 +I take the video output + +00:04:11.610 --> 00:04:13.829 +of the tablet and convert it to + +00:04:13.830 --> 00:04:19.898 +USB input into the laptop. + +00:04:19.900 --> 00:04:21.929 +Just to give you a diagram here, + +00:04:21.930 --> 00:04:23.709 +there's a laptop and there's a tablet. + +00:04:23.710 --> 00:04:25.929 +The tablet has a stylus. + +00:04:25.930 --> 00:04:29.449 +They both run GNU/Linux distributions. + +00:04:29.450 --> 00:04:30.949 +You've got a webcam that + +00:04:30.950 --> 00:04:32.129 +goes into the laptop. + +00:04:32.130 --> 00:04:33.618 +You've got video output + +00:04:33.620 --> 00:04:37.889 +from the tablet that goes into the laptop. + +00:04:37.890 --> 00:04:39.349 +There's a microphone that + +00:04:39.350 --> 00:04:40.469 +goes into the laptop, + +00:04:40.470 --> 00:04:43.209 +and then audio and video come out of + +00:04:43.210 --> 00:04:44.409 +the laptop and go into + +00:04:44.410 --> 00:04:46.609 +some AV system or another. + +NOTE Example setup + +00:04:46.610 --> 00:04:49.069 +Okay. This was Wednesday, + +00:04:49.070 --> 00:04:51.069 +teaching microbiology. + +00:04:51.070 --> 00:04:53.229 +There's the tablet, there's the laptop. + +00:04:53.230 --> 00:04:55.369 +There's the external screen + +00:04:55.370 --> 00:04:57.209 +in the podium here you can + +00:04:57.210 --> 00:04:59.549 +plug into the AV system. + +00:05:00.470 --> 00:05:04.209 +There it is. From where I stand, + +00:05:04.210 --> 00:05:06.009 +this is what the screen looks like. + +00:05:06.010 --> 00:05:08.224 +This is what students are seeing, + +00:05:08.225 --> 00:05:09.459 +on the live stream + +00:05:09.460 --> 00:05:10.779 +and later on the recording. + +00:05:10.780 --> 00:05:11.719 +And students in the room + +00:05:11.720 --> 00:05:12.639 +can see this as well. + +00:05:12.640 --> 00:05:15.099 +So you notice this is kind of meta, + +00:05:15.100 --> 00:05:17.139 +but the camera and + +00:05:17.140 --> 00:05:18.759 +the contents of the screen are + +00:05:18.760 --> 00:05:20.499 +there when I wander around, + +00:05:20.500 --> 00:05:22.219 +and when I stand in front of the screen, + +00:05:22.220 --> 00:05:23.939 +the students who aren't in the room can + +00:05:23.940 --> 00:05:27.398 +still see what I'm pointing to on the screen. + +00:05:27.400 --> 00:05:30.518 +Nobody gets left out. + +NOTE Presentation software: flexibility in function + +00:05:30.520 --> 00:05:31.479 +Let's talk about + +00:05:31.480 --> 00:05:33.579 +the software that I use. + +00:05:33.900 --> 00:05:35.979 +There's a lot of different things that + +00:05:35.980 --> 00:05:37.639 +I want to be able to show. + +00:05:37.640 --> 00:05:39.299 +And so I need a few different + +00:05:39.300 --> 00:05:42.399 +software packages— besides Emacs. + +00:05:42.400 --> 00:05:45.079 +For drawing on the tablet, I use + +00:05:45.080 --> 00:05:48.359 +(I don't know quite how this is pronounced: + +00:05:48.360 --> 00:05:51.139 +I think it's) Xournal++ + +00:05:51.200 --> 00:05:54.039 +I use the web quite a bit, + +00:05:54.040 --> 00:05:55.719 +especially if I want to just + +00:05:55.720 --> 00:05:57.759 +spontaneously look something up. + +00:05:57.760 --> 00:05:59.679 +Often I use video, + +00:05:59.680 --> 00:06:01.499 +especially molecular animations. + +00:06:01.500 --> 00:06:04.699 +And that's incredibly powerful. + +00:06:04.700 --> 00:06:06.939 +And then now and again, I want to look at text. + +00:06:06.940 --> 00:06:08.059 +Especially in + +00:06:08.060 --> 00:06:09.799 +the English course that I teach, + +00:06:09.800 --> 00:06:11.839 +there's quite a bit of text. + +00:06:11.840 --> 00:06:14.239 +I'll use Emacs for that. + +00:06:15.000 --> 00:06:18.439 +The video compositor, the thing that + +00:06:18.440 --> 00:06:22.479 +puts this video and me in the green screen. + +00:06:22.480 --> 00:06:25.419 +and all of this stuff together, is called + +00:06:25.420 --> 00:06:34.818 +OBS Studio—and that also does recording. + +00:06:34.820 --> 00:06:37.509 +It's ALMOST a completely free software stack. + +00:06:37.510 --> 00:06:38.749 +I use Zoom to do + +00:06:38.750 --> 00:06:39.929 +the streaming and video + +00:06:39.930 --> 00:06:41.029 +conferencing because all of + +00:06:41.030 --> 00:06:42.409 +the students are forced to use it for + +00:06:42.410 --> 00:06:44.218 +their other classes and + +00:06:44.220 --> 00:06:45.409 +I've gone along with it. + +00:06:45.410 --> 00:06:46.669 +But a good alternative is + +00:06:46.670 --> 00:06:48.858 +Jitsi Meet. There are others. + +00:06:48.860 --> 00:06:50.729 +Okay. Again, here's + +00:06:50.730 --> 00:06:53.789 +the hardware setup. On the tablet, + +00:06:53.790 --> 00:06:56.589 +I'm running Xournal++. On the laptop, + +00:06:56.590 --> 00:07:00.229 +I've got Firefox and VLC, and Emacs. + +00:07:00.230 --> 00:07:02.889 +OBS is compositing that together. + +00:07:02.890 --> 00:07:05.949 +And I use Zoom, but you could use Jitsi. + +NOTE Live demonstration + +00:07:05.950 --> 00:07:07.929 +All right, let's + +00:07:07.930 --> 00:07:09.689 +demonstrate this live. Here we go. + +00:07:09.690 --> 00:07:13.609 +Here goes, nothing. The drawing program + +00:07:13.610 --> 00:07:15.049 +is really good because I can draw + +00:07:15.050 --> 00:07:17.529 +with the stylus on a tablet. + +00:07:17.970 --> 00:07:20.089 +It's a remarkable thing— + +00:07:20.090 --> 00:07:22.409 +I teach in these big lecture halls, + +00:07:22.410 --> 00:07:24.409 +and I guess they want them to be fancy? + +00:07:24.410 --> 00:07:25.969 +And so they don't have blackboards and + +00:07:25.970 --> 00:07:29.009 +whiteboards! If I want to be able to draw, + +00:07:29.010 --> 00:07:32.169 +if I want to do anything approaching analog, + +00:07:32.170 --> 00:07:34.769 +it has to be with this software! + +00:07:35.290 --> 00:07:37.809 +In this presentation, I + +00:07:37.810 --> 00:07:39.489 +don't have very many diagrams, + +00:07:39.490 --> 00:07:41.509 +but in my courses, most of + +00:07:41.510 --> 00:07:44.249 +the slides are complicated diagrams. + +00:07:44.250 --> 00:07:45.809 +Being able to annotate them + +00:07:45.810 --> 00:07:47.549 +is really important. + +00:07:47.550 --> 00:07:50.629 +This is why I don't use Emacs for + +00:07:50.630 --> 00:07:54.529 +presenting these kinds of documents, + +00:07:54.530 --> 00:07:55.809 +because I want to be able + +00:07:55.810 --> 00:07:57.449 +to mark them up visually. + +00:07:57.450 --> 00:07:59.849 +I can show you what that looks like. + +NOTE OBS + +00:07:59.850 --> 00:08:02.829 +By the way, here's how OBS works: + +00:08:02.830 --> 00:08:04.469 +I can go from different "scenes" + +00:08:04.470 --> 00:08:06.069 +So I can just do just me, + +00:08:06.070 --> 00:08:08.129 +or I can show you the slides, + +00:08:08.130 --> 00:08:10.789 +or I can show you what I see on the tablet. + +00:08:10.790 --> 00:08:12.269 +On the tablet, I can go + +00:08:12.270 --> 00:08:14.229 +through all of the— notice here, + +00:08:14.230 --> 00:08:16.129 +I'm scrolling through all + +00:08:16.130 --> 00:08:17.349 +of the different slides. + +00:08:17.350 --> 00:08:19.989 +I've got all kinds of different markup tools, + +00:08:19.990 --> 00:08:23.169 +and tools for controlling + +00:08:23.170 --> 00:08:24.829 +zoom and what page I'm on, + +00:08:24.830 --> 00:08:27.189 +but you don't have to see that. + +NOTE Firefox + +00:08:27.190 --> 00:08:32.389 +Okay. Firefox, boy, I do a lot of this. + +00:08:32.390 --> 00:08:36.789 +All of the quizzes, + +00:08:36.790 --> 00:08:38.459 +quizzes and exams in my courses + +00:08:38.460 --> 00:08:40.129 +are online on this + +00:08:40.130 --> 00:08:43.369 +web platform called Canvas, + +00:08:43.370 --> 00:08:45.429 +which is good enough. + +00:08:45.430 --> 00:08:49.589 +It's based on a GPL3 package, + +00:08:49.590 --> 00:08:53.069 +but this one is proprietary for Penn State. + +00:08:53.070 --> 00:08:55.129 +Notice that there's a quiz + +00:08:55.130 --> 00:08:57.049 +every day, and this quiz, + +00:08:57.050 --> 00:08:59.469 +every quiz has a recording from + +00:08:59.470 --> 00:09:00.629 +that day and you notice + +00:09:00.630 --> 00:09:01.889 +there's a picture of me teaching, + +00:09:01.890 --> 00:09:05.029 +pointing to the slides. + +00:09:05.030 --> 00:09:06.969 +There's the slides themselves. + +00:09:06.970 --> 00:09:09.589 +I use OBS to composite in + +00:09:09.590 --> 00:09:12.769 +the Zoom chat because I teach this hybrid. + +00:09:12.770 --> 00:09:13.709 +There's people in the room + +00:09:13.710 --> 00:09:14.569 +and there's people at + +00:09:14.570 --> 00:09:17.629 +other campuses who are in this course. + +00:09:17.630 --> 00:09:19.389 +Having the Zoom chat in + +00:09:19.390 --> 00:09:22.649 +the live feed is very useful. + +00:09:22.650 --> 00:09:25.729 +Then the quiz— + +00:09:25.730 --> 00:09:26.669 +at the next class meeting, + +00:09:26.670 --> 00:09:27.889 +we'll go through this quiz. + +00:09:27.890 --> 00:09:30.049 +Here's some experimental data + +00:09:30.050 --> 00:09:31.649 +and here's a question where they're + +00:09:31.650 --> 00:09:36.589 +supposed to interpret these data. + +00:09:36.590 --> 00:09:38.849 +We can in class together, + +00:09:38.850 --> 00:09:41.629 +we can review those. + +00:09:41.630 --> 00:09:45.369 +That's why Firefox is useful. + +00:09:47.970 --> 00:09:50.569 +Being able to inhabit, + +00:09:50.570 --> 00:09:52.829 +being able to inhabit + +00:09:52.830 --> 00:09:56.869 +figures like this is incredibly powerful. + +00:09:56.870 --> 00:09:59.349 +This is the silver lining of being + +00:09:59.350 --> 00:10:02.129 +forced to teach online during the pandemic, + +00:10:02.130 --> 00:10:03.069 +because I couldn't do + +00:10:03.070 --> 00:10:05.759 +this before I had a green screen. + +00:10:05.760 --> 00:10:09.539 +But even more powerful than this— + +00:10:09.540 --> 00:10:10.819 +For years, I showed students + +00:10:10.820 --> 00:10:12.339 +this figure by standing in front + +00:10:12.340 --> 00:10:13.699 +of it or by having a + +00:10:13.700 --> 00:10:15.239 +projector screen above me. + +00:10:15.240 --> 00:10:18.459 +And I said, "This is the B form of DNA." + +00:10:18.460 --> 00:10:20.379 +"This is the most common form of DNA." + +00:10:20.380 --> 00:10:22.579 +"You see here that there's this minor groove." + +00:10:22.580 --> 00:10:23.419 +"And then this feature + +00:10:23.420 --> 00:10:24.419 +is called the major groove." + +00:10:24.420 --> 00:10:26.059 +And students couldn't see it. + +NOTE Animation + +00:10:26.060 --> 00:10:29.439 +But if you animate it— + +00:10:29.440 --> 00:10:30.279 +if you just have it + +00:10:30.280 --> 00:10:33.319 +move, the apparent movement, + +00:10:33.320 --> 00:10:34.399 +It's not really movement, + +00:10:34.400 --> 00:10:35.379 +it's apparent movement. + +00:10:35.380 --> 00:10:37.819 +And it tricks your visual cortex into + +00:10:37.820 --> 00:10:40.319 +adding three dimensional structure to this. + +00:10:40.620 --> 00:10:42.579 +You can see this feature is + +00:10:42.580 --> 00:10:45.339 +the major groove and that feature + +00:10:45.340 --> 00:10:47.219 +is the minor groove. And a static + +00:10:47.220 --> 00:10:48.319 +image just can't provide + +00:10:48.320 --> 00:10:51.399 +that understanding, while moving image can. + +NOTE Emacs + +00:10:55.790 --> 00:10:58.179 +I use Emacs to look at text. + +00:10:58.180 --> 00:11:02.519 +Where's Emacs? Here's Emacs! We read + +00:11:02.520 --> 00:11:04.279 +Vonnegut in this English class that I + +00:11:04.280 --> 00:11:07.759 +teach and I'm going to tab over to Emacs. + +00:11:07.760 --> 00:11:09.859 +It's nice to be able + +00:11:09.860 --> 00:11:12.419 +to have text jump + +00:11:12.420 --> 00:11:14.159 +around and be dynamic, right? + +00:11:14.160 --> 00:11:16.859 +If you, if you want to look + +00:11:16.860 --> 00:11:18.039 +at this passage and I'll + +00:11:18.040 --> 00:11:19.259 +have somebody read it aloud. + +00:11:19.260 --> 00:11:20.819 +And then we talk about why he chose + +00:11:20.820 --> 00:11:22.499 +this word and why he chose that word, + +00:11:22.500 --> 00:11:25.179 +and the cadence, and the alliteration. + +00:11:25.180 --> 00:11:30.839 +Then we can go to another particular excerpt + +00:11:30.840 --> 00:11:33.439 +and pick that apart on the screen together. + +00:11:33.440 --> 00:11:34.899 +That would be difficult to do with + +00:11:34.900 --> 00:11:36.819 +other software that would be very tedious + +00:11:36.820 --> 00:11:39.399 +to do on the chalkboard. + +00:11:39.400 --> 00:11:42.259 +So Emacs is really good for that sort of thing. + +NOTE Making slides and handouts with Org Mode + +00:11:42.260 --> 00:11:45.379 +Mostly what I use Emacs for is not to + +00:11:45.380 --> 00:11:50.339 +present but to make slides and handouts. + +00:11:50.340 --> 00:11:52.359 +Okay. Again, the thing that I want to + +00:11:52.360 --> 00:11:54.219 +stress is that the slides + +00:11:54.220 --> 00:11:56.739 +and the handouts can be produced from + +00:11:56.740 --> 00:12:01.179 +a single Org mode document. + +00:12:01.180 --> 00:12:04.059 +This entire presentation + +00:12:04.060 --> 00:12:05.699 +was assembled in Emacs. + +00:12:05.700 --> 00:12:07.939 +I'll show you how I did that. + +00:12:08.420 --> 00:12:11.619 +I think everybody + +00:12:11.620 --> 00:12:13.159 +probably knows what Org mode is. + +00:12:13.160 --> 00:12:14.639 +But for our purposes, it's a way + +00:12:14.640 --> 00:12:16.119 +to write documents in plain text. + +00:12:16.120 --> 00:12:19.839 +That's very important because one of + +00:12:19.840 --> 00:12:22.019 +the biggest advantages of this is + +00:12:22.020 --> 00:12:24.739 +being able to do version control. + +00:12:24.740 --> 00:12:27.779 +I don't have Powerpoint decks + +00:12:27.780 --> 00:12:29.359 +everywhere with slides that + +00:12:29.360 --> 00:12:31.239 +there's no way to keep track of them. + +00:12:31.240 --> 00:12:32.459 +Having these be plain text + +00:12:32.460 --> 00:12:33.579 +means that I can just put them in + +00:12:33.580 --> 00:12:36.139 +a git repository. + +00:12:36.140 --> 00:12:37.899 +Very clean and human readable markup + +00:12:37.900 --> 00:12:41.159 +including handling tables + +00:12:41.160 --> 00:12:43.339 +which is just incredibly powerful. + +00:12:43.340 --> 00:12:45.459 +You can manage projects and tasks. + +00:12:45.460 --> 00:12:47.299 +But the fact that it's an outline + +00:12:47.300 --> 00:12:48.979 +that you can produce a document that's + +00:12:48.980 --> 00:12:51.279 +hierarchical and fold and + +00:12:51.280 --> 00:12:52.979 +reveal different parts of it. + +00:12:52.980 --> 00:12:57.119 +But to produce a book length lectures for + +00:12:57.120 --> 00:12:58.919 +an entire semester and use + +00:12:58.920 --> 00:13:01.399 +those to produce both slides and handouts, + +00:13:01.400 --> 00:13:03.179 +that's very powerful, + +00:13:03.180 --> 00:13:04.999 +at least for my brain. To be able to + +00:13:05.000 --> 00:13:06.779 +put it all together and have it be + +00:13:06.780 --> 00:13:08.399 +discursive rather + +00:13:08.400 --> 00:13:09.919 +than having to be graphical. + +00:13:09.920 --> 00:13:11.879 +You can export to + +00:13:11.880 --> 00:13:15.059 +a million different formats including + +00:13:15.060 --> 00:13:16.999 +PDF documents like the handouts as + +00:13:17.000 --> 00:13:22.679 +LaTeX, and slides like these through Beamer export. + +NOTE Pedagogy first + +00:13:22.680 --> 00:13:24.919 +The approach is to think + +00:13:24.920 --> 00:13:26.899 +about pedagogy rather than thinking + +00:13:26.900 --> 00:13:28.279 +about software or thinking + +00:13:28.280 --> 00:13:30.999 +about graphic design. + +00:13:31.000 --> 00:13:32.599 +To think about how can + +00:13:32.600 --> 00:13:34.379 +I make the best argument? + +00:13:34.380 --> 00:13:35.979 +How can I make the best, + +00:13:35.980 --> 00:13:40.879 +the most effective sequence of ideas? + +00:13:40.880 --> 00:13:44.999 +All I've done is make a few tweaks to + +00:13:45.000 --> 00:13:47.979 +the export backends for LaTeX and + +00:13:47.980 --> 00:13:49.979 +Beamer to customize them + +00:13:49.980 --> 00:13:51.499 +for my particular needs. + +00:13:51.500 --> 00:13:54.599 +And I'll show you what I've done. + +00:13:54.600 --> 00:13:58.059 +You've seen this already. I'll put + +00:13:58.060 --> 00:14:00.899 +one idea in big text on the screen. + +00:14:00.900 --> 00:14:04.619 +I find it to be effective to + +00:14:04.620 --> 00:14:09.119 +make a single idea explicit at one time. + +00:14:09.120 --> 00:14:12.259 +Now, some concepts can + +00:14:12.260 --> 00:14:14.799 +be explained with words or text, + +00:14:14.800 --> 00:14:20.259 +but many ideas are best just illustrated. + +00:14:20.260 --> 00:14:22.539 +In contrast, we've + +00:14:22.540 --> 00:14:23.979 +all used Powerpoint, right? + +00:14:23.980 --> 00:14:25.699 +And Edward Tufte has taught us + +00:14:25.700 --> 00:14:27.479 +about how Powerpoint is so + +00:14:27.480 --> 00:14:29.239 +terrible from a cognitive point of + +00:14:29.240 --> 00:14:31.799 +view and from a communications point of view. + +00:14:31.800 --> 00:14:35.398 +So using Org mode is much better. + +00:14:35.400 --> 00:14:36.759 +How is it better? + +00:14:36.760 --> 00:14:41.479 +Well, Tufte also tells us that + +00:14:42.040 --> 00:14:49.049 +any oral presentation that is substantive at all + +00:14:49.050 --> 00:14:52.629 +has to have some physical handout + +00:14:52.630 --> 00:14:55.709 +that the audience can use to take notes on. + +00:14:55.710 --> 00:14:58.749 +Slides are terrible handouts. + +00:14:59.030 --> 00:15:02.129 +And notes are usually terrible slides. + +00:15:02.130 --> 00:15:03.689 +Having one document where you + +00:15:03.690 --> 00:15:05.849 +can produce both and have them be, + +00:15:05.850 --> 00:15:08.409 +have the same organization, + +00:15:08.410 --> 00:15:10.349 +but different structures and + +00:15:10.350 --> 00:15:14.749 +different visual organization is + +00:15:14.750 --> 00:15:16.609 +something that I wanted + +00:15:16.610 --> 00:15:18.629 +for a long time and I can only do it + +00:15:18.630 --> 00:15:20.019 +with Emacs. + +00:15:20.020 --> 00:15:21.409 +Being able + +00:15:21.410 --> 00:15:22.729 +also for my brain to + +00:15:22.730 --> 00:15:25.309 +separate the work of writing and developing + +00:15:25.310 --> 00:15:28.469 +ideas and developing explanations + +00:15:28.470 --> 00:15:30.049 +and developing arguments + +00:15:30.050 --> 00:15:31.429 +and scaffolding them. + +00:15:31.430 --> 00:15:33.689 +That's jargon in pedagogy + +00:15:33.690 --> 00:15:36.889 +for bringing the student along. + +00:15:36.890 --> 00:15:41.349 +Separate that work from wrangling slides. + +00:15:41.350 --> 00:15:44.529 +That's super helpful for me. + +00:15:44.530 --> 00:15:46.709 +Again, you have + +00:15:46.710 --> 00:15:48.229 +an Org document that makes + +00:15:48.230 --> 00:15:51.369 +both the handouts and the slides. + +00:15:51.370 --> 00:15:53.449 +What's beautiful about it is + +00:15:53.450 --> 00:15:54.649 +that everything is an outline. + +00:15:54.650 --> 00:15:56.429 +And again, it's very discursive. + +00:15:56.430 --> 00:15:59.109 +Here's Tufte's famous poster where he's making + +00:15:59.110 --> 00:16:02.009 +fun of the psychology of Powerpoint. + +00:16:02.010 --> 00:16:05.749 +I don't know about you, but I have the kind of brain + +00:16:05.750 --> 00:16:07.609 +and I'm in the kind of job + +00:16:07.610 --> 00:16:09.909 +and I'm at the age where I don't have extra + +00:16:09.910 --> 00:16:12.049 +cognitive function! You know? + +00:16:12.050 --> 00:16:15.729 +So streamlining this workflow + +00:16:15.730 --> 00:16:17.789 +has been really helpful. + +NOTE org-teach + +00:16:17.790 --> 00:16:19.309 +All right, so let me show + +00:16:19.310 --> 00:16:21.649 +you what I've developed. + +00:16:21.650 --> 00:16:24.489 +Let's look at the Org doc. + +00:16:24.490 --> 00:16:25.829 +Okay. So what you see is you have + +00:16:25.830 --> 00:16:30.769 +a typical Org mode buffer. + +00:16:30.770 --> 00:16:32.849 +There's two headings here. + +00:16:32.850 --> 00:16:35.529 +One of them is stuff that I've deleted and + +00:16:35.530 --> 00:16:39.269 +the other is the talk. + +00:16:39.270 --> 00:16:43.109 +And so all of these subheadings have + +00:16:43.110 --> 00:16:46.389 +various things underneath including + +00:16:46.390 --> 00:16:48.969 +these macros that I wrote like `include-slide`, + +00:16:48.970 --> 00:16:51.229 +`impact-slide`, `subsection-slide`, + +00:16:51.230 --> 00:16:54.909 +et cetera, and then a bunch of stuff. + +00:16:54.950 --> 00:16:59.309 +Then I've got this include + +00:16:59.310 --> 00:17:01.629 +file that just has + +00:17:01.630 --> 00:17:03.289 +the macros that I've written. + +00:17:03.290 --> 00:17:05.449 +You can look at this on the repo. + +00:17:05.450 --> 00:17:06.289 +I'm not going to take + +00:17:06.290 --> 00:17:07.569 +the time to walk through it and + +00:17:07.570 --> 00:17:10.369 +explain what all the LaTeX means. + +00:17:10.370 --> 00:17:16.509 +But the upshot is + +00:17:16.510 --> 00:17:20.549 +that by including that file + +00:17:20.550 --> 00:17:22.429 +that has all the macro definitions, + +00:17:22.430 --> 00:17:25.649 +you get things like this macro pause + +00:17:25.650 --> 00:17:27.689 +or newline or whitespace-break, + +00:17:27.690 --> 00:17:30.809 +which just allow— + +00:17:30.810 --> 00:17:33.009 +pause splits a slide into two frames, + +00:17:33.010 --> 00:17:34.569 +so you can get these overlays, + +00:17:34.570 --> 00:17:36.309 +so you can go through paragraphs one by one. + +00:17:36.310 --> 00:17:38.629 +These just put + +00:17:38.630 --> 00:17:42.649 +white space in. + +00:17:44.650 --> 00:17:47.109 +Text-slides: This thing here, this title + +00:17:47.110 --> 00:17:49.169 +is level three heading. + +00:17:49.170 --> 00:17:50.189 +Figure-slides: + +00:17:50.190 --> 00:17:52.049 +the same thing are level three headings. + +00:17:52.050 --> 00:17:54.009 +One of the most powerful things + +00:17:54.010 --> 00:17:56.229 +is that I can take other files, + +00:17:56.230 --> 00:18:00.149 +I can take other Org files that have level + +00:18:00.150 --> 00:18:02.789 +three headings that are slides and those can + +00:18:02.790 --> 00:18:06.209 +be in some other repository. + +00:18:06.210 --> 00:18:08.509 +I only need to have one version of + +00:18:08.510 --> 00:18:09.909 +that slide that I + +00:18:09.910 --> 00:18:12.749 +can use in multiple courses. + +00:18:13.230 --> 00:18:17.109 +Just that functionality is + +00:18:17.110 --> 00:18:19.909 +incredibly helpful for keeping + +00:18:19.910 --> 00:18:22.809 +track of work from a few years ago. + +00:18:22.810 --> 00:18:24.269 +All of these I'm going to + +00:18:24.270 --> 00:18:25.929 +explain in the next few slides. + +00:18:25.930 --> 00:18:27.709 +The section slides + +00:18:27.710 --> 00:18:29.909 +correspond to course modules. + +00:18:29.910 --> 00:18:31.129 +Each of these is going to + +00:18:31.130 --> 00:18:32.549 +be a few weeks of a course. + +00:18:32.550 --> 00:18:34.629 +This is a major division of a course. + +00:18:34.630 --> 00:18:36.909 +I have some macros so that I can decorate + +00:18:36.910 --> 00:18:41.389 +this with relevant information. + +00:18:41.390 --> 00:18:43.469 +Then for every subsection, + +00:18:43.470 --> 00:18:45.569 +level two headline, that + +00:18:45.570 --> 00:18:46.729 +corresponds to a major + +00:18:46.730 --> 00:18:48.589 +course topic in the module. + +00:18:48.590 --> 00:18:50.209 +Then text slides, again, + +00:18:50.210 --> 00:18:52.849 +level three headlines become + +00:18:52.850 --> 00:18:53.969 +titles for the slide, + +00:18:53.970 --> 00:18:58.859 +and level four headlines become text elements. + +00:18:58.900 --> 00:19:01.679 +Most of my slides look like this. + +00:19:01.680 --> 00:19:03.139 +They're figures. + +00:19:03.140 --> 00:19:05.859 +Here's the glycolytic pathway. + +00:19:06.020 --> 00:19:09.979 +Level three gives you the title. + +00:19:11.420 --> 00:19:14.279 +It's missing here actually, + +00:19:14.280 --> 00:19:16.719 +but there's a way you can put in captions. + +00:19:16.720 --> 00:19:18.959 +This line here just tells + +00:19:18.960 --> 00:19:21.039 +the LaTeX export backend + +00:19:21.040 --> 00:19:24.219 +how big you want it and stuff like that. + +00:19:24.220 --> 00:19:29.139 +Impact slides, they have to go under H1 or H2. + +00:19:29.140 --> 00:19:32.179 +And they just give you one of these text slides. + +00:19:32.450 --> 00:19:35.649 +For an entire slide being an image, + +00:19:35.650 --> 00:19:38.249 +you can use this image-slide macro. + +NOTE Blank slides + +00:19:38.330 --> 00:19:41.129 +I often put in blank slides to + +00:19:41.130 --> 00:19:43.269 +remind myself that this is a time to stop. + +00:19:43.270 --> 00:19:44.789 +Often there's something for me to + +00:19:44.790 --> 00:19:47.369 +draw here with the stylus. + +NOTE Animations + +00:19:50.050 --> 00:19:53.149 +I often use— it used to be Powerpoint, + +00:19:53.150 --> 00:19:56.069 +now I use LibreOffice Impress—to make + +00:19:56.070 --> 00:19:58.309 +multi slide animations like + +00:19:58.310 --> 00:20:01.309 +the sphere and the donut and the GI tract. + +00:20:01.310 --> 00:20:03.249 +And this hardware thing + +00:20:03.250 --> 00:20:05.269 +that I did for you today, + +00:20:05.270 --> 00:20:07.949 +I export those animations as PDFs. + +00:20:07.950 --> 00:20:14.469 +Then I can just slurp them up into the slides. + +00:20:14.470 --> 00:20:16.669 +Just into the slides, not into + +00:20:16.670 --> 00:20:19.269 +the handouts with this macro. + +NOTE Conclusion + +00:20:19.270 --> 00:20:21.489 +I hope that you find this useful. + +00:20:21.490 --> 00:20:22.449 +I hope you share it with + +00:20:22.450 --> 00:20:24.089 +other educators that you know. + +00:20:24.090 --> 00:20:27.149 +Here is the sourcehut repo, + +00:20:27.150 --> 00:20:29.069 +here's how to get in touch with me. + +00:20:29.070 --> 00:20:32.569 +I look forward to addressing your questions. + +00:20:32.690 --> 00:20:34.989 +I want to say thank you + +00:20:34.990 --> 00:20:36.609 +to Sacha [Chua] and the organizers, + +00:20:36.610 --> 00:20:38.449 +and to everyone who made this possible and + +00:20:38.450 --> 00:20:40.689 +to all of you in the community. + +00:20:40.690 --> 00:20:42.769 +Because as we all know, + +00:20:42.770 --> 00:20:47.429 +that that's what makes Emacs such a strong + +00:20:47.430 --> 00:20:50.089 +and powerful package is + +00:20:50.090 --> 00:20:51.329 +all of the people behind it. + +00:20:51.330 --> 00:20:53.169 +Thanks everybody. diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt new file mode 100644 index 00000000..034faf8b --- /dev/null +++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt @@ -0,0 +1,3361 @@ +WEBVTT + + +00:00:00.480 --> 00:00:00.980 +[Speaker 0]: Dictation. + +00:00:06.020 --> 00:00:06.520 +[Speaker 1]: Right. All right I think we are live now. + +00:00:08.980 --> 00:00:09.179 +The stream is here. So folks if you would + +00:00:11.320 --> 00:00:11.820 +please post your questions on the pad and + +00:00:13.259 --> 00:00:13.759 +we'll take them up here. + +00:00:20.500 --> 00:00:21.000 +[Speaker 0]: Boy so I don't have myself set up with the + +00:00:25.140 --> 00:00:25.279 +[Speaker 1]: Oh, I can read the questions to you if you + +00:00:26.939 --> 00:00:27.439 +[Speaker 0]: pad. That would be fantastic. + +00:00:27.900 --> 00:00:28.400 +Thank you. + +00:00:28.779 --> 00:00:29.220 +[Speaker 1]: would prefer that. Sure. + +00:00:29.220 --> 00:00:29.720 +Thanks. + +00:00:58.380 --> 00:00:58.500 +[Speaker 0]: Well, for the purpose of breaking the ice a + +00:01:01.400 --> 00:01:01.620 +little bit, I can provide a live + +00:01:03.840 --> 00:01:04.340 +demonstration of the use of this Voice In + +00:01:06.300 --> 00:01:06.800 +plugin for Google Chrome. + +00:01:11.080 --> 00:01:11.580 +So I have, let's see, say new sentence. + +00:01:20.400 --> 00:01:20.900 +I'm on a website that is called 750 words. + +00:01:25.080 --> 00:01:25.520 +It provides a text area where without any + +00:01:30.580 --> 00:01:30.760 +other distracting icons for the purpose of + +00:01:34.040 --> 00:01:34.200 +writing and I'm using it for the purpose of + +00:01:38.680 --> 00:01:38.960 +capturing my words that I'm dictating and I + +00:01:42.979 --> 00:01:43.420 +have enabled the Voice In plugin by hitting + +00:01:48.280 --> 00:01:48.780 +the option L command. New sentence. + +00:01:54.479 --> 00:01:54.960 +So it interpreted that command new sentence + +00:01:56.260 --> 00:01:56.760 +even though I didn't pronounce it correctly, + +00:01:59.440 --> 00:01:59.820 +which is a pretty good demonstration of its + +00:02:00.920 --> 00:02:01.420 +accuracy. New sentence. + +00:02:06.420 --> 00:02:06.820 +Oops, that didn't work. + +00:02:15.040 --> 00:02:15.200 +Undo. New sentence. So new sentence is a + +00:02:16.040 --> 00:02:16.540 +combination of 2 commands, + +00:02:23.820 --> 00:02:24.080 +period and new line. So I've found it more + +00:02:25.840 --> 00:02:26.260 +convenient just to say new sentence than + +00:02:28.440 --> 00:02:28.940 +having to say period and new line. + +00:02:33.900 --> 00:02:34.220 +You can see that it's able to keep up with + +00:02:41.840 --> 00:02:42.340 +most of my speech, and it has to interpret + +00:02:44.760 --> 00:02:45.140 +the sounds that I'm making and convert those + +00:02:47.600 --> 00:02:47.860 +into words, so there's always going to be a + +00:02:59.580 --> 00:03:00.080 +lag. New sentence. But I've found that I can + +00:03:02.720 --> 00:03:03.220 +generate about 2,000, up to 2,000 + +00:03:07.040 --> 00:03:07.540 +words an hour as I gather my thoughts and + +00:03:10.960 --> 00:03:11.460 +talk in my rather slow fashion of speaking. + +00:03:15.860 --> 00:03:16.220 +New sentence, if you're a really fast + +00:03:18.560 --> 00:03:19.060 +speaker, it might have trouble keeping up. + +00:03:30.860 --> 00:03:31.080 +New sentence. I like to write When I'm using + +00:03:34.360 --> 00:03:34.860 +the keyboard with 1 sentence per line, + +00:03:38.520 --> 00:03:39.020 +so that when I copy my text and paste it into + +00:03:43.680 --> 00:03:43.840 +Emacs, for example, I can resort the + +00:03:47.300 --> 00:03:47.600 +sentences very easily by just selecting 1 + +00:03:50.600 --> 00:03:51.100 +line at a time. I like to keep the sentences + +00:03:53.480 --> 00:03:53.980 +unwrapped in that fashion because that + +00:03:56.320 --> 00:03:56.820 +greatly eases the rewriting phase. + +00:04:01.120 --> 00:04:01.580 +And I'm almost have sort of a hybrid reverse + +00:04:03.160 --> 00:04:03.660 +outlining approach by doing that. + +00:04:14.340 --> 00:04:14.680 +New sentence. Looks like I have gotten ahead + +00:04:18.079 --> 00:04:18.579 +of it a bit and it has not kept up. + +00:04:21.560 --> 00:04:22.060 +But generally, it does keep up pretty well. + +00:04:26.180 --> 00:04:26.680 +[Speaker 1]: Nice. Thanks for the demo. + +00:04:30.380 --> 00:04:30.880 +Let's see. I think we have. + +00:04:31.480 --> 00:04:31.980 +Yeah, sorry. + +00:04:33.520 --> 00:04:34.020 +[Speaker 0]: You're welcome. Go ahead. + +00:04:42.380 --> 00:04:42.880 +You can see that it has this EN means English + +00:04:46.880 --> 00:04:47.180 +and then dash US. There's actually about 40 + +00:04:48.000 --> 00:04:48.500 +languages that it supports, + +00:04:52.280 --> 00:04:52.720 +including several variants of German and + +00:04:54.640 --> 00:04:55.140 +about a dozen English dialects. + +00:05:05.200 --> 00:05:05.380 +[Speaker 1]: Nice. Let's see, I think we have some + +00:05:06.860 --> 00:05:07.360 +comments and questions trickling in. + +00:05:11.160 --> 00:05:11.320 +So someone is saying that there is a text to + +00:05:14.700 --> 00:05:15.200 +command application or utility called Clipia, + +00:05:19.395 --> 00:05:19.472 +C-L-I-P-I-A, that they think is awesome. + +00:05:19.860 --> 00:05:20.360 +Clipia that they think is awesome. + +00:05:24.960 --> 00:05:25.460 +And someone else is also saying that Sox, + +00:05:27.180 --> 00:05:27.680 +S-O-X is another good alternative. + +00:05:34.560 --> 00:05:34.920 +[Speaker 0]: I've not explored those yet. + +00:05:36.740 --> 00:05:37.240 +So thank you very much for the suggestions. + +00:05:42.700 --> 00:05:43.000 +[Speaker 1]: So I'll... I just dropped a link to the pad + +00:05:45.360 --> 00:05:45.520 +page here in the chat and on the big blue + +00:05:47.320 --> 00:05:47.820 +button if you'd like to open that up as well. + +00:05:50.280 --> 00:05:50.460 +But I'll continue reading the comments and + +00:05:54.340 --> 00:05:54.640 +questions. So the first question, + +00:05:56.420 --> 00:05:56.920 +I guess, is that could you comment on how + +00:06:01.800 --> 00:06:02.080 +speaking versus typing affects your logic or + +00:06:03.260 --> 00:06:03.760 +the content, quote unquote, + +00:06:05.020 --> 00:06:05.520 +that you write? + +00:06:10.320 --> 00:06:10.820 +[Speaker 0]: I find that this is like the difference + +00:06:15.600 --> 00:06:16.080 +between writing your thoughts down on a blank + +00:06:18.640 --> 00:06:19.140 +piece of printer paper versus paper bound + +00:06:21.100 --> 00:06:21.600 +with a leather notebook. + +00:06:24.300 --> 00:06:24.800 +I don't think there's any real difference. + +00:06:27.980 --> 00:06:28.380 +I know that some people believe there is a + +00:06:29.540 --> 00:06:30.040 +solid certain difference, + +00:06:32.580 --> 00:06:32.980 +But this is for the purpose, + +00:06:34.540 --> 00:06:35.040 +I'm using this for the purpose of generating + +00:06:40.340 --> 00:06:40.720 +the first draft because my skills with using + +00:06:44.160 --> 00:06:44.440 +my voice to edit my text is still not very + +00:06:46.240 --> 00:06:46.740 +well developed. I'm still more efficient + +00:06:49.120 --> 00:06:49.620 +using the keyboard for that stage. + +00:06:52.200 --> 00:06:52.700 +So the hardest part about writing generally + +00:06:55.160 --> 00:06:55.660 +is getting the first crappy draft written. + +00:07:00.040 --> 00:07:00.160 +And so I have found that dictation is + +00:07:01.480 --> 00:07:01.980 +perfectly fine for that phase. + +00:07:07.060 --> 00:07:07.200 +And I find it actually very conducive for + +00:07:09.480 --> 00:07:09.980 +just getting the text out. + +00:07:13.500 --> 00:07:13.680 +The biggest problem that most of us have is + +00:07:15.080 --> 00:07:15.580 +applying our internal editor. + +00:07:20.280 --> 00:07:20.460 +And that inhibits us from generating words in + +00:07:21.600 --> 00:07:22.100 +a free-flowing fashion. + +00:07:26.000 --> 00:07:26.500 +So I generally do my generative writing. + +00:07:28.740 --> 00:07:28.940 +So actually I divide my writing into 2 + +00:07:30.240 --> 00:07:30.740 +categories, generative writing, + +00:07:32.320 --> 00:07:32.820 +generating the first crappy draft, + +00:07:35.920 --> 00:07:36.300 +and then rewriting. Rewriting is probably 80, + +00:07:38.520 --> 00:07:39.020 +90% of writing where you go back and rework + +00:07:40.600 --> 00:07:41.100 +the order of the sentences, + +00:07:43.840 --> 00:07:43.980 +order of paragraphs, the order of words in a + +00:07:44.700 --> 00:07:45.060 +sentence and so forth. + +00:07:47.540 --> 00:07:47.860 +The really hard work. That's best done later + +00:07:49.740 --> 00:07:50.240 +in the day when I'm more awake. + +00:07:52.880 --> 00:07:52.960 +I do my general writing first thing in the + +00:07:55.320 --> 00:07:55.820 +morning when I feel horrible. + +00:07:59.440 --> 00:07:59.940 +I'm not very alert. That's when my internal + +00:08:03.340 --> 00:08:03.700 +editor is not very awake and I can get more + +00:08:05.760 --> 00:08:06.260 +words out, more words past that gatekeeper. + +00:08:09.280 --> 00:08:09.480 +And so I can do this sitting down, + +00:08:10.640 --> 00:08:10.920 +I can do this standing up, + +00:08:12.800 --> 00:08:13.180 +I can do this 20 feet away from my computer + +00:08:15.440 --> 00:08:15.600 +looking out the window to give my eyes a + +00:08:19.540 --> 00:08:20.040 +break. So I find it's actually very enjoyable + +00:08:21.440 --> 00:08:21.940 +to use it in this fashion. + +00:08:29.640 --> 00:08:30.140 +And the downside is that I wind up generating + +00:08:32.720 --> 00:08:32.919 +3 times as much text, and that makes for 3 + +00:08:35.140 --> 00:08:35.640 +times as much work when it comes to rewriting + +00:08:39.780 --> 00:08:39.940 +the text. And that means I'm using the + +00:08:45.040 --> 00:08:45.200 +keyboard a lot later on in the day and I + +00:08:47.720 --> 00:08:47.920 +haven't made any progress on recovering from + +00:08:49.760 --> 00:08:50.260 +my own repetitive stress injury. + +00:08:56.880 --> 00:08:57.240 +I hope that I will add the use of voice + +00:08:59.720 --> 00:09:00.220 +commands, speech to commands, + +00:09:02.800 --> 00:09:03.300 +for editing the text in the future. + +00:09:06.880 --> 00:09:07.040 +And I'll eventually give my hands more of a + +00:09:07.040 --> 00:09:07.540 +break. + +00:09:12.280 --> 00:09:12.600 +[Speaker 1]: Right. Thanks. Yeah, that sounds like a nice + +00:09:15.360 --> 00:09:15.640 +flow of sort of being able to get your words + +00:09:18.740 --> 00:09:18.940 +out while your internal editor is still not + +00:09:21.220 --> 00:09:21.720 +inhibiting things. And then later in the day + +00:09:25.320 --> 00:09:25.520 +or days, get back to the actual rewriting and + +00:09:25.520 --> 00:09:26.020 +editing. + +00:09:31.320 --> 00:09:31.720 +[Speaker 0]: Cool. So this allows you to actually separate + +00:09:33.640 --> 00:09:34.140 +those 2 activities, not only by time. + +00:09:36.840 --> 00:09:37.200 +So many professional writers will spend + +00:09:39.000 --> 00:09:39.140 +several hours in the morning doing the + +00:09:41.040 --> 00:09:41.120 +generative part and then they'll spend the + +00:09:41.920 --> 00:09:42.420 +rest of the day rewriting. + +00:09:46.000 --> 00:09:46.500 +So they have separated those 2 activities + +00:09:49.340 --> 00:09:49.540 +temporally. What most people actually do is, + +00:09:51.540 --> 00:09:51.700 +you know, they do the generative part and + +00:09:53.300 --> 00:09:53.560 +then they write 1 sentence and they apply + +00:09:55.460 --> 00:09:55.640 +that internal editor right away because they + +00:09:57.720 --> 00:09:58.220 +want to write the first draft in a perfect, + +00:10:02.400 --> 00:10:02.560 +as a perfect version as the final draft And + +00:10:03.840 --> 00:10:04.340 +that slows them down dramatically. + +00:10:08.160 --> 00:10:08.400 +But this also allows you to separate these 2 + +00:10:10.320 --> 00:10:10.820 +activities in terms of modality. + +00:10:13.940 --> 00:10:14.120 +You're going to do the generative writing by + +00:10:16.560 --> 00:10:17.060 +voice and the rewriting by keyboard. + +00:10:22.200 --> 00:10:22.480 +So I think this is 1 way that many people can + +00:10:26.040 --> 00:10:26.540 +get into using speech to text in a productive + +00:10:26.640 --> 00:10:27.140 +way. + +00:10:30.480 --> 00:10:30.980 +[Speaker 1]: Nice. Yeah, that sounds great. + +00:10:33.940 --> 00:10:34.200 +Let's see. I think we have about 3 or 4 + +00:10:37.840 --> 00:10:37.960 +minutes live. So I think we have time for at + +00:10:38.560 --> 00:10:39.060 +least another question. + +00:10:41.920 --> 00:10:42.180 +Have you tried the chat GPT voice chat + +00:10:44.540 --> 00:10:44.760 +interface? And if so, how has been your + +00:10:47.020 --> 00:10:47.180 +experience of it? As someone experienced with + +00:10:48.640 --> 00:10:48.860 +voice control, interested to hear your + +00:10:51.940 --> 00:10:52.180 +thoughts, performance relative to the free + +00:10:52.960 --> 00:10:53.460 +software tools in particular? + +00:10:57.180 --> 00:10:57.380 +[Speaker 0]: I don't have much experience with that + +00:11:01.320 --> 00:11:01.500 +particular software. I have used Whisper a + +00:11:03.400 --> 00:11:03.900 +little bit. And so that's related. + +00:11:10.260 --> 00:11:10.460 +And of course you have this problem of lag so + +00:11:12.800 --> 00:11:13.300 +I find that it's a whisper is good for + +00:11:16.380 --> 00:11:16.560 +spitting out a sentence you know maybe for a + +00:11:20.160 --> 00:11:20.660 +doc string in a programming file. + +00:11:26.060 --> 00:11:26.260 +But I find that it's very prone to + +00:11:30.060 --> 00:11:30.300 +hallucinations. And I find myself spending + +00:11:32.720 --> 00:11:33.220 +half my time deleting the hallucinations, + +00:11:38.700 --> 00:11:38.860 +I feel like the net gain is diminished as a + +00:11:41.580 --> 00:11:41.720 +result. There's not much of a net gain in + +00:11:43.340 --> 00:11:43.820 +terms of what I'm getting out of it. + +00:11:45.800 --> 00:11:45.980 +Whereas I really appreciate the high level of + +00:11:48.780 --> 00:11:49.280 +accuracy that I'm getting from voice-in. + +00:11:53.400 --> 00:11:53.900 +I would use Talon Voice for dictation, + +00:11:56.680 --> 00:11:57.180 +but at this point, there's a significant + +00:12:00.440 --> 00:12:00.740 +difference between the level of accuracy of + +00:12:02.040 --> 00:12:02.540 +voice-in versus Talon voice. + +00:12:06.260 --> 00:12:06.560 +It's large enough of a difference that I'll + +00:12:08.860 --> 00:12:09.020 +probably use voice-in for a while until I can + +00:12:12.700 --> 00:12:13.140 +figure out how to get town voice to generate + +00:12:15.080 --> 00:12:15.580 +more accurate text. + +00:12:25.400 --> 00:12:25.680 +[Speaker 1]: Cool. Thank you. I think we have at least + +00:12:26.580 --> 00:12:26.940 +another 2 or 3 minutes. + +00:12:29.100 --> 00:12:29.380 +So if folks have any other questions Please + +00:12:31.080 --> 00:12:31.400 +feel free to post them on the pad and I'll + +00:12:32.560 --> 00:12:33.060 +check IRC now as well. + +00:12:44.340 --> 00:12:44.840 +Right, so I see 1 question on IRC asking, + +00:12:47.080 --> 00:12:47.360 +Are any of these voice command slash + +00:12:49.600 --> 00:12:50.100 +dictating dictation tools free Libre + +00:12:52.260 --> 00:12:52.760 +software? They cannot find that information + +00:12:54.840 --> 00:12:55.080 +Which I think is part of it. + +00:12:55.320 --> 00:12:55.820 +You just mentioned + +00:12:57.280 --> 00:12:57.780 +[Speaker 0]: the voice in software. + +00:13:03.260 --> 00:13:03.760 +There's It's a freemium so The answer is no + +00:13:05.640 --> 00:13:06.140 +To be able to add the commands, + +00:13:09.000 --> 00:13:09.160 +the custom commands, you have to pay $48 a + +00:13:12.040 --> 00:13:12.540 +year. The Talon Voice software is free. + +00:13:20.080 --> 00:13:20.320 +And the only limitation there is access to + +00:13:23.560 --> 00:13:23.820 +the language model. If you want to get the + +00:13:26.720 --> 00:13:26.880 +beta version, you need to subscribe to + +00:13:30.820 --> 00:13:31.320 +Patreon to help support the developer. + +00:13:36.180 --> 00:13:36.460 +And I found, I did do that and I really + +00:13:37.400 --> 00:13:37.900 +didn't find much of an improvement. + +00:13:43.620 --> 00:13:43.780 +So I really don't intend to do that in the + +00:13:47.100 --> 00:13:47.600 +future. But otherwise, + +00:13:50.680 --> 00:13:51.180 +Town Voice, everything is open and free, + +00:13:54.380 --> 00:13:54.880 +and the Slack community is incredibly + +00:13:58.340 --> 00:13:58.820 +welcoming. The parallels with the Emacs + +00:14:00.060 --> 00:14:00.560 +community are pretty striking. + +00:14:09.520 --> 00:14:09.720 +[Speaker 1]: Excellent, thank you. Okay, + +00:14:11.800 --> 00:14:11.980 +I think we have about another minute on the + +00:14:13.780 --> 00:14:13.980 +live stream, but I believe the big blue + +00:14:16.560 --> 00:14:16.920 +button room here is open and will be open, + +00:14:19.860 --> 00:14:20.340 +So if folks want to join, + +00:14:21.840 --> 00:14:22.120 +if Blaine maybe has a couple of extra + +00:14:24.680 --> 00:14:24.840 +minutes. Awesome. Yeah, + +00:14:26.580 --> 00:14:26.760 +then you're welcome to join and chat with + +00:14:28.980 --> 00:14:29.480 +Blaine and ask any further questions or just + +00:14:30.060 --> 00:14:30.560 +do general chatting. Chatting. + +00:14:44.020 --> 00:14:44.380 +[Speaker 0]: So I see a question. How good is Talon + +00:14:53.040 --> 00:14:53.520 +compared to Whisper? So with Talon, + +00:14:55.380 --> 00:14:55.880 +I find that the first part of the sentence + +00:15:00.620 --> 00:15:00.820 +will be fairly accurate and then when I'm + +00:15:03.480 --> 00:15:03.980 +doing dictation And then towards the end, + +00:15:05.640 --> 00:15:06.140 +the errors start to accumulate. + +00:15:09.520 --> 00:15:09.720 +So in general, I think it's error rate is + +00:15:12.880 --> 00:15:13.100 +about 5 words out of a hundred or so will be + +00:15:17.560 --> 00:15:18.040 +wrong. And whisper, Whisper is wonderful + +00:15:21.000 --> 00:15:21.500 +because it will insert punctuation for you. + +00:15:26.120 --> 00:15:26.320 +But I guess its errors are longer and that + +00:15:28.740 --> 00:15:29.240 +it'll hallucinate full sentences for you. + +00:15:35.460 --> 00:15:35.960 +So they both have significant error rates. + +00:15:37.280 --> 00:15:37.780 +They're just different kinds of errors. + +00:15:42.340 --> 00:15:42.840 +[Speaker 1]: Interesting. + +00:15:49.000 --> 00:15:49.500 +[Speaker 0]: Hopefully both will improve over time. + +00:15:50.740 --> 00:15:51.240 +Right. + +00:16:04.620 --> 00:16:05.120 +Let's see. There's a question. + +00:16:09.060 --> 00:16:09.560 +Are the green block the author for this talk? + +00:16:13.380 --> 00:16:13.880 +Not sure what that question means. + +00:16:19.180 --> 00:16:19.300 +[Speaker 1]: Well, there is a green block of text that's I + +00:16:22.540 --> 00:16:23.040 +think being generated from voice to text, + +00:16:25.560 --> 00:16:25.680 +speech to text. At the top of the pad, + +00:16:26.500 --> 00:16:27.000 +I think that's the question. + +00:16:40.060 --> 00:16:40.280 +[Speaker 0]: So I have this Voicens software operating on + +00:16:43.080 --> 00:16:43.580 +this GitHub, on this 750words.com + +00:16:51.960 --> 00:16:52.120 +site where I do my generative writing at the + +00:16:57.340 --> 00:16:57.720 +start of the day. And it just provides a text + +00:16:59.600 --> 00:17:00.100 +area that's free of distractions. + +00:17:03.220 --> 00:17:03.480 +And you can see the text that's being + +00:17:08.440 --> 00:17:08.540 +recorded as I talk. I haven't been saying the + +00:17:12.440 --> 00:17:12.700 +command new sentence, so there isn't any + +00:17:15.980 --> 00:17:16.480 +punctuation over our discourse. + +00:17:24.380 --> 00:17:24.880 +1 thing that I do at the start of the day is + +00:17:27.440 --> 00:17:27.940 +I like to write in LaTeX. + +00:17:33.600 --> 00:17:34.100 +Ultimately, that's how I store my writing. + +00:17:37.500 --> 00:17:38.000 +So new sentence, new sentence. + +00:17:51.680 --> 00:17:52.180 +See, insert start day. + +00:17:58.960 --> 00:17:59.460 +So This is an example of a chunk of LaTeX + +00:18:02.620 --> 00:18:03.120 +code. So I have some reflections on, + +00:18:04.640 --> 00:18:04.920 +you know, what did I wake up this morning? + +00:18:08.000 --> 00:18:08.160 +And how do I feel? I have reflections on the + +00:18:10.680 --> 00:18:10.840 +prior day in terms of what did I get done + +00:18:12.240 --> 00:18:12.440 +yesterday? Do I remember what I did + +00:18:14.140 --> 00:18:14.640 +yesterday? What happened last night? + +00:18:16.940 --> 00:18:17.440 +Focus of today. What's to be done today? + +00:18:23.180 --> 00:18:23.680 +And so on. So I actually, + +00:18:24.840 --> 00:18:25.340 +I think I have more down here. + +00:18:31.420 --> 00:18:31.680 +Then I've set up these lists so that I can + +00:18:33.760 --> 00:18:34.260 +expand them easily. If I say item, + +00:18:40.720 --> 00:18:40.900 +then the cursor shows up at the start of an + +00:18:45.600 --> 00:18:46.100 +item. And I have it coded so that that new + +00:18:48.700 --> 00:18:49.200 +phrase that I speak will start with a capital + +00:18:52.480 --> 00:18:52.980 +letter. As you can see, + +00:18:54.520 --> 00:18:55.020 +so capitalize the word and. + +00:19:02.860 --> 00:19:03.360 +So in spite of its rather limited command + +00:19:06.000 --> 00:19:06.380 +syntax, There's some, it's enough to get + +00:19:08.000 --> 00:19:08.400 +started and maybe in the future, + +00:19:09.360 --> 00:19:09.860 +they'll add more features. + +00:19:14.540 --> 00:19:15.040 +[Speaker 1]: Cool, that's neat. + +00:19:21.440 --> 00:19:21.940 +[Speaker 0]: So I think this is very helpful for, + +00:19:28.840 --> 00:19:29.040 +you know, doing things like expanding the + +00:19:32.780 --> 00:19:32.980 +names of people. So you can do set up + +00:19:36.100 --> 00:19:36.600 +commands like expand the name of a colleague + +00:19:40.520 --> 00:19:40.800 +to go from their first name to their full + +00:19:42.900 --> 00:19:43.260 +name with a proper spelling of their last + +00:19:45.240 --> 00:19:45.360 +name, which, you know, + +00:19:47.420 --> 00:19:47.640 +you can wind up spending a lot of time trying + +00:19:53.400 --> 00:19:53.640 +to look that up. And so this voice in with + +00:19:57.560 --> 00:19:57.880 +the custom commands enables you to store hard + +00:19:59.540 --> 00:20:00.040 +to remember information like that. + +00:20:08.040 --> 00:20:08.540 +[Speaker 1]: Great. I see another question. + +00:20:11.140 --> 00:20:11.580 +How good is Talon compared to Whisper? + +00:20:13.140 --> 00:20:13.480 +I think you might have answered that already, + +00:20:14.380 --> 00:20:14.880 +at least partially, but... + +00:20:19.860 --> 00:20:20.080 +[Speaker 0]: Right, yeah. I talked about how it seems that + +00:20:22.580 --> 00:20:23.080 +Whisperer will carry out hallucinations, + +00:20:26.280 --> 00:20:26.780 +so it will generate long tracks of error, + +00:20:30.340 --> 00:20:30.580 +whereas Talon will tend to generate more + +00:20:31.960 --> 00:20:32.460 +errors towards the ends of sentences, + +00:20:36.820 --> 00:20:36.960 +in my experience. And the errors are + +00:20:37.960 --> 00:20:38.460 +generally shorter in extent. + +00:20:42.180 --> 00:20:42.680 +It doesn't hallucinate for long tracks. + +00:20:50.660 --> 00:20:51.040 +[Speaker 1]: Great. Okay, I think that's all the questions + +00:20:51.760 --> 00:20:52.260 +that we have on the pad. + +00:20:54.720 --> 00:20:55.020 +If folks want to join here on Big Blue Button + +00:20:56.680 --> 00:20:57.180 +for a few minutes and chat with Blaine, + +00:21:00.260 --> 00:21:00.480 +that also works. Let's see, + +00:21:02.080 --> 00:21:02.240 +I'm probably going to have to drop in a few + +00:21:03.900 --> 00:21:04.400 +minutes to catch the next speaker. + +00:21:07.860 --> 00:21:08.100 +But many thanks, Blaine, + +00:21:09.520 --> 00:21:09.900 +for a great talk and for the interesting + +00:21:11.180 --> 00:21:11.680 +demos and the question and answer. + +00:21:14.700 --> 00:21:15.200 +[Speaker 0]: Thank you very much for hosting this. + +00:21:16.640 --> 00:21:17.140 +[Speaker 1]: I appreciate it. glad to have you. + +00:21:25.680 --> 00:21:25.960 +[Speaker 0]: Cheers, Yeah, this is really amazing to hold + +00:21:28.740 --> 00:21:29.020 +this conference with people from all around + +00:21:34.660 --> 00:21:34.940 +the world connected together through web + +00:21:34.940 --> 00:21:35.440 +browsers. + +00:21:41.020 --> 00:21:41.260 +[Speaker 1]: Yeah, it's very neat what technology can do + +00:21:42.400 --> 00:21:42.900 +if and when it's working correctly. + +00:21:47.680 --> 00:21:47.860 +[Speaker 0]: I know it can be a little frustrating at + +00:21:48.760 --> 00:21:49.120 +times, but when it's working, + +00:21:54.740 --> 00:21:55.240 +it's wonderful. Yep. + +NOTE Start of section to review + +00:21:59.540 --> 00:21:59.700 +[Speaker 2]: Good purpose of computers is all the + +00:22:01.100 --> 00:22:01.600 +computers run the same code, + +00:22:03.460 --> 00:22:03.860 +so that people, you know, + +00:22:05.740 --> 00:22:06.240 +a lot of people work on the same thing and + +00:22:08.360 --> 00:22:08.860 +build upon each other's works. + +00:22:16.460 --> 00:22:16.960 +For journaling I found 1 good compromise + +00:22:18.204 --> 00:22:18.428 +between editing and stream-of-thought + +00:22:19.548 --> 00:22:19.772 +journaling. 1 good compromise between editing + +00:22:20.680 --> 00:22:21.180 +and stream of thought journaling. + +00:22:23.940 --> 00:22:24.120 +1 good compromise between editing and being + +00:22:26.980 --> 00:22:27.480 +able to do it again and just kind of helps me + +00:22:31.160 --> 00:22:31.320 +do my thoughts even when I do it is when you + +00:22:33.180 --> 00:22:33.340 +do org mode and you have the bullets it kind + +00:22:35.280 --> 00:22:35.680 +of allows you to naturally chart your + +00:22:38.800 --> 00:22:39.300 +thoughts in a way that's really easy to edit + +00:22:41.880 --> 00:22:42.380 +reorder I saw you kind of did that with your + +00:22:47.160 --> 00:22:47.280 +mac la tech macro where you said item and it + +00:22:48.680 --> 00:22:49.180 +would put you down to the next item. + +00:22:56.500 --> 00:22:57.000 +Does... How much do you do stuff like that? + +00:23:00.720 --> 00:23:01.000 +How much do you do stuff like that where you + +00:23:04.700 --> 00:23:05.200 +use like org mode headings and then you + +00:23:07.000 --> 00:23:07.200 +reorder them because like I did that with + +00:23:10.080 --> 00:23:10.460 +also the K outline from HyperBolt package for + +00:23:15.140 --> 00:23:15.420 +the for Emacs org mode later on after the + +00:23:21.880 --> 00:23:22.060 +[Speaker 0]: stream. Yes. So I could actually set this up + +00:23:26.800 --> 00:23:27.300 +so I have a lot of snippets for Org Mode. + +00:23:30.720 --> 00:23:31.160 +I could have Org Mode version of my insert + +00:23:34.600 --> 00:23:34.780 +start day snippet and carry things out in org + +00:23:39.920 --> 00:23:40.420 +mode. So I use org mode from time to time. + +00:23:43.480 --> 00:23:43.980 +I often use it for the purpose of writing + +00:23:47.780 --> 00:23:48.060 +readme files for projects to outline the + +00:23:48.700 --> 00:23:49.200 +purpose of the project, + +00:23:54.900 --> 00:23:55.320 +and say for a director that contains a coding + +00:24:01.620 --> 00:24:02.120 +project. And I think this would, + +00:24:07.300 --> 00:24:07.700 +so the main limitation of VoiceIn is it only + +00:24:10.600 --> 00:24:10.760 +works in a web page and you have to have an + +00:24:14.180 --> 00:24:14.640 +Internet connection, whereas Talon voice is + +00:24:17.220 --> 00:24:17.720 +perfect for something like org mode in that + +00:24:20.200 --> 00:24:20.460 +you don't need an internet connection and it + +00:24:22.940 --> 00:24:23.100 +will operate anywhere that you can place a + +00:24:24.840 --> 00:24:24.960 +cursor. I haven't found a place where it + +00:24:26.760 --> 00:24:27.260 +doesn't work. It's amazing. + +00:24:28.860 --> 00:24:29.360 +So as you saw my talk, + +00:24:35.400 --> 00:24:35.560 +perhaps You can run it in a terminal or a + +00:24:38.320 --> 00:24:38.760 +remote computer. You can run it in a virtual + +00:24:44.120 --> 00:24:44.380 +[Speaker 2]: Oh yeah, it's definitely. + +00:24:45.760 --> 00:24:46.260 +[Speaker 0]: machine. If you can put your cursor there, + +00:24:50.820 --> 00:24:51.320 +it will work. And so as you might imagine, + +00:24:52.720 --> 00:24:53.220 +if you use bash aliases, + +00:24:55.920 --> 00:24:56.200 +I've worked for, 1 of the first things I did + +00:25:00.720 --> 00:25:00.920 +was map Talend commands to bash aliases so + +00:25:02.800 --> 00:25:03.300 +that I can do all kinds of crazy things + +00:25:04.200 --> 00:25:04.700 +inside of the terminal. + +00:25:12.040 --> 00:25:12.260 +And there are, you know, + +00:25:15.260 --> 00:25:15.660 +there's some support already for using Talon + +00:25:20.280 --> 00:25:20.780 +in Emacs. There's some Emacs functionality + +00:25:21.960 --> 00:25:22.460 +that's built into Talon. + +00:25:25.160 --> 00:25:25.660 +So when you are in Emacs, + +00:25:27.100 --> 00:25:27.600 +there's some features that are automatically + +00:25:30.520 --> 00:25:31.020 +available. And then others have developed or + +00:25:32.320 --> 00:25:32.820 +are developing packages, + +00:25:34.920 --> 00:25:35.080 +which I don't think are available yet in + +00:25:40.240 --> 00:25:40.680 +ELPA. There's 1 that does the font locking or + +00:25:42.780 --> 00:25:43.280 +syntax highlighting of Talon files, + +00:25:46.240 --> 00:25:46.720 +and another that adds some additional + +00:25:50.380 --> 00:25:50.880 +functionality that I'm regrettably not yet + +00:25:51.440 --> 00:25:51.940 +familiar with. + +00:25:55.680 --> 00:25:55.940 +[Speaker 2]: Well, as an example with like how the + +00:25:56.760 --> 00:25:57.100 +sharding of the thoughts, + +00:25:59.800 --> 00:26:00.140 +like let's say, oh, how has my day went? + +00:26:01.980 --> 00:26:03.080 +It's went good for reasons 123, + +00:26:04.860 --> 00:26:05.740 +and bad for reasons ABC. + +00:26:07.828 --> 00:26:07.872 +And then later on, I might think, + +00:26:08.460 --> 00:26:08.860 +oh, there's an, I also, + +00:26:10.520 --> 00:26:11.780 +my day went good for reasons 456, + +00:26:14.540 --> 00:26:14.880 +then you, I can, then you jump up. + +00:26:18.520 --> 00:26:18.820 +And so the, like I found like, + +00:26:19.760 --> 00:26:20.260 +yeah, the org mode subheadings, + +00:26:21.980 --> 00:26:22.480 +because you're able to jump around, + +00:26:25.040 --> 00:26:25.540 +easily reorder them after the fact, + +00:26:32.520 --> 00:26:32.860 +the very streamlined approach to the stream + +00:26:33.620 --> 00:26:34.120 +of thought and the editing. + +00:26:38.800 --> 00:26:39.300 +[Speaker 0]: That's right, extremely powerful. + +00:26:41.200 --> 00:26:41.500 +[Speaker 2]: And even with the stream of thought, + +00:26:44.060 --> 00:26:44.480 +just because like, even when you're editing + +00:26:45.200 --> 00:26:45.380 +that in real time, like, + +00:26:47.320 --> 00:26:47.800 +oh, wait a minute, I thought of another + +00:26:48.960 --> 00:26:49.200 +reason that my day went good, + +00:26:50.640 --> 00:26:50.820 +even though I was talking about how it was + +00:26:52.760 --> 00:26:53.260 +going bad now. So you jump up. + +00:26:55.680 --> 00:26:56.180 +And then you do that. And then you have it. + +00:26:59.540 --> 00:27:00.040 +You easily summarize your thoughts and + +00:27:00.060 --> 00:27:00.560 +whatnot. + +00:27:07.200 --> 00:27:07.600 +[Speaker 0]: That's right. And I think org mode is really + +00:27:11.680 --> 00:27:12.180 +ideal for that kind of interact. + +00:27:15.240 --> 00:27:15.480 +So yeah, I see your point in terms of that + +00:27:18.760 --> 00:27:19.260 +sort of a blend of generative writing and + +00:27:23.440 --> 00:27:23.940 +editing. And it's also kind of parallel to + +00:27:27.240 --> 00:27:27.660 +mind mapping. I use this mind mapping + +00:27:32.660 --> 00:27:33.160 +software called iThoughtsX where I'll + +00:27:36.760 --> 00:27:37.260 +generate all these children items, + +00:27:40.040 --> 00:27:40.540 +and then I'll drag them around and resort + +00:27:46.680 --> 00:27:47.180 +them. And they can have children of their own + +00:27:48.940 --> 00:27:49.400 +and grandchildren and so on, + +00:27:50.800 --> 00:27:51.300 +in terms of the levels of the nodes. + +00:27:54.920 --> 00:27:55.240 +And it's pretty much the same sort of thing + +00:27:57.560 --> 00:27:57.960 +with a nested hierarchy that you can have + +00:28:02.660 --> 00:28:03.040 +with org mode. I think having several + +00:28:09.900 --> 00:28:10.120 +alternate modes or modalities of playing with + +00:28:13.100 --> 00:28:13.300 +thoughts is useful. So sometimes I'll hit a + +00:28:17.180 --> 00:28:17.680 +wall and we're just not really generating + +00:28:21.260 --> 00:28:21.760 +anything in a text mode. + +00:28:25.000 --> 00:28:25.500 +But if I switch to using the mind mapping, + +00:28:30.040 --> 00:28:30.420 +just seeing it arranged with the connecting + +00:28:34.920 --> 00:28:35.280 +lines plays on a different part of the brain, + +00:28:37.640 --> 00:28:38.140 +I think, and it can be incredibly + +00:28:40.600 --> 00:28:40.800 +stimulatory. It can stimulate a lot of new + +00:28:43.480 --> 00:28:43.780 +[Speaker 2]: That's something that I haven't messed around + +00:28:45.400 --> 00:28:45.900 +too much with is the mind mapping software, + +00:28:45.980 --> 00:28:46.480 +but... + +00:28:51.600 --> 00:28:51.760 +[Speaker 0]: thoughts. Because the closest thing that we + +00:28:56.400 --> 00:28:56.600 +have to it in Emacs is Orgrimm in the in + +00:29:00.860 --> 00:29:01.360 +terms of like the 3D visualization of with + +00:29:03.720 --> 00:29:04.220 +Orgrimm GUI or + +00:29:10.120 --> 00:29:10.620 +[Speaker 2]: UI. As well as being able to generate SVG + +00:29:12.800 --> 00:29:13.100 +diagrams and stuff like that, + +00:29:16.980 --> 00:29:17.260 +I think those 2 things would allow you stuff + +00:29:20.240 --> 00:29:20.740 +like Orgrimm or denote And then the diagrams + +00:29:23.160 --> 00:29:23.300 +would be the good ways of doing that in + +00:29:25.200 --> 00:29:25.600 +Emacs, but they don't have the mind map + +00:29:27.160 --> 00:29:27.660 +programs as well. + +00:29:30.140 --> 00:29:30.640 +[Speaker 0]: They're not as well developed. + +00:29:32.740 --> 00:29:33.240 +There are a couple mind mapping packages, + +00:29:37.200 --> 00:29:37.700 +but they're not as advanced. + +00:29:41.920 --> 00:29:42.180 +[Speaker 2]: The best ones were JavaScript web page that + +00:29:43.840 --> 00:29:44.340 +it that Emacs interacted with. + +00:29:46.180 --> 00:29:46.680 +Very well. And so they kind of, + +00:29:49.120 --> 00:29:49.620 +you know, worked around and had a little. + +00:29:51.620 --> 00:29:51.820 +Integration with the 2. + +00:29:53.420 --> 00:29:53.920 +So when you be jumping around your. + +00:29:56.200 --> 00:29:56.380 +When you'd be clicking on the web page it + +00:29:59.300 --> 00:29:59.480 +would be pointing you to different places and + +00:30:07.060 --> 00:30:07.400 +buffers okay like those are those the There's + +00:30:11.480 --> 00:30:11.680 +an like org-roam node program where it kind + +00:30:13.360 --> 00:30:13.860 +of shows the looks like a mind map. + +00:30:17.820 --> 00:30:18.040 +You can click and drag them a little bit, + +00:30:18.680 --> 00:30:19.180 +so it's a little interactive. + +00:30:27.980 --> 00:30:28.480 +[Speaker 0]: Yeah, I'm not familiar with that. + +00:30:30.160 --> 00:30:30.660 +I'll have to look into that. + +00:30:32.240 --> 00:30:32.740 +That sounds very interesting. + +00:30:36.820 --> 00:30:37.200 +[Speaker 2]: I found that I didn't know better, + +00:30:38.560 --> 00:30:39.060 +though, than Org-ROM, so it doesn't. + +00:30:43.320 --> 00:30:43.820 +[Speaker 0]: Why is that? + +00:30:47.080 --> 00:30:47.580 +[Speaker 2]: Well, 1 of the things I'm, + +00:30:51.600 --> 00:30:51.760 +I want to be able to, I don't like the + +00:30:53.200 --> 00:30:53.700 +feeling of being trapped inside org-mode + +00:30:56.040 --> 00:30:56.540 +documents. Like I want to be able to write, + +00:30:58.940 --> 00:30:59.060 +even though I don't really use Markdown and I + +00:31:00.800 --> 00:31:01.020 +like org-mode better than that. + +00:31:02.720 --> 00:31:03.220 +Like for instance, I also use the Koutline + +00:31:04.280 --> 00:31:04.780 +from the Hyperbole package. + +00:31:08.160 --> 00:31:08.360 +That's what my I got a talk on the stream of + +00:31:12.620 --> 00:31:12.700 +thought journaling for with Koutline and I + +00:31:14.060 --> 00:31:14.160 +was like, I just don't like the feeling of + +00:31:18.480 --> 00:31:18.700 +being tracked in 1 document and denote has + +00:31:21.300 --> 00:31:21.800 +the ability to it renames the file so you get + +00:31:26.020 --> 00:31:26.520 +keywords in like a PDF file so you can take + +00:31:28.100 --> 00:31:28.380 +so you can link to that with your notes + +00:31:30.540 --> 00:31:30.700 +without it all disappearing because it's not + +00:31:36.340 --> 00:31:36.440 +an org mode document. Plus the ability of + +00:31:38.520 --> 00:31:38.940 +having it run on multiple computers or with + +00:31:42.660 --> 00:31:43.160 +multiple people, the database kind of gets + +00:31:46.480 --> 00:31:46.720 +screwed up when you try running it under sync + +00:31:50.500 --> 00:31:51.000 +thing. Sync. More fragile. + +00:31:56.000 --> 00:31:56.500 +[Speaker 0]: Very interesting. Yeah. + +00:32:03.260 --> 00:32:03.680 +How far are you? So are you a regular + +00:32:06.480 --> 00:32:06.980 +practitioner of the Zettelkasten approach? + +00:32:12.180 --> 00:32:12.680 +[Speaker 2]: Trying to be. Incrementally improving it. + +00:32:16.780 --> 00:32:16.980 +I partly work too much like testing out the + +00:32:20.760 --> 00:32:21.000 +org-roam versus the notes to use it too much. + +00:32:23.300 --> 00:32:23.500 +So part of it is I just tweak with it too + +00:32:24.800 --> 00:32:25.300 +much before using it and then. + +00:32:28.740 --> 00:32:29.240 +[Speaker 0]: Oh, it's so fun to tweak it. + +00:32:32.580 --> 00:32:32.840 +[Speaker 2]: I think mostly it's as I have these tools, + +00:32:33.640 --> 00:32:34.140 +I know where they are. + +00:32:35.760 --> 00:32:35.980 +So whenever I do need them, + +00:32:37.680 --> 00:32:38.180 +I can use them, even though I don't always + +00:32:38.440 --> 00:32:38.940 +use them. + +00:32:43.680 --> 00:32:43.940 +[Speaker 0]: So I have about a thousand notes in my org + +00:32:47.720 --> 00:32:48.040 +room. Zettelkasten. I've actually, + +00:32:50.140 --> 00:32:50.320 +it's kind of cool that you can export it and + +00:32:51.460 --> 00:32:51.960 +move it into other programs. + +00:32:56.320 --> 00:32:56.520 +I have moved it to Obsidian and played with + +00:32:57.720 --> 00:32:58.180 +it in Obsidian for a while, + +00:32:59.820 --> 00:33:00.320 +maybe added to it in Obsidian, + +00:33:01.480 --> 00:33:01.980 +moved it back to Orgrim. + +00:33:07.080 --> 00:33:07.580 +But I'm not convinced. + +00:33:10.680 --> 00:33:11.180 +I mean, that I think that Nicholas Luhmann + +00:33:13.360 --> 00:33:13.700 +was very successful with it because he spent + +00:33:15.920 --> 00:33:16.420 +5 hours a day or whatever working with it. + +00:33:18.560 --> 00:33:19.060 +And I think I would have to do, + +00:33:21.180 --> 00:33:21.600 +put in a similar amount of effort to get this + +00:33:23.600 --> 00:33:24.100 +kind of benefits that he gained from it. + +00:33:26.480 --> 00:33:26.980 +I'm waiting for somebody to do a scientific + +00:33:29.200 --> 00:33:29.700 +study, controlled trials to see, + +00:33:31.720 --> 00:33:32.220 +to prove whether there's a real benefit. + +00:33:37.900 --> 00:33:38.400 +[Speaker 2]: Oh, yeah. So with the Zettelkasten, + +00:33:41.120 --> 00:33:41.320 +one of the things where you have the 1 for the + +00:33:42.180 --> 00:33:42.680 +sections, and then the 1.1, + +00:33:47.160 --> 00:33:47.480 +or you know how the notes that it does that's + +00:33:48.740 --> 00:33:49.240 +different. The denote, + +00:33:52.880 --> 00:33:53.380 +it has the ability to use a hierarchy manage, + +00:33:55.480 --> 00:33:55.640 +which Org-ROM does everything it can to + +00:33:57.380 --> 00:33:57.560 +eliminate. But you can use them both in + +00:33:59.140 --> 00:33:59.640 +tandem. They call it signatures. + +00:34:04.820 --> 00:34:05.160 +And to me, 1 of the cool features of denote + +00:34:06.820 --> 00:34:07.120 +would be being able to use like the + +00:34:09.780 --> 00:34:10.280 +signatures for the things that make sense. + +00:34:13.440 --> 00:34:13.860 +Like 1 of the ideas is if you don't exactly + +00:34:14.960 --> 00:34:15.100 +know where this is, but you know, + +00:34:15.920 --> 00:34:16.239 +it goes to the section, + +00:34:17.060 --> 00:34:17.560 +you can just use the signature. + +00:34:19.760 --> 00:34:20.080 +Maybe don't even have too much of a file + +00:34:22.679 --> 00:34:23.179 +name. Like oh, this is just another thought + +00:34:28.199 --> 00:34:28.420 +on, well you wouldn't use it for this, + +00:34:30.360 --> 00:34:30.719 +but like my day went good for reasons 1, + +00:34:33.040 --> 00:34:33.380 +2, 3, 4, 5, and you could just use the denote + +00:34:34.639 --> 00:34:34.920 +signature to do 1, 2, 3, + +00:34:37.659 --> 00:34:37.800 +4, 5, just as you have new ideas on like a + +00:34:41.840 --> 00:34:42.040 +subject, or like cars are cars are not this + +00:34:43.659 --> 00:34:44.580 +car is nice because of reasons XYZ, + +00:34:46.920 --> 00:34:47.219 +or these types of four-wheelers are nice + +00:34:48.940 --> 00:34:49.080 +because of XYZ. And you could just keep on + +00:34:50.760 --> 00:34:50.980 +doing that rather than having to get a new + +00:34:52.120 --> 00:34:52.620 +name for each 1 of those files. + +00:34:55.280 --> 00:34:55.520 +Or you could choose not to have it, + +00:34:57.780 --> 00:34:58.280 +but the ability to have it optionally in, + +00:35:01.020 --> 00:35:01.520 +to me, sounds like a really nice combo. + +00:35:03.000 --> 00:35:03.200 +Because then you + +00:35:06.140 --> 00:35:06.420 +[Speaker 0]: could read. I agree. Yeah, + +00:35:08.800 --> 00:35:09.020 +I've actually imposed a hierarchy in my + +00:35:10.320 --> 00:35:10.820 +Zettelkasten and Orgrim. + +00:35:17.680 --> 00:35:18.180 +I just, I can't imagine having random ideas. + +00:35:21.200 --> 00:35:21.700 +They need some kind of structure. + +00:35:27.500 --> 00:35:27.840 +Always have some kind of parent node to + +00:35:28.420 --> 00:35:28.920 +attach them to. + +00:35:32.740 --> 00:35:32.960 +[Speaker 2]: With the workflow I'm trying to develop with + +00:35:34.440 --> 00:35:34.840 +it, part of it is I'm just trying to optimize + +00:35:36.820 --> 00:35:37.080 +the workflow before it feels really, + +00:35:38.480 --> 00:35:38.560 +really, really good, and I don't want to + +00:35:39.720 --> 00:35:40.220 +tweak with it, or I don't know. + +00:35:42.480 --> 00:35:42.980 +Or maybe I don't always need the tool, + +00:35:45.780 --> 00:35:46.020 +but some of the distinctions it seems like + +00:35:52.400 --> 00:35:52.580 +that I want is, I want a daily journal For + +00:35:53.100 --> 00:35:53.600 +your stream of thoughts, + +00:35:56.000 --> 00:35:56.480 +then I want a separate 1 for your to do list + +00:35:57.980 --> 00:35:58.480 +because what you like. + +00:36:01.240 --> 00:36:01.440 +You want very different properties for each + +00:36:03.040 --> 00:36:03.540 +of those. Like for to-do lists, + +00:36:04.820 --> 00:36:05.320 +you want hierarchical, + +00:36:11.260 --> 00:36:11.760 +limited. But if you have more than 3 priority + +00:36:13.660 --> 00:36:13.820 +items, you don't have a priority item and + +00:36:14.820 --> 00:36:15.040 +it's not a good to-do list. + +00:36:18.480 --> 00:36:18.980 +It's just unordered thoughts. + +00:36:23.480 --> 00:36:23.680 +[Speaker 0]: it's a wishful list, because you won't get + +00:36:26.000 --> 00:36:26.500 +most of those things done beyond the first 3. + +00:36:28.180 --> 00:36:28.380 +[Speaker 2]: You're trying to- So And then when you're + +00:36:30.600 --> 00:36:31.100 +trying to do the other stuff, + +00:36:31.980 --> 00:36:32.480 +the stream of thoughts, + +00:36:34.640 --> 00:36:35.080 +all that stuff I probably don't want to go + +00:36:36.720 --> 00:36:36.900 +straight into like my Zettelkasten because + +00:36:37.440 --> 00:36:37.940 +some of those problems, + +00:36:42.660 --> 00:36:43.160 +like it's noisy, it might be redundant, + +00:36:45.300 --> 00:36:45.520 +you don't know how it fits into it because + +00:36:46.920 --> 00:36:47.080 +you haven't done that processing on it. + +00:36:47.960 --> 00:36:48.460 +This hasn't been refined. + +00:36:53.000 --> 00:36:53.140 +So, like, you don't want to refine it. + +00:36:54.960 --> 00:36:55.320 +Like, I find that spell checking is + +00:36:56.680 --> 00:36:56.920 +detrimental to me. I don't want spell + +00:36:58.520 --> 00:36:58.840 +checking. I don't want spell checking. + +00:37:00.200 --> 00:37:00.600 +I don't want syntax highlighting. + +00:37:04.040 --> 00:37:04.540 +I just want to talk or to just write. + +00:37:07.020 --> 00:37:07.520 +If I have mistakes, I can turn on that later, + +00:37:08.800 --> 00:37:09.220 +do it. Because otherwise, + +00:37:13.340 --> 00:37:13.740 +it will distract me and makes that process + +00:37:20.140 --> 00:37:20.280 +[Speaker 0]: Yep, yep, definitely interferes with the + +00:37:20.280 --> 00:37:20.780 +flow. + +00:37:24.840 --> 00:37:25.080 +[Speaker 2]: worse. So yeah, when you're so yeah when + +00:37:28.080 --> 00:37:28.440 +you're doing the getting things done like + +00:37:30.040 --> 00:37:30.240 +that's why I want them would be want would + +00:37:32.360 --> 00:37:32.600 +want them in separate files is that you want + +00:37:34.160 --> 00:37:34.660 +them like ordered, numbered lists, + +00:37:38.980 --> 00:37:39.480 +smaller. And then with the other, + +00:37:40.440 --> 00:37:40.800 +with the stream of thought, + +00:37:42.340 --> 00:37:42.840 +with journaling, you'd want it just + +00:37:45.240 --> 00:37:45.740 +unordered. Thoughts land wherever they may. + +00:37:49.140 --> 00:37:49.640 +Maybe not even like machine-generated + +00:37:51.400 --> 00:37:51.660 +timestamps, So you don't even have to worry + +00:37:52.440 --> 00:37:52.940 +about the names of it, + +00:37:55.080 --> 00:37:55.380 +as an example. So yeah, + +00:37:56.960 --> 00:37:57.160 +very different properties for what you want + +00:37:58.260 --> 00:37:58.760 +for both of those modalities. + +00:38:06.340 --> 00:38:06.440 +[Speaker 0]: So you saw, perhaps, in that snippet that I + +00:38:07.860 --> 00:38:08.360 +had that at, you know, + +00:38:10.440 --> 00:38:10.580 +working on my to-do list at the start of the + +00:38:13.080 --> 00:38:13.580 +day, but in a certain sense that is not ideal + +00:38:20.320 --> 00:38:20.820 +time. I really haven't optimized the timing + +00:38:22.640 --> 00:38:23.040 +of assembly of the to-do list, + +00:38:24.020 --> 00:38:24.520 +I think, in retrospect. + +00:38:27.540 --> 00:38:27.880 +It's just by lifelong habit. + +00:38:29.060 --> 00:38:29.560 +I do that at the beginning of the day, + +00:38:32.860 --> 00:38:33.000 +but probably would be better to do it at + +00:38:34.360 --> 00:38:34.860 +night or the night before. + +00:38:38.000 --> 00:38:38.500 +And so you sort of prime your brain to go, + +00:38:41.180 --> 00:38:41.680 +just get up and go, go after those items. + +00:38:46.360 --> 00:38:46.680 +You were, you maybe you want to revise the + +00:38:49.120 --> 00:38:49.620 +items a little bit after sleeping on it, + +00:38:52.360 --> 00:38:52.820 +but after your subconscious has worked on + +00:38:57.500 --> 00:38:57.660 +those items. Do you have a daily routine that + +00:38:59.680 --> 00:38:59.900 +you follow in terms of generating those kind + +00:39:00.020 --> 00:39:00.520 +of lists? + +00:39:05.660 --> 00:39:06.160 +[Speaker 2]: No. As I said, mostly I just got scaffolding + +00:39:08.040 --> 00:39:08.300 +for this stuff when I want to do it. + +00:39:10.520 --> 00:39:10.760 +I enjoy building the scaffolding and I know + +00:39:12.340 --> 00:39:12.600 +where the tools are when I need it. + +00:39:14.540 --> 00:39:14.760 +And I start using them when I need it, + +00:39:17.040 --> 00:39:17.540 +but I don't have it too consistent. + +00:39:29.720 --> 00:39:30.220 +[Speaker 0]: So OK, so you've looked so far at denote and + +00:39:35.300 --> 00:39:35.800 +org-roam, and you're using k-outline. + +00:39:39.520 --> 00:39:39.840 +And are there other tools that you've + +00:39:39.840 --> 00:39:40.340 +explored? + +00:39:44.380 --> 00:39:44.880 +[Speaker 2]: I've tried using whisper.el + +00:39:50.720 --> 00:39:50.920 +and nerd dictation to do What your talk was + +00:39:53.560 --> 00:39:53.760 +about? Speaking speech to text to see how + +00:39:56.720 --> 00:39:56.840 +that changes Because it does change what you + +00:40:01.020 --> 00:40:01.120 +think What you write down when you speak it + +00:40:05.080 --> 00:40:05.500 +rather than write it. Same thing as when + +00:40:07.420 --> 00:40:07.540 +you're thinking about when you eliminate the + +00:40:08.940 --> 00:40:09.440 +editing, it changes the way you write. + +00:40:11.900 --> 00:40:12.260 +When you have the spell checking, + +00:40:14.100 --> 00:40:14.340 +it changes the way you write to a much + +00:40:20.280 --> 00:40:20.600 +smaller degree. But that's the stuff I really + +00:40:23.560 --> 00:40:24.060 +haven't gotten working as well, + +00:40:25.120 --> 00:40:25.620 +or underdeveloped. + +00:40:30.160 --> 00:40:30.660 +[Speaker 0]: So the dictated text winds up, + +00:40:37.740 --> 00:40:37.900 +I'll move it in. Often I move it into on + +00:40:40.920 --> 00:40:41.200 +Overleaf, this website for a lot of tech + +00:40:44.080 --> 00:40:44.580 +documents. I have a plug-in for Rightful, + +00:40:50.520 --> 00:40:51.020 +And I use that to clean up my word choices + +00:40:56.160 --> 00:40:56.660 +and some grammar. And I use Grammarly. + +00:41:00.920 --> 00:41:01.080 +I'll copy and paste. It just depends on the + +00:41:01.680 --> 00:41:02.080 +nature of the writing, + +00:41:05.720 --> 00:41:06.220 +how serious it is, how polished it has to be. + +00:41:12.620 --> 00:41:13.080 +If I, if it's really vital, + +00:41:14.440 --> 00:41:14.800 +like for a grant application or something, + +00:41:16.880 --> 00:41:17.380 +I'll paste that into Grammarly and work on + +00:41:22.160 --> 00:41:22.540 +trying to get the writing level to the lowest + +00:41:26.100 --> 00:41:26.280 +possible grade level to make it as clear as + +00:41:30.040 --> 00:41:30.220 +possible to as wide of an audience as + +00:41:34.740 --> 00:41:34.900 +possible. 1 of the things I kind + +00:41:38.000 --> 00:41:38.500 +[Speaker 2]: of wish with all the spell checking grammarly + +00:41:40.440 --> 00:41:40.940 +is I kind of wish you could say, + +00:41:48.620 --> 00:41:49.120 +hey, what would the subtle cast in person + +00:41:52.120 --> 00:41:52.620 +think of what I wrote who what would einstein + +00:41:54.200 --> 00:41:54.400 +think of what I wrote because rather than + +00:41:57.340 --> 00:41:57.660 +just trying to make 1 uniform way of talking + +00:41:59.960 --> 00:42:00.440 +it's like people talk differently and that's + +00:42:04.080 --> 00:42:04.240 +an advantage and I can't I really wish like + +00:42:07.440 --> 00:42:07.820 +you maybe these GPT programs could do well. + +00:42:10.840 --> 00:42:11.000 +I really wish it could help you with the + +00:42:16.160 --> 00:42:16.420 +grammar, that maybe give you thoughts on what + +00:42:18.460 --> 00:42:18.720 +your notes are. What does this person think + +00:42:20.220 --> 00:42:20.380 +of your thoughts? What does this person think + +00:42:20.457 --> 00:42:20.464 +of your thoughts? Well, + +00:42:20.640 --> 00:42:20.940 +does this person think of your thoughts? + +00:42:22.280 --> 00:42:22.540 +Well, does this person think of your + +00:42:22.540 --> 00:42:23.040 +thoughts? + +00:42:27.720 --> 00:42:28.140 +[Speaker 0]: That's true. Yeah, I could probably do that + +00:42:31.560 --> 00:42:32.060 +even through chat GDP now. + +00:42:35.140 --> 00:42:35.640 +I haven't spent time trying that out. + +00:42:39.820 --> 00:42:40.320 +But I bet that capabilities are already. + +00:42:44.340 --> 00:42:44.480 +It would be nice if it was like built in to + +00:42:46.240 --> 00:42:46.740 +Emacs, right? It's a package. + +00:42:49.020 --> 00:42:49.520 +Yeah. That'd be very cool. + +00:42:52.260 --> 00:42:52.660 +[Speaker 2]: Grammarly have some sort of, + +00:42:55.040 --> 00:42:55.320 +like, the grammar where they help you the way + +00:42:57.660 --> 00:42:58.040 +you write. Like, for instance, + +00:42:59.080 --> 00:42:59.580 +removing redundant words. + +00:43:02.720 --> 00:43:03.220 +And Yeah, it's supposed to be like beyond + +00:43:04.820 --> 00:43:05.320 +just spell checking, right? + +00:43:08.240 --> 00:43:08.740 +[Speaker 0]: Right. So, and there's actually a Grammarly + +00:43:13.300 --> 00:43:13.520 +package for Emacs, and you get some of the + +00:43:14.540 --> 00:43:15.040 +functionality out of it. + +00:43:17.420 --> 00:43:17.560 +I've paid for the subscription to get the + +00:43:21.240 --> 00:43:21.460 +advanced features, but I've maybe I don't + +00:43:23.300 --> 00:43:23.800 +have my configuration set up correctly. + +00:43:27.280 --> 00:43:27.780 +I just found it was easier to copy and paste + +00:43:31.780 --> 00:43:32.280 +a paragraph at a time into the desktop + +00:43:36.460 --> 00:43:36.780 +application and it will go through and find + +00:43:38.900 --> 00:43:39.400 +those redundancies, junk English. + +00:43:48.080 --> 00:43:48.580 +[Speaker 2]: It would be really interesting trying to have + +00:43:52.640 --> 00:43:52.760 +1 of these That was my problem with a lot of + +00:43:55.840 --> 00:43:56.120 +the grammarly type Programs is I'm I want + +00:43:57.620 --> 00:43:57.900 +something that would do that like be real + +00:43:59.720 --> 00:43:59.980 +interesting seeing 1 that's like an old + +00:44:03.840 --> 00:44:03.960 +English type thing or like Lumen person where + +00:44:06.540 --> 00:44:07.040 +it's just like how does this person write and + +00:44:09.960 --> 00:44:10.160 +Because it would be it would spit out + +00:44:11.160 --> 00:44:11.660 +something a lot different. + +00:44:13.440 --> 00:44:13.680 +Just different. Like, yeah, + +00:44:14.440 --> 00:44:14.940 +you put different people. + +00:44:17.760 --> 00:44:17.900 +[Speaker 0]: Most definitely, yes. They would have a + +00:44:20.280 --> 00:44:20.740 +completely different thinking and writing + +00:44:28.740 --> 00:44:28.940 +style. And so the purpose of doing that would + +00:44:34.300 --> 00:44:34.640 +be to stimulate A new way of thinking or + +00:44:36.340 --> 00:44:36.840 +writing I guess on your part + +00:44:40.600 --> 00:44:40.960 +[Speaker 2]: the purpose of writing is to communicate It + +00:44:43.540 --> 00:44:43.740 +and writing you know 1 of the targets for + +00:44:47.020 --> 00:44:47.320 +that could be yourself so it's like I'd much + +00:44:50.380 --> 00:44:50.880 +rather have a comprehensible sentence than a + +00:44:57.500 --> 00:44:57.720 +truly correct 1. 1 of those is far more + +00:45:00.780 --> 00:45:01.280 +valuable and far more correct English or + +00:45:06.560 --> 00:45:07.060 +[Speaker 0]: Yeah, one's more effective at communicating + +00:45:08.860 --> 00:45:09.360 +to yourself. Yes. + +00:45:11.320 --> 00:45:11.720 +[Speaker 2]: language. Well, one's using the tool, + +00:45:15.300 --> 00:45:15.520 +one's the other you're trying to be used by + +00:45:19.080 --> 00:45:19.580 +the tool. And they're not the same thing. + +00:45:29.780 --> 00:45:30.280 +[Speaker 0]: That's true. Well, I view myself as being + +00:45:35.140 --> 00:45:35.640 +responsible for my writing and being the + +00:45:40.200 --> 00:45:40.520 +final judge of it and as a scientist I have + +00:45:49.060 --> 00:45:49.300 +to my mantra is it's got to be clear and then + +00:45:52.600 --> 00:45:53.100 +precise and then concise in that order. + +00:45:56.580 --> 00:45:56.760 +And I claim that, you know, + +00:45:58.440 --> 00:45:58.780 +that's the order with which I go through + +00:46:01.500 --> 00:46:01.780 +doing revisions. Clarity is, + +00:46:02.500 --> 00:46:02.880 +you know, if it's not clear, + +00:46:05.420 --> 00:46:05.600 +it's useless. It's got to be clear to me, + +00:46:08.240 --> 00:46:08.740 +but it's got to be clear to a lot of people + +00:46:10.920 --> 00:46:11.420 +for whom English is not a first language. + +00:46:15.520 --> 00:46:15.720 +And then after that, I got to worry about + +00:46:19.020 --> 00:46:19.520 +precision and then conciseness, + +00:46:24.140 --> 00:46:24.280 +but those can't be done at the expense of + +00:46:27.720 --> 00:46:28.220 +clarity. So it's quite a battle. + +00:46:32.320 --> 00:46:32.640 +[Speaker 2]: That goes back on the to-do list, + +00:46:35.440 --> 00:46:35.860 +where it's like if you have more than 3 items + +00:46:39.480 --> 00:46:39.660 +like here the purpose of doing that is to + +00:46:43.080 --> 00:46:43.580 +help or grant of a to-do list is help is to + +00:46:45.480 --> 00:46:45.680 +Have you help choose what you're going to do + +00:46:47.680 --> 00:46:47.840 +for the day. Which is why if you have more + +00:46:50.660 --> 00:46:50.860 +than 3 items, if you have 50 items on there, + +00:46:52.860 --> 00:46:53.320 +you're not going to get 50 of those items + +00:46:55.920 --> 00:46:56.040 +done. So maybe you pick the easiest ones to + +00:46:58.620 --> 00:46:59.020 +do, not necessarily the ones that you want or + +00:47:03.340 --> 00:47:03.580 +need to be done. So it's like the process of + +00:47:06.200 --> 00:47:06.380 +choosing those, like, I don't know, + +00:47:07.640 --> 00:47:08.140 +like I found that a very good rules, + +00:47:10.800 --> 00:47:11.300 +like up to 3 priority items if you, + +00:47:13.260 --> 00:47:13.440 +and then also when you look back and you see + +00:47:14.440 --> 00:47:14.940 +that you did those 3 items, + +00:47:18.460 --> 00:47:18.680 +Who cares about this? I'd rather get those 3 + +00:47:20.080 --> 00:47:20.580 +items done than any number of secondary + +00:47:20.640 --> 00:47:21.140 +tasks. + +00:47:26.320 --> 00:47:26.820 +[Speaker 0]: Yes, I, yeah, you're very, + +00:47:28.440 --> 00:47:28.940 +very right about that. + +00:47:32.380 --> 00:47:32.640 +I don't, I used to, you know, + +00:47:36.400 --> 00:47:36.900 +use a pattern of assigning letters. + +00:47:39.440 --> 00:47:39.720 +And so you have like, you know, + +00:47:41.280 --> 00:47:41.780 +based on like a hierarchy of, + +00:47:43.340 --> 00:47:43.840 +you've got the urgent and important, + +00:47:47.300 --> 00:47:47.800 +of course, that you got to deal with those. + +00:47:50.280 --> 00:47:50.780 +And then the next thing down is the important + +00:48:00.060 --> 00:48:00.300 +and so on. But I tend to just generate these + +00:48:03.600 --> 00:48:04.000 +terribly long lists that most of those items + +00:48:06.260 --> 00:48:06.760 +would go on what is known as a grass catchers + +00:48:09.180 --> 00:48:09.680 +list of things that you may get to someday, + +00:48:11.780 --> 00:48:12.280 +but there's no way you can get to them today. + +00:48:16.120 --> 00:48:16.620 +But I feel compelled, I need to capture them. + +00:48:18.260 --> 00:48:18.760 +I may want to do them eventually. + +00:48:20.920 --> 00:48:21.420 +They wind up on my list. + +00:48:24.660 --> 00:48:24.800 +[Speaker 2]: Oh yeah, my idea on that is like with a + +00:48:26.480 --> 00:48:26.980 +Zettelkasten where you have the day thoughts + +00:48:29.380 --> 00:48:29.580 +and the day journal, then you have your + +00:48:31.800 --> 00:48:32.160 +Zettelkasten which I don't think should have + +00:48:34.740 --> 00:48:34.960 +too close of a connection because one's a lot + +00:48:37.940 --> 00:48:38.440 +more, what's the word? + +00:48:40.080 --> 00:48:40.580 +[Speaker 0]: It's a knowledge base. + +00:48:43.940 --> 00:48:44.440 +[Speaker 2]: Optimized. Yes, one's more processed. + +00:48:45.280 --> 00:48:45.760 +Yeah, that's the word. + +00:48:47.040 --> 00:48:47.440 +Yeah, one's actually much more processed. + +00:48:50.220 --> 00:48:50.640 +The other is you don't want that process + +00:48:52.840 --> 00:48:53.240 +because you want it to flow from your head + +00:48:54.480 --> 00:48:54.980 +with as little friction as possible. + +00:48:59.440 --> 00:48:59.940 +The other 1 you want to be processed so that + +00:49:01.800 --> 00:49:02.120 +when you look it up and stuff like that's + +00:49:04.840 --> 00:49:05.280 +more efficient Same thing with your to-do + +00:49:06.380 --> 00:49:06.680 +things. So like oh, yeah, + +00:49:09.440 --> 00:49:09.640 +I guess there's 1 more Category like I + +00:49:11.780 --> 00:49:11.980 +thought I found my 3 favorite way rather than + +00:49:15.720 --> 00:49:16.220 +like priority 123 is primary tasks which + +00:49:17.960 --> 00:49:18.280 +basically generally goes up to 3, + +00:49:20.380 --> 00:49:20.460 +secondary tasks, and then I like to have a + +00:49:22.540 --> 00:49:23.040 +third category, unplanned tasks, + +00:49:25.840 --> 00:49:26.180 +and I just have those wrote down in a heading + +00:49:28.520 --> 00:49:28.900 +in an org mode file, and then I put the tasks + +00:49:32.160 --> 00:49:32.660 +in there, rather than using the agenda, + +00:49:33.800 --> 00:49:34.040 +like too much, I don't know, + +00:49:40.240 --> 00:49:40.740 +just I found that that was my favorite way of + +00:49:43.480 --> 00:49:43.820 +doing it and then you have like another file + +00:49:47.840 --> 00:49:48.000 +that would just be your dump of anything you + +00:49:51.440 --> 00:49:51.660 +want to do and that would be like that you + +00:49:57.040 --> 00:49:57.540 +could pull from to get your day or I guess + +00:49:59.240 --> 00:49:59.440 +something that's actually better than a day + +00:50:01.560 --> 00:50:01.720 +is doing it all by a week at a time I found + +00:50:03.160 --> 00:50:03.660 +that that's actually a lot nicer because + +00:50:06.600 --> 00:50:06.840 +thinking about what you do in a week seems + +00:50:09.480 --> 00:50:09.840 +like a nicer unit, where you have a week, + +00:50:10.520 --> 00:50:11.020 +then you have your day, + +00:50:13.360 --> 00:50:13.780 +and then you have the 3 categories of + +00:50:16.500 --> 00:50:17.000 +priority, secondary, and unplanned. + +00:50:20.860 --> 00:50:20.920 +At least that's been my favorite iteration on + +00:50:30.840 --> 00:50:31.340 +[Speaker 0]: thought process workflow. + +00:50:31.500 --> 00:50:31.640 +[Speaker 2]: the week of the to-do I had + +00:50:33.820 --> 00:50:34.320 +[Speaker 0]: a colleague that was very effective at + +00:50:37.280 --> 00:50:37.780 +planning on a weekly basis and he would just + +00:50:41.580 --> 00:50:41.900 +get his weekly list of things to get done and + +00:50:43.640 --> 00:50:43.860 +he was very good at pounding through that + +00:50:45.380 --> 00:50:45.880 +list and getting them done. + +00:50:49.400 --> 00:50:49.740 +I have been too much of a day-oriented person + +00:50:54.020 --> 00:50:54.200 +and a week-oriented person to adapt his + +00:50:56.760 --> 00:50:57.260 +approach, but I've been considering that too. + +00:51:03.080 --> 00:51:03.520 +I think what I don't do enough of is pulling + +00:51:05.640 --> 00:51:06.140 +back to the month level, + +00:51:08.100 --> 00:51:08.600 +semester level, year level, + +00:51:10.900 --> 00:51:11.400 +5 year level, 10 year level. + +00:51:11.880 --> 00:51:12.380 +And... + +00:51:16.000 --> 00:51:16.200 +[Speaker 2]: That's the advantage of finding it by a week + +00:51:17.960 --> 00:51:18.120 +is like you can have like so you'd have your + +00:51:20.060 --> 00:51:20.560 +week and then maybe you have like 1 section + +00:51:24.440 --> 00:51:24.660 +after Friday or last day of the week and this + +00:51:27.660 --> 00:51:28.160 +is like your this is just your like staging + +00:51:30.300 --> 00:51:30.460 +so this is where you stage all the tasks and + +00:51:32.560 --> 00:51:32.720 +then what like you can just stay in your + +00:51:37.020 --> 00:51:37.280 +staging write them all down and then use alt + +00:51:39.860 --> 00:51:40.040 +and your arrow keys to quickly reorder all of + +00:51:43.340 --> 00:51:43.640 +them in the week and then when you're looking + +00:51:45.800 --> 00:51:46.300 +at 1 day and you're just looking at ordering + +00:51:48.820 --> 00:51:48.960 +everything well it makes a lot of sense when + +00:51:51.720 --> 00:51:51.960 +you just say, I don't really want to do that. + +00:51:53.160 --> 00:51:53.660 +Like I want this done this week. + +00:51:56.260 --> 00:51:56.500 +I don't necessarily want it done on this day. + +00:51:58.520 --> 00:51:58.740 +So it just, that's why I found that the week + +00:52:00.280 --> 00:52:00.780 +approach works a lot nicer even. + +00:52:09.920 --> 00:52:10.260 +[Speaker 0]: of a staging time you like schedule some time + +00:52:11.880 --> 00:52:12.380 +in your week to do the staging. + +00:52:14.620 --> 00:52:14.960 +[Speaker 2]: Yeah. Is that way The staging is more of just + +00:52:16.840 --> 00:52:16.960 +like, these are the things I would like to + +00:52:19.440 --> 00:52:19.940 +get done. And then when you schedule it, + +00:52:23.360 --> 00:52:23.800 +then you kind of schedule it by just using + +00:52:26.240 --> 00:52:26.740 +the Alt-Left key, the Alt-Arrow keys to just, + +00:52:28.380 --> 00:52:28.580 +oh, I want this done. It looks like this + +00:52:29.860 --> 00:52:30.040 +would work really good on this day. + +00:52:31.620 --> 00:52:32.120 +This 1 looks like it would work on this day. + +00:52:38.800 --> 00:52:39.300 +[Speaker 0]: A, you still utilize org agenda? + +00:52:45.140 --> 00:52:45.640 +[Speaker 2]: I try to, I don't know, + +00:52:49.120 --> 00:52:49.540 +I found that it works at least better without + +00:52:52.120 --> 00:52:52.620 +it. Yeah, that's fine. + +00:52:54.020 --> 00:52:54.340 +Because that way I also get a log of + +00:53:00.020 --> 00:53:00.140 +everything I've done, which I can't find a + +00:53:03.240 --> 00:53:03.400 +way that, it seems easier to just make new + +00:53:06.380 --> 00:53:06.760 +files for it. And rather than, + +00:53:08.160 --> 00:53:08.660 +like you could use it with Org Agenda, + +00:53:11.540 --> 00:53:12.040 +but like 1 of the things that you want is + +00:53:14.040 --> 00:53:14.540 +with it is to look back at it, + +00:53:18.380 --> 00:53:18.880 +reflect. And so like if you have the, + +00:53:23.360 --> 00:53:23.640 +if you have, if you open up the file with 2 + +00:53:25.580 --> 00:53:25.760 +levels or 3 levels of headings to where you + +00:53:26.780 --> 00:53:27.040 +just see the priority task, + +00:53:29.800 --> 00:53:30.300 +you can get a very nice overview of saying, + +00:53:33.860 --> 00:53:34.360 +I did my priority task this day. + +00:53:38.760 --> 00:53:39.100 +So you get the numbers next to the things. + +00:53:40.200 --> 00:53:40.700 +And so you can easily just say, + +00:53:41.820 --> 00:53:41.980 +I've done this. I mean, + +00:53:43.360 --> 00:53:43.520 +it would be nice if I could figure out a way + +00:53:45.240 --> 00:53:45.740 +of doing agenda to give me percentages. + +00:53:50.680 --> 00:53:51.180 +But I haven't figured that out. + +00:53:54.280 --> 00:53:54.780 +Seeing the granular level, + +00:53:57.100 --> 00:53:57.340 +I can easily scan that with my eyes. + +00:53:59.720 --> 00:53:59.900 +So I just did it by hand rather than the + +00:53:59.900 --> 00:54:00.400 +agenda. + +00:54:06.420 --> 00:54:06.600 +[Speaker 0]: Yeah, I've, I've tried to use agenda a few + +00:54:10.400 --> 00:54:10.900 +times and pretty seriously, + +00:54:14.800 --> 00:54:15.060 +but I keep bouncing off it. + +00:54:17.920 --> 00:54:18.160 +I think I get too many things built in or + +00:54:21.200 --> 00:54:21.700 +scheduled and I just don't get to them. + +00:54:26.000 --> 00:54:26.500 +I feel bad about it and I wind up abandoning + +00:54:31.220 --> 00:54:31.500 +it. So that's 1 area where there's probably + +00:54:34.820 --> 00:54:35.040 +some potential for optimizing and making that + +00:54:40.260 --> 00:54:40.440 +work better. There's a lot of customizing you + +00:54:42.280 --> 00:54:42.780 +can do with Agenda. It's amazing. + +00:54:44.540 --> 00:54:45.040 +[Speaker 2]: For me, it was though, + +00:54:48.480 --> 00:54:48.980 +I wanted there to be a separation between the + +00:54:52.120 --> 00:54:52.420 +daily to-do lists and like your grab bag + +00:54:54.480 --> 00:54:54.600 +which I think agenda works a lot better for a + +00:54:58.040 --> 00:54:58.440 +grab bag. I want a nice way of looking back + +00:55:01.560 --> 00:55:02.060 +at my to-do daily to-do logs. + +00:55:05.980 --> 00:55:06.340 +So I kind of want them to be separated, + +00:55:08.480 --> 00:55:08.980 +so I just did them separate. + +00:55:12.540 --> 00:55:12.680 +With the agenda, I could never figure out + +00:55:14.060 --> 00:55:14.560 +exactly how I want that to work, + +00:55:15.620 --> 00:55:16.120 +how the files would look, + +00:55:18.580 --> 00:55:18.960 +and how all the Emacs settings would interact + +00:55:21.300 --> 00:55:21.660 +with it. I mean, I'm sure I could, + +00:55:28.780 --> 00:55:29.160 +but that's why I opted for weekly files. + +00:55:34.960 --> 00:55:35.140 +Or at least That's my most refined idea on + +00:55:35.280 --> 00:55:35.780 +the process. + +00:55:41.000 --> 00:55:41.400 +[Speaker 0]: That's a good idea. So I've taken my approach + +00:55:43.940 --> 00:55:44.440 +is a little different that I'm generating + +00:55:46.760 --> 00:55:46.960 +this text on a daily basis and popping it + +00:55:52.660 --> 00:55:52.900 +into this to 1 document file per day and a + +00:55:59.020 --> 00:55:59.300 +like a diary on Overleaf as a big so it winds + +00:56:01.950 --> 00:56:02.450 +[Speaker 2]: sections + +00:56:05.440 --> 00:56:05.600 +[Speaker 0]: up being 365 and where every month is a + +00:56:11.400 --> 00:56:11.640 +chapter and it's compiled quickly enough even + +00:56:13.100 --> 00:56:13.480 +though it's often up to 1,000 + +00:56:14.780 --> 00:56:15.280 +pages long by the end of the year. + +00:56:17.220 --> 00:56:17.500 +And I have all these, of course, + +00:56:19.240 --> 00:56:19.700 +with the PDF, I can search through it. + +00:56:22.540 --> 00:56:22.760 +So that's not as you can't do the kind of + +00:56:24.380 --> 00:56:24.560 +really sophisticated searching that you can + +00:56:29.340 --> 00:56:29.840 +do with Org Mode. But just doing that, + +00:56:33.620 --> 00:56:33.800 +It sure has been very helpful in digging up + +00:56:39.440 --> 00:56:39.680 +information, like the little protocols on how + +00:56:42.960 --> 00:56:43.460 +I attack, accomplish a certain task that I + +00:56:45.420 --> 00:56:45.920 +have to do a year later, + +00:56:50.440 --> 00:56:50.540 +or to have a record of what I did on a + +00:56:54.220 --> 00:56:54.400 +certain day and then somebody above me might + +00:56:57.100 --> 00:56:57.340 +be trying to hold me to account what got + +00:56:59.580 --> 00:57:00.080 +done. I can look that up pretty very quickly. + +00:57:05.140 --> 00:57:05.320 +It's documented. I find that to be just any + +00:57:09.520 --> 00:57:09.840 +kind of thorough documentation system is very + +00:57:16.080 --> 00:57:16.320 +[Speaker 2]: I also mess with having it all in 1 file + +00:57:17.440 --> 00:57:17.940 +rather than by a weak file. + +00:57:20.140 --> 00:57:20.640 +[Speaker 0]: useful. And at least what I did. + +00:57:21.820 --> 00:57:22.320 +I ran into trouble with, + +00:57:25.380 --> 00:57:25.880 +like, once you get a lot of items, + +00:57:27.040 --> 00:57:27.540 +like if you have 1,000 + +00:57:30.580 --> 00:57:30.780 +items, headings, I've had org files with + +00:57:33.680 --> 00:57:34.180 +1,000 headings. It can be so hard to scroll + +00:57:38.960 --> 00:57:39.280 +through. Maybe it's some limitations I'm run + +00:57:42.240 --> 00:57:42.740 +into with the Emacs being single threaded. + +00:57:49.120 --> 00:57:49.620 +[Speaker 2]: At least with, yeah. Yeah. + +00:57:52.420 --> 00:57:52.920 +It was like, that's 1 of the things is like, + +00:57:54.240 --> 00:57:54.520 +how exactly do you want this, + +00:57:55.920 --> 00:57:56.120 +the information structured because it can + +00:57:56.820 --> 00:57:57.320 +change how it's retrieved. + +00:58:00.260 --> 00:58:00.760 +[Speaker 0]: Ooh, most definitely. Most definitely. + +00:58:08.200 --> 00:58:08.560 +[Speaker 2]: So as an example, when I was doing the daily + +00:58:14.760 --> 00:58:14.960 +logs and I put it all in the date and then + +00:58:15.700 --> 00:58:16.200 +the priority, secondary, + +00:58:21.980 --> 00:58:22.100 +unplanned tasks, and then I had it stay at + +00:58:24.940 --> 00:58:25.120 +that, get auto expanded by that level by + +00:58:27.280 --> 00:58:27.780 +default so I didn't see the individual task + +00:58:30.720 --> 00:58:30.860 +and you and then I had a but And then it + +00:58:33.120 --> 00:58:33.420 +would say like I complete 205 or something + +00:58:34.440 --> 00:58:34.940 +like that of secondary tasks. + +00:58:38.000 --> 00:58:38.400 +And then just being able just to quickly scan + +00:58:39.740 --> 00:58:40.240 +all the days and say, oh, + +00:58:42.960 --> 00:58:43.260 +it just, the feedback you get from that is + +00:58:46.300 --> 00:58:46.500 +worth a lot. And I don't think it's + +00:58:47.920 --> 00:58:48.120 +something, it's not something I could think + +00:58:49.320 --> 00:58:49.820 +of how you do an agenda. + +00:58:53.300 --> 00:58:53.540 +Even though I got done in the text files just + +00:58:57.260 --> 00:58:57.400 +because you get that doesn't expand all the + +00:58:59.580 --> 00:58:59.800 +way so you so you can quickly just see on + +00:59:01.940 --> 00:59:02.140 +this day I did this well on this day I did + +00:59:05.800 --> 00:59:06.300 +this well all within and 4 lines per day. + +00:59:11.040 --> 00:59:11.420 +So it's not, that doesn't, + +00:59:12.920 --> 00:59:13.420 +that's not very visually verbose. + +00:59:16.920 --> 00:59:17.080 +Probably about as visually verbose as you + +00:59:18.640 --> 00:59:19.140 +want it. They're not super long. + +00:59:23.000 --> 00:59:23.200 +You easily see the 2 of 3 and stuff like that + +00:59:24.920 --> 00:59:25.420 +that you get done so you can quickly and say, + +00:59:29.380 --> 00:59:29.600 +oh well, these are the days where I got my + +00:59:31.300 --> 00:59:31.800 +primary tasks done or this week, + +00:59:36.340 --> 00:59:36.500 +and this day I didn't do it well and you + +00:59:38.300 --> 00:59:38.740 +could helps you correlate like your feelings + +00:59:42.440 --> 00:59:42.620 +with your to-do lists and journals and + +00:59:42.620 --> 00:59:43.120 +whatnot. + +00:59:48.940 --> 00:59:49.440 +[Speaker 0]: Yeah I think that's very powerful. + +00:59:53.300 --> 00:59:53.800 +Because it's summarizing capability. + +00:59:57.560 --> 00:59:58.060 +It allows you to, you know, + +01:00:00.656 --> 01:00:00.784 +pull back and get an overview. + +01:00:01.040 --> 01:00:01.540 +Get an overview. + +01:00:07.580 --> 01:00:08.080 +[Speaker 2]: And yeah, as I said, it's like the feedback + +01:00:10.600 --> 01:00:10.760 +from that almost when I did that, + +01:00:12.620 --> 01:00:12.800 +it feels like half the reason or should be + +01:00:14.580 --> 01:00:14.900 +like half the reason is and it's something + +01:00:19.120 --> 01:00:19.340 +that I don't if you use the agenda as it is, + +01:00:21.220 --> 01:00:21.360 +you wouldn't, I don't know how you would get + +01:00:23.160 --> 01:00:23.360 +it, like saying, like looking at the week by + +01:00:25.080 --> 01:00:25.580 +week basis, breakdowns, + +01:00:27.120 --> 01:00:27.620 +you might be able to get like percentages, + +01:00:30.400 --> 01:00:30.900 +which would be nice. Like I did this well, + +01:00:33.700 --> 01:00:34.120 +or like habit, I don't, + +01:00:35.640 --> 01:00:35.920 +there might be things that could offer you + +01:00:39.700 --> 01:00:40.200 +but. Yeah, + +01:00:46.780 --> 01:00:47.280 +[Speaker 0]: so I'm pretty obsessed about tracking effort + +01:00:48.560 --> 01:00:49.060 +on various kinds of projects, + +01:00:52.020 --> 01:00:52.520 +or various kinds of activities, + +01:00:57.880 --> 01:00:58.360 +and to get some feedback in that regard. + +01:00:59.500 --> 01:01:00.000 +And then you, but you got the, + +01:01:02.040 --> 01:01:02.540 +So I define a project as anything that + +01:01:06.300 --> 01:01:06.780 +requires work at different points in time, + +01:01:07.040 --> 01:01:07.540 +more than 1 + +01:01:15.300 --> 01:01:15.520 +[Speaker 2]: time. I'll email you my org mode template + +01:01:17.560 --> 01:01:18.060 +that I made that demonstrates that. + +01:01:22.200 --> 01:01:22.700 +I don't know if you, do you have your email + +01:01:24.520 --> 01:01:25.020 +in your talk notes or anything? + +01:01:29.380 --> 01:01:29.700 +[Speaker 0]: Okay. I think I should have it on the first + +01:01:31.560 --> 01:01:32.060 +slide. There should be my email address. + +01:01:40.560 --> 01:01:41.060 +I can add it to my talk notes. + +01:01:46.920 --> 01:01:47.040 +[Speaker 2]: Okay. Would you want me to show it to you at + +01:01:48.940 --> 01:01:49.440 +[Speaker 0]: that'd be great. + +01:01:52.600 --> 01:01:53.100 +[Speaker 2]: all? Sure, All right, let's see. + +01:02:20.842 --> 01:02:20.905 +I'm going to share screen button, + +01:02:21.220 --> 01:02:21.520 +right? There's a share screen button, + +01:02:21.520 --> 01:02:22.020 +right? + +01:02:26.160 --> 01:02:26.660 +[Speaker 0]: Yeah, so, let's see. + +01:02:59.243 --> 01:02:59.743 +[Speaker 2]: Yeah, I'm all. That's the right button. + +01:03:04.640 --> 01:03:05.140 +Can you not share the screen on this? + +01:03:08.860 --> 01:03:09.360 +[Speaker 0]: I have something going here. + +01:03:13.900 --> 01:03:14.400 +Let's see. I have, I see some stuff on here. + +01:03:18.160 --> 01:03:18.660 +Wonder if I'm still active. + +01:03:21.180 --> 01:03:21.680 +It shows share screen. + +01:03:22.280 --> 01:03:22.780 +Cancel. + +01:03:28.260 --> 01:03:28.760 +[Speaker 2]: Maybe they just did it through OBS. + +01:03:47.280 --> 01:03:47.780 +[Speaker 0]: Maybe I only have permission to share. + +01:03:53.900 --> 01:03:54.400 +I can put my email address in the chat. + +01:03:59.440 --> 01:03:59.620 +[Speaker 2]: I guess I'll just email it to you, + +01:04:06.600 --> 01:04:06.840 +but Let's see. Yeah, I think the way that + +01:04:11.260 --> 01:04:11.460 +they did it on the Any of the other videos if + +01:04:13.780 --> 01:04:14.020 +they shared the screen they just shared the + +01:04:17.440 --> 01:04:17.560 +webcam they just took over the webcam with + +01:04:20.380 --> 01:04:20.880 +OBS and shared what they wanted with it. + +01:04:22.760 --> 01:04:23.260 +[Speaker 0]: Oh, okay. + +01:04:24.720 --> 01:04:25.180 +[Speaker 2]: At least I'm guessing. + +01:04:26.960 --> 01:04:27.460 +Yeah, I'll give that to you. + +01:04:31.080 --> 01:04:31.240 +Okay. I guess I'll let you go watch the rest + +01:04:32.240 --> 01:04:32.740 +of the Emacs videos. + +01:04:34.640 --> 01:04:35.140 +[Speaker 0]: This has been a great conversation. + +01:04:37.280 --> 01:04:37.780 +Thank you very much. I appreciate your + +01:04:39.620 --> 01:04:39.840 +willingness to share your thoughts on this + +01:04:42.980 --> 01:04:43.480 +matter. This is vital, + +01:04:48.260 --> 01:04:48.440 +time management. It's a kind of key aspect of + +01:04:48.440 --> 01:04:48.940 +life. + +01:04:54.680 --> 01:04:55.180 +[Speaker 2]: Oh yeah. The way the how the function. + +01:05:03.320 --> 01:05:03.820 +Reasons to use emacs is to use the keyboard + +01:05:08.240 --> 01:05:08.420 +is. It's not to speed you up. + +01:05:09.520 --> 01:05:10.020 +Like, yeah, that's nice. + +01:05:12.280 --> 01:05:12.780 +But it keeps you in the stream, + +01:05:25.400 --> 01:05:25.760 +keeps you in the flow state and which then + +01:05:32.780 --> 01:05:32.900 +just makes you think better and yeah and the + +01:05:35.540 --> 01:05:35.780 +thing with that is you I have you I have no + +01:05:37.480 --> 01:05:37.980 +idea what the limits of that would be. + +01:05:39.680 --> 01:05:40.020 +Because you think, because yes, + +01:05:42.740 --> 01:05:42.900 +it's not about beating up how many words you + +01:05:44.860 --> 01:05:45.060 +say a minute. I mean that's nice and all, + +01:05:46.680 --> 01:05:46.920 +But when you start doing that, + +01:05:48.340 --> 01:05:48.840 +when you start removing all these friction + +01:05:52.500 --> 01:05:53.000 +points, all of a sudden the number, + +01:05:57.800 --> 01:05:58.300 +quality, and types of thoughts you get start + +01:06:01.620 --> 01:06:02.120 +[Speaker 0]: That's right. + +01:06:03.480 --> 01:06:03.980 +[Speaker 2]: increasing. Which is the goal. + +01:06:14.960 --> 01:06:15.460 +[Speaker 0]: Okay. Well, thank you very much. + +01:06:17.760 --> 01:06:18.260 +Enjoy the rest of the meeting. + +01:06:19.280 --> 01:06:19.780 +[Speaker 2]: Will do. diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt new file mode 100644 index 00000000..aac6f54c --- /dev/null +++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt @@ -0,0 +1,53 @@ +WEBVTT + + +00:00:00.000 --> 00:00:37.399 +Introduction + +00:00:37.400 --> 00:01:02.559 +Three activities in voice computing + +00:01:02.560 --> 00:01:53.519 +Talk is not about ... and about ... + +00:01:53.520 --> 00:03:33.239 +Motivations + +00:03:33.240 --> 00:03:58.679 +Data + +00:03:58.680 --> 00:04:25.627 +Voice In in the Chrome Store + +00:04:25.628 --> 00:05:16.879 +Works in web pages with text areas + +00:05:16.880 --> 00:06:41.739 +Built-in commands in Voice In Plus + +00:06:41.740 --> 00:08:14.759 +Common errors made by Voice In + +00:08:14.760 --> 00:09:59.419 +Custom speech-to-text commands + +00:09:59.420 --> 00:10:37.539 +Custom speech-to-commands + +00:10:37.540 --> 00:12:28.399 +Introducing Talon Voice + +00:12:28.400 --> 00:14:02.539 +Talon GUI + +00:14:02.540 --> 00:15:34.014 +Talon file with web scope + +00:15:34.015 --> 00:16:52.499 +Terminals on remote and virtual machines + +00:16:52.500 --> 00:18:17.719 +Recommendations + +00:18:17.720 --> 00:18:48.880 +Acknowledgements diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt new file mode 100644 index 00000000..5ff59fdc --- /dev/null +++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt @@ -0,0 +1,890 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:00.000 --> 00:00:04.359 +Hi, I'm Blaine Mooers. I'm an associate professor + +00:00:04.360 --> 00:00:06.519 +of biochemistry at the University of Oklahoma + +00:00:06.520 --> 00:00:09.319 +Health Sciences Center in Oklahoma City. + +00:00:09.320 --> 00:00:12.959 +My lab studies the role of RNA structure in RNA editing. + +00:00:12.960 --> 00:00:17.199 +We use X-ray crystallography to study the structures + +00:00:17.200 --> 00:00:19.919 +of these RNAs. We spend a lot of time in the lab + +00:00:19.920 --> 00:00:22.719 +preparing our samples for structural studies, + +00:00:22.720 --> 00:00:26.719 +and then we also spend a lot of time at the computer + +00:00:26.720 --> 00:00:29.719 +analyzing the resulting data. + +00:00:29.720 --> 00:00:33.039 +I was seeking ways of using voice computing + +00:00:33.040 --> 00:00:37.399 +to try to enhance my productivity. + +NOTE Three activities in voice computing + +00:00:37.400 --> 00:00:41.319 +I divide voice computing into three activities, + +00:00:41.320 --> 00:00:44.959 +speech-to-text or dictation, speech-to-commands, + +00:00:44.960 --> 00:00:47.639 +and speech-to-code. I'll be talking about + +00:00:47.640 --> 00:00:50.159 +speech-to-text and speech-to-commands today + +00:00:50.160 --> 00:00:55.079 +because these are two activities + +00:00:55.080 --> 00:00:57.319 +that are probably most broadly applicable + +00:00:57.320 --> 00:01:02.559 +to the workflows of people attending this conference. + +NOTE Talk is not about ... and about ... + +00:01:02.560 --> 00:01:06.799 +This talk will not be about Emacspeak. + +00:01:06.800 --> 00:01:11.359 +This is a venerated program for converting text to speech. + +00:01:11.360 --> 00:01:13.319 +We're talking about the flow of information + +00:01:13.320 --> 00:01:16.519 +in the opposite direction, speech-to-text. + +00:01:16.520 --> 00:01:20.599 +We need an Emacs Listens. We don't have one, + +00:01:20.600 --> 00:01:25.479 +so I had to seek help from outside the Emacs world + +00:01:25.480 --> 00:01:30.639 +via the Voice In Plus. This runs in + +00:01:30.640 --> 00:01:33.639 +the Google Chrome web browser, + +00:01:33.640 --> 00:01:36.719 +and it's very good for speech-to-text + +00:01:36.720 --> 00:01:39.519 +and very easy to learn how to use. + +00:01:39.520 --> 00:01:41.999 +It also has some speech-to-commands. + +00:01:42.000 --> 00:01:44.799 +However, Talon Voice is much better + +00:01:44.800 --> 00:01:47.559 +with the speech-to-commands, + +00:01:47.560 --> 00:01:53.519 +and it's also great at speech-to-code. + +NOTE Motivations + +00:01:53.520 --> 00:01:57.239 +The motivations are, obviously, as I mentioned already, + +00:01:57.240 --> 00:01:59.159 +for improved productivity. + +00:01:59.160 --> 00:02:00.399 +So, if you're a fast typist + +00:02:00.400 --> 00:02:05.199 +who types faster than they can speak, + +00:02:05.200 --> 00:02:07.079 +then nonetheless you might still benefit + +00:02:07.080 --> 00:02:09.279 +from voice computing when you grow tired of + +00:02:09.280 --> 00:02:12.199 +using the keyboard. On the other hand, + +00:02:12.200 --> 00:02:15.199 +you might be a slow typist who talks faster + +00:02:15.200 --> 00:02:17.519 +than they can type. + +00:02:17.520 --> 00:02:19.759 +In this case, you're definitely going to + +00:02:19.760 --> 00:02:22.859 +benefit from dictation because you'll be able to + +00:02:22.860 --> 00:02:29.359 +encode more words in text documents in a given day. + +00:02:29.360 --> 00:02:33.639 +If you're a coder, then you may get a kick out of + +00:02:33.640 --> 00:02:36.999 +opening programs and websites and coding projects + +00:02:37.000 --> 00:02:39.279 +by using your voice. + +00:02:39.280 --> 00:02:41.719 +Then there are health-related reasons. + +00:02:41.720 --> 00:02:44.599 +You may have impaired use of your hands, eyes, or both + +00:02:44.600 --> 00:02:49.199 +due to accident or disease, or you may suffer from + +00:02:49.200 --> 00:02:53.519 +a repetitive stress injury. Many of us have this + +00:02:53.520 --> 00:02:55.759 +in a mild but chronic form of it. + +00:02:55.760 --> 00:02:59.039 +We can't take a three-month sabbatical from the keyboard + +00:02:59.040 --> 00:03:05.519 +without losing our jobs, so these injuries tend to persist. + +00:03:05.520 --> 00:03:06.679 +And then you may have learned + +00:03:06.680 --> 00:03:09.959 +that it's not good for your health to sit + +00:03:09.960 --> 00:03:11.919 +for prolonged periods of time + +00:03:11.920 --> 00:03:14.919 +with your staring at a computer screen. + +00:03:14.920 --> 00:03:21.799 +You can actually dictate to your computer from 20 feet away + +00:03:21.800 --> 00:03:24.999 +while looking out the window, + +00:03:25.000 --> 00:03:27.779 +thereby giving your lower body a break + +00:03:27.780 --> 00:03:33.239 +and your eyes a break. + +NOTE Data + +00:03:33.240 --> 00:03:35.639 +I'm not God, so I have to bring data. + +00:03:35.640 --> 00:03:38.039 +I have two data points here, + +00:03:38.040 --> 00:03:42.399 +the number of words that I wrote in June and July this year + +00:03:42.400 --> 00:03:45.159 +and in September and October. + +00:03:45.160 --> 00:03:49.519 +I adopted the use of voice computing + +00:03:49.520 --> 00:03:53.919 +in the middle of August. As you can see, + +00:03:53.920 --> 00:03:58.679 +I got an over three-fold increase in my output. + +NOTE Voice In in the Chrome Store + +00:03:58.680 --> 00:04:07.119 +So this is the Chrome store website for voice-in. + +00:04:07.120 --> 00:04:11.119 +It's only available for Google Chrome. + +00:04:11.120 --> 00:04:13.239 +You just hit the install button to install it. + +00:04:13.240 --> 00:04:16.639 +To configure it, you need to select a language. + +00:04:16.640 --> 00:04:19.559 +It has support for 40 languages + +00:04:19.560 --> 00:04:23.119 +and it supports about a dozen different dialects of English, + +00:04:23.120 --> 00:04:25.627 +including Australian. + +NOTE Works in web pages with text areas + +00:04:25.628 --> 00:04:29.959 +It works on web pages with text areas, + +00:04:29.960 --> 00:04:33.319 +so it works. I use it regularly + +00:04:33.320 --> 00:04:37.879 +on Overleaf and 750words.com, + +00:04:37.880 --> 00:04:42.279 +a distraction-free environment for writing. + +00:04:42.280 --> 00:04:46.239 +It also works in webmails. It works in Google. + +00:04:46.780 --> 00:04:51.319 +It works in Jupyter Lab, of course, + +00:04:51.320 --> 00:04:52.879 +because that runs in the browser. + +00:04:52.880 --> 00:04:57.999 +It also works in Jupyter Notebook and Colab Notebook. + +00:04:58.000 --> 00:05:01.319 +It should work in Cloudmacs. + +00:05:01.320 --> 00:05:04.159 +I've mapped option-L to opening Voice In + +00:05:04.160 --> 00:05:09.119 +when the cursor is on a web page that has a text area. + +00:05:09.120 --> 00:05:16.879 +So [the presence of a text area is] the main limiting factor. + +NOTE Built-in commands in Voice In Plus + +00:05:16.880 --> 00:05:19.159 +[Voice In] has a number of built-in commands. + +00:05:19.160 --> 00:05:24.879 +You can turn it off by saying "stop dictation". + +00:05:24.880 --> 00:05:26.119 +It doesn't distinguish between + +00:05:26.120 --> 00:05:28.799 +a command mode and a dictation mode. + +00:05:28.800 --> 00:05:33.599 +It has undo command. You use the command + +00:05:33.600 --> 00:05:36.919 +"copy that" to copy a selection. + +00:05:36.920 --> 00:05:40.079 +The "press" commands are used in the browser. + +00:05:40.080 --> 00:05:44.839 +You [say] "press enter" to issue a command or [submit] text + +00:05:44.840 --> 00:05:50.319 +that has been written in a web form, + +00:05:50.320 --> 00:05:55.279 +and then "press tab" will open up the next tab + +00:05:55.280 --> 00:05:58.599 +in a web browser. The scroll up and down + +00:05:58.600 --> 00:06:02.379 +will allow you to navigate a web page. + +00:06:02.380 --> 00:06:05.819 +I've put together a quiz about these commands + +00:06:05.820 --> 00:06:09.559 +so that you can go through this quiz several times + +00:06:09.560 --> 00:06:14.699 +until you get at least 90 percent of them correct, + +00:06:14.700 --> 00:06:16.679 +90 percent of the questions correct. + +00:06:16.680 --> 00:06:20.599 +In order to boost your recall of the commands, + +00:06:20.600 --> 00:06:23.799 +I have a Python script that you can probably + +00:06:23.800 --> 00:06:26.559 +pound through the quiz with + +00:06:26.560 --> 00:06:32.159 +in less than a minute, once you know the commands. + +00:06:32.160 --> 00:06:35.599 +I also provide an Elisp version of this quiz, + +00:06:35.600 --> 00:06:41.739 +but it's a little slower to operate. + +NOTE Common errors made by Voice In + +00:06:41.740 --> 00:06:43.399 +These are some common errors + +00:06:43.400 --> 00:06:45.399 +that I've run into with Voice In. + +00:06:45.400 --> 00:06:50.319 +It likes to contract statements like "I will" into "I'll". + +00:06:50.320 --> 00:06:55.599 +Contractions are not used in formal writing, + +00:06:55.600 --> 00:07:00.359 +and most of my writing is formal writing, so this annoys me. + +00:07:00.360 --> 00:07:04.759 +I will show you how I corrected for that problem. + +00:07:04.760 --> 00:07:10.039 +It also drops the first word in sentences quite often. + +00:07:10.040 --> 00:07:13.359 +This might be some speech issue that I have. + +00:07:13.360 --> 00:07:17.599 +It inserts the wrong word because it's not in the dictionary + +00:07:17.600 --> 00:07:22.619 +that was used to train it. So, for example, + +00:07:22.620 --> 00:07:26.919 +the word PyMOL is the name of a molecular graphics program + +00:07:26.920 --> 00:07:31.639 +that we use in our field. It doesn't recognize PyMOL. + +00:07:31.640 --> 00:07:34.239 +Instead, it substitutes in the word "primal". + +00:07:34.240 --> 00:07:38.399 +Since I don't use "primal" very often, + +00:07:38.400 --> 00:07:42.299 +I've mapped the word "primal" to "PyMOL" + +00:07:42.300 --> 00:07:45.659 +in some custom commands I'll talk about in a minute. + +00:07:45.660 --> 00:07:50.439 +Then there's a problem that the commands that exist + +00:07:50.440 --> 00:07:54.439 +might get executed when you speak them when, in fact, + +00:07:54.440 --> 00:07:58.839 +you wanted to use the words in those commands + +00:07:58.840 --> 00:08:01.439 +during your dictation. + +00:08:01.440 --> 00:08:07.119 +So this is a problem, a pitfall of Voice In, + +00:08:07.120 --> 00:08:08.919 +in that it doesn't have a command mode + +00:08:08.920 --> 00:08:14.759 +that's separate from a dictation mode. + +NOTE Custom speech-to-text commands + +00:08:14.760 --> 00:08:20.319 +You can set up through a very easy-to-use GUI + +00:08:20.320 --> 00:08:26.959 +custom voice commands mapped to what you want inserted, + +00:08:26.960 --> 00:08:32.399 +so this is how misinterpreted words can be corrected. + +00:08:32.400 --> 00:08:35.759 +You just map the misinterpreted word to the intended word. + +00:08:35.760 --> 00:08:42.839 +You can also map the contractions to their expansions. + +00:08:42.840 --> 00:08:46.959 +I did this for 94 English contractions, + +00:08:46.960 --> 00:08:50.139 +and you can find these on GitHub. + +00:08:50.140 --> 00:08:56.079 +You can also insert acronyms and expand those acronyms. + +00:08:56.080 --> 00:09:00.239 +I apply the same approach to the first names of colleagues. + +00:09:00.240 --> 00:09:03.759 +I say "expand Fred", for example, + +00:09:03.760 --> 00:09:06.999 +to get Fred's first and last name + +00:09:07.000 --> 00:09:12.599 +with the [correct] spelling of his very long German name. + +00:09:12.600 --> 00:09:19.399 +You can also insert other trivia like favorite URLs. + +00:09:19.400 --> 00:09:24.559 +You can insert LaTeX snippets. + +00:09:24.560 --> 00:09:34.799 +It handles correctly multi-line snippets. + +00:09:34.800 --> 00:09:39.419 +You just have to enclose them in double quotes. + +00:09:39.420 --> 00:09:45.039 +You can even insert BibTeX cite keys for references + +00:09:45.040 --> 00:09:46.879 +that you use frequently. All fields + +00:09:46.880 --> 00:09:59.419 +have certain key references for certain methods or topics. + +NOTE Custom speech-to-commands + +00:09:59.420 --> 00:10:05.079 +Then it has a set of commands that you can customize + +00:10:05.080 --> 00:10:08.199 +for the purpose of speech-to-commands + +00:10:08.200 --> 00:10:09.679 +to get the computer to do something + +00:10:09.680 --> 00:10:15.399 +like open up a specific website or save the current writing. + +00:10:15.400 --> 00:10:23.540 +In this case, we have "press: command-s" + +00:10:23.541 --> 00:10:27.759 +for saving current writing. + +00:10:27.760 --> 00:10:28.099 +You can change the language [with "lang:"], + +00:10:28.100 --> 00:10:37.539 +and you can change the case of the text [with "case:"]. + +NOTE Introducing Talon Voice + +00:10:37.540 --> 00:10:41.039 +But the speech-to-command repertoire is quite limited + +00:10:41.040 --> 00:10:49.759 +in Voice In, so it's now time to pick up on Talon Voice. + +00:10:49.760 --> 00:10:54.119 +This is an open source project. It's free. + +00:10:54.120 --> 00:10:57.399 +It is highly configurable via TalonScript, + +00:10:57.400 --> 00:10:58.959 +which is a subset of Python. + +00:10:58.960 --> 00:11:03.039 +You can use either TalonScript or Python to configure it, + +00:11:03.040 --> 00:11:06.279 +but it's easier to code up your configuration + +00:11:06.280 --> 00:11:08.399 +in TalonScript. + +00:11:08.400 --> 00:11:10.759 +It has a Python interpreter embedded in it, + +00:11:10.760 --> 00:11:12.999 +so you don't have to mess around with installing + +00:11:13.000 --> 00:11:14.559 +yet another Python interpreter. + +00:11:14.560 --> 00:11:21.519 +It runs on all platforms, and it has a dictation mode + +00:11:21.520 --> 00:11:24.599 +that's separate from a command mode. + +00:11:24.600 --> 00:11:25.599 +You can activate it, + +00:11:25.600 --> 00:11:31.359 +and it'll be in a listening state asleep. + +00:11:31.360 --> 00:11:36.279 +You just bark out "Talon Wake" to start to wake it up, + +00:11:36.280 --> 00:11:43.799 +and "Talon Sleep" to have it go into a listening state. + +00:11:43.800 --> 00:11:47.919 +It has a very welcoming community + +00:11:47.920 --> 00:11:50.919 +in the Talon Slack channel. + +00:11:50.920 --> 00:11:56.399 +Then I need to point out that there's several packages + +00:11:56.400 --> 00:11:59.199 +that others have developed that run on top of Talon, + +00:11:59.200 --> 00:12:03.079 +but one of particular note is by Pokey Rule. + +00:12:03.080 --> 00:12:08.119 +He has on his website some really well-done videos + +00:12:08.120 --> 00:12:11.479 +that demonstrate how he uses Cursorless + +00:12:11.480 --> 00:12:17.239 +to move the cursor around using voice commands. + +00:12:17.240 --> 00:12:20.559 +This, however, runs on VS Code. + +00:12:20.560 --> 00:12:23.359 +At least that's the text editor + +00:12:23.360 --> 00:12:28.399 +for which he's primarily developing Cursorless. + +NOTE Talon GUI + +00:12:28.400 --> 00:12:35.519 +I followed the [install] protocol outlined by Tara Roys. + +00:12:35.520 --> 00:12:38.759 +She has a collection of tutorials + +00:12:38.760 --> 00:12:44.599 +on YouTube as well as on GitHub that are quite helpful. + +00:12:44.600 --> 00:12:49.479 +I followed her tutorial for installing + +00:12:49.480 --> 00:12:51.359 +Talon on macOS without any issues, + +00:12:51.360 --> 00:12:55.319 +but allow for half an hour to an hour + +00:12:55.320 --> 00:12:57.719 +to go through the process. When you're done, + +00:12:57.720 --> 00:13:02.199 +you'll have this Talon icon appear in the toolbar + +00:13:02.200 --> 00:13:06.119 +on the Mac. When it has this diagonal line across it, + +00:13:06.120 --> 00:13:09.539 +that means it's in the sleep state. + +00:13:09.540 --> 00:13:13.519 +So, this leads to cascading pull-down menus. + +00:13:13.520 --> 00:13:19.639 +This is it for the GUI. + +00:13:19.640 --> 00:13:26.519 +One of your first tasks is to select + +00:13:26.520 --> 00:13:30.439 +a language model that will be used to interpret + +00:13:30.440 --> 00:13:35.179 +the sounds that you generate as words. + +00:13:35.180 --> 00:13:38.959 +And the other kind of key feature is that there's a, + +00:13:38.960 --> 00:13:43.399 +under scripting, there's a view log pull-down + +00:13:43.400 --> 00:13:48.399 +that opens up a window displaying the log file. + +00:13:48.400 --> 00:13:52.879 +Whenever you make a change in a Talon configuration file, + +00:13:52.880 --> 00:13:55.079 +that change is implemented immediately. + +00:13:55.080 --> 00:13:57.599 +You do not have to restart Talon + +00:13:57.600 --> 00:14:02.539 +to get the change to take effect. + +NOTE Talon file with web scope + +00:14:02.540 --> 00:14:04.759 +This is an example of a Talon file. + +00:14:04.760 --> 00:14:10.499 +It has two components. It has a header above the dash that describes + +00:14:10.500 --> 00:14:14.919 +the scope of the commands contained below the dash. + +00:14:14.920 --> 00:14:19.739 +Each command is separated by a blank line. + +00:14:19.740 --> 00:14:24.239 +If a voice command is mapped to multiple actions, + +00:14:24.240 --> 00:14:30.999 +these are listed separately on indented lines + +00:14:31.000 --> 00:14:33.599 +below the first line. + +00:14:33.600 --> 00:14:39.419 +The words that are in square brackets are optional. + +00:14:39.420 --> 00:14:44.319 +So, I have mapped the word toggle voice in, + +00:14:44.320 --> 00:14:46.319 +or the phrase toggle voice in, + +00:14:46.320 --> 00:14:51.279 +to the keyboard shortcut Alt L + +00:14:51.280 --> 00:14:54.999 +in order to toggle on or off voice in. + +00:14:55.000 --> 00:14:57.879 +If I toggle voice in on, + +00:14:57.880 --> 00:15:01.759 +I need to immediately toggle off Talon, + +00:15:01.760 --> 00:15:09.079 +and this is done through this key command for Control T, + +00:15:09.080 --> 00:15:11.079 +which is mapped to speech toggle. + +00:15:11.080 --> 00:15:20.399 +Speech toggle. Then there are, + +00:15:20.400 --> 00:15:24.079 +there's a couple other examples. + +00:15:24.080 --> 00:15:26.439 +So, if there's no header present, + +00:15:26.440 --> 00:15:29.599 +it's an optional feature of Talon files, + +00:15:29.600 --> 00:15:32.639 +then the commands in the file will apply in all situations, + +00:15:32.640 --> 00:15:34.014 +in all modes. + +NOTE Terminals on remote and virtual machines + +00:15:34.015 --> 00:15:36.959 +Here we have two restrictions. + +00:15:36.960 --> 00:15:38.959 +These commands will only work + +00:15:38.960 --> 00:15:42.959 +when using the iTerm2 [ccc] terminal emulator for the Mac, + +00:15:42.960 --> 00:15:48.239 +and then only when the title of the window in iTerm2 + +00:15:48.240 --> 00:15:52.439 +has this particular address, + +00:15:52.440 --> 00:15:55.559 +which is what appears when I've logged into + +00:15:55.560 --> 00:16:00.059 +the supercomputer at the University of Oklahoma. + +00:16:00.060 --> 00:16:03.479 +One of the commands in this file is checkjobs. + +00:16:03.480 --> 00:16:05.539 +It's mapped to an alias, + +00:16:05.540 --> 00:16:10.919 +a bash alias called cj for "check jobs", + +00:16:10.920 --> 00:16:17.079 +which in turn is mapped to a script called checkjobs.sh + +00:16:17.080 --> 00:16:20.399 +that, when it's run, returns a listing + +00:16:20.400 --> 00:16:23.219 +of the pending and running jobs on the supercomputer + +00:16:23.220 --> 00:16:26.080 +in a format that I find pleasing. + +00:16:26.081 --> 00:16:34.559 +This `\n` after cj, the new line character, + +00:16:34.560 --> 00:16:39.839 +enters the command, so I don't have to do that + +00:16:39.840 --> 00:16:43.799 +as an additional step. Likewise, + +00:16:43.800 --> 00:16:46.799 +here's a similar setup for interacting with + +00:16:46.800 --> 00:16:52.499 +a Ubuntu virtual machine. + +NOTE Recommendations + +00:16:52.500 --> 00:16:55.919 +In terms of picking up voice computing, + +00:16:55.920 --> 00:16:57.479 +these are my recommendations. + +00:16:57.480 --> 00:16:59.759 +You're going to run into more errors + +00:16:59.760 --> 00:17:01.479 +than you may like initially, + +00:17:01.480 --> 00:17:07.839 +and so you need some patience in dealing with those. + +00:17:07.840 --> 00:17:09.919 +And also, it'll take you a while + +00:17:09.920 --> 00:17:16.799 +to get your head wrapped around Talon and how it works. + +00:17:16.800 --> 00:17:19.439 +You'll definitely want to use these custom commands + +00:17:19.440 --> 00:17:21.479 +to correct the errors or shortcomings + +00:17:21.480 --> 00:17:26.919 +of the language models. And you've seen how, + +00:17:26.920 --> 00:17:29.879 +by opening up projects by voice commands, + +00:17:29.880 --> 00:17:31.359 +you can reduce friction + +00:17:31.360 --> 00:17:36.659 +in terms of restarting work on a project. + +00:17:36.660 --> 00:17:40.399 +You've seen how Voice In is preferred + +00:17:40.400 --> 00:17:44.879 +for more accurate dictation. + +00:17:44.880 --> 00:17:48.079 +I think my error rate is about 1 to 2 percent. + +00:17:48.080 --> 00:17:53.879 +That is, 1 to 2 out of 100 words are incorrect + +00:17:53.880 --> 00:17:56.319 +versus Talon Voice where I think + +00:17:56.320 --> 00:17:59.879 +the error rate is closer to 5 percent. + +00:18:00.840 --> 00:18:03.507 +I have put together [a library of English] contractions + +00:18:03.508 --> 00:18:04.880 +[and their expansion] for Talon [too], + +00:18:04.881 --> 00:18:07.479 +and they can be found here on GitHub. + +00:18:07.480 --> 00:18:12.959 +And I also have [posted] a quiz of 600 questions + +00:18:12.960 --> 00:18:17.719 +about some basic Talon commands. + +NOTE Acknowledgements + +00:18:17.720 --> 00:18:20.999 +I'd like to thank the people who've helped me out + +00:18:21.000 --> 00:18:22.159 +on the Talon Slack channel + +00:18:22.160 --> 00:18:25.799 +and members of the Oklahoma Data Science Workshop + +00:18:25.800 --> 00:18:29.879 +where I gave an hour-long talk on this topic + +00:18:29.880 --> 00:18:30.959 +several weeks ago. + +00:18:30.960 --> 00:18:34.159 +I'd like to thank my friends + +00:18:34.160 --> 00:18:37.399 +at the Berlin and Austin Emacs Meetup + +00:18:37.400 --> 00:18:42.659 +and at the M-x research Slack channel. + +00:18:42.660 --> 00:18:45.119 +And I thank these grant funding agencies + +00:18:45.120 --> 00:18:48.880 +for supporting my work. I'll be happy to take any questions. diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt new file mode 100644 index 00000000..552148f9 --- /dev/null +++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt @@ -0,0 +1,779 @@ +WEBVTT + + +00:00:04.740 --> 00:00:05.140 +[Speaker 0]: 2 seconds. And I think we are live. + +00:00:05.980 --> 00:00:06.480 +Hi Yuchen, how are you doing? + +00:00:08.720 --> 00:00:09.220 +[Speaker 1]: I'm gonna just walk off. + +00:00:10.840 --> 00:00:11.120 +I'm not sure if I... Yeah, + +00:00:13.440 --> 00:00:13.740 +I mean, brain not working well at this + +00:00:14.660 --> 00:00:15.160 +moment. How about you? + +00:00:18.420 --> 00:00:18.760 +[Speaker 2]: Well, mine is about to get fried because + +00:00:21.040 --> 00:00:21.260 +EmacsConf is a very taxing process and I can + +00:00:24.599 --> 00:00:25.080 +tell you we could have a race to know who's + +00:00:26.720 --> 00:00:26.920 +more more tired right now between you and + +00:00:29.480 --> 00:00:29.619 +myself but I guess we'll find out at the end + +00:00:32.080 --> 00:00:32.580 +[Speaker 1]: All right, sounds good. + +00:00:34.200 --> 00:00:34.700 +[Speaker 2]: of the Q&A. And thank you for... + +00:00:37.760 --> 00:00:37.900 +How late or how early I should say is it for + +00:00:39.480 --> 00:00:39.640 +you right now? It should be like 6am or + +00:00:43.860 --> 00:00:44.059 +[Speaker 1]: Thanks. It's 7.45 but I normally get up at + +00:00:45.020 --> 00:00:45.520 +like 8.30 or something. + +00:00:46.560 --> 00:00:46.860 +[Speaker 2]: something? Right, okay. + +00:00:48.380 --> 00:00:48.880 +Well, anyway, thank you for the sacrifice + +00:00:50.200 --> 00:00:50.700 +just to answer some of the questions. + +00:00:56.160 --> 00:00:56.320 +All right, so I'll be displaying the + +00:00:59.180 --> 00:00:59.680 +questions. I'll be, let me just maximize this + +00:01:01.440 --> 00:01:01.720 +on the stream so that people can read + +00:01:02.280 --> 00:01:02.640 +everything on my screen. + +00:01:03.400 --> 00:01:03.480 +So what I'm going to do, + +00:01:05.340 --> 00:01:05.740 +Yuchen, as usual, I'm going to start reading + +00:01:06.540 --> 00:01:06.720 +the questions on the pad. + +00:01:12.160 --> 00:01:12.660 +I'm going to ask Sasha to open the Q&A. + +00:01:13.620 --> 00:01:13.940 +Yes, it's already open. + +00:01:15.280 --> 00:01:15.479 +Cool. So if you want to join us, + +00:01:19.360 --> 00:01:19.540 +people, Feel free to click on the link on the + +00:01:21.820 --> 00:01:21.940 +talk or on IRC to join us on BBB and to ask + +00:01:23.440 --> 00:01:23.560 +your questions. Otherwise just leave them on + +00:01:24.320 --> 00:01:24.720 +the pad. Alright, Yuchen, + +00:01:25.440 --> 00:01:25.940 +starting with the first question. + +00:01:28.260 --> 00:01:28.620 +I like the idea of using org-mode to display + +00:01:30.300 --> 00:01:30.640 +data from the web. Are there many different + +00:01:33.220 --> 00:01:33.580 +packages that do not, I assume. + +00:01:35.560 --> 00:01:35.720 +I'm new to Emacs, so maybe this is obvious to + +00:01:36.040 --> 00:01:36.540 +everyone else. + +00:01:43.860 --> 00:01:44.360 +[Speaker 1]: Yeah, I think so. I mean... + +00:01:49.240 --> 00:01:49.440 +[Speaker 2]: Yeah, I think it's a little complicated to + +00:01:51.480 --> 00:01:51.660 +specify what is it to display data from the + +00:01:53.360 --> 00:01:53.560 +web. Just reading it like this, + +00:01:55.900 --> 00:01:56.200 +I'm reminded of Adam, Arthur Pappa, + +00:01:58.260 --> 00:01:58.520 +I mean, Code All Capture Web, + +00:02:00.860 --> 00:02:01.060 +which technically captures the web and allows + +00:02:02.120 --> 00:02:02.500 +you to embed it in the page, + +00:02:04.280 --> 00:02:04.400 +but is it really displaying data from the + +00:02:06.340 --> 00:02:06.840 +web? Are we implying live transmission? + +00:02:07.720 --> 00:02:08.220 +Do you see what I'm talking about? + +00:02:10.680 --> 00:02:11.180 +[Speaker 1]: Yeah, I suspect the question is asking, + +00:02:17.040 --> 00:02:17.540 +like, having Emacs as a client that's sort of + +00:02:19.740 --> 00:02:20.240 +getting data from the web and then displays + +00:02:25.120 --> 00:02:25.620 +in Emacs, like using API or using web script. + +00:02:35.220 --> 00:02:35.440 +So yeah, like the hreader package or a few + +00:02:37.580 --> 00:02:38.080 +packages mentioned in my talk. + +00:02:39.920 --> 00:02:40.180 +Yeah, that's a good question. + +00:02:46.220 --> 00:02:46.720 +I mean, I really don't know how many. + +00:02:48.060 --> 00:02:48.560 +So from my experience, + +00:02:55.960 --> 00:02:56.460 +maybe I use like 10, less than 10 packages + +00:03:01.220 --> 00:03:01.460 +that do these things. And among these + +00:03:03.840 --> 00:03:04.120 +packages, maybe it's half of them are org, + +00:03:09.480 --> 00:03:09.980 +[Speaker 2]: So you mean half of them are org-based? + +00:03:10.840 --> 00:03:11.340 +Is that what you said? + +00:03:11.840 --> 00:03:12.340 +[Speaker 1]: half of them don't. Yeah, + +00:03:16.920 --> 00:03:17.420 +but that's just based on the packages I use. + +00:03:22.440 --> 00:03:22.940 +I haven't done a survey about this. + +00:03:25.520 --> 00:03:25.680 +[Speaker 2]: I think it's okay, you don't need to have all + +00:03:26.880 --> 00:03:27.340 +the answers. I mean, you already demonstrate + +00:03:29.380 --> 00:03:29.480 +a lot of competence and you talk about all + +00:03:31.100 --> 00:03:31.520 +the things you approach with your particular + +00:03:33.040 --> 00:03:33.240 +setup, So you don't need to have all the + +00:03:36.040 --> 00:03:36.280 +answers. Okay. All right, + +00:03:37.160 --> 00:03:37.660 +moving on to the next question. + +00:03:39.340 --> 00:03:39.720 +Have you tried EAF, i.e. + +00:03:41.680 --> 00:03:41.840 +The Emacs application framework and its + +00:03:43.940 --> 00:03:44.120 +browser? If yes, what is your opinion about + +00:03:44.120 --> 00:03:44.620 +it? + +00:03:47.520 --> 00:03:48.020 +[Speaker 1]: Oh, I haven't tried it. + +00:03:53.760 --> 00:03:54.260 +I try to remember why I haven't tried it. + +00:04:03.520 --> 00:04:04.020 +It has a browser. I assume the browser + +00:04:06.840 --> 00:04:07.340 +executes JavaScript by default. + +00:04:12.320 --> 00:04:12.820 +I have to check. Emacs.daf + +00:04:15.820 --> 00:04:16.320 +slash daf browser. + +00:04:25.520 --> 00:04:25.840 +[Speaker 2]: It's also OK if you want to have a look later + +00:04:27.380 --> 00:04:27.560 +and you know whenever you want to report to + +00:04:28.940 --> 00:04:29.220 +the pad you know you write a little blurb + +00:04:34.700 --> 00:04:34.860 +[Speaker 1]: Yeah sure yeah so yeah I know about EAF but I + +00:04:35.460 --> 00:04:35.960 +haven't tried it. + +00:04:38.060 --> 00:04:38.340 +[Speaker 2]: about it. Okay well that's already an answer + +00:04:41.400 --> 00:04:41.580 +that's cool. We're gonna move on to a + +00:04:42.720 --> 00:04:43.040 +question that is a little bit off topic, + +00:04:44.700 --> 00:04:44.860 +but I've also been interested about your + +00:04:47.420 --> 00:04:47.800 +nickname on IRC. This is not really relevant + +00:04:48.900 --> 00:04:49.340 +to the talk, quoting the question, + +00:04:50.400 --> 00:04:50.900 +but I'm curious about your nickname. + +00:04:52.020 --> 00:04:52.520 +You have some connection to Norway. + +00:04:54.480 --> 00:04:54.640 +Your nick indicates an interest in the + +00:04:56.040 --> 00:04:56.200 +architectural style inspired by the + +00:04:58.280 --> 00:04:58.700 +decoration on Viking ships that was popular + +00:05:00.460 --> 00:05:00.700 +in the early 20th century because + +00:05:01.880 --> 00:05:02.380 +Dragonsteel, I assume in Norwegian, + +00:05:04.860 --> 00:05:05.360 +is Dragon style. Are you familiar with this? + +00:05:10.760 --> 00:05:11.260 +[Speaker 1]: Yeah, it's just my favorite architecture + +00:05:15.560 --> 00:05:16.060 +style, I think. I mean, + +00:05:19.040 --> 00:05:19.540 +I lived in Sweden for like 2, + +00:05:25.900 --> 00:05:26.320 +1 half years and yeah I went to Norway once + +00:05:32.520 --> 00:05:33.020 +and I saw like this church in Lofoten Island, + +00:05:36.766 --> 00:05:36.780 +[Speaker 0]: was amazing. In Luton Island, + +00:05:36.820 --> 00:05:36.833 +on Luton Island. Right. + +00:05:36.833 --> 00:05:36.846 +[Speaker 1]: on Lofoten Island. Yeah it Yeah, + +00:05:40.280 --> 00:05:40.560 +it was amazing. So, yeah, + +00:05:43.780 --> 00:05:44.060 +that's exactly why I chose that as my + +00:05:46.520 --> 00:05:46.940 +nickname, because it's my favorite + +00:05:47.540 --> 00:05:48.040 +architecture style. + +00:05:51.940 --> 00:05:52.080 +[Speaker 2]: Okay, well, that was a very astute remark by + +00:05:54.760 --> 00:05:54.960 +the viewers, so I hope you feel validated in + +00:05:58.480 --> 00:05:58.660 +[Speaker 0]: assumptions. Moving on + +00:05:58.980 --> 00:05:59.480 +[Speaker 2]: your to another question. + +00:06:01.960 --> 00:06:02.360 +Yuchen, do you have any thoughts about Nixed, + +00:06:03.880 --> 00:06:04.380 +about its name, its approach, + +00:06:08.560 --> 00:06:09.060 +its relevance? About Nixed, + +00:06:11.500 --> 00:06:11.720 +the browser, N-Y-X-T. Oh, + +00:06:11.720 --> 00:06:12.220 +Nixed. + +00:06:17.220 --> 00:06:17.720 +[Speaker 1]: About what? Yeah, I have tried it. + +00:06:21.360 --> 00:06:21.860 +Well, I mean, it's not Emacs. + +00:06:26.140 --> 00:06:26.380 +It's kind of similar. I think it tries to do + +00:06:27.440 --> 00:06:27.900 +something similar to Emacs, + +00:06:33.860 --> 00:06:34.240 +but The problem with Nix is that very early + +00:06:37.180 --> 00:06:37.680 +on I encountered an issue with keybinding. + +00:06:43.040 --> 00:06:43.240 +So the first thing I want to do is to make + +00:06:44.300 --> 00:06:44.800 +all its keybindings emax-y. + +00:06:46.920 --> 00:06:47.420 +So that's obviously... + +00:06:51.200 --> 00:06:51.580 +So what was the problem? + +00:06:53.040 --> 00:06:53.500 +So yeah, I couldn't even do that. + +00:06:56.120 --> 00:06:56.620 +I thought, I was expecting that it could... + +00:07:02.660 --> 00:07:02.860 +There shouldn't be any issues with setting up + +00:07:03.960 --> 00:07:04.440 +whatever key binding you want. + +00:07:08.680 --> 00:07:09.180 +So I, the, the issue was that when I tried to + +00:07:15.400 --> 00:07:15.660 +do when I tried to bind Ctrl S Ctrl R to the + +00:07:17.380 --> 00:07:17.600 +prompt going up and down, + +00:07:22.900 --> 00:07:23.140 +so I use I was I complete and I'm used to + +00:07:26.760 --> 00:07:27.260 +like the control S and control R to go, + +00:07:28.980 --> 00:07:29.480 +to cycle through the selections. + +00:07:35.560 --> 00:07:35.760 +And so I want it the same in next in its + +00:07:38.460 --> 00:07:38.960 +prompt like when, for example, + +00:07:43.620 --> 00:07:44.120 +typing a URL and get completion from history. + +00:07:48.900 --> 00:07:49.400 +But it has a conflict with the... + +00:07:55.680 --> 00:07:56.180 +And also, I try to bind the hint. + +00:08:00.440 --> 00:08:00.940 +So when I want to follow a link, + +00:08:05.800 --> 00:08:06.300 +So I press a hint key and then like all these + +00:08:10.120 --> 00:08:10.320 +links are highlighted with like little + +00:08:13.660 --> 00:08:13.860 +letters that I can like choose which 1 I want + +00:08:14.820 --> 00:08:15.320 +which link I want to follow. + +00:08:20.140 --> 00:08:20.640 +So I try to bind that 1 to J sort of like + +00:08:23.560 --> 00:08:24.060 +Control C, Control J, or mode. + +00:08:28.780 --> 00:08:29.180 +But apparently there's a conflict here. + +00:08:33.320 --> 00:08:33.820 +So when I do both these prompt mode binding + +00:08:36.260 --> 00:08:36.760 +and the document mode binding, + +00:08:39.960 --> 00:08:40.460 +Yeah, the prompt no longer works. + +00:08:43.840 --> 00:08:44.340 +And I reported the bug to Nixt. + +00:08:50.500 --> 00:08:50.600 +And yeah, and there was response but there + +00:08:52.580 --> 00:08:53.000 +are so many bugs there, + +00:08:55.640 --> 00:08:55.940 +and I don't think that bug is very high + +00:09:00.540 --> 00:09:00.860 +priority. So yeah, I basically stopped trying + +00:09:03.500 --> 00:09:03.660 +that because key mining is very important to + +00:09:07.600 --> 00:09:08.100 +[Speaker 2]: Right, but, sorry, please finish. + +00:09:15.620 --> 00:09:15.740 +[Speaker 1]: me. Yeah, so I mean, yeah, + +00:09:17.320 --> 00:09:17.820 +without key bindings I can't like, + +00:09:23.940 --> 00:09:24.440 +I won't. So, okay, I feel this is a very + +00:09:29.280 --> 00:09:29.440 +basic functionality. I'm kind of reluctant to + +00:09:31.220 --> 00:09:31.560 +[Speaker 2]: Without key bindings, they are. + +00:09:32.020 --> 00:09:32.520 +[Speaker 1]: continue trying what These are pieces. + +00:09:34.200 --> 00:09:34.540 +[Speaker 2]: It reminds me of 2 points. + +00:09:35.840 --> 00:09:36.100 +So yesterday with Stefan we were talking + +00:09:37.540 --> 00:09:37.860 +about sane defaults and when he was sleeping + +00:09:39.440 --> 00:09:39.600 +today we talked about it again with a + +00:09:41.400 --> 00:09:41.900 +speaker. We did the mentor talk. + +00:09:43.020 --> 00:09:43.520 +Feel free to re-watch it afterwards. + +00:09:48.320 --> 00:09:48.440 +But it's funny how, you know, + +00:09:50.920 --> 00:09:51.360 +regardless of how big the package actually + +00:09:54.520 --> 00:09:54.820 +is, they always provide some kind of sane + +00:09:55.640 --> 00:09:55.960 +default and with Nixed, + +00:09:58.620 --> 00:09:59.120 +obviously, it's built with a Vim mentality + +00:10:02.020 --> 00:10:02.520 +and modality of key bindings. + +00:10:05.860 --> 00:10:06.060 +And for us, we are more used to the Emacs way + +00:10:08.040 --> 00:10:08.540 +of doing things. It's a complete blocker. + +00:10:10.320 --> 00:10:10.560 +No matter how great the pieces of + +00:10:12.280 --> 00:10:12.780 +functionality behind Nixed are, + +00:10:15.060 --> 00:10:15.300 +just the fact that UX-wise we cannot get into + +00:10:18.220 --> 00:10:18.340 +it or we cannot have it behave nicely with + +00:10:20.280 --> 00:10:20.440 +what we do. It's a massive block that is + +00:10:22.040 --> 00:10:22.540 +preventing appropriation of such tools. + +00:10:25.940 --> 00:10:26.040 +So it might seem very basic to bounce a + +00:10:28.300 --> 00:10:28.800 +package at the level of key bindings but + +00:10:29.620 --> 00:10:30.120 +that's what we all do. + +00:10:32.800 --> 00:10:33.300 +[Speaker 1]: Yeah, I totally agree. + +00:10:36.180 --> 00:10:36.600 +[Speaker 2]: Right, if I can just interrupt, + +00:10:38.520 --> 00:10:38.680 +we have about 2 more minutes of questions and + +00:10:40.940 --> 00:10:41.320 +I see people are writing more questions. + +00:10:42.180 --> 00:10:42.440 +Did you want to add something, + +00:10:43.780 --> 00:10:44.280 +Yucheng? On what we're saying? + +00:10:47.620 --> 00:10:48.120 +[Speaker 1]: No, no, no, Let's continue. + +00:10:51.340 --> 00:10:51.660 +[Speaker 2]: had plenty of time. Okay, + +00:10:53.100 --> 00:10:53.260 +I'm going to ask you to be quick about this + +00:10:53.860 --> 00:10:54.060 +1. I'm going to read the question, + +00:10:54.620 --> 00:10:54.840 +which is slightly long, + +00:10:56.320 --> 00:10:56.400 +and you're going to have about 30 seconds to + +00:10:57.720 --> 00:10:58.220 +answer it. Do you feel capable of this? + +00:10:59.860 --> 00:11:00.360 +[Speaker 1]: I thought we Yeah, let's try it. + +00:11:02.860 --> 00:11:03.360 +[Speaker 2]: Let's try it. At least try it. + +00:11:05.208 --> 00:11:05.352 +Okay, so quoting, I find the JavaScript trap + +00:11:06.680 --> 00:11:06.820 +almost impossible to avoid since I like to + +00:11:10.360 --> 00:11:10.860 +buy used stuff online and use my online bank. + +00:11:13.140 --> 00:11:13.460 +How do you deal with a JavaScript trap? + +00:11:15.400 --> 00:11:15.640 +I use NoScript and compromise on a few things + +00:11:16.760 --> 00:11:17.260 +I really feel I cannot live without. + +00:11:19.080 --> 00:11:19.440 +EWW is nice for a lot of things, + +00:11:21.260 --> 00:11:21.660 +especially with R for less noise, + +00:11:23.760 --> 00:11:24.220 +but I need Firefox for those GS and trapped + +00:11:25.760 --> 00:11:26.260 +pages. So do you have a quick answer to this? + +00:11:29.500 --> 00:11:29.800 +[Speaker 1]: Yeah, I don't have a good answer, + +00:11:30.640 --> 00:11:31.140 +but I have a quick answer. + +00:11:38.140 --> 00:11:38.640 +So I use VPN and like a more, + +00:11:41.680 --> 00:11:42.180 +what do you call it, move out the Swedish VPN + +00:11:43.480 --> 00:11:43.980 +browser, move out browser. + +00:11:48.960 --> 00:11:49.160 +Yeah, so I unfortunately I have to use + +00:11:50.660 --> 00:11:50.980 +JavaScript in these cases as well, + +00:11:53.800 --> 00:11:54.020 +but I try to minimize the use of these + +00:11:54.020 --> 00:11:54.520 +things. + +00:11:56.920 --> 00:11:57.040 +[Speaker 2]: How long do you think it will take for us to + +00:11:58.140 --> 00:11:58.480 +save the world with Emacs, + +00:11:59.340 --> 00:11:59.760 +or save the web at least? + +00:12:01.360 --> 00:12:01.560 +5 years, 10 years, maybe a little less than + +00:12:01.560 --> 00:12:02.060 +this? + +00:12:06.600 --> 00:12:07.000 +[Speaker 1]: Well I think it's, unfortunately it's + +00:12:08.300 --> 00:12:08.800 +probably independent of Emacs, + +00:12:12.180 --> 00:12:12.680 +like it will only be saved when, + +00:12:14.860 --> 00:12:14.970 +like it's saved on like the normal, + +00:12:18.960 --> 00:12:19.460 +the more popular browsers like Firefox. + +00:12:23.680 --> 00:12:24.060 +I have no clue how long it will take for, + +00:12:25.120 --> 00:12:25.620 +I don't know, for example, + +00:12:28.660 --> 00:12:29.140 +Tala to pick up so that you can buy things + +00:12:30.020 --> 00:12:30.520 +without running JavaScript. + +00:12:33.220 --> 00:12:33.340 +[Speaker 2]: Right. Well, I guess we'll have to cross our + +00:12:35.380 --> 00:12:35.740 +fingers then for Firefox to save the world. + +00:12:37.260 --> 00:12:37.500 +All right Yuchen, we're about out of time, + +00:12:38.800 --> 00:12:39.080 +we're moving on to the next talk in 20 + +00:12:40.200 --> 00:12:40.360 +seconds. Thank you so much for your + +00:12:41.940 --> 00:12:42.100 +presentation and for waking up early and + +00:12:42.540 --> 00:12:42.780 +answering the question, + +00:12:44.820 --> 00:12:45.060 +and I can tell you, you were very alert and + +00:12:47.020 --> 00:12:47.520 +definitely more energetic than I was. + +00:12:52.600 --> 00:12:53.100 +All right, see you later. + +00:12:53.940 --> 00:12:54.440 +[Speaker 1]: Thank you. See you. + +00:12:58.400 --> 00:12:58.900 +[Speaker 2]: Bye. And we go to the next talk right now. + +00:13:02.620 --> 00:13:03.120 +[Speaker 0]: You are currently + +00:13:15.260 --> 00:13:15.760 +you diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt new file mode 100644 index 00000000..f94dbab5 --- /dev/null +++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt @@ -0,0 +1,38 @@ +WEBVTT + + +00:00:00.000 --> 00:00:35.679 +Overview + +00:00:35.680 --> 00:05:31.939 +Background problems + +00:05:31.940 --> 00:09:46.380 +Solutions outside of Emacs + +00:09:46.480 --> 00:09:54.599 +Emacs solutions + +00:09:54.600 --> 00:12:43.020 +Free clients in Emacs + +00:12:43.021 --> 00:16:52.379 +Web browsers in Emacs + +00:16:52.380 --> 00:17:30.379 +emacs-web-server - overview + +00:17:30.380 --> 00:18:17.579 +emacs-web-server - hello emacs! + +00:18:17.580 --> 00:23:06.439 +emacs-web-server - yolo + +00:23:07.940 --> 00:29:40.419 +emacs-web-server - emacs web framework + +00:29:40.420 --> 00:31:25.359 +Firefox with emacs for extensions + +00:31:25.360 --> 00:31:31.440 +Thank you diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt new file mode 100644 index 00000000..60bafffd --- /dev/null +++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt @@ -0,0 +1,1629 @@ +WEBVTT captioned by ken, checked by sachac + +NOTE Overview + +00:00:00.000 --> 00:00:03.199 +Hello, I am Yuchen, and I will be talking about + +00:00:03.200 --> 00:00:06.839 +how Emacs may be used to save user freedom on the web. + +00:00:06.840 --> 00:00:09.679 +I will begin by describing the background issues, + +00:00:09.680 --> 00:00:12.359 +followed by solutions outside of Emacs. + +00:00:12.360 --> 00:00:14.879 +Then I will move into the main business of describing + +00:00:14.880 --> 00:00:17.799 +several ways to address the issues using Emacs, + +00:00:17.800 --> 00:00:20.599 +including free clients in Emacs, web browsers, + +00:00:20.600 --> 00:00:23.399 +also known as universal clients in Emacs, + +00:00:23.400 --> 00:00:27.119 +approaches using Emacs web server and Emacs web framework, + +00:00:27.120 --> 00:00:29.319 +which allows one to write an Emacs package + +00:00:29.320 --> 00:00:30.759 +and get a web app for free, + +00:00:30.760 --> 00:00:35.679 +as well as using Emacs as a Firefox extension. + +NOTE Background problems + +00:00:35.680 --> 00:00:37.159 +OK, let's now move on to + +00:00:37.160 --> 00:00:39.559 +the background issues for this topic. + +00:00:39.560 --> 00:00:42.639 +Many of you probably already know what is free software. + +00:00:42.640 --> 00:00:45.480 +It is software that respects four user freedoms, + +00:00:45.481 --> 00:00:48.999 +including freedom 0, which is the freedom to use, + +00:00:49.000 --> 00:00:52.179 +freedom 1 is the freedom to study and modify a program, + +00:00:52.279 --> 00:00:53.988 +freedom 2 is the freedom to + +00:00:54.488 --> 00:00:57.239 +distribute exact copies of a program, + +00:00:57.240 --> 00:01:01.679 +and freedom 3 is the freedom to distribute modified copies. + +00:01:01.680 --> 00:01:04.039 +Different environments have different norms + +00:01:04.040 --> 00:01:06.819 +with regards to user freedom. + +00:01:06.820 --> 00:01:11.239 +For example, GNU/Linux distributions + +00:01:11.240 --> 00:01:13.439 +default to free software, + +00:01:13.440 --> 00:01:15.519 +even though the official kernel Linux + +00:01:15.520 --> 00:01:18.419 +contains non-free code, like non-free firmware. + +00:01:18.420 --> 00:01:23.059 +What I mean is, people generally expect free software + +00:01:23.060 --> 00:01:25.759 +in these environments. + +00:01:25.760 --> 00:01:27.359 +There's plenty of free software + +00:01:27.360 --> 00:01:29.039 +built on other free software, + +00:01:29.040 --> 00:01:31.219 +so generally people can accomplish tasks + +00:01:31.220 --> 00:01:33.599 +using free software only. + +00:01:33.600 --> 00:01:37.279 +Emacs, by comparison, is even better. + +00:01:37.280 --> 00:01:41.219 +It has freedom built-in, as it is highly customizable + +00:01:41.220 --> 00:01:44.679 +with self-documenting configurations. + +00:01:44.680 --> 00:01:49.599 +When a Lisp form is evaluated by the user in Emacs, + +00:01:49.600 --> 00:01:53.159 +the change is instantly reflected in the environment. + +00:01:53.160 --> 00:01:56.719 +Thus, it converts users to hackers effortlessly. + +00:01:56.720 --> 00:01:58.439 +From writing setq statements, + +00:01:58.440 --> 00:02:00.639 +which is similar to configurations + +00:02:00.640 --> 00:02:01.959 +in the majority of other programs, + +00:02:01.960 --> 00:02:03.399 +to writing functions, + +00:02:03.400 --> 00:02:05.439 +which are building blocks of Elisp features, + +00:02:05.440 --> 00:02:08.139 +to writing features and publishing packages, + +00:02:08.140 --> 00:02:09.799 +it is a natural progression. + +00:02:10.099 --> 00:02:15.039 +In this sense, Emacs perhaps has + +00:02:15.040 --> 00:02:18.839 +the most gentle learning curve for hackers. + +00:02:18.840 --> 00:02:21.099 +On the other hand, the default license + +00:02:21.100 --> 00:02:22.599 +in the Emacs community + +00:02:22.600 --> 00:02:26.100 +is GNU General Public License version 3 or later, + +00:02:26.200 --> 00:02:29.039 +which is the best free software license + +00:02:29.040 --> 00:02:32.299 +apart from the Affero license. + +00:02:32.300 --> 00:02:35.019 +Now let's move on to web browsers, + +00:02:35.020 --> 00:02:39.239 +which by contrast does not default to freedom. + +00:02:39.240 --> 00:02:42.199 +For one thing, free software JavaScript projects + +00:02:42.200 --> 00:02:45.779 +default to Expat license, + +00:02:45.780 --> 00:02:49.399 +which is also commonly known as the MIT license, + +00:02:49.400 --> 00:02:53.279 +which is a lax permissive license that could be exploited + +00:02:53.280 --> 00:02:55.919 +as developers could write non-free derivatives + +00:02:55.920 --> 00:02:59.679 +and subjugate user freedom. + +00:02:59.680 --> 00:03:03.159 +This also contributes to the JavaScript trap. + +00:03:03.160 --> 00:03:06.719 +Most popular web browsers nowadays simply download and run + +00:03:06.720 --> 00:03:10.819 +any JavaScript code requested by the web page. + +00:03:10.820 --> 00:03:15.319 +Generally speaking, there are two camps on this issue. + +00:03:15.320 --> 00:03:19.039 +One side would say JavaScript is simply part of life, + +00:03:19.040 --> 00:03:22.039 +and an integral part of the so-called modern web. + +00:03:22.040 --> 00:03:25.299 +Just accept it, and there is no point in fighting it. + +00:03:25.300 --> 00:03:28.288 +Indeed, it can be frustrating when greeted by + +00:03:28.388 --> 00:03:31.799 +"This page requires JavaScript and cookies to continue," + +00:03:31.800 --> 00:03:34.719 +or even a blank page when opening a web page + +00:03:34.720 --> 00:03:38.439 +while disabling JavaScript. + +00:03:38.440 --> 00:03:42.159 +The other camp takes a more principled position + +00:03:42.160 --> 00:03:44.839 +and says JavaScript is unnecessary. + +00:03:44.840 --> 00:03:47.279 +I mean, people use the web mainly for + +00:03:47.280 --> 00:03:48.519 +database-like operations + +00:03:48.520 --> 00:03:51.679 +to interact with data stored on other people's computers, + +00:03:51.680 --> 00:03:55.359 +like querying, creating, updating, deleting. + +00:03:55.360 --> 00:03:58.959 +I mean, 99% of the things happen in getting data, + +00:03:58.960 --> 00:04:01.239 +including reading news, watching videos, + +00:04:01.240 --> 00:04:03.339 +downloading images, etc., + +00:04:03.340 --> 00:04:06.079 +and posting data, including publishing + +00:04:06.080 --> 00:04:10.479 +this sort of materials, publishing news comments, videos. + +00:04:10.480 --> 00:04:12.399 +Why does this need any programs + +00:04:12.400 --> 00:04:16.199 +to do funny computations, right? + +00:04:16.200 --> 00:04:18.980 +Modern web browsers are also a pain to use. + +00:04:19.080 --> 00:04:20.980 +They are the opposite to Emacs + +00:04:21.080 --> 00:04:26.759 +in terms of customization capabilities. + +00:04:26.760 --> 00:04:29.359 +Such problems on the client side + +00:04:29.360 --> 00:04:31.919 +is the main focus of this talk. + +00:04:31.920 --> 00:04:34.319 +On the server side, the issue is known as SaaSS, + +00:04:34.320 --> 00:04:38.460 +service as a software substitute. + +00:04:38.760 --> 00:04:42.420 +It is about doing computing for users + +00:04:42.421 --> 00:04:44.540 +on other people's computers, + +00:04:44.541 --> 00:04:48.439 +which the user has no visibility, let alone control. + +00:04:48.440 --> 00:04:51.940 +Examples include translation or photo editing + +00:04:51.941 --> 00:04:55.359 +in so-called web applications. + +00:04:55.360 --> 00:04:59.919 +Another example would be web applications + +00:04:59.920 --> 00:05:02.159 +make recommendations based on user data + +00:05:02.160 --> 00:05:05.959 +and suggest what the users read or watch next. + +00:05:05.960 --> 00:05:09.959 +On the one hand, SaaSS is an intractable problem + +00:05:09.960 --> 00:05:11.799 +because free software is all about user freedom + +00:05:11.800 --> 00:05:13.759 +on one's own computer, + +00:05:13.760 --> 00:05:16.079 +not someone else's computer. + +00:05:16.080 --> 00:05:18.780 +On the other hand, this is also a lesser problem + +00:05:18.880 --> 00:05:21.599 +because it has trivial solutions, + +00:05:21.600 --> 00:05:25.839 +which is self-hosting and keeping computations local. + +00:05:25.840 --> 00:05:28.679 +Wouldn't it be nice to use a photo editing web application, + +00:05:28.680 --> 00:05:31.939 +but without the web? + +NOTE Solutions outside of Emacs + +00:05:31.940 --> 00:05:36.400 +Right, now let's move on to solutions outside of Emacs + +00:05:36.401 --> 00:05:39.039 +that tackle these problems. + +00:05:39.040 --> 00:05:42.959 +There are generally two ways to fix this issue. + +00:05:42.960 --> 00:05:45.399 +One is blocking non-free JavaScript, + +00:05:45.400 --> 00:05:48.979 +and the other is substituting with free programs. + +00:05:48.980 --> 00:05:50.439 +Let's start with blocking. + +00:05:50.440 --> 00:05:54.859 +LibreJS, for example, is a Firefox extension + +00:05:54.860 --> 00:05:56.919 +blocking non-free, non-trivial JavaScript. + +00:05:56.920 --> 00:05:59.820 +It works by intercepting, filtering + +00:05:59.821 --> 00:06:01.759 +all requests for JavaScript, + +00:06:01.760 --> 00:06:05.599 +recognizing the ones that are trivial or free, + +00:06:05.600 --> 00:06:10.999 +and blocking the execution of the others. + +00:06:11.000 --> 00:06:13.879 +As an experiment, I logged the LibreJS output + +00:06:13.880 --> 00:06:15.559 +for about two weeks, + +00:06:15.560 --> 00:06:19.739 +and during which, of all the web pages I loaded, + +00:06:19.740 --> 00:06:25.000 +23 domains have at least some LibreJS-compliant scripts. + +00:06:25.001 --> 00:06:28.679 +That is not much, though I did use other means + +00:06:28.680 --> 00:06:30.819 +to reduce the scenarios + +00:06:30.920 --> 00:06:35.399 +where I need to load web pages with JavaScript in Firefox, + +00:06:35.400 --> 00:06:40.719 +like using a text browser like Lynx. + +00:06:40.720 --> 00:06:44.239 +Then there's also NoScript, which is like LibreJS, + +00:06:44.240 --> 00:06:49.499 +but it blocks all scripts, whether free or non-free, +trivial or non-trivial. + +00:06:49.500 --> 00:06:54.359 +So the problem with blocking is that + +00:06:54.360 --> 00:06:57.559 +blocking with certain scripts and accepting others, + +00:06:57.560 --> 00:07:00.579 +there are like... I can think of two problems. + +00:07:00.679 --> 00:07:02.779 +One is that it does not help with Freedom 1, + +00:07:02.879 --> 00:07:07.959 +which is the freedom to allow users to modify a program + +00:07:07.960 --> 00:07:13.079 +and use it in place of the original program. + +00:07:13.080 --> 00:07:15.839 +And also it does not help + +00:07:15.840 --> 00:07:18.859 +when the non-free JavaScript is mandatory + +00:07:18.860 --> 00:07:20.719 +for the functioning of the web page. + +00:07:20.720 --> 00:07:22.839 +For example, some pages are blank + +00:07:22.840 --> 00:07:27.079 +when non-free JavaScript is not executed. + +00:07:27.080 --> 00:07:35.180 +So now let's move on to the substitution, the other method. + +00:07:36.280 --> 00:07:38.919 +Let's start with userscript. + +00:07:38.920 --> 00:07:41.760 +It is a script, it is a user-specified JavaScript + +00:07:41.761 --> 00:07:43.039 +injected to a web page. + +00:07:43.040 --> 00:07:48.480 +A typical example of userscript tool is GreaseMonkey. + +00:07:48.481 --> 00:07:53.159 +Another idea is a proxy that replaces scripts in place, + +00:07:53.160 --> 00:07:55.819 +that is, sending user-specified scripts + +00:07:55.919 --> 00:08:00.899 +as a response to requests for such scripts. + +00:08:00.900 --> 00:08:04.759 +So one example would be Haketilo, however you pronounce it. + +00:08:04.760 --> 00:08:09.619 +It's a tool that's built on top of mitmproxy. + +00:08:09.620 --> 00:08:11.719 +It is supposed to do this. + +00:08:11.720 --> 00:08:14.599 +I haven't used GreaseMonkey nor Haketilo + +00:08:14.600 --> 00:08:16.599 +for these purposes yet, + +00:08:16.600 --> 00:08:20.779 +so I can't say much about these options. + +00:08:20.780 --> 00:08:24.359 +So then there are also free clients + +00:08:24.360 --> 00:08:26.479 +which replace the whole frontend, + +00:08:26.480 --> 00:08:30.660 +instead of a script requested by web pages + +00:08:30.661 --> 00:08:32.499 +from the official web clients. + +00:08:32.500 --> 00:08:37.359 +People often refer to them as alternative frontend. + +00:08:37.360 --> 00:08:39.359 +YouTube is perhaps the best example + +00:08:39.360 --> 00:08:41.279 +as there are so many free clients, + +00:08:41.280 --> 00:08:43.621 +including Invidious for the web, + +00:08:43.622 --> 00:08:46.239 +youtube-dl and yt-dlp on the command line, + +00:08:46.240 --> 00:08:50.279 +MPV and VLC as GUI desktop, LibreTube + +00:08:50.280 --> 00:08:53.259 +and NewPipe for Android and so on. + +00:08:53.260 --> 00:08:56.759 +Youtube-dl and yt-dlp are especially versatile + +00:08:56.760 --> 00:08:59.459 +as they work with many video and audio sites + +00:08:59.460 --> 00:09:02.520 +with extractors written in Python, + +00:09:02.620 --> 00:09:06.299 +so people can add extractors like extensions. + +00:09:06.300 --> 00:09:09.421 +A similar tool would be woob, + +00:09:09.422 --> 00:09:12.739 +short for web outside of the browsers. + +00:09:12.740 --> 00:09:16.820 +It is a command-line and GUI program + +00:09:16.920 --> 00:09:23.199 +that interacts with many web services, even banks. + +00:09:23.200 --> 00:09:25.839 +And there are browser extensions + +00:09:25.840 --> 00:09:28.859 +that automatically redirect to these clients. + +00:09:28.860 --> 00:09:31.639 +For example, Redirector and Libredirect + +00:09:31.640 --> 00:09:35.199 +redirect to the free web clients. + +00:09:35.200 --> 00:09:39.699 +One could use OpenWith, another extension, + +00:09:39.700 --> 00:09:42.159 +to redirect to free non-web clients, + +00:09:42.160 --> 00:09:46.380 +for example by opening YouTube links with MPV. + +NOTE Emacs solutions + +00:09:46.480 --> 00:09:50.999 +Now let us move to Emacs-based solutions. + +00:09:51.000 --> 00:09:54.599 +They are based on the same ideas but using Emacs. + +NOTE Free clients in Emacs + +00:09:54.600 --> 00:09:57.479 +First, free clients in Emacs. + +00:09:57.480 --> 00:10:00.639 +Basically alternative frontends written in Elisp. + +00:10:00.640 --> 00:10:03.359 +There are several advantages. + +00:10:03.360 --> 00:10:06.199 +For example, integration with other Emacs tools, + +00:10:06.200 --> 00:10:09.559 +good for archiving, making use of Emacs libraries, + +00:10:09.560 --> 00:10:12.488 +extensibility, thanks to Emacs' own + +00:10:12.489 --> 00:10:14.900 +extensibility and customizability. + +00:10:15.000 --> 00:10:18.619 +Examples include mastodon.el for mastodon, + +00:10:18.620 --> 00:10:22.679 +or mastorg for viewing and archiving toots with org, + +00:10:22.680 --> 00:10:28.899 +sx for Stack Exchange, buildbot.el for buildbot, etc. + +00:10:28.900 --> 00:10:31.900 +Here's an example of mastorg displaying + +00:10:31.901 --> 00:10:34.420 +the hierarchy of a toot in org. + +00:10:34.520 --> 00:10:39.820 +Just wait. Right. + +00:10:39.920 --> 00:10:43.900 +So this is the toot itself, this is a first reply, + +00:10:44.000 --> 00:10:48.479 +this is a reply to the reply, and so on. + +00:10:48.480 --> 00:10:53.079 +And here is an example of + +00:10:53.080 --> 00:11:05.719 +opening a Stack Exchange link using sx. + +00:11:05.720 --> 00:11:07.020 +Let's check out the tag. + +00:11:11.120 --> 00:11:28.399 +So we can browse the Stack Exchange Emacs site +with ease. + +00:11:28.400 --> 00:11:31.079 +The idea is quite simple. + +00:11:31.080 --> 00:11:35.620 +Just use APIs to get data and display it in Emacs, + +00:11:35.720 --> 00:11:40.819 +or just to scrape, like requesting HTML and processing it. + +00:11:40.820 --> 00:11:42.079 +An example of scraping is hnreader, + +00:11:44.180 --> 00:11:47.199 +which scrapes Hacker News web pages + +00:11:47.299 --> 00:11:49.779 +and renders them in Org buffers. + +00:11:49.780 --> 00:11:52.379 +Here's how hnreader fetches + +00:11:52.380 --> 00:11:56.319 +and displays the Hacker News front page. + +00:11:58.520 --> 00:12:03.999 +And one could go into the comments, + +00:12:04.000 --> 00:12:09.159 +which shows a similar hierarchy to mastorg's output. + +00:12:14.360 --> 00:12:19.000 +And of course, there are limitations for this method, + +00:12:19.001 --> 00:12:22.539 +which is not limited to Emacs. + +00:12:22.540 --> 00:12:24.521 +There are basically limitations + +00:12:24.522 --> 00:12:28.419 +to any ad hoc bespoke clients, + +00:12:28.420 --> 00:12:31.519 +which is catch-up games with remote server, + +00:12:31.520 --> 00:12:34.559 +which may change the API interface endpoints + +00:12:34.560 --> 00:12:37.539 +or even structure of the responses. + +00:12:37.540 --> 00:12:43.020 +This brings us to web browsers in Emacs. + +NOTE Web browsers in Emacs + +00:12:43.021 --> 00:12:45.159 +Web browsers are universal clients + +00:12:45.160 --> 00:12:47.199 +because all sites support browsers. + +00:12:47.200 --> 00:12:48.919 +So in a world of no JavaScript, + +00:12:48.920 --> 00:12:52.739 +there will be no need to write bespoke clients. + +00:12:52.740 --> 00:12:53.479 +In such a world, + +00:12:53.480 --> 00:12:56.739 +instead of using JavaScript code to fetch JSON, + +00:12:56.740 --> 00:13:00.119 +web developers make server do the heavy lifting + +00:13:00.120 --> 00:13:02.859 +and just send the complete HTML over. + +00:13:02.860 --> 00:13:05.479 +Okay, back to reality. + +00:13:05.480 --> 00:13:07.659 +EWW, the default Emacs browser, + +00:13:07.660 --> 00:13:11.379 +is what people refer to as a text browser, + +00:13:11.380 --> 00:13:16.899 +even though it is not text only and it supports images too. + +00:13:16.900 --> 00:13:20.679 +It is a good solid browser that supports forms, etc. + +00:13:20.680 --> 00:13:24.079 +The downside is that it does not support CSS, + +00:13:24.080 --> 00:13:28.159 +so the formatting could be a bit ugly sometimes. + +00:13:28.160 --> 00:13:30.119 +There are some other browsers in Emacs too, + +00:13:30.120 --> 00:13:34.279 +like emacs-w3m, which is backed by w3m, + +00:13:34.280 --> 00:13:36.439 +and Luwak, which is backed by Lynx. + +00:13:36.440 --> 00:13:39.099 +Sorry for the naming, by the way. + +00:13:39.100 --> 00:13:41.519 +They often consist of a backend + +00:13:41.520 --> 00:13:44.879 +that fetches URL and parses HTML. + +00:13:44.880 --> 00:13:47.199 +For example, the built-in URL package + +00:13:47.200 --> 00:13:50.599 +and the libxml2 binding in Emacs are decent enough. + +00:13:50.600 --> 00:13:53.188 +And the frontend that renders the HTML, + +00:13:53.189 --> 00:13:56.599 +like shr or lynx, etc. + +00:13:56.699 --> 00:14:04.739 +There is also an xwidget-webkit, + +00:14:04.740 --> 00:14:07.759 +but this browser executes JavaScript, + +00:14:07.760 --> 00:14:10.539 +so it does not really help in this case. + +00:14:10.540 --> 00:14:14.239 +Browser extensions on Emacs are effortless, + +00:14:14.240 --> 00:14:17.459 +as they can be written as Emacs packages. + +00:14:17.460 --> 00:14:19.279 +For example, one could easily write + +00:14:19.280 --> 00:14:21.959 +Elisp scripts with similar functionalities + +00:14:21.960 --> 00:14:24.921 +to libredirect and openwith + +00:14:24.922 --> 00:14:29.881 +to redirect links, to rewrite URLs, + +00:14:30.181 --> 00:14:36.860 +or to open, say, a YouTube URL with MPV, + +00:14:37.061 --> 00:14:39.700 +but with even more flexibility. + +00:14:39.800 --> 00:14:41.779 +For example, here's how one could + +00:14:41.780 --> 00:14:44.839 +transform a Zoom link to a dial-in number + +00:14:44.840 --> 00:14:47.479 +so that it is easier to join a Zoom meeting + +00:14:47.480 --> 00:14:50.359 +without running non-free JavaScript. + +00:14:50.360 --> 00:14:53.039 +This might still be bad for privacy, + +00:14:53.040 --> 00:14:55.999 +but at least it's good for freedom. + +00:14:58.699 --> 00:15:00.279 +As mentioned before, + +00:15:00.379 --> 00:15:03.919 +one shortcoming of these Emacs-based browsers, + +00:15:03.920 --> 00:15:08.079 +Emacs web browsers, is no support for CSS, + +00:15:08.080 --> 00:15:11.319 +so the formatting could leave a lot to be desired. + +00:15:11.320 --> 00:15:12.959 +Maybe someone would write + +00:15:12.960 --> 00:15:17.159 +an Emacs browser package backed by wkhtmltopdf, + +00:15:17.160 --> 00:15:20.639 +which, when opening a URL, + +00:15:20.640 --> 00:15:26.380 +it calls wkhtmltopdf to convert the web page to PDF + +00:15:26.480 --> 00:15:29.540 +and opens in, say, pdf-view-mode of the pdf-tools, + +00:15:29.640 --> 00:15:31.039 +thus containing formatting, + +00:15:31.040 --> 00:15:33.999 +and all the URL clicks resolve to the same actions. + +00:15:34.000 --> 00:15:42.399 +Also, wkhtmltopdf contains a flag that disables JavaScript. + +00:15:43.300 --> 00:15:45.239 +Another idea would be to use Firefox + +00:15:45.240 --> 00:15:49.679 +as a processor to fetch URLs. + +00:15:50.280 --> 00:15:54.559 +Maybe it can be used to pass back the HTML + +00:15:54.560 --> 00:15:56.519 +after executing free JavaScript, + +00:15:56.520 --> 00:16:01.439 +say, if Firefox has LibreJS installed. + +00:16:01.440 --> 00:16:04.940 +This requires Firefox to send back the DOM, + +00:16:05.040 --> 00:16:08.039 +which could be achieved using native messaging. + +00:16:08.040 --> 00:16:09.719 +More on that later. + +00:16:09.720 --> 00:16:14.239 +Alternatively, one could also write a Firefox extension + +00:16:14.240 --> 00:16:17.639 +that sends the DOM in an existing tab back to Emacs. + +00:16:17.640 --> 00:16:20.079 +But thinking more about it, + +00:16:20.080 --> 00:16:22.959 +I don't think this is actually a useful idea, + +00:16:23.059 --> 00:16:27.039 +because most of the sites that work under LibreJS + +00:16:27.139 --> 00:16:34.419 +also are useful when all JavaScript is blocked. + +00:16:34.420 --> 00:16:37.039 +So, this means these sites are viewable + +00:16:37.040 --> 00:16:42.159 +under EWW, Luwak, etc. + +00:16:42.160 --> 00:16:43.639 +And another issue is that + +00:16:43.640 --> 00:16:46.559 +this could also make running non-free JavaScript easier, + +00:16:46.560 --> 00:16:52.379 +which is harmful to user freedom. + +NOTE emacs-web-server - overview + +00:16:52.380 --> 00:16:54.239 +OK, let's move on to the idea + +00:16:54.240 --> 00:16:55.679 +of running Emacs as a web server, + +00:16:55.680 --> 00:16:58.559 +so that Emacs client packages are web apps + +00:16:58.560 --> 00:17:00.319 +serving as alternative frontends. + +00:17:00.320 --> 00:17:02.239 +Why would we want to do this? + +00:17:02.240 --> 00:17:06.079 +Well, as much as one wants to be always in Emacs, + +00:17:06.080 --> 00:17:08.339 +it is not always feasible. + +00:17:08.340 --> 00:17:10.719 +For example, one may be on the go + +00:17:10.720 --> 00:17:12.519 +and needs to look up something on the phone. + +00:17:12.520 --> 00:17:14.879 +On the other hand, Emacs client packages + +00:17:14.880 --> 00:17:16.159 +are just alternative frontends + +00:17:16.160 --> 00:17:18.119 +but written in Elisp and run in Emacs. + +00:17:18.120 --> 00:17:20.759 +With the help of emacs-web-server package, + +00:17:20.760 --> 00:17:23.579 +we can access Emacs packages on the web. + +00:17:23.580 --> 00:17:26.439 +emacs-web-server package is not something new, + +00:17:26.440 --> 00:17:30.379 +but seems to be underused in the community somehow. + +NOTE emacs-web-server - hello emacs! + +00:17:30.380 --> 00:17:33.359 +OK, let's start with a simple example called hello-emacs. + +00:17:33.360 --> 00:17:35.239 +It is pretty straightforward. + +00:17:35.240 --> 00:17:38.639 +Just require the web server feature + +00:17:38.640 --> 00:17:40.999 +and run ws-start to start a server process + +00:17:41.000 --> 00:17:43.359 +and send the string "hello emacs" + +00:17:43.360 --> 00:17:45.539 +to the process regardless of the request. + +00:17:45.540 --> 00:17:48.479 +As you can see, it is going to be available + +00:17:48.480 --> 00:17:51.219 +at port 9000 of localhost. + +00:17:51.319 --> 00:17:52.999 +Let's try it out. + +00:17:53.000 --> 00:18:01.839 +We need to first evaluate this code block. + +00:18:01.840 --> 00:18:03.939 +And it works. + +00:18:03.940 --> 00:18:10.839 +To stop a server, just run ws-stop on the web server object. + +00:18:10.840 --> 00:18:14.959 +Let's evaluate. + +00:18:14.960 --> 00:18:17.579 +Yep, it stopped. + +NOTE emacs-web-server - yolo + +00:18:17.580 --> 00:18:19.999 +OK, now let's move on to something funny + +00:18:20.000 --> 00:18:22.219 +that you should never run on the public web. + +00:18:22.220 --> 00:18:23.919 +I call it yolo.el. + +00:18:23.920 --> 00:18:25.359 +It uses htmlize + +00:18:25.360 --> 00:18:28.159 +to make any Emacs buffer available on the web. + +00:18:28.160 --> 00:18:28.999 +Let's try it out. + +00:18:29.000 --> 00:18:32.999 +Just require the thing and start the server by yolo-start. + +00:18:33.000 --> 00:18:38.119 +And it's available at port 9999. + +00:18:38.120 --> 00:18:41.599 +By default, the root domain shows the splash screen + +00:18:41.600 --> 00:18:42.919 +which needs to be available. + +00:18:42.920 --> 00:18:46.719 +Running display-splash-screen ensures that, + +00:18:47.219 --> 00:18:48.839 +but here I've already run it. + +00:18:48.939 --> 00:18:54.359 +So let's have a look. + +00:18:54.560 --> 00:18:56.639 +And here we have the splash screen. + +00:18:56.640 --> 00:19:00.239 +Emacs tutorial and such. + +00:19:00.240 --> 00:19:03.279 +Unfortunately, none of these links work, + +00:19:05.480 --> 00:19:08.000 +which is something we will revisit later. + +00:19:10.000 --> 00:19:15.381 +So, to show an arbitrary buffer, + +00:19:15.481 --> 00:19:19.981 +just use the buffer name as a path. + +00:19:20.081 --> 00:19:24.761 +For example, the slide has the buffer named web.org, + +00:19:24.861 --> 00:19:28.080 +so we can display it. + +00:19:34.581 --> 00:19:36.540 +Let's try something fancier, + +00:19:36.941 --> 00:19:40.000 +like the man page of ffmpeg. + +00:19:40.880 --> 00:19:44.719 +So this is the man page of ffmpeg. + +00:19:45.120 --> 00:19:48.420 +And the buffer name is a bit more complicated. + +00:19:48.520 --> 00:19:51.639 +I have the URL available here. + +00:19:59.140 --> 00:20:05.979 +It's missing a star. + +00:20:05.980 --> 00:20:10.659 +It's pretty neat if you ask me. + +00:20:12.560 --> 00:20:14.879 +And, yeah, what else? + +00:20:14.880 --> 00:20:22.699 +Well, we can also browse EWW in Firefox. + +00:20:22.700 --> 00:20:30.599 +For example, let's check out gnu.org, + +00:20:30.600 --> 00:20:33.679 +and note that the buffer name is EWW with stars. + +00:20:39.080 --> 00:20:41.879 +So, ah, it works. + +00:20:41.979 --> 00:20:50.899 +And it has all the graphics even. + +00:20:50.900 --> 00:20:55.639 +Now, how about we do it the other way around? + +00:20:55.640 --> 00:21:10.779 +So we load the current slide web.org using this funny thing. + +00:21:10.780 --> 00:21:12.239 +And it works. + +00:21:14.040 --> 00:21:19.939 +Not as nice as the Org buffer, though. + +00:21:19.940 --> 00:21:27.439 +Right, and now that gives me some funny idea. + +00:21:27.440 --> 00:21:31.359 +So I'm a firm believer that memes are meant to be enjoyed + +00:21:31.360 --> 00:21:33.199 +in silence rather than read out loud. + +00:21:33.200 --> 00:21:38.759 +So I will jump straight to trying this idea, + +00:21:38.760 --> 00:21:48.959 +which is loading the EWW buffer URL with EWW itself. + +00:21:49.860 --> 00:21:53.839 +Loading, loading, loading. + +00:21:53.840 --> 00:21:56.199 +Spoiler alert, it never loads. + +00:21:59.100 --> 00:22:03.120 +So that concludes the demo. + +00:22:03.220 --> 00:22:06.439 +And so we can stop the server, web server, with `yolo-stop`. + +00:22:06.440 --> 00:22:13.399 +So one could extend yolo to serve arbitrary Emacs commands, + +00:22:13.400 --> 00:22:15.439 +making it even more dangerous. + +00:22:15.440 --> 00:22:26.019 +That is, for example, `localhost:9000/m-x/magit-status` + +00:22:26.119 --> 00:22:27.720 +would run `magit-status` + +00:22:27.820 --> 00:22:33.499 +and show the magit-status buffer in the web browser. + +00:22:34.500 --> 00:22:43.119 +Or localhost:9000/m-x/eww/ + +00:22:43.120 --> 00:22:46.759 +any arbitrary URL to browse arbitrary URL + +00:22:46.760 --> 00:22:50.819 +with EWW inside of Firefox. + +00:22:50.820 --> 00:22:53.879 +It can serve as a way to block all JavaScript, + +00:22:53.880 --> 00:22:56.799 +because EWW does not support JavaScript. + +00:22:56.800 --> 00:23:00.079 +And enforce preferred colorscheme in Firefox, + +00:23:00.080 --> 00:23:02.839 +since htmlize, as you have noticed, + +00:23:02.840 --> 00:23:06.439 +faithfully reflects the theme used in Emacs. + +NOTE emacs-web-server - emacs web framework + +00:23:07.940 --> 00:23:10.239 +Okay, so we know that yolo is unsafe + +00:23:10.339 --> 00:23:11.440 +and needs to be refined. + +00:23:11.540 --> 00:23:13.439 +In fact, we don't necessarily want + +00:23:13.440 --> 00:23:15.599 +to run Emacs on a web browser. + +00:23:15.600 --> 00:23:17.279 +After all, a modern web browser is + +00:23:17.280 --> 00:23:19.079 +something one has to fight all the time + +00:23:19.080 --> 00:23:21.600 +and should be avoided whenever possible. + +00:23:21.601 --> 00:23:24.479 +We want to instead be able to access things + +00:23:24.480 --> 00:23:26.459 +when forced to be in a web browser, + +00:23:26.460 --> 00:23:28.359 +in which case only the motivations + +00:23:28.360 --> 00:23:31.299 +of an alternative frontend apply. + +00:23:31.300 --> 00:23:35.360 +Moreover, the ideal situation is an Emacs web framework, + +00:23:35.460 --> 00:23:36.799 +a tool that automatically + +00:23:36.800 --> 00:23:39.199 +transforms Emacs packages to web apps, + +00:23:39.200 --> 00:23:41.799 +so that one does not need to write extra code + +00:23:41.800 --> 00:23:45.559 +to get a web app that does the same thing as the package. + +00:23:45.560 --> 00:23:49.099 +We also need all links in the web pages to work. + +00:23:49.100 --> 00:23:52.399 +As noted before, the links on the yolo Emacs splash screen + +00:23:52.400 --> 00:23:53.839 +do not work. + +00:23:53.840 --> 00:23:58.199 +So here's a proof-of-concept example. It's called bom.el. + +00:23:58.200 --> 00:24:00.119 +It gets some weather forecast data + +00:24:00.120 --> 00:24:03.079 +from the Australian Bureau of Meteorology + +00:24:03.080 --> 00:24:05.559 +and displays it in an org buffer. + +00:24:05.560 --> 00:24:09.279 +So let's try it out. One could do `M-x bom`, + +00:24:09.280 --> 00:24:15.219 +which shows an org buffer with links to each state. + +00:24:15.220 --> 00:24:17.199 +So based in Melbourne, naturally, + +00:24:17.200 --> 00:24:21.839 +I would like to find out the weather of Victoria. + +00:24:21.840 --> 00:24:27.839 +And yes, to execute this command. Wait, wait, wait. Right. + +00:24:27.840 --> 00:24:33.459 +And we are at a buffer that shows + +00:24:33.460 --> 00:24:36.119 +the weather forecast of the whole of Victoria + +00:24:36.120 --> 00:24:39.379 +in the hierarchy. Note that this back button + +00:24:39.479 --> 00:24:46.639 +takes you to the previous page. + +00:24:46.640 --> 00:24:47.919 +So here are the regions of Victoria. + +00:24:47.920 --> 00:24:53.799 +I think Melbourne is in Central. + +00:24:53.800 --> 00:24:54.719 +And yeah, it shows + +00:24:54.720 --> 00:24:57.259 +the seven-day weather forecast of Melbourne. + +00:24:57.260 --> 00:25:00.359 +You can also reach this page by running, + +00:25:00.360 --> 00:25:08.199 +let's see, directly `M-x bom-state`. + +00:25:08.600 --> 00:25:09.759 +Vic. + +00:25:13.960 --> 00:25:18.399 +OK. So this works. + +00:25:18.400 --> 00:25:21.280 +And this is bom as an Emacs package. + +00:25:21.380 --> 00:25:23.980 +Now let's check out bom as a web app + +00:25:23.981 --> 00:25:28.039 +transformed by Emacs web framework. + +00:25:28.040 --> 00:25:30.319 +So start the web server with bom-start. + +00:25:33.020 --> 00:25:39.559 +And let's try it out. It's at 9000 again. + +00:25:39.560 --> 00:25:42.359 +Oops. Invalid path. Oh, that's because + +00:25:42.360 --> 00:25:46.119 +it makes exactly one command to one path. + +00:25:46.120 --> 00:25:49.300 +So remember that we used the bom command + +00:25:49.301 --> 00:25:50.719 +to show the landing page. + +00:25:50.720 --> 00:25:54.340 +So here we need the bom in the path as well. + +00:25:54.440 --> 00:26:00.679 +And it shows the same landing page, except in HTML. + +00:26:00.680 --> 00:26:07.259 +Let's check out Victoria weather forecast as before. + +00:26:07.260 --> 00:26:12.279 +And it shows an HTML converted from the org buffer + +00:26:12.280 --> 00:26:17.559 +using ox export HTML, whatever. + +00:26:17.560 --> 00:26:20.259 +And you can see even the back button is here. + +00:26:20.359 --> 00:26:26.219 +That takes you to /bom. + +00:26:26.220 --> 00:26:29.139 +So let's have a look at Melbourne. Here it is. + +00:26:29.140 --> 00:26:31.379 +Hooray, it works. + +00:26:31.380 --> 00:26:33.860 +So, yeah, as usual, + +00:26:33.960 --> 00:26:40.559 +you can stop the web server with `M-x bom-stop`. + +00:26:40.560 --> 00:26:43.660 +Right. And alternatively, + +00:26:43.760 --> 00:26:48.499 +it can also be deployed directly in terminal + +00:26:48.500 --> 00:26:56.099 +in a dedicated Emacs daemon. + +00:26:56.100 --> 00:26:58.279 +So you can see that there's a one-one correspondence + +00:26:58.280 --> 00:27:03.099 +between the Emacs package interface and the web interface. + +00:27:03.100 --> 00:27:06.039 +And that implies some restrictions to the Emacs package + +00:27:06.040 --> 00:27:09.159 +for the Emacs web framework to be able to do its job. Right. + +00:27:09.160 --> 00:27:13.439 +For example, the package needs to have an Org interface + +00:27:13.440 --> 00:27:15.519 +and the links that trigger other commands + +00:27:15.520 --> 00:27:17.799 +need to be in Elisp links + +00:27:17.800 --> 00:27:20.759 +so that the Emacs web framework + +00:27:20.760 --> 00:27:24.799 +can translate it to web server URL path. + +00:27:24.800 --> 00:27:28.919 +Note that Emacs web server framework is not a real package. + +00:27:28.920 --> 00:27:33.339 +I wrote some functions in bom.el serving the purpose, + +00:27:33.340 --> 00:27:35.719 +and they should be separated out eventually + +00:27:35.720 --> 00:27:37.759 +without much trouble. + +00:27:37.760 --> 00:27:39.999 +One could get weather forecast + +00:27:40.000 --> 00:27:42.219 +without running JavaScript anyway, + +00:27:42.220 --> 00:27:45.199 +which makes bom.el less important + +00:27:45.200 --> 00:27:48.319 +as an alternative web client. + +00:27:48.320 --> 00:27:50.519 +Though it does provide, dare I say, + +00:27:50.520 --> 00:27:52.380 +a clean and minimal interface + +00:27:52.480 --> 00:27:55.719 +compared to common weather forecast web pages. + +00:27:55.720 --> 00:27:58.639 +Other more relevant use cases could be Mastodon, + +00:27:58.640 --> 00:28:01.319 +whose official web client requires JavaScript + +00:28:01.320 --> 00:28:03.479 +to display a post. + +00:28:03.480 --> 00:28:08.559 +The mastorg package that shows an Org hierarchy of toots + +00:28:08.560 --> 00:28:12.079 +rooted as a given toot could be a low-hanging fruit. + +00:28:12.179 --> 00:28:15.199 +The limitation of Org interface requirements + +00:28:15.200 --> 00:28:17.879 +can also be relaxed in further work, + +00:28:17.880 --> 00:28:21.639 +if one could extend Emacs web framework + +00:28:21.640 --> 00:28:24.199 +to translate back and forth between Emacs widgets, + +00:28:24.200 --> 00:28:28.639 +say, including buttons and web page widgets, + +00:28:28.640 --> 00:28:30.599 +including links. + +00:28:30.600 --> 00:28:32.599 +Another more far-fetched idea would be + +00:28:32.600 --> 00:28:35.799 +to translate to other types of interfaces, + +00:28:35.800 --> 00:28:42.120 +like GNU/Linux or Android GUI. + +00:28:44.020 --> 00:28:47.479 +How about animations? Say, M-x butterfly, + +00:28:47.480 --> 00:28:53.999 +or even web games from Emacs games? + +00:28:54.000 --> 00:29:00.099 +Possibilities are unlimited in this, as always, in Emacs. + +00:29:00.100 --> 00:29:03.159 +I also noticed some limitations + +00:29:03.160 --> 00:29:07.439 +when trying to actually host bom.el on the public web. + +00:29:07.440 --> 00:29:12.939 +Given the limited access to the Emacs server, + +00:29:13.540 --> 00:29:16.719 +I was comfortable enough to give bom.el a go + +00:29:16.720 --> 00:29:18.799 +to serve it on the public web. + +00:29:18.800 --> 00:29:20.559 +However, I immediately stopped + +00:29:20.560 --> 00:29:22.879 +after noticing how slow it is. + +00:29:22.880 --> 00:29:24.719 +It can take more than 30 seconds + +00:29:24.720 --> 00:29:27.839 +to load a page of weather forecast for a state. + +00:29:27.840 --> 00:29:30.999 +I am also not sure how many simultaneous connections + +00:29:31.000 --> 00:29:32.379 +it can handle. + +00:29:32.380 --> 00:29:36.439 +In any case, I think the package emacs-web-server + +00:29:36.440 --> 00:29:40.419 +could do with some performance enhancement. + +NOTE Firefox with emacs for extensions + +00:29:40.420 --> 00:29:43.999 +Right. Because of the time constraints, + +00:29:44.000 --> 00:29:45.759 +I will briefly touch one final idea, + +00:29:45.760 --> 00:29:50.320 +which is to use Emacs as a Firefox browser extension. + +00:29:50.420 --> 00:29:52.800 +We already have org-protocol, + +00:29:52.900 --> 00:29:54.439 +which allows Firefox to communicate + +00:29:54.440 --> 00:29:55.919 +with a running Emacs server + +00:29:55.920 --> 00:29:59.779 +by sending an org-protocol URL to the latter. + +00:29:59.780 --> 00:30:03.159 +It can be used not just for capturing or storing links, + +00:30:03.160 --> 00:30:10.119 +but to execute arbitrary code on any component of the URL. + +00:30:10.120 --> 00:30:11.679 +However, it is fire and forget, + +00:30:11.680 --> 00:30:16.479 +and Emacs cannot tell Firefox what to do. + +00:30:16.480 --> 00:30:17.919 +There may be a length restriction, too. + +00:30:17.920 --> 00:30:20.399 +For example, Firefox may not be able to send back + +00:30:20.400 --> 00:30:22.419 +the whole DOM. + +00:30:22.420 --> 00:30:26.219 +This claim needs to be verified, though. + +00:30:26.220 --> 00:30:30.019 +Native messaging is one solution to this problem. + +00:30:30.020 --> 00:30:31.639 +It is a two-way communication channel + +00:30:31.640 --> 00:30:35.319 +between a Firefox web extension and a local system process + +00:30:35.320 --> 00:30:37.839 +started by the web extension. + +00:30:37.840 --> 00:30:40.399 +The process could be an Emacs server, + +00:30:40.400 --> 00:30:42.399 +which would make Emacs effectively + +00:30:42.400 --> 00:30:48.679 +a Firefox web browser extension. + +00:30:48.680 --> 00:30:51.999 +In this case, Elisp would be the main extension language, + +00:30:52.000 --> 00:30:53.619 +rather than JavaScript. + +00:30:53.620 --> 00:30:56.159 +However, JavaScript is still needed at the Firefox end + +00:30:56.160 --> 00:30:59.220 +of the communication channel. + +00:30:59.320 --> 00:31:01.159 +As a simple example of this idea, + +00:31:01.160 --> 00:31:04.439 +Firefox could ask Emacs to redirect a URL + +00:31:04.440 --> 00:31:08.319 +by removing tracking and using alternative frontend, etc. + +00:31:08.320 --> 00:31:12.479 +However, I was not able to implement this + +00:31:12.480 --> 00:31:14.279 +due to some tricky business + +00:31:14.280 --> 00:31:15.639 +with enforcing synchronicity + +00:31:15.640 --> 00:31:17.119 +that allows the web extension + +00:31:17.120 --> 00:31:20.199 +to wait for responses from Emacs. + +00:31:20.200 --> 00:31:25.359 +Some further work, I suppose. + +NOTE Thank you + +00:31:25.360 --> 00:31:28.154 +That concludes my talk. + +00:31:28.254 --> 00:31:31.440 +Thank you for your attention. diff --git a/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt new file mode 100644 index 00000000..7dbb18c5 --- /dev/null +++ b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt @@ -0,0 +1,1394 @@ +WEBVTT + +00:00.000 --> 00:06.880 +Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and + +00:06.880 --> 00:14.800 +welcome to, uh, uh, welcome to my talk. I'm a little distracted here. I had a friend who came + +00:14.800 --> 00:20.320 +over and just brought me a whole bunch of peanut butter cups, homemade peanut butter cups. Maybe + +00:20.320 --> 00:26.400 +I'll show those off, uh, later. What? Okay. Here, uh, put it right there. + +00:33.840 --> 00:41.760 +Okay. So I'm going to, uh, get over to my plan, uh, stuff I'm sharing here, hopefully. + +00:42.800 --> 00:48.640 +Uh, and, and we'll jump, jump right in because I'm going to need as much time as I can possibly + +00:48.640 --> 00:55.520 +have today. Thanks so much for, uh, joining me for Emacs conference and for, especially for, + +00:56.400 --> 01:03.520 +um, all of you who, who, who participated, you know, in the discussions, contributing talks and, + +01:03.520 --> 01:09.600 +um, you know, uh, you know, including running the, the, the, and it's just so much fun to be here. + +01:09.600 --> 01:16.320 +Um, I guess while I'm standing here and, and saying stuff that's, that I'm going to have to + +01:16.320 --> 01:23.280 +transcribe, cause I didn't, uh, prepare a recorded version. Uh, I had a lot of trouble + +01:23.280 --> 01:28.880 +trimming this down so I can solve that problem by just talking a lot at the beginning, uh, + +01:28.880 --> 01:37.120 +about other stuff. Um, so in addition to the thanks, I just want to say thanks also to the + +01:37.120 --> 01:41.920 +folks on the development list that helped me kind of come up to speed on this. I won't make a big + +01:41.920 --> 01:48.880 +list here, but, um, and, and, and for all that I've learned from my previous conferences, it's + +01:48.880 --> 01:55.200 +just, I can't stress enough what a great opportunity volunteering for, uh, free software related things + +01:55.200 --> 02:00.080 +are, uh, as a way to get involved. People will just totally teach you how to be helpful and I'm + +02:00.080 --> 02:18.800 +loving it. I can preview the stream, but it's not super easy right now. I got all my screens + +02:18.800 --> 02:23.680 +kind of dedicated to other stuff. So should I pause for a second before I get into the slides? + +02:23.680 --> 02:27.680 +Cause that's, they're, they'll be hard to see if I'm not full screen. + +02:29.440 --> 02:34.240 +Yeah, that would be nice. Okay. Well, I'll keep ad libbing then cause I just have a million, + +02:34.240 --> 02:42.960 +uh, things I can say. Um, uh, so, uh, let me just quickly talk, uh, things that aren't in here. + +02:42.960 --> 02:50.320 +Um, I'm going to mention the mysis2.org and the, that project, which provides a port + +02:51.280 --> 03:03.520 +of, uh, the GNU, uh, uh, glibc and a lot of GNU and, uh, uh, their free software. Um, so, uh, + +03:03.520 --> 03:03.840 +I don't... + +03:03.840 --> 03:07.760 +All right, I'm switching a room to, uh, a DVD room to Stefan. + +03:12.080 --> 03:15.440 +All right. So I'm going to take mumble out of my, uh, pardon me, folks. + +03:16.080 --> 03:18.640 +It's going to take mumble out of my speakers here. + +03:22.800 --> 03:30.080 +Okay. We'll take the speakers out of play entirely and I'll just switch to some headphones. + +03:33.600 --> 03:34.720 +All right. So... + +03:36.720 --> 03:42.240 +Perfect. What an amazing amount of time. All right. So thanks a lot. Uh, today I've got a jam + +03:42.400 --> 03:48.720 +packed talk. Um, I've, I've done my best to make, to make this not too overwhelming, + +03:48.720 --> 03:55.040 +but overall we're going to try to try to actually build, um, Emacs while we're talking today. + +03:55.040 --> 04:00.400 +And we might actually build several Emacs. Uh, so let's take a look at that real quick. + +04:00.400 --> 04:08.160 +Um, so over here we have a screen where I am just once a minute looking, uh, + +04:08.480 --> 04:15.360 +uh, indirectly at whether there have been any pushes, uh, upstream to either the Emacs 29 or + +04:15.360 --> 04:24.320 +Emacs 30 branches. So I've arranged for us to sort of keep an eye on that, um, while we talk. + +04:24.320 --> 04:30.000 +And, you know, maybe that's, that's one thing that we'll do. And then additionally, we'll probably + +04:30.640 --> 04:36.640 +fire up a shell. This is the MySys2 environment that I talked about before, + +04:36.640 --> 04:42.160 +and we'll probably create some directories and things. But before we get into all that, let's, + +04:42.160 --> 04:48.080 +let's give some, some context. Uh, I've been doing my best to try to, uh, make sure all this + +04:48.080 --> 04:54.240 +information is on the Emacs wiki as well. So, uh, sorry, as I said, I got a little caught off guard. + +04:54.240 --> 05:02.640 +So I'm moving my foot pedals to the floor, back to the floor here. And I should be able to advance + +05:02.640 --> 05:11.760 +slides here. All right. So, um, I kind of provided some special definitions for things. I'm going to + +05:11.760 --> 05:21.680 +kind of level set with those. The, uh, um, when I say a binary release, I'm talking about some, + +05:21.680 --> 05:27.440 +some, uh, I'm talking about Emacs for Windows as, uh, just ready to run out of its folder or + +05:28.080 --> 05:35.600 +in whatever similar form. The, when I say a build, I'm talking about kind of a process of doing that. + +05:36.400 --> 05:41.040 +Um, when Emacs.get, of course, that's the upstream hosted by GNU Savannah. + +05:41.600 --> 05:51.680 +The Emacs release is, is a tarball created from that. The sources for, um, Emacs are going to be + +05:51.680 --> 05:58.480 +one of those two things, um, very specifically. So I'm not going to talk about patches patching. + +05:58.480 --> 06:06.720 +There's some implications there. Perhaps we'll get into it. Uh, so a snapshot is when I build + +06:06.720 --> 06:14.880 +from anything other than a release source, uh, a tarball. Um, just if I, if I say that I'm talking + +06:14.880 --> 06:23.600 +specifically about the, uh, the XZ version of the file as, as a technical point. Um, + +06:23.600 --> 06:32.480 +so that may come up. All right. Nothing else I think up my sleeve. Um, the, uh, as, as a key + +06:32.480 --> 06:38.320 +data point, it's worth understanding that there's a file called configure AC. It's going to be + +06:38.320 --> 06:46.160 +processed, uh, as part of auto-conf. We, we initially access that when we run, um, auto-gen + +06:46.160 --> 06:52.720 +as you'll see in a little bit. Um, the, but before, but, uh, so the auto-gen script will + +06:52.720 --> 07:00.160 +generally consider this, uh, so in a release build, um, this has been thought about kind of for us as + +07:00.240 --> 07:10.480 +part of, um, making the tarball. Um, the configure.ac, um, yeah, I think I pretty much covered, + +07:10.480 --> 07:16.880 +covered this. So, um, those, those that kind of partially built status, that's a, + +07:16.880 --> 07:22.640 +might be another phrase that you hear me use. So this slide unpacks that a little more. + +07:22.880 --> 07:29.520 +Um, so it can be a little confusing to understand what exactly the, you know, what is it, you know, + +07:29.520 --> 07:36.160 +how stable is Emacs depending on what I have. So the, I got a kind of set of rules of thumb here, + +07:36.160 --> 07:43.680 +right? First I want the highest, uh, you know, dot, uh, dot release value that I can get, + +07:43.680 --> 07:50.080 +assuming that that's higher than one. If it's, if it were to only be one, let's say, + +07:50.160 --> 07:58.560 +if it were to only be one, let's say my choices were 29.1 and 30.1, I would take 30.1. Um, + +07:59.200 --> 08:05.520 +cause that's, that's weird. But, um, what you'll normally see is you might see a 28.2, + +08:06.080 --> 08:15.760 +you might see a 29.1. So here I think 28.2 is got the most, most, most stable, um, + +08:16.560 --> 08:26.160 +set, uh, the, uh, or set of release binaries. The 29.1 will, will have a little more features, + +08:26.160 --> 08:33.680 +but will tend to be more stable than, uh, any, uh, lower point releases for 29, uh, certainly + +08:33.680 --> 08:39.600 +than any release candidates for 29, which might even have new features, um, but are mostly going + +08:39.600 --> 08:46.000 +to just be packages. So they're going to become the most stable thing here. And especially if + +08:46.000 --> 08:53.600 +they, they, they have a, you know, if this, this is not, uh, if this were to be 29.2 release + +08:53.600 --> 09:04.960 +candidate one as well, looking forward to seeing, um, the, uh, 30.50. Um, and, and in between this, + +09:04.960 --> 09:11.840 +this pretest here, we're talking about kind of developer land. Um, so, um, the expectation is + +09:11.840 --> 09:16.560 +that, you know, what you're doing that applies to windows users, uh, just as much if you are + +09:16.560 --> 09:22.960 +building anything in the snapshot range, any of that is going to be in this 30.0.50. Currently + +09:22.960 --> 09:32.240 +that'll change when the, uh, when the 30, 30, uh, an Emacs 30 release tags, uh, or release branches + +09:32.240 --> 09:42.880 +come. Okay. So let's talk about the local. Um, there's not much to know about what I have going + +09:42.880 --> 09:51.200 +on, except that I have my, my paths mess messed with. So, um, if, if that, that were to come up, + +09:51.200 --> 09:57.120 +if you're wondering how, why does this, uh, and insist command work, that's probably the place + +09:57.120 --> 10:03.760 +where you'd notice it. Uh, I am using windows 10. I haven't tried windows 11, uh, as mentioned, + +10:03.760 --> 10:09.520 +mysis2 is critical to all this. There's one script in particular that will error out if you try to do + +10:09.520 --> 10:16.560 +anything other than use mysis's, mysis's shell. And in fact, mysis owns or provides three shells + +10:16.560 --> 10:21.760 +and of them, that script is designed to work with a specific one of them as, as we'll come to. + +10:22.720 --> 10:29.120 +Uh, I don't talk about installing the dependencies, but just as, as kind of some kind of help, + +10:29.680 --> 10:38.480 +um, you can search using this formula and install, uh, using this formula. + +10:38.480 --> 10:40.800 +Good luck with those, you know, grep commands. + +10:43.520 --> 10:49.440 +And this is the tool for building the self-installing self-extracting installer or, uh, + +10:49.520 --> 10:55.600 +executable self-installer. Um, the script for that is provided along with the Emacs source. + +10:56.720 --> 11:03.280 +Um, and I've provided a helpful link to the main page for the project download link on the left. + +11:03.280 --> 11:09.680 +It is not, um, it's kind of scare where the way that this link appears, but I have clicked it and + +11:09.680 --> 11:18.960 +it's working for me. Automation does, uh, we'll, we have some time we'll be looking at this at a + +11:18.960 --> 11:24.560 +minimum. I wanted to mention that what I do on my local, what you're seeing in the crawler, I hope, + +11:25.280 --> 11:35.600 +uh, represents a, uh, a simple sleep loop. Uh, and we'll, we'll look into that if we have time. + +11:36.560 --> 11:42.960 +Um, I do have a little bit, I do use like a cron job and so on to clean up some hosting that, + +11:42.960 --> 11:50.160 +that I pay for, um, where I've got, where I, where I kind of self host some, uh, snapshots, + +11:50.720 --> 11:58.880 +more stuff than I feel comfortable uploading to, uh, to GNU. The, um, + +12:01.760 --> 12:06.480 +you know, I never said, uh, my name is Corwin Brust. For the last couple of years, I've been + +12:06.480 --> 12:12.480 +the volunteer making, uh, um, making the snapshots, the quote unquote, official binaries, + +12:12.480 --> 12:20.560 +uh, for windows of the, um, of, of Emacs for windows. So that's, that's all the different + +12:20.560 --> 12:25.680 +versions. Uh, help is always welcome with that. I'd be very happy to teach you in more depth. + +12:25.680 --> 12:31.920 +This video is, you know, kind of my drop dead file. Uh, I don't have specific plans. Uh, if + +12:31.920 --> 12:36.480 +somebody's like, Hey, get out of the way, this is the one thing I think I can do. Um, Hey, + +12:36.480 --> 12:44.640 +that's real relatable. Okay. Um, so I haven't tried, uh, the, I haven't tried a lot of fun + +12:44.640 --> 12:50.400 +things that I won't talk about. Um, the, uh, the rest of this talk is going to get into the + +12:50.400 --> 12:56.560 +nitty gritty. As I said, um, if we can't convince Emacs to start building over on that screen, + +12:56.560 --> 13:05.120 +we'll be opening it up here on the center stage. Um, uh, this begins and there's, there's, there's, + +13:05.120 --> 13:11.520 +there's great insight here too, on the wiki, uh, with picking an FTP source for any official + +13:11.520 --> 13:19.760 +release that is for a stable product, please visit, um, ftp.gnu.org. Otherwise you'll want + +13:19.760 --> 13:27.280 +to switch that FTP dot at the beginning to alpha dot and take a pretest, uh, or any snapshot or + +13:27.280 --> 13:36.640 +otherwise, then publish there the, uh, next, uh, you know, I'm gonna, you have some examples in + +13:36.640 --> 13:43.440 +here that assume that you're doing a release bill that you're doing $29 one, but, um, I am glancing + +13:43.520 --> 13:51.440 +out of the, the right side of my face at the chat on the opt-ins. Anybody in there wants to direct + +13:51.440 --> 13:57.840 +me at a particular, um, we can make some other, we can build something else. If you want to see + +13:57.840 --> 14:03.840 +a snapshot build more mentioned that, um, the examples that you're going to see here that I + +14:03.840 --> 14:12.560 +will, without other direction, cut and paste, um, are all, uh, based on the release bill. So, + +14:14.640 --> 14:22.320 +um, so, uh, we'll use the, uh, I mentioned that there are several shells provided by MySys2. + +14:22.960 --> 14:33.120 +The MinGW64 shell is the one that we mostly need. Um, I tested all of this as well with the MinGW32 + +14:33.120 --> 14:40.400 +shell. Um, so that, that should work and, and see mix binaries that, that, that work for me. + +14:44.080 --> 14:50.720 +Uh, I, as I mentioned, I don't get into the details of installing all your prerequisites. + +14:50.720 --> 14:56.560 +I found that doing it in a headfirst manner wasn't, uh, wasn't difficult. And I also found + +14:56.560 --> 15:00.240 +that there's a number of tutorials. I didn't want to pick one to link here. + +15:01.040 --> 15:10.800 +Um, there, uh, here, uh, okay. So our general formula for building Emacs, irrespective of + +15:10.800 --> 15:19.600 +Windows, looks like, does the configure script exist if not run autogen? From a Windows build + +15:19.600 --> 15:27.600 +standpoint, this is, if I'm not running a release, release build, call the autogen script. + +15:27.840 --> 15:32.080 +Right. And this would be in the directory where we want to pack this. I'll demonstrate + +15:32.080 --> 15:42.640 +within three minutes if, uh, if one, if nobody's pushed upstream to Emacs. Um, so, uh, the configure, + +15:42.640 --> 15:53.280 +uh, and, uh, configure options are, uh, uh, the, the configure, you know, if the configure, sorry, + +15:54.240 --> 16:01.520 +the configure script exists, then, uh, it doesn't, doesn't exist. So the only reason, + +16:01.520 --> 16:07.920 +so in my process, I will always execute that step because I clean everything after every build, + +16:07.920 --> 16:16.880 +um, in all my contexts. Um, however, if you were, you know, had a, a checkout of emacs.get + +16:16.880 --> 16:21.440 +and you are building it at several releases, then maybe you've got a configure script and then you + +16:21.440 --> 16:27.600 +all want to know, um, the, you know, whether you have to bootstrap and the typical complexities, + +16:27.600 --> 16:33.200 +but otherwise you might be able to skip that in, in, in the abstract. Um, + +16:36.080 --> 16:41.520 +is that right? Or is it, is it the make, uh, so, and if they make file doesn't exist, + +16:41.520 --> 16:46.080 +make install. I know I'm looking at that in question whether it's correct. Sorry about that. + +16:46.640 --> 16:55.600 +Um, in any case, uh, so auto-gen configure make install is our recipe. Auto-gen creates the + +16:55.600 --> 17:01.840 +configure script, configure creates the make file, the make file. Um, in the case of windows, + +17:01.840 --> 17:08.080 +I almost always want the install, uh, and to specify some location where the installed emacs + +17:08.080 --> 17:19.120 +will land. This is where all of the recipes for packaging emacs go. And if I were, uh, you know, + +17:19.120 --> 17:24.640 +using this as a movie to upgrade, I personally would do that by, by specifying an install path, + +17:24.640 --> 17:31.520 +quote unquote, on top of, uh, a main installation. I don't do that. I update shortcuts mainly based + +17:31.520 --> 17:37.600 +on what specifically I want to try, uh, in an effort to, to, to, to notice, uh, interesting + +17:37.600 --> 17:44.400 +patches and confirm they work on windows, which mostly they do. There's not a lot of code in my + +17:44.400 --> 17:49.760 +experience that is, uh, windows specific and very, very little around the build process. + +17:50.320 --> 17:57.440 +All right. Huge rabbit hole zone. And I still have a minute before I have to, uh, kick off + +17:57.440 --> 18:07.120 +the first part of our demo. So let's, let's keep, keep diving in, um, the, those specific part + +18:07.120 --> 18:11.920 +windows specific parts beside the dot exe extension that we're going to find slammed + +18:11.920 --> 18:17.680 +onto all of our familiar, uh, executables. We're also going to have emacs client W, + +18:18.400 --> 18:26.880 +which is a wrapper that hides, um, how hard it is to get, uh, to, to, to get it, + +18:27.600 --> 18:31.760 +how bad the abstraction is between the window management layer and the GUI, + +18:32.400 --> 18:37.040 +and then all the different parts on windows. Essentially, it wants to create a shell window. + +18:37.040 --> 18:42.960 +If we just double click emacs dot exe. So emacs client W, uh, and run emacs, + +18:42.960 --> 18:49.440 +they're going to solve that problem. Um, uh, wrapping emacs and emacs client respectively. + +18:51.600 --> 19:00.320 +And, um, just, uh, all right. So let's, let's go ahead and do something. I'll, I'm going to + +19:00.320 --> 19:08.080 +take away the ticker here for a minute. And what you're not seeing is off stage. I am killing that + +19:08.080 --> 19:19.680 +so we don't get built in parallel. Um, so, um, so at this point I'm going to open up a shell and + +19:19.680 --> 19:24.240 +I'm going to start talking just a little bit about my local build environment, which we haven't + +19:24.240 --> 19:32.640 +gotten into. In fact, just to make that even easier, let's, um, let's just take a look at it + +19:32.640 --> 19:40.640 +a little bit. Probably the easiest spot is here. + +19:47.680 --> 19:55.280 +All right. So here we have the familiar windows, my computer interface. I have the G drive and the + +19:55.680 --> 20:07.200 +H drive, four terabyte drives, um, dedicated to my, um, really overblown emacs build process. + +20:08.160 --> 20:14.000 +Um, this just lets me be super lazy. There's no reason you need any massive amount of storage + +20:14.000 --> 20:22.080 +to do any of this. Um, inside here, and now I'll actually switch you back to the other screen. + +20:23.040 --> 20:26.560 +Um, we'll, we'll find, + +20:37.280 --> 20:46.480 +oops, sorry about that. I didn't take the time to label that one. Um, so here you can see + +20:46.480 --> 20:53.760 +the primary output that I'm looking at through this automated process. I come along, I look at + +20:53.760 --> 20:59.840 +the bug reports, or maybe I'm just restarting my computer and choosing what emacs version at random. + +20:59.840 --> 21:06.240 +And then in that case, I look at this modified date and I say, um, my config that I, you know, + +21:06.240 --> 21:11.120 +that I'm playing with right now is all set for emacs 30, or I'm testing the both and I'm + +21:11.120 --> 21:16.400 +relaunching both of these. Right. So for me, that starts by diving into the install folder, + +21:16.400 --> 21:22.720 +going into the bin folder, which looks exactly the way my automation leaves it. I then come in + +21:22.720 --> 21:34.320 +to run the run emacs and I create a shortcut, um, to it. So I'm a keyboard person. So that's + +21:34.320 --> 21:40.400 +usually done like this. And then I just know that the context menu is going to come up in the right + +21:40.400 --> 21:49.120 +place. So I'll come up and, um, possibly change the, change the shortcut, right. + +21:53.120 --> 22:01.280 +If I don't mess with it. Um, so here's where I'll add my minus Q, if that's kind of where + +22:01.280 --> 22:06.800 +my world was at, or it kind of depends on what I'm doing with these, which varies week to week. + +22:07.440 --> 22:12.000 +Um, so restarting my emacs, uh, involves doing the same thing, going to my desktop + +22:12.560 --> 22:23.200 +and where you'll find a number of emac shortcuts and, um, updating the shortcut in the same manner + +22:23.920 --> 22:28.000 +joint actually, maybe we'll just, let's go back there and just show it. + +22:28.000 --> 22:31.600 +So if we look at, for example, my ERC, + +22:31.760 --> 22:39.040 +you can see, it's going to be pointing at one of these clones and then it's going to + +22:39.760 --> 22:44.720 +maybe tell me that I want, it wants to be full screen. Nope, not currently. And then it might, + +22:44.720 --> 22:48.720 +uh, have some stuff in there about auto-loading at config and what + +22:48.720 --> 22:52.560 +connections I'm going to, some commands I've defined to start connections. + +22:53.280 --> 22:57.680 +All right. And sorry, I got a phone call. I was checking. It wasn't in an org, the org, + +22:57.680 --> 23:04.160 +not the other organizers giving me the hook. So, um, all right. So that's, that's probably + +23:04.160 --> 23:11.440 +enough on the local system. Let's get back to the, to, to building emacs. And now it hopefully makes + +23:11.440 --> 23:17.440 +a certain amount of sense when I say we're going to wander over to the H drive and, and, and, and, + +23:17.920 --> 23:22.560 +hopefully makes a certain amount of sense when I say we're going to wander over to the H drive + +23:22.560 --> 23:31.520 +and recreate the structure that, um, both my process sort of assumes and the scripts you'll + +23:31.520 --> 23:41.440 +find in the admin NT, uh, build disk folder in source used to assume. Those scripts are in need + +23:41.440 --> 23:49.440 +of some love. And in just a little bit, I'll be mentioning a build, uh, a, uh, a, a, a particular + +23:49.440 --> 23:54.000 +bug that you might want to pay attention to if you're interested in making a self-installer. + +23:54.800 --> 24:04.320 +All right. So, um, we're going to create, uh, an emacs build directory. + +24:04.320 --> 24:16.960 +And we've got a handy git clone stage, git clone command stage for ourself. That would work. Um, + +24:19.360 --> 24:26.160 +do not currently see anybody lobbying for that. So instead we will run the rather faster + +24:27.120 --> 24:36.080 +uh, W get command on Savannah, which is not pasted in here. Nice. Let's see if I can freehand it. + +24:36.080 --> 24:40.000 +Not going to do it. Uh, + +24:40.720 --> 24:41.840 +okay. + +24:52.000 --> 24:56.560 +I beg your pardon. I'm grabbing a URL from the internet. + +25:00.080 --> 25:06.960 +Uh, okay. Yeah, I can, I can honestly, I can freehand it, whatever. Okay. Sorry. I, uh, + +25:07.680 --> 25:13.200 +I didn't have that bookmarked in all handy. Like I thought I did. Um, so we'll just say + +25:13.200 --> 25:30.480 +ftp.gnu.org slash, uh, what is it? Pub emacs, emacs-29.1, uh, .org.gnu.org.exe. + +25:30.480 --> 25:47.040 +I really think I'd have this command sitting around. It makes me want to scrap the whole + +25:47.040 --> 25:54.720 +demo. I'm not going to lie. Okay. How am I doing? Um, I think at least 15 minutes. Um, + +25:54.720 --> 25:58.160 +but in the command that you were freehanding, should the pub be GNU instead? + +25:59.120 --> 26:01.680 +Oh, thanks. I'm sorry. + +26:07.440 --> 26:13.360 +There we go. Thank you. All right. And then we'll, + +26:17.760 --> 26:20.160 +and I'm not sure I provided commands for this either, + +26:20.720 --> 26:29.600 +but it is trivially easy to do. And while that happens, we'll get to move on a few slides. + +26:31.760 --> 26:38.000 +Um, the configure script I'm not talking about in a lot of detail, but I do want to mention that the + +26:38.000 --> 26:44.720 +GNU binaries are provided with native, uh, compilation enabled. That's the feature that + +26:44.800 --> 26:55.360 +uses gcc lib gcc get on windows. If available, that lib gcc get will be used. Um, but when, + +26:55.360 --> 27:03.200 +but, uh, if, if, uh, emacs has that feature, then it will take by compile, uh, native code and, + +27:03.200 --> 27:10.880 +uh, asynchronously compile that as needed, uh, with the ahead of time feature. We're going to + +27:10.880 --> 27:15.360 +do as much of that ahead of time. And for folks that are consuming the windows binary, the + +27:15.360 --> 27:21.360 +thinking goes that they might not have my assist too. They might not have lib gcc jet. They might + +27:21.360 --> 27:28.560 +be happy that they're enabled in a, you know, a lot of time running emacs on their local environments + +27:30.400 --> 27:39.120 +at all, you know, in a, maybe a lockdown, uh, corporate context. So aside that, um, there's + +27:39.120 --> 27:45.120 +your first glimpse at the configure, um, program that we're going to run in a moment. In fact, + +27:45.120 --> 27:52.160 +I'm going to go as far as putting it on the clipboard. Um, really just looking at this, + +27:52.160 --> 27:57.120 +the AOT flag is the one I'd call attention to, but it's worth understanding that windows doesn't + +27:57.120 --> 28:02.000 +provide a D bus capability. So windows native program isn't going to be able to depend on D + +28:02.000 --> 28:07.600 +bus. We're going to, we're going to explicitly ask that that be left out. I think that's actually + +28:07.600 --> 28:12.080 +optional and it's documentation. I think the configure program is smart enough to know that + +28:12.080 --> 28:20.080 +we don't want D bus on windows. Um, otherwise we tend to compile with things. Um, there there's + +28:20.080 --> 28:26.320 +missing documentation. We could say the, uh, all of the libraries are treated in the way I mentioned + +28:26.320 --> 28:34.880 +in that, um, JPEG support will be available as long as the JPEG is, is available in our environment + +28:34.880 --> 28:40.320 +and configure script certainly notices that, um, the GNU provided binaries are provided with + +28:40.320 --> 28:47.280 +minus O2. And that's also my default personally on windows. Um, however, and I'm going to skip + +28:47.280 --> 28:59.680 +this since I mentioned it, um, mentioned, uh, and, uh, um, so I guess I'll say, um, you can, + +28:59.680 --> 29:06.560 +um, say with the, it's worth knowing that you, if you're not one reason that, that you're building + +29:06.560 --> 29:11.200 +might be because you want to turn off native compilation for whatever reason. If you have + +29:11.200 --> 29:16.640 +low juices, you get, get, but don't want Emacs to use it. Uh, especially as that default looks like + +29:16.640 --> 29:26.480 +it could be changing with Emacs 30. Um, the, uh, the debug configuration, um, this is, this is the, + +29:26.480 --> 29:33.200 +uh, kind of, uh, what, what I'm currently using this on commentary, uh, I've seen on the next + +29:33.200 --> 29:45.280 +development list. Let's check on our checkout and see if we can't get a build running. Um, + +29:45.280 --> 29:51.440 +this is a release build, so I won't be starting with, uh, so we'll start by hopping into its + +29:51.440 --> 30:14.080 +directory and we, um, we have, uh, but not. Okay. So that tells us we're going to run + +30:14.640 --> 30:23.440 +our configure program, but we don't need to run a config IC. So, + +30:31.280 --> 30:34.320 +so let's get that going and, uh, + +30:36.000 --> 30:41.360 +hopefully that's showing through just enough to be fun, not too much to be distracting. + +30:45.040 --> 30:55.760 +Um, the, uh, the unoptimized, uh, uh, um, please report issues. If your Emacs is crashing, + +30:55.760 --> 31:01.200 +uh, to the Emacs development list, not to me personally. Um, although you are of course, + +31:01.200 --> 31:06.960 +welcome to copy me. Um, if you especially I'm subscribed to that list, so I get all the mail. + +31:06.960 --> 31:14.000 +So I don't mind being copied. Uh, and, uh, as well, if you think it's, uh, + +31:15.040 --> 31:20.160 +you know, related to packaging, that actually makes sense or windows related to even, and, + +31:20.160 --> 31:25.120 +uh, it can be tested with an extra snapshot that should be uploaded to the canoe alpha side. + +31:25.120 --> 31:31.600 +I could look at that if I have time. There's with the configure script to make file for + +31:32.160 --> 31:39.840 +Emacs is really, really complicated. If time permits, which I'm now confident it will not, + +31:39.840 --> 31:44.240 +we will look at, uh, make file that I tried writing that, uh, orchestrates this whole + +31:44.240 --> 31:52.160 +process that I'm talking about. Um, as, uh, let's see. So the build, uh, build process, + +31:52.160 --> 32:03.120 +I run my builds with, uh, explosively specifying the max CPU, uh, with minus J, but minus B one + +32:03.120 --> 32:08.320 +to get the full build, uh, full log into your recipes. That is probably the magic thing. + +32:09.040 --> 32:12.560 +Matt, um, shouldn't to understand what, uh, + +32:16.000 --> 32:23.600 +or that, uh, that, that, uh, that I'm glad that I know, uh, as I'm trying to write my automations, + +32:26.960 --> 32:36.080 +uh, the, um, so I call that out here, the binary, uh, releases. Um, okay. So in this section, + +32:36.080 --> 32:41.120 +we're going to start to get into what are all those files. And there's a bug report related to + +32:41.120 --> 32:46.640 +that, but I didn't get into here. So, um, that's kind of to the point about the less said about + +32:46.640 --> 32:50.800 +this, the better, uh, that's my explanation for stepping through some of these slides. + +32:50.800 --> 32:58.240 +Uh, of course we'll share them all, uh, uh, hopefully by the time that this video is published. + +32:58.960 --> 33:06.640 +Oh, I mentioned, um, I may have mentioned already freshly installed, but, uh, fully installed. Uh, + +33:06.640 --> 33:15.200 +the, the, the key distinction here is that, uh, Emacs is distributed in the binary form for Windows + +33:15.200 --> 33:21.600 +with some DLL files that actually come from the mysys2 project. There's an implication there to + +33:21.760 --> 33:26.160 +there's an implication there to GCC that I definitely want to get to it talking about. + +33:28.080 --> 33:35.840 +Um, so freshly installed means we haven't copied those binaries from the mysys2, uh, + +33:35.840 --> 33:45.360 +installation into the Emacs, uh, installation. Uh, and then, uh, when we re-archived that + +33:45.360 --> 33:48.640 +local Emacs installation, that's how we're going to create the full zip. + +33:48.640 --> 33:54.160 +So hopefully that actually is a pretty good summary of what all those files are. Um, but + +33:54.160 --> 34:00.320 +there are readme files, uh, on the FTP that do a pretty good job, um, if you can dig enough to find + +34:00.320 --> 34:11.120 +one and my apologies for, uh, tardiness getting a new version on that posted. Um, the Emacs, uh, + +34:11.120 --> 34:17.040 +so those dependencies, uh, are listed within Emacs itself. And as we'll just talk about in a moment, + +34:17.040 --> 34:24.240 +there's a way, uh, that we can use, we can access that when we collect them in order to meet, uh, + +34:24.240 --> 34:31.840 +the GCC requirement that is essentially to include, um, include the sources for the, + +34:31.840 --> 34:41.200 +for those binaries, the things that were compiled against. Um, the, uh, so, so here we go, + +34:41.200 --> 34:45.280 +we're, we're into the build process. Let's just take a look and see if configure it got done. + +34:45.280 --> 34:52.240 +It sure did. And now we can see a table of, of hopefully good, but good and bad news, um, + +34:52.240 --> 34:57.840 +and potential, um, where we're learning that we're using the pdumper strategy and any number of other + +34:57.840 --> 35:04.320 +things that we might be messing with as our motivation for, for building ourselves on Emacs. + +35:04.320 --> 35:12.560 +Um, again, this table represents, uh, what you'll, what, what, what it looks like for me when I'm + +35:12.560 --> 35:22.720 +building for the GNU distributed binaries. All right. So, um, kind of moving, moving as quickly + +35:22.720 --> 35:31.200 +as I can here. I'm at 40 after, I believe that's the five minute mark. So, um, having just succeeded + +35:31.200 --> 35:37.040 +in, in configuring Emacs, I don't think we're going to build it. Uh, uh, I don't think we're + +35:37.040 --> 35:42.720 +going to actually get to running make install. Um, but I have it sitting here on my keyboard + +35:43.280 --> 35:54.320 +or clipboard, assuming that we will, right? No. Oh, wow. I think I've managed to confuse this. + +35:54.320 --> 36:06.240 +All right. So for me, that looks simply like, uh, make, uh, V equals one install, uh, + +36:08.160 --> 36:11.040 +prefix equals, uh, + +36:18.400 --> 36:19.920 +and we can at least get it kicked off. + +36:20.640 --> 36:27.680 +And that can, that command is just, uh, just is no, no different than I showed on the slide where + +36:27.680 --> 36:32.160 +I, where I gave it, uh, wasn't planning to stop and explain it. I was just planning to paste it. + +36:33.360 --> 36:38.640 +So, so, so again, recapping the rest of the process here and maybe actually making it, + +36:38.640 --> 36:44.320 +if you can believe it or not, through the rest of these slides, um, we, to, to, to create the + +36:44.800 --> 36:49.600 +full set of binaries, we're going to need a no dependent, no depths archive. That's without the + +36:49.600 --> 36:57.760 +mysys2, uh, deal provided DLLs, just the things that we compile as part of making Emacs. Um, + +37:00.320 --> 37:07.840 +the, uh, the build depths zip script is provided with the source distribution is your tool for, + +37:07.840 --> 37:11.760 +uh, meeting the GPL requirements, right? Source as mentioned before, + +37:12.640 --> 37:18.560 +um, there is a second bug that I did, uh, include some more information on in my notes already. + +37:19.680 --> 37:25.600 +Um, that, uh, that gets into the details of this other feature I alluded to. + +37:26.480 --> 37:35.120 +Um, I'll just skip into that. Um, we, we can, with, with, uh, with a, an appropriate version + +37:35.680 --> 37:42.240 +of that, which you may need a patch, uh, to, to have, you can list out the dependencies + +37:42.240 --> 37:47.200 +and, and that version as well. Can consider the dependencies of the Emacs binary versus + +37:47.200 --> 37:51.680 +the hard-coded list you might find, depending on when you look at this file in the source tree. + +37:53.680 --> 38:01.360 +The diff, um, so I also have a hack here that, uh, works around the absolute requirement to + +38:01.600 --> 38:18.320 +run this with the mysys2 and not the minGW64 script. Um, once we've made that zip file that + +38:18.320 --> 38:25.360 +contain that's, that's our installed Emacs without the DLLs provided by mysys2, we'll then unpack + +38:25.360 --> 38:30.960 +the dependencies that were created by that Python script we just talked about from the Emacs source + +38:30.960 --> 38:38.080 +tree. At that point, once those are unpacked, we can now make what's called the full installer, + +38:38.080 --> 38:42.800 +or sometimes I might call it the unqualified installer, because it's just going to be called + +38:42.800 --> 38:54.800 +Emacs29.1.zip. Um, and that, uh, that file, which, which creates the, the, the, the, the, + +38:54.800 --> 39:02.640 +which creates the archive, uh, that, uh, that, that, that file is exactly the same, + +39:02.640 --> 39:08.400 +plus the, uh, the dependencies that we unzipped in the bin folder of the installed Emacs. + +39:09.680 --> 39:14.480 +The, uh, executable self-installer, which I would love to have more time to talk about. + +39:14.480 --> 39:18.720 +I gave a few pointers here on the hard part of running it. Most importantly, + +39:19.680 --> 39:26.640 +if I've installed in any kind of funny looking name, I end up renaming it to like Emacs-29.1 + +39:26.640 --> 39:35.200 +or Emacs-29. or 30.0.50 or whatever. And I just renamed that installed Emacs folder. + +39:35.200 --> 39:39.680 +And then I go to the root of wherever I created that, the parent directory above it. + +39:40.320 --> 39:46.560 +And that's where I make my copy of the Emacs NSI, um, the, the NSIS script. + +39:47.520 --> 39:55.600 +And, uh, that's also where I, and then, um, then from that parent directory, I execute, + +39:55.600 --> 40:02.560 +uh, making sys, uh, here. I, as mentioned, um, I, I can get away with this because I have it + +40:02.560 --> 40:07.520 +on my path and it's my recollection. I think I tested this and couldn't reproduce the problem. + +40:07.520 --> 40:11.200 +So I didn't document it here, but I've had some problems with running this + +40:11.200 --> 40:20.400 +when, uh, when NSIS wasn't on my path. The, uh, the, the, the final step here + +40:20.400 --> 40:27.600 +and the last, the GPL requirement is to include all the sources, except when I'm doing a release + +40:27.600 --> 40:34.320 +build, I always do this. Um, and that's the new practice when making Snapchat binaries is to go + +40:34.320 --> 40:39.840 +ahead and include the sources, even though we might have the specific revision number, um, + +40:39.840 --> 40:46.800 +our thinking is we want absolute clarity, um, that, that somebody, uh, can say, okay, + +40:46.800 --> 40:51.200 +this binary did this thing, send me the source for it. I'm going to go take that into my own + +40:51.200 --> 40:56.800 +open source, or yeah, maybe they would, the jerks, um, into my own open source project. + +40:56.880 --> 41:03.360 +And, um, you know, off they go, uh, and that needs to be possible. + +41:04.800 --> 41:12.480 +Um, so, um, beyond that, the rest of this is, is really detailed that you find covered in the GNU + +41:12.480 --> 41:19.520 +maintainers manual. Um, this is the, the current set of Windows binaries that, um, it's busily + +41:19.520 --> 41:29.040 +working on creating a like for like a mirror to behind the scenes here is called a 29.1 underscore + +41:29.040 --> 41:36.080 +two. Um, and I have a lot of automation, uh, available on this site. So at this point, + +41:36.080 --> 41:45.200 +I'm just, I think I'm only a minute, 40 seconds over. I'm gonna invite my, uh, co-organizers + +41:45.200 --> 41:49.760 +back onto the call or any volunteers that want to jump in and anybody, if there's people on the + +41:49.760 --> 41:57.440 +BBB, I'd be happy to take questions. If there aren't, um, I have a screen full of, uh, the + +41:57.440 --> 42:04.080 +automation stuff ready to go as a kind of a second ring in my circus today. So if you're still with + +42:04.080 --> 42:08.640 +me, thanks a lot for joining me. And I really enjoyed this talk. Uh, if this is where we're + +42:08.640 --> 42:14.560 +going to close it out, I don't know where we're at for schedule today. Thanks a lot for a great + +42:14.560 --> 42:20.880 +talk, Corwin. Um, in terms of like schedule, yeah, you went over a little bit for the official, + +42:20.880 --> 42:26.880 +like, um, schedule or time of your talk, but I think, uh, we actually have maybe like six or + +42:26.880 --> 42:32.640 +seven more minutes, um, here on stream for, um, questions and such, if folks have questions, + +42:32.640 --> 42:38.320 +or if you want to like quickly maybe show one or two more things. Um, but I think the hard stuff + +42:38.320 --> 42:43.520 +is about like maybe 10 minutes ish for now. And then we'll have to rush over to, um, uh, for the + +42:43.520 --> 42:55.520 +closing remarks. So, well, that sounds awesome. Okay. So I'm looking at the, the dev chat. Uh, + +42:55.520 --> 43:01.040 +I see a comment on cross-compiling the emacs, but I'm sorry, I'm looking at IRC primarily, but, + +43:01.040 --> 43:08.080 +uh, feel free to jump in if you're on, uh, BBB with me, or, uh, uh, if, if you put something on + +43:08.160 --> 43:16.400 +the pad, I'm sure, uh, we'll see it between the two of us, uh, over here. Okay. So cross-compiling + +43:16.400 --> 43:20.640 +emacs for Serenity. I haven't tried really any cross-compiling. I think that would be very + +43:20.640 --> 43:28.240 +interesting. I would most likely focus on doing exactly what I do on a GNU system, completely + +43:28.240 --> 43:35.760 +ditching. Um, so I guess with my, my remaining time, rather than walking through code, um, for + +43:35.760 --> 43:42.080 +my automation, which can be another talk, if in fact there's an interest in that, um, I want to, + +43:42.080 --> 43:48.480 +I guess, say a couple of words about the non-free operating system that I'm using here. I did my + +43:48.480 --> 43:58.880 +best to use no non-free software other than the, uh, the operating system that is the context for + +43:58.880 --> 44:07.920 +this talk in preparing this talk for you. I personally have a lot more, uh, time and energy, + +44:07.920 --> 44:15.840 +I have to say, invested in proprietary tools for doing a lot of the things that, that go into this. + +44:15.840 --> 44:22.000 +So I really respect the work of people that pull that off. Um, I'm sorry I didn't get my pre-recorded + +44:22.000 --> 44:30.320 +stuff, uh, kind of in order for everybody, but I just want to stress, like, uh, it is all absolutely + +44:30.320 --> 44:35.520 +possible and just hats off to everybody that, that used, uh, entirely free software to get their, + +44:36.240 --> 44:43.360 +get their recordings done in time. Um, and what you did see, unless it was provided by the operating + +44:43.360 --> 44:49.200 +system in my presentation today, was all, uh, free software with the debatable exception of + +44:49.200 --> 44:56.160 +NSYS, which styles itself as open source, maybe for, uh, marketing reasons. + +44:56.720 --> 45:00.400 +Okay, uh, in any case, uh, certainly we can get all that source. + +45:08.080 --> 45:14.640 +Thanks for the note, Corin. It's good to know that, uh, building or, uh, yeah, doing the build of Emacs + +45:14.720 --> 45:20.880 +for Windows on Windows can be done, uh, using only free software. Yeah, absolutely. + +45:23.440 --> 45:29.520 +Probably the right closing note, right? Um, I just, uh, thanks again to the organizers for + +45:29.520 --> 45:33.920 +bearing with me. And like, every time I was like, you guys, I'm terrible at this. They're just like, + +45:33.920 --> 45:38.240 +no, you're doing fine. Keep going. You did a great job live last time. You can do it live, + +45:38.240 --> 45:43.040 +you know, and, and saying all the right things to just, uh, encourage me to come back, + +45:43.920 --> 45:46.160 +uh, this year and every year. + +45:49.760 --> 45:53.520 +Well, as I said before, we were very lucky to have you and the rest of the team, of course, + +45:53.520 --> 45:59.520 +as well. And, um, goes without saying, but all the speakers and the audience, the participants as + +45:59.520 --> 46:14.240 +well. So, um, so, uh, are we, we're still live over here that, you know, you know, me, I'm the + +46:14.240 --> 46:22.800 +Mike Hogg that I am. I can't resist, um, throwing, throwing up another screen here. And, uh, in fact, + +46:22.800 --> 46:32.160 +let's go ahead and go back to our, to our crawler, right? And I'll bring back our build + +46:32.160 --> 46:40.480 +if it finishes and maybe we'll show making the installer as well. Um, uh, but I have the CPU + +46:40.480 --> 46:49.680 +account turned down a little bit here. Uh, note, I didn't specify minus J here. Um, so, uh, over + +46:49.680 --> 46:54.000 +here is my automation. Uh, in case you do want to take a look, I can at least provide the + +46:54.000 --> 46:59.760 +orientation of what you're looking at. Scrape log is probably my first thing I want to show off. + +46:59.760 --> 47:08.400 +Um, it's not beautiful, but this works, uh, pretty well for me to get a sense of something might + +47:08.400 --> 47:14.640 +have changed in terms of how many warnings or errors are happening when I build Emacs. So I + +47:14.720 --> 47:18.640 +have this whole automation going on and I frequently want to answer the question, + +47:19.280 --> 47:25.600 +you know, what's the change rate in, uh, warnings or what have you. So this kind of gives me a count + +47:26.400 --> 47:36.880 +of that. Um, so from there, uh, accrued CI is the script we're watching run in the other pane. + +47:37.840 --> 47:44.960 +Um, we can see it's, uh, just starting to do its thing again. + +47:48.800 --> 47:56.960 +And, uh, the make file I mentioned, this is a top-down rewrite of everything else that I've done. + +47:57.040 --> 48:08.640 +It has some bugs right now. Um, the, uh, the build distribution is the main script that I use for my + +48:08.640 --> 48:17.120 +personal builds. This is what is run by the crude CI script. Uh, it has a fun tie-in to this, uh, + +48:17.120 --> 48:23.200 +web interface here, um, where we can, you don't need the port number when you go to it. That's + +48:23.200 --> 48:33.680 +just if I'm going to post. Um, the, uh, blah, blah, blah, blah, blah. This, this script is + +48:33.680 --> 48:39.120 +really long and complicated and probably needs some diving into, but you can see that, um, one + +48:39.120 --> 48:43.760 +of the complexities I have to deal with is that I'm going to need something in the format of an + +48:43.840 --> 48:53.920 +emacs-version for strategic, um, nsys reasons. So, uh, it takes care of kind of every complexity + +48:54.480 --> 49:03.120 +that I mentioned today in some respects, um, as does the make file. Build release is, um, another + +49:03.120 --> 49:11.360 +fairly useful incarnation of this. This is just focused on the release process, and this does + +49:11.360 --> 49:18.800 +work, uh, for example, to create the, the, the, you know, like, like, well, I could like, uh, + +49:18.800 --> 49:25.600 +for like files as far as I can tell. So what are currently posted for emacs 29.1 and the release + +49:25.600 --> 49:32.400 +candidate. Um, so I'll probably use that next time. And if it's still like, for like, I'll + +49:32.400 --> 49:40.960 +probably post the ones that came from this. Um, uh, building, uh, TreeSitter, I make some DLLs + +49:40.960 --> 49:47.120 +there. If you're looking for hints on how to get going or just simply, uh, a huge long list + +49:47.120 --> 49:55.840 +of Git repositories that make grammars, you can use that is here as well. Um, finally, I mentioned + +49:55.840 --> 50:04.800 +I have a, um, I have a website where I publish my own personal snapshots that I make, uh, that + +50:04.800 --> 50:11.680 +folder full of install directories, but all of the usual GNU style binary distributables, including + +50:11.680 --> 50:22.320 +the source code and the source code for the dependencies. Um, the, uh, so this program is + +50:22.320 --> 50:27.680 +another one of those complicated find commands and therefore potentially the most useful thing + +50:27.680 --> 50:34.960 +in here to take to you. Um, and here I'm deleting, uh, binaries older than 17 years. Uh, everything + +50:34.960 --> 50:42.240 +except the, uh, node apps file and the sources of it you'll find on my website. Currently those + +50:42.240 --> 50:48.800 +indefinitely, I'll probably roll out 120 days or something, um, for those eventually. + +50:53.600 --> 51:00.400 +Oh, uh, I can talk about this one even. Um, the, uh, so here you'll see the two branches that I'm + +51:00.400 --> 51:06.560 +tracking. The job of this script is, uh, this runs on the website. I call it with a, like a remote + +51:06.560 --> 51:15.920 +rsync, uh, type, uh, or an SSA remote, uh, SSH command. Um, and right after the rsync, + +51:15.920 --> 51:26.080 +rsyncing up any new Emacs that I built. And, uh, it's, uh, it's job is to update my fancy + +51:26.080 --> 51:34.880 +directory indexing. So let's look at Corwin's website. Here's my Emacs 29 folder. + +51:37.360 --> 51:50.400 +We have about two more minutes, Corwin. Yeah. It'll take that entire two minutes to, uh, + +51:50.400 --> 51:56.400 +load this directory because I am, because I have not yet ever pruned any of these dang binaries. + +51:56.400 --> 52:02.800 +So every version of, uh, Emacs 29 that I've ever made for myself is probably here. Nice. + +52:03.600 --> 52:08.480 +Uh, I strongly recommend that you bookmark this folder if you're using these for something and + +52:08.480 --> 52:14.240 +you always want the latest. Um, so here, this particular, uh, latest 29, Emacs 29 latest, + +52:14.240 --> 52:22.560 +or simply replace the 29 with 30 to get those. Uh, alas, no, no such luck for TreeSetter. + +52:23.120 --> 52:26.320 +But if we look at, uh, that, + +52:36.400 --> 52:40.320 +live this long without making a typo. Now look at me. + +52:40.320 --> 52:46.080 +Uh-oh. Oh. + +52:51.520 --> 52:56.720 +So here, um, you know, we can see the icon application and so on, even in the TreeSetter + +52:56.720 --> 53:01.440 +folder. This is all I'm talking about, about the fanciness that's set up by that other script that + +53:02.400 --> 53:06.880 +I'm showing over here and run after each time I run the upload. It just + +53:07.840 --> 53:12.640 +looks to see if anything's new and add some lines to the .htaccess file. + +53:15.840 --> 53:22.400 +Um, I'm particularly proud of this one. I'm not going to lie. Um, linking out to each, + +53:22.400 --> 53:26.560 +each, uh, project that we're using, letting us know the commit version, + +53:26.560 --> 53:34.320 +and then, uh, for the DLLs, quick link out to the log and the signature file for this DLL. Um, + +53:36.960 --> 53:46.160 +I find that a lot, just a lot more readable than, uh, listing them all out individually. And I'd + +53:46.160 --> 53:53.360 +love to do something like that on the GNU site. So I'm, I think we've got to be out of time by + +53:53.360 --> 53:59.600 +now. I've just got to say, hey, thanks again for having me, uh, for those that, uh, watch the talk + +53:59.600 --> 54:04.400 +either live or after the conference. Uh, appreciate everyone's support to get me to + +54:04.400 --> 54:10.320 +the point where I will be able to, uh, to do this, this, this cool volunteer task, + +54:10.320 --> 54:14.160 +uh, which is fun and easy to do and reach out to me if you're interested in helping with it. + +54:18.960 --> 54:24.320 +Well, awesome. Thanks a lot for the awesome talk, Corbyn. And, uh, of course, as a fellow + +54:24.320 --> 54:29.920 +core, uh, core organizer, uh, for all, for all that you do, um, in and around Emacs Conf + +54:29.920 --> 54:33.280 +and of course for, uh, GNU Emacs as well, it's much appreciated. + +54:36.160 --> 54:43.200 +Big, big words from coming from you, my friend. Um, thanks for the kind words. + +54:45.040 --> 54:49.840 +Cheers. My pleasure. All right. And with that, I think we're gonna, uh, wrap up the dev, uh, + +54:49.840 --> 54:55.360 +track here and, uh, we'll be with you again shortly in a few minutes on the gen stream, + +54:55.360 --> 55:00.400 +the gen track for the closing remarks for today, um, only for today, because we're going to be + +55:00.400 --> 55:07.520 +back tomorrow again as well. So don't go anywhere and, uh, see you on the gen track in a bit. + +55:25.920 --> 55:32.720 +Oh my God, I did it. We got done within the time. You're my hero. Um, and thank you so + +55:32.720 --> 55:41.520 +much for just keeping me honest there and, uh, like helping me keep my eye on the time and such. + +55:41.520 --> 55:53.680 +You have to look at the recording and see whether you feel like doing it again. + +55:56.160 --> 55:59.520 +I'm sorry. I had my sound screwed up and I'm sorry if I talked over somebody, + +55:59.520 --> 56:01.680 +I couldn't hear anything on mumble until this very moment. + +56:03.520 --> 56:08.960 +Oh, uh, because he's your webcam for it. Um, like as a, like a virtual webcam thingy, + +56:09.440 --> 56:15.760 +it was low res, especially when things are changing as you're scrolling around. So we'll + +56:15.760 --> 56:19.920 +see what kind of recording we can recover from it. And then you can decide whether you maybe + +56:19.920 --> 56:26.480 +want to clean it up with like screenshots. I recorded on this end too. We shouldn't have + +56:26.480 --> 56:30.720 +that problem with my recording. Thank you. Thank you. Thank you. I think we're still live on the + +56:30.720 --> 56:42.240 +dev stream. Someone could, uh, take that off. Oh, yes. Because, uh, I'll, I'll set it to rebroadcast. + +56:45.520 --> 56:50.640 +Yeah. I love doing that for the closing remarks. That's a fine tradition + +56:52.000 --> 56:58.480 +or it's a tradition now. Cause I'm pretty sure this means we've done it twice. + +57:01.680 --> 57:07.360 +I once heard that, you know, uh, as a fan-ish meaning like a fan-ish is a term of endearment + +57:07.360 --> 57:12.240 +for a science fiction fan to another. We say we're, we're fans or things we do are fan-ish and + +57:12.800 --> 57:18.960 +a fan-ish tradition then is if you do it three times, it's tradition, but we're on a budget here. + +57:19.680 --> 57:31.600 +So, all right. I think we should, um, head over to mumble and talk on mumble. Um, and just decide + +57:31.600 --> 57:36.240 +and see like which big blue button room we're going to be in for closing. Okay. So we're clear + +57:36.240 --> 57:39.600 +on BBB here? Yep. I think so. + diff --git a/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt new file mode 100644 index 00000000..d95d4ea7 --- /dev/null +++ b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt @@ -0,0 +1,2345 @@ +WEBVTT + +00:00.000 --> 00:08.480 +Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and welcome to uh + +00:11.440 --> 00:13.760 +Welcome to my talk i'm a little distracted here + +00:13.760 --> 00:20.080 +I had a friend who came over and just brought me a whole bunch of peanut butter cups homemade peanut butter cups + +00:20.080 --> 00:22.080 +Maybe i'll show those off. Uh + +00:22.320 --> 00:23.360 +later + +00:23.360 --> 00:26.480 +Okay, what okay here, uh, put it right there + +00:30.960 --> 00:32.960 +All good stuff + +00:33.920 --> 00:40.800 +Okay, so i'm going to uh get over to my planned uh stuff i'm sharing here + +00:41.340 --> 00:42.880 +hopefully + +00:42.880 --> 00:49.360 +Uh, and and we'll jump jump right in because i'm gonna need as much time as I can possibly have today + +00:49.440 --> 00:53.680 +thanks so much for uh joining me for emacs conference and for + +00:54.620 --> 00:56.480 +especially for + +00:56.480 --> 00:57.600 +um + +00:57.600 --> 01:02.960 +all of you who who participated, you know in the discussions contributing talks and + +01:03.520 --> 01:09.920 +um, you know, uh, you know, including running the copy the the and it's just so much fun to be here, um + +01:11.040 --> 01:15.840 +I guess while i'm standing here and and saying stuff that's that i'm gonna have to + +01:16.620 --> 01:19.680 +transcribe because I didn't uh prepare a + +01:20.560 --> 01:22.080 +recorded version + +01:22.080 --> 01:27.920 +Uh, I had a lot of trouble trimming this down so I can solve that problem by just talking a lot at the beginning + +01:28.960 --> 01:30.960 +about other stuff, um + +01:33.200 --> 01:36.880 +So in addition to the thanks I just want to say thanks also to the + +01:37.120 --> 01:43.040 +Folks on the development list that helped me kind of come up to speed on this. I won't make a big list here. But + +01:43.760 --> 01:45.120 +um + +01:45.120 --> 01:48.560 +And and for all that i've learned from my previous conferences + +01:48.640 --> 01:52.880 +It's just I can't stress enough what a great opportunity volunteering for + +01:53.520 --> 01:55.520 +uh free software related things are + +01:55.920 --> 02:00.480 +Uh as a way to get involved people will just totally teach you how to be helpful and i'm loving it + +02:00.720 --> 02:02.720 +Sasha can you please maximize? + +02:02.880 --> 02:04.880 +Hold on + +02:14.160 --> 02:17.680 +I can preview the stream, but it's not super easy right now + +02:17.760 --> 02:20.240 +I got all my screens kind of dedicated to other stuff + +02:20.400 --> 02:24.400 +so should I pause for a second before I get into the slides because there's + +02:24.960 --> 02:27.760 +There they'll be hard to see if i'm not full screen + +02:28.640 --> 02:36.160 +Yeah, yeah, okay, well i'll keep ad-libbing then because I just have a million, uh things I can say, um + +02:37.520 --> 02:43.280 +Uh, so, uh, let me just quickly talk, uh things that aren't in here. Um, + +02:43.840 --> 02:50.320 +I'm going to mention the mysis2.org and the that project which provides a port + +02:51.360 --> 02:53.360 +of the GNU + +02:53.440 --> 02:57.680 +Of uh glibc and a lot of GNU + +02:58.640 --> 03:00.640 +and other free software + +03:01.280 --> 03:03.280 +um, so + +03:03.280 --> 03:07.760 +Uh, I don't pushing a room to uh a dvd room to stefan + +03:12.080 --> 03:18.660 +All right, so i'm gonna take mumble out of my uh, pardon me folks just gonna take mumble out of my speakers here + +03:19.620 --> 03:21.620 +Okay + +03:22.820 --> 03:30.040 +Okay, in fact we'll take the speakers out of play entirely and i'll just switch to some headphones + +03:33.620 --> 03:35.140 +All right, so + +03:35.140 --> 03:36.820 +Gorman you're good to go + +03:36.820 --> 03:43.140 +Perfect. What an amazing amount of time. All right. So thanks a lot. Uh today i've got a jam-packed talk + +03:43.860 --> 03:46.260 +Um, i've i've done my best to make + +03:46.820 --> 03:52.260 +To make this not too overwhelming, but overall we're going to try to try to actually build + +03:52.900 --> 03:57.700 +Um emacs while we're talking today and we might actually build several emacs + +03:58.100 --> 04:00.100 +Uh, so let's take a look at that real quick + +04:00.420 --> 04:04.900 +Um, so over here we have a screen where I am + +04:05.700 --> 04:08.260 +Just once a minute looking. Uh + +04:09.120 --> 04:16.840 +Indirectly at whether there have been any pushes, uh upstream to either the emacs 29 or emacs 30 branches + +04:17.540 --> 04:19.280 +so i've + +04:19.280 --> 04:22.260 +Arranged for us to sort of keep an eye on that + +04:22.820 --> 04:30.020 +Um while we talk and you know, maybe that's that's one thing that we'll do and then additionally we'll probably + +04:30.660 --> 04:36.180 +Fire up a shell. This is the mysis 2 environment that I talked about before + +04:36.660 --> 04:39.460 +And we'll probably create some directories and things + +04:40.020 --> 04:46.420 +But before we get into all that let's let's give some some context. I've been doing my best to try to + +04:47.060 --> 04:50.420 +Uh, make sure all this information is on the emacs wiki as well + +04:51.060 --> 04:55.860 +So, uh, sorry, as I said, I got a little caught off guard. So i'm moving my foot pedals + +04:56.820 --> 04:58.820 +To the float back to the floor here + +05:00.340 --> 05:04.820 +And I should be able to advance slides here. All right, so + +05:05.700 --> 05:07.700 +um + +05:07.860 --> 05:13.540 +I kind of provided some special definitions for things i'm going to kind of level set with those + +05:14.740 --> 05:16.740 +the uh + +05:17.460 --> 05:24.580 +Um when I say a binary release i'm talking about some some i'm talking about emacs for windows as + +05:25.060 --> 05:29.780 +Just ready to run out of its folder or in whatever similar form + +05:30.340 --> 05:35.620 +The when I say a build i'm talking about kind of a process of doing that + +05:36.420 --> 05:40.760 +Um when emacs.get of course, that's the upstream hosted by gnu savannah + +05:41.620 --> 05:47.140 +The emacs release is a tarball created from that the sources + +05:48.580 --> 05:53.940 +For um emacs are going to be one of those two things + +05:54.740 --> 06:01.460 +Um very specifically so i'm not going to talk about patches patching there's some implications there perhaps we'll get into it + +06:02.660 --> 06:03.620 +uh + +06:03.620 --> 06:08.820 +So a snapshot is when I build from anything other than a release source + +06:09.860 --> 06:11.860 +uh a tarball + +06:11.860 --> 06:15.320 +um, just if I if I say that i'm talking specifically + +06:16.340 --> 06:18.340 +about the uh, the xz + +06:18.980 --> 06:22.100 +Version of the file as as a technical point + +06:22.900 --> 06:29.060 +Um, so that may come up. All right, nothing else I think up my sleeve. Um + +06:29.780 --> 06:30.820 +the + +06:30.820 --> 06:36.900 +Uh as as a key data point it's worth understanding that there's a file called configure ac + +06:37.540 --> 06:43.700 +It's going to be processed, uh as part of autoconf. We we initially access that when we run + +06:44.500 --> 06:47.540 +Um autogen as you'll see in a little bit + +06:48.180 --> 06:49.380 +um + +06:49.380 --> 06:56.340 +The but before but um, so the autogen script will generally consider this. Uh, so in a release build + +06:57.220 --> 07:02.260 +Um, this has been thought about kind of for us as part of um making the tarball + +07:03.300 --> 07:05.300 +um the configure dot a + +07:05.860 --> 07:07.300 +ac + +07:07.300 --> 07:08.580 +um + +07:08.580 --> 07:11.540 +Yeah, I think I pretty much covered covered this so + +07:12.420 --> 07:19.380 +Um those those that kind of partially built status that's a might be another phrase that you hear me use + +07:19.540 --> 07:20.900 +so this + +07:20.900 --> 07:22.900 +Slide unpacks that a little more + +07:24.900 --> 07:26.420 +Um + +07:26.420 --> 07:29.720 +So it can be a little confusing to understand what exactly? + +07:30.580 --> 07:36.100 +the you know, what is it, you know, how stable is emacs depending on what I have so that I got a + +07:36.980 --> 07:43.140 +It's kind of a set of rules of thumb here right first I want the highest, uh, you know dot + +07:43.780 --> 07:49.220 +Uh dot release value that I can get assuming that that's higher than one + +07:49.620 --> 07:55.800 +If it's if it were to only be one, let's say my choices were 29.1 and 30.1 + +07:56.340 --> 07:58.340 +I would take 30.1 + +07:58.340 --> 07:59.220 +um + +07:59.220 --> 08:01.700 +because that's that's weird, but um + +08:02.260 --> 08:05.000 +What you'll normally see is you might see a 28.2 + +08:06.100 --> 08:08.100 +You might see a 29.1 + +08:08.820 --> 08:14.660 +So here I think 28.2 has got the most most most stable + +08:15.540 --> 08:16.580 +um + +08:16.580 --> 08:18.580 +set, uh the + +08:18.740 --> 08:20.740 +uh, or set of release binaries + +08:21.540 --> 08:23.040 +the + +08:23.040 --> 08:27.620 +29.1 will will have a little more features, but will tend to be more stable + +08:28.340 --> 08:29.380 +than + +08:29.380 --> 08:32.200 +Any lower point releases for 29 + +08:32.920 --> 08:37.720 +Uh, certainly than any release candidates for 29, which might even have new features + +08:38.200 --> 08:42.760 +Um, but are mostly going to just be patches so they're going to become the most stable + +08:43.320 --> 08:44.840 +thing here + +08:44.840 --> 08:47.160 +and especially if they they have a + +08:48.120 --> 08:50.120 +You know if this this is not + +08:50.200 --> 08:56.040 +Uh, if this were to be 29.2 release candidate one as well looking forward to seeing + +08:56.680 --> 08:57.960 +um + +08:57.960 --> 08:59.960 +the + +09:00.180 --> 09:02.180 +30.0.50 + +09:02.280 --> 09:03.240 +um + +09:03.240 --> 09:09.800 +And and in between this this pre-test here, we're talking about kind of developer land. Um, so + +09:10.680 --> 09:14.360 +Um, the expectation is that you know what you're doing that applies to windows users + +09:14.920 --> 09:20.680 +Uh just as much if you are building anything in the snapshot range any of that is going to be in this + +09:21.220 --> 09:24.040 +30.0.50 currently that'll change when + +09:24.680 --> 09:25.880 +the + +09:25.880 --> 09:27.080 +when the + +09:27.080 --> 09:32.520 +30 30 an emacs 30 release tags, uh, or release branches come + +09:34.120 --> 09:36.120 +Okay, so + +09:37.480 --> 09:43.160 +Let's talk about the local um, there's not much to know about what I have going on + +09:43.640 --> 09:47.560 +except that I have my my paths mess messed with so + +09:48.840 --> 09:52.520 +Um, if if that that were to come up if you're wondering how why does this? + +09:52.840 --> 09:58.040 +Uh in in sys command work that's that's probably the way place where you notice it + +09:58.600 --> 10:01.640 +Uh, I am using windows 10. I haven't tried windows 11 + +10:02.120 --> 10:06.040 +Uh as mentioned my sys2 is critical to all this + +10:06.200 --> 10:11.240 +There's one script in particular that will error out if you try to do anything other than use my sys's + +10:11.720 --> 10:14.520 +My sys's shell and in fact my sys owns + +10:14.920 --> 10:21.800 +Or provides three shells and of them that script is designed to work with a specific one of them as we'll come to + +10:23.160 --> 10:30.040 +I don't talk about installing the dependencies, but just as as kind of some kind of help. Um, + +10:31.000 --> 10:35.000 +You can search using this formula and install + +10:37.000 --> 10:40.920 +Using this formula good luck with those, you know grep commands + +10:43.640 --> 10:50.860 +And sys is the tool for building the self-installing self-extracting installer or uh executable self-installer + +10:51.820 --> 10:55.580 +Um, the script for that is provided along with the emac source + +10:56.780 --> 11:03.900 +Um, and i've provided a helpful link to the main page for the project download link on the left. It is not + +11:05.180 --> 11:10.700 +It's kind of scare where the way that this link appears, but I have clicked it and it's working for me + +11:14.200 --> 11:19.340 +Automation does uh, we'll we have some time we'll be looking at this at a minimum + +11:19.340 --> 11:24.540 +I wanted to mention that what I do on my local what you're seeing in the crawler, I hope + +11:25.260 --> 11:27.260 +uh represents a + +11:27.740 --> 11:29.740 +uh + +11:30.700 --> 11:35.580 +A simple sleep loop, uh, and we'll we'll look into that if we have time + +11:36.540 --> 11:43.820 +Um, I do have a little but I do use like a cron job and so on to clean up some hosting that I pay for + +11:44.380 --> 11:47.580 +Um where i've got where I where I kind of self-host + +11:48.300 --> 11:50.300 +some uh snapshots + +11:50.700 --> 11:53.260 +more stuff than I feel comfortable uploading to + +11:54.220 --> 11:56.220 +uh, to gnu + +11:57.820 --> 11:59.820 +The um + +12:01.740 --> 12:07.500 +You know, I never said, uh, my name is corwin bruce for the last couple of years i've been the volunteer making + +12:08.220 --> 12:14.380 +Uh making the snapshots the quote-unquote official binaries, uh for windows of the + +12:15.580 --> 12:17.100 +um + +12:17.100 --> 12:23.180 +Of of emacs for windows. So that's that's all the different versions. Uh help is always welcome with that + +12:23.180 --> 12:26.540 +I'd be very happy to teach you in more depth. This video is + +12:27.100 --> 12:33.420 +You know kind of my drop dead file. Uh, I don't have specific plans. Uh, if somebody's like hey get out of the way + +12:33.500 --> 12:35.500 +This is the one thing I think I can do + +12:35.660 --> 12:37.660 +Um, hey, that's real relatable + +12:39.100 --> 12:46.220 +Okay, um, so I haven't tried uh, the I haven't tried a lot of fun things that I won't talk about + +12:46.940 --> 12:52.540 +um, the uh, the rest of this talk is going to get into the nitty-gritty as I said, um + +12:52.860 --> 12:58.620 +If we can't convince emacs to start building over on that screen, we'll be opening it up here on the center stage + +12:59.500 --> 13:01.500 +um + +13:01.900 --> 13:07.820 +Uh, this begins and there's there's there's there's great insight here too on the wiki, uh + +13:08.300 --> 13:11.980 +With picking an ftp source for any official release + +13:12.780 --> 13:15.500 +That is for a stable product. Please visit + +13:16.460 --> 13:18.460 +Um ftp.gnu.org + +13:19.020 --> 13:24.220 +Otherwise, you'll want to switch that ftp dot at the beginning to alpha dot and take a pre-test + +13:25.020 --> 13:29.260 +Uh, or any snapshot or otherwise then they're not published there + +13:30.140 --> 13:32.140 +The uh next + +13:32.540 --> 13:34.540 +uh, you know + +13:34.620 --> 13:41.260 +i'm gonna you have some examples in here that assume that you're doing a release build that you're doing 29.1, but + +13:41.820 --> 13:47.260 +um, i'm glancing out of the the right side of my face at the + +13:48.060 --> 13:52.480 +Chat on the optance anybody in there wants to direct me at a particular + +13:53.180 --> 13:55.820 +Um, we can make some other we can build something + +13:56.540 --> 14:02.460 +Else if you want to see a snapshot build more mention that um the examples that you're going to see here + +14:03.500 --> 14:06.540 +That I will without other direction cut and paste + +14:07.260 --> 14:09.100 +um + +14:09.100 --> 14:11.100 +Are all based on a release bill + +14:12.380 --> 14:14.380 +so + +14:14.620 --> 14:21.840 +Um, and so, uh, we'll use the uh, I mentioned that there are several shells provided by mysis2 + +14:22.160 --> 14:24.160 +To the min-gw64 + +14:25.520 --> 14:28.160 +Shell is the one that we mostly need + +14:28.880 --> 14:33.440 +Um, I tested all of this as well with the min-gw32 shell + +14:34.240 --> 14:35.680 +um + +14:35.680 --> 14:40.400 +So that that should work and and see mix binaries that that work for me + +14:44.080 --> 14:46.000 +Uh + +14:46.000 --> 14:50.180 +I as I mentioned, I don't get into the details of installing all your prerequisites + +14:50.720 --> 14:53.920 +I found that doing it in a headfirst manner wasn't uh, + +14:54.640 --> 15:00.240 +Wasn't difficult and I also found that there's a number of tutorials. I didn't want to pick one to link here + +15:03.280 --> 15:05.280 +Um there uh + +15:06.160 --> 15:08.400 +Here are uh, okay, so + +15:10.240 --> 15:14.960 +Our general formula for building emacs irrespective of windows + +15:15.520 --> 15:16.800 +looks like + +15:16.800 --> 15:20.420 +Does the configure script exist if not run autogen? + +15:21.280 --> 15:23.280 +from a windows build standpoint + +15:23.920 --> 15:30.400 +This is if i'm not running a release that release build call the autogen script + +15:31.040 --> 15:34.580 +Right and this would be in the directory where we want to pack this i'll demonstrate + +15:35.200 --> 15:37.040 +within + +15:37.040 --> 15:39.040 +three minutes if uh + +15:39.600 --> 15:42.240 +If one if nobody's pushed upstream to emacs + +15:42.800 --> 15:43.920 +um + +15:44.000 --> 15:47.120 +so, uh the configure, uh, and + +15:48.080 --> 15:50.080 +configure options + +15:50.320 --> 15:52.320 +are uh + +15:53.600 --> 15:58.480 +Uh the configure, you know if the configure sorry if the configure script exists then + +15:58.800 --> 16:05.760 +Uh doesn't doesn't exist. So the only reason so in my process I will always execute that step because I clean everything + +16:06.480 --> 16:09.860 +after every build, um in all my contexts + +16:10.820 --> 16:13.700 +um, however, if you were you know had a + +16:14.320 --> 16:19.140 +Checkout of emacs dot get and you are building it at several releases + +16:19.300 --> 16:22.100 +Then maybe you've got a configure script and then you'll want to know + +16:22.740 --> 16:24.580 +um the you know + +16:24.580 --> 16:31.800 +Whether you have to bootstrap and the typical complexities, but otherwise you might be able to skip that in in the abstract + +16:32.820 --> 16:34.820 +um + +16:36.100 --> 16:38.100 +Is that right or is it is + +16:38.420 --> 16:42.820 +Make uh, so and if the make file doesn't exist make install. I know i'm + +16:43.380 --> 16:46.100 +Looking at that and i'm questioning whether it's correct. Sorry about that + +16:48.020 --> 16:54.440 +Um in any case, uh, so autogen configure make install is our recipe autogen + +16:55.060 --> 16:59.620 +Creates the configure script configure creates the make file the make file + +17:00.020 --> 17:04.120 +Um in the case of windows, I almost always want the install + +17:04.840 --> 17:09.560 +Uh and to specify some location where the installed emacs will land this is + +17:10.440 --> 17:11.320 +where + +17:11.320 --> 17:13.980 +all of the recipes for packaging emacs + +17:14.680 --> 17:15.720 +go + +17:15.720 --> 17:17.720 +and if I were + +17:18.600 --> 17:22.440 +You know using this as a movie to upgrade I personally would do that by + +17:23.080 --> 17:26.440 +by specifying an install path quote unquote on top of + +17:27.240 --> 17:33.640 +Uh a main installation. I don't do that. I update shortcuts manually based on what specifically I want to try + +17:34.120 --> 17:39.640 +Uh in an effort to to to notice, uh interesting patches and confirm they work on windows + +17:41.240 --> 17:45.560 +Which mostly they do there's not a lot of code in my experience that is + +17:46.200 --> 17:49.720 +Windows specific and very very little around the build process + +17:50.360 --> 17:51.400 +All right + +17:51.400 --> 17:59.160 +Huge rabbit hole zone and I still have a minute before I have to kick off the first part of our demo + +18:00.120 --> 18:01.240 +so + +18:01.240 --> 18:03.880 +Let's let's keep keep diving in + +18:04.200 --> 18:05.240 +um + +18:05.240 --> 18:13.400 +The those specific part windows specific parts beside the dot exe extension that we're going to find slammed onto all of our familiar + +18:14.040 --> 18:17.640 +Uh executables. We're also going to have emacs client w + +18:18.360 --> 18:22.040 +Which is a wrapper that hides? + +18:22.760 --> 18:24.760 +um how hard it is to get + +18:25.160 --> 18:27.160 +Uh to take it + +18:27.640 --> 18:31.800 +How bad the abstraction is between the window management layer and the gooey? + +18:32.440 --> 18:38.940 +And then all the different parts on windows essentially it wants to create a shell window if we just double click emacs.exe + +18:39.480 --> 18:41.480 +So emacs client w + +18:41.640 --> 18:44.200 +Uh and run emacs are going to solve that problem + +18:45.160 --> 18:46.680 +um + +18:46.680 --> 18:49.260 +Wrapping emacs and emacs client respectively + +18:51.640 --> 18:53.400 +And + +18:53.400 --> 18:55.400 +Just uh + +18:56.520 --> 19:02.360 +All right, so let's let's go ahead and do something i'll i'm going to take away the ticker here for a minute + +19:02.520 --> 19:06.600 +And what you're not seeing is off stage. I am + +19:07.400 --> 19:09.900 +Killing that so we don't get builds in parallel + +19:11.480 --> 19:13.480 +Um + +19:15.960 --> 19:17.480 +So, um + +19:17.480 --> 19:21.720 +So at this point i'm going to open up a shell and i'm going to start talking just a little bit about + +19:22.360 --> 19:27.640 +My local build environment, which we haven't gotten into in fact just to make that even easier + +19:28.520 --> 19:30.520 +let's um + +19:31.160 --> 19:36.040 +Let's just take a look at it a little bit probably the easiest spot + +19:37.560 --> 19:39.560 +Is + +19:40.280 --> 19:42.280 +Here + +19:47.720 --> 19:51.980 +All right, so here we have the familiar windows my computer interface + +19:52.600 --> 19:56.200 +I have the g drive and the h drive + +19:56.840 --> 19:58.840 +four terabyte drives + +20:00.040 --> 20:02.040 +um dedicated to + +20:02.440 --> 20:03.720 +my + +20:03.720 --> 20:07.000 +um, really overblown emacs build process + +20:08.200 --> 20:15.240 +Um, this just lets me be super lazy. There's no reason you need any massive amount of storage to do any of this + +20:15.800 --> 20:20.600 +Um inside here and now i'll actually switch you back to the other screen + +20:21.960 --> 20:23.960 +um + +20:24.040 --> 20:26.040 +We'll we'll find + +20:35.880 --> 20:37.880 +Oops + +20:38.600 --> 20:40.600 +Sorry about that + +20:40.680 --> 20:42.680 +It didn't take the time to label that one + +20:42.680 --> 20:44.600 +Label that one + +20:44.600 --> 20:48.680 +Um, so here you can see the primary output that + +20:49.400 --> 20:52.440 +That i'm looking at through this automated process + +20:52.600 --> 20:58.280 +I come along I look at the bug reports or maybe i'm just restarting my computer and choosing what emacs + +20:58.840 --> 21:02.920 +version at random and then in that case, I look at this modified date and I say + +21:03.480 --> 21:05.480 +um my config that I + +21:05.880 --> 21:09.160 +You know that i'm playing with right now is all set for emacs 30 + +21:09.320 --> 21:12.760 +Or i'm testing them both and i'm relaunching both of these right + +21:13.240 --> 21:17.720 +So for me that starts by diving into the install folder going into the bin folder + +21:18.200 --> 21:24.520 +Which looks exactly the way my automation leaves it. I then come in to run the run emacs + +21:25.000 --> 21:27.000 +And I create a shortcut + +21:27.480 --> 21:29.480 +um + +21:29.640 --> 21:30.760 +To it + +21:30.760 --> 21:31.960 +so + +21:31.960 --> 21:35.880 +I'm a keyboard person. So that's usually done like this + +21:36.760 --> 21:41.800 +And then I just know that the context menu is going to come up in the right place so i'll come up and + +21:42.840 --> 21:44.840 +um + +21:44.900 --> 21:49.080 +Possibly change the change the shortcut, right? + +21:53.080 --> 21:55.080 +If I don't mess with it + +21:56.680 --> 21:57.640 +Um + +21:57.640 --> 22:03.800 +So here's where i'll add my minus q if that's kind of where my world is at or it kind of depends on what i'm doing + +22:03.880 --> 22:06.840 +With these which varies week to week + +22:07.480 --> 22:11.820 +Um, so restarting my emacs, uh involves doing the same thing going to my desktop + +22:12.600 --> 22:15.740 +And where you'll find a number of emac shortcuts + +22:17.000 --> 22:19.000 +and + +22:20.680 --> 22:23.240 +Um updating the shortcut in the same manner + +22:23.960 --> 22:31.580 +Actually, maybe we'll just let's go back there and just show it. So if we look at for example my erc + +22:33.880 --> 22:36.360 +You can see it's going to be pointing at one of these + +22:37.400 --> 22:39.400 +clones, and then it's gonna + +22:39.720 --> 22:45.080 +Maybe tell me that I want it wants to be full screen. No, not currently and then it might uh, + +22:45.560 --> 22:52.620 +Have some stuff in there about auto loading a config and what connections i'm going to some commands i've defined to start connections + +22:53.340 --> 22:55.340 +So + +23:00.620 --> 23:06.940 +All right, and sorry I got a phone call I was checking it wasn't in an order the organ the other organizers giving me the hook + +23:08.700 --> 23:14.380 +So, um, all right, so that's that's probably enough on the local system. Let's get back to + +23:15.580 --> 23:22.380 +To to building emacs and now it hopefully makes a certain amount of sense when I say we're gonna wander over to the h drive + +23:22.620 --> 23:24.700 +and recreate the structure that + +23:25.660 --> 23:27.180 +both + +23:27.180 --> 23:33.660 +My process sort of assumes and the scripts you'll find in the admin nt + +23:34.300 --> 23:37.740 +Uh build disk folder in source + +23:38.940 --> 23:44.860 +Used to assume those scripts are in need of some love and in just a little bit i'll be mentioning a build + +23:45.420 --> 23:46.940 +uh + +23:46.940 --> 23:47.900 +a uh + +23:47.900 --> 23:53.980 +A a particular bug that you might want to pay attention to if you're interested in making a self installer + +23:54.780 --> 23:56.780 +all right, so + +23:57.020 --> 23:58.140 +um + +23:58.140 --> 24:00.140 +We're going to create + +24:01.260 --> 24:04.160 +Uh an emacs build directory + +24:08.460 --> 24:15.500 +And we've got a handy git clone stage git clone command stage for ourself that would work + +24:16.380 --> 24:18.380 +um + +24:19.420 --> 24:26.160 +Do not currently see anybody lobbying for that. So instead we will run the rather faster + +24:28.140 --> 24:30.140 +Uh w get command + +24:30.940 --> 24:37.020 +On savannah, which is not pasted in here. Nice. Let's see if I can freehand it not gonna do it + +24:37.820 --> 24:39.820 +uh + +24:45.500 --> 24:47.500 +Um + +24:51.980 --> 24:56.480 +Beg your pardon i'm grabbing a url from the internet + +25:00.060 --> 25:04.460 +Uh, okay. Yeah, I can't I can't honestly I can't freehand it whatever + +25:06.060 --> 25:07.660 +Sorry, I uh + +25:07.660 --> 25:11.340 +I didn't have that bookmarked and all handy like I thought I did + +25:12.060 --> 25:14.300 +Um, so we'll just say ftp.gnu + +25:15.260 --> 25:17.260 +.org + +25:17.900 --> 25:24.560 +Uh, what is it pub emacs emacs-29.1 + +25:26.460 --> 25:28.460 +Uh + +25:34.860 --> 25:36.860 +Hmm + +25:36.860 --> 25:38.860 +I + +25:40.700 --> 25:42.700 +Didn't + +25:43.100 --> 25:48.060 +Really think i'd have this command sitting around it makes me want to scrap the whole demo i'm not gonna lie + +25:48.940 --> 25:50.940 +Okay, how am I doing your time? + +25:51.820 --> 25:58.140 +Um, I think at least 15 minutes. Um, but in the command that you were freehanding should the pub be gnu instead + +25:59.100 --> 26:01.100 +Oh, thanks + +26:01.100 --> 26:03.100 +I'm, sorry + +26:07.420 --> 26:13.420 +There we go, thank you. All right, and then we'll + +26:17.820 --> 26:20.220 +And i'm not sure I provided commands for this either + +26:22.940 --> 26:29.660 +But it is trivially easy to do and while that happens we'll get to move on a few slides + +26:29.820 --> 26:31.820 +Um + +26:31.820 --> 26:35.660 +The configure script i'm not talking about in a lot of detail + +26:35.740 --> 26:40.460 +But I do want to mention that the gnu binaries are provided with native + +26:41.820 --> 26:46.080 +Uh compilation enabled that's the feature that uses gcc + +26:46.620 --> 26:53.020 +lib gcc get on windows if available that looks gcc get will be used + +26:53.740 --> 27:00.620 +Um, but when but if if emacs has that feature then it will take by compile + +27:01.420 --> 27:03.420 +native code and + +27:04.040 --> 27:05.100 +asynchronously + +27:05.100 --> 27:07.100 +Compile that as needed + +27:07.340 --> 27:09.340 +uh with the ahead of time feature + +27:09.660 --> 27:14.860 +We're going to do as much of that ahead of time and for folks that are consuming the windows binary + +27:14.860 --> 27:19.020 +The thinking goes that they might not have mysys too. They might not have + +27:19.740 --> 27:21.740 +Gcc jet they might be + +27:22.140 --> 27:24.140 +Happy that they're enabled + +27:24.140 --> 27:28.400 +In a you know a lot of time run emacs on their local environments + +27:30.460 --> 27:31.580 +At all + +27:31.580 --> 27:34.700 +You know in a maybe a lockdown at a corporate context + +27:35.420 --> 27:36.460 +so + +27:36.460 --> 27:37.660 +aside + +27:37.660 --> 27:38.860 +that + +27:38.860 --> 27:40.880 +There's your first glimpse at the configure + +27:42.140 --> 27:46.220 +Program that we're going to run in a moment. In fact, i'm going to go as far as + +27:47.020 --> 27:49.020 +Putting it on the clipboard + +27:49.100 --> 27:50.540 +um + +27:50.540 --> 27:53.260 +Really just looking at this the aot flag + +27:53.340 --> 27:58.620 +It's the one i'd call attention to but it's worth understanding that windows doesn't provide a dbus capability + +27:58.700 --> 28:02.700 +So windows native program isn't gonna be able to depend on dbus. We're gonna + +28:03.500 --> 28:08.960 +We're gonna explicitly ask that that be left out. I think that's actually optional. It's documentation + +28:09.260 --> 28:12.940 +I think the configure program is smart enough to know that we don't want dbus + +28:13.660 --> 28:15.100 +on windows + +28:15.100 --> 28:22.860 +Um, otherwise we tend to compile with things. Um, there there's missing documentation. We could say the uh, + +28:23.340 --> 28:26.780 +all of the libraries are treated in the way I mentioned in that + +28:27.900 --> 28:30.700 +Jpeg support will be available as long as + +28:32.060 --> 28:36.940 +Jpeg is is available in our environment and configure script certainly notices that + +28:37.500 --> 28:44.700 +Um, the new provided binaries are provided with minus o2 and that's also my default personally on windows. Um, + +28:45.580 --> 28:48.380 +However, and i'm going to skip this since I mentioned it + +28:49.260 --> 28:51.260 +um mentioned + +28:51.260 --> 28:53.260 +uh, and uh + +28:54.620 --> 28:56.460 +Um + +28:56.460 --> 29:00.380 +So I guess i'll say um, you can um say with + +29:01.420 --> 29:02.300 +the + +29:02.300 --> 29:08.620 +It's worth knowing that you if you're not one reason that that you're building might be because you want to turn off native + +29:08.920 --> 29:14.140 +Compilation for whatever reason if you have load juices you get it, but don't want emacs to use it + +29:14.700 --> 29:18.400 +Uh, especially as that default looks like it could be changing with emacs 30 + +29:19.420 --> 29:20.540 +um + +29:20.540 --> 29:22.060 +the uh + +29:22.060 --> 29:27.100 +the debug configuration, um, this is this is the uh, kind of + +29:27.740 --> 29:34.060 +Uh, what what i'm currently using this on commentary. Uh, i've seen on the emacs development list + +29:34.060 --> 29:36.060 +Um + +29:40.620 --> 29:44.220 +All right, let's check on our checkout and see if we can't get a build running + +29:44.620 --> 29:48.300 +Um, this is a release build so I won't be starting with + +29:49.260 --> 29:51.920 +Uh, so we'll start by hopping into its directory + +29:53.980 --> 29:57.100 +And we um we have + +29:59.020 --> 30:01.020 +Uh + +30:05.020 --> 30:07.020 +But not + +30:11.260 --> 30:14.060 +Okay, so that tells us we're gonna run + +30:15.660 --> 30:17.660 +Our configure program + +30:18.540 --> 30:21.260 +But we don't need to run uh config ic + +30:23.260 --> 30:25.260 +So + +30:31.340 --> 30:33.580 +So let's get that going and + +30:34.060 --> 30:36.060 +uh + +30:36.060 --> 30:41.280 +Hopefully that's showing through just enough to be fun not too much to be distracting + +30:46.540 --> 30:49.440 +Um the uh the unoptimized + +30:52.140 --> 30:58.320 +Um, please report issues if your emacs is crashing, uh to the emacs development list not to me personally + +30:59.100 --> 31:02.220 +Um, although you are of course welcome to copy me + +31:02.700 --> 31:08.540 +Um, if you especially i'm subscribed to that list so I get all the mail so I don't mind being copied + +31:09.100 --> 31:11.020 +uh, and + +31:11.020 --> 31:12.380 +as well + +31:12.380 --> 31:13.740 +if you think it's + +31:13.740 --> 31:15.100 +uh + +31:15.100 --> 31:17.500 +You know related to packaging that actually makes sense + +31:18.060 --> 31:24.700 +Or windows related even and uh, it can be tested with an extra snapchat that should be uploaded to the gnu alpha side + +31:25.100 --> 31:27.500 +I could look at that if I have time + +31:27.820 --> 31:29.340 +Okay + +31:29.340 --> 31:31.660 +That is with the configure script to make file for + +31:32.200 --> 31:39.500 +Emacs is really really complicated if time permits which i'm, you know now confident it will not + +31:39.900 --> 31:45.500 +We will look at a makefile that I tried writing that orchestrates this whole process that i'm talking about + +31:47.180 --> 31:53.900 +Um as uh, let's see, so the build uh build process I run my builds with + +31:54.380 --> 31:58.220 +Uh explicitly specifying the max cpu, uh + +31:59.340 --> 32:01.180 +with minus j + +32:01.180 --> 32:08.380 +But minus b1 to get the full build, uh full login to your recipes. That is probably the magic thing + +32:09.100 --> 32:10.620 +that um + +32:10.620 --> 32:12.620 +shouldn't to understand with uh + +32:15.980 --> 32:23.520 +Or that uh that that uh that i'm glad that I know, uh as i'm trying to write my automations + +32:24.700 --> 32:26.700 +um + +32:26.940 --> 32:28.940 +Uh the um + +32:29.820 --> 32:34.060 +So I call that out here the binary, uh releases + +32:35.020 --> 32:39.100 +Okay. So in this section, we're going to start to get into what are all those files + +32:39.500 --> 32:43.020 +And there's a bug report related to that that I didn't get into here. So + +32:43.580 --> 32:47.340 +Um, that's kind of to the point about the less said about this the better + +32:47.660 --> 32:51.420 +That's my explanation for stepping through some of these slides. Uh, of course + +32:52.380 --> 32:54.380 +Share them all um + +32:55.820 --> 32:58.220 +Hopefully by the time that this video is published + +33:01.180 --> 33:07.180 +I mentioned it. Um, I may have mentioned already freshly installed but uh fully installed + +33:07.660 --> 33:13.020 +uh this the the key distinction here is that uh emacs is + +33:13.400 --> 33:20.700 +Distributed in the binary form for windows with some dll files that actually come from the mysis 2 + +33:21.000 --> 33:26.220 +Project there's an implication there to gcc that I definitely want to get to it talking about + +33:28.060 --> 33:30.620 +Um, so freshly installed means + +33:31.340 --> 33:34.700 +We haven't copied those binaries from the mysis 2 + +33:35.340 --> 33:37.180 +uh installation + +33:37.180 --> 33:39.180 +into the emacs + +33:39.480 --> 33:41.260 +uh installation + +33:41.260 --> 33:43.020 +uh, and then + +33:43.020 --> 33:48.300 +When we re-archive that local emacs installation, that's how we're going to create the full zip + +33:48.620 --> 33:53.020 +So hopefully that actually is a pretty good summary of what all those files are + +33:53.660 --> 33:57.900 +Um, but there are readme files on the ftp. They do a pretty good job + +33:59.020 --> 34:05.900 +If you can dig enough to find one and my apologies for uh tardiness getting a new version on that posted + +34:07.260 --> 34:09.180 +um + +34:09.180 --> 34:10.620 +the emacs + +34:10.620 --> 34:17.020 +Uh, so those dependencies, uh are listed within the emacs itself and as we'll just talk about in a moment + +34:17.020 --> 34:18.300 +There's a way + +34:18.300 --> 34:21.500 +uh that we can use we can access that + +34:22.220 --> 34:26.880 +When we collect them in order to meet the gcc requirement that is essentially + +34:27.660 --> 34:29.660 +to include + +34:29.660 --> 34:35.260 +Um include the sources for the for those binaries the things that were compiled against + +34:36.460 --> 34:38.460 +um + +34:39.100 --> 34:42.620 +The uh, so so here we go, we're we're into the build process + +34:42.700 --> 34:46.060 +Let's just take a look and see if configure it got done it sure did + +34:46.540 --> 34:48.540 +and now we can see a table of + +34:49.080 --> 34:51.080 +Hopefully good, but good and bad news + +34:51.900 --> 34:53.580 +um in potential + +34:53.580 --> 34:58.940 +um where we're learning that we're using the pdumper strategy and any number of other things that we might be + +34:59.180 --> 35:03.820 +Messing with as our motivation for for building ourselves on emacs + +35:04.860 --> 35:06.860 +again, this table represents + +35:07.340 --> 35:09.260 +uh what you'll what + +35:10.060 --> 35:15.280 +What what it looks like for me when i'm building for the gnu distributed binaries + +35:17.900 --> 35:19.900 +All right, so um + +35:20.780 --> 35:23.740 +Kind of moving moving as quickly as I can here + +35:24.540 --> 35:28.140 +I'm at 40 after I believe that's the five minute mark + +35:28.780 --> 35:29.660 +so + +35:29.660 --> 35:34.780 +Um having just succeeded in in configuring emacs. I don't think we're going to build it. Uh + +35:35.100 --> 35:39.180 +I don't think we're going to actually get to running make install + +35:39.900 --> 35:45.500 +Um, but I have it sitting here on my keyboard or clipboard assuming that we will right? + +35:49.100 --> 35:50.460 +No + +35:50.460 --> 35:52.460 +Oh, wow + +35:52.780 --> 35:56.940 +I think i've managed to confuse this. All right, so for me that looks simply like + +35:57.660 --> 35:59.740 +uh make + +35:59.740 --> 36:01.740 +v equals one + +36:01.740 --> 36:09.200 +Uh install, uh prefix equals + +36:10.700 --> 36:12.700 +uh + +36:18.380 --> 36:20.380 +And we can at least get it kicked off + +36:22.860 --> 36:25.740 +And that that command is just uh + +36:26.620 --> 36:30.540 +Just is no no different than I showed on the slide where I where I gave it + +36:31.020 --> 36:34.460 +Uh, I wasn't planning to stop and explain it. I was just planning to paste it in + +36:35.500 --> 36:36.700 +so + +36:36.700 --> 36:42.060 +So so again recapping the rest of the process here and maybe actually making it if you can believe it or not + +36:42.300 --> 36:44.460 +through the rest of these slides, um + +36:45.180 --> 36:52.240 +We to to create the full set of binaries. We're going to need a no dependent no depth archive. That's without the mysys2 + +36:52.400 --> 36:58.740 +To uh deal provided dlls just the things that we compile as part of making emacs + +36:59.520 --> 37:01.520 +um + +37:02.400 --> 37:09.760 +The uh, the build depth zip script is uh provided with the source distribution is your tool + +37:10.240 --> 37:14.320 +for uh meeting the gpl requirements ride source as mentioned before + +37:14.880 --> 37:21.360 +Um, there is a second bug that I did, uh include some more information on in my notes already + +37:22.240 --> 37:24.240 +um that uh + +37:24.800 --> 37:27.840 +That gets into the details of this other feature I alluded to + +37:28.640 --> 37:30.640 +Um, i'll just skip into that + +37:31.200 --> 37:32.560 +um + +37:32.560 --> 37:34.640 +we can with with uh + +37:35.440 --> 37:40.240 +With a an appropriate version of that which you may need a patch + +37:41.040 --> 37:42.560 +uh to + +37:42.560 --> 37:44.660 +To have you can list out the dependencies + +37:45.540 --> 37:51.060 +And and that version as well can consider the dependencies of the emacs binary versus the hard-coded list + +37:51.060 --> 37:54.900 +You might find depending on when you look at this file in the source tree + +37:56.980 --> 37:58.980 +The different um + +37:59.060 --> 38:00.020 +so + +38:00.020 --> 38:06.440 +I also have a hack here that uh works around the absolute requirement to run this with the mysys2 + +38:07.060 --> 38:09.060 +And not the mingw64 + +38:09.060 --> 38:11.060 +64 + +38:14.340 --> 38:16.340 +Script + +38:17.460 --> 38:18.500 +Um + +38:18.500 --> 38:27.080 +Once we've made that zip file that contain that's that's our installed emacs without the dlls provided by mysys2 + +38:28.420 --> 38:35.140 +We'll then unpack the dependencies that were created by that python script. We just talked about from the emacs source tree + +38:36.020 --> 38:40.980 +So at that point once those are unpacked we can now make what's called the full + +38:41.600 --> 38:47.640 +Installer or sometimes I might call it the unqualified installer because it's just going to be called emacs29.1.zip + +38:51.060 --> 38:56.520 +Um and that uh that file which which creates the archive + +38:58.580 --> 38:59.780 +That + +38:59.780 --> 39:03.140 +that that file is exactly the same plus the + +39:03.780 --> 39:08.340 +Uh, the dependencies that we unzipped in the bin folder of the installed emacs + +39:09.700 --> 39:10.720 +the + +39:10.720 --> 39:17.460 +Executable self-installer, which I would love to have more time to talk about I gave a few pointers here on the hard part of running + +39:17.460 --> 39:19.460 +it most importantly + +39:19.940 --> 39:25.880 +If i've installed in any kind of funny looking name, I end up renaming it to like emacs-29.1 + +39:26.840 --> 39:33.240 +Or emacs-29. or 30.0.50 or whatever and I just rename that installed + +39:33.880 --> 39:39.800 +Emacs folder and then I go to the root of wherever I created that the parent directory above it + +39:40.360 --> 39:43.420 +And that's where I make my copy of the emacs nsi + +39:44.120 --> 39:46.600 +um the the nsis script + +39:47.560 --> 39:49.400 +and uh + +39:49.400 --> 39:51.400 +That's also where I + +39:51.960 --> 39:59.160 +And then uh, then from that parent directory I execute uh making sys uh here I as mentioned + +39:59.800 --> 40:00.920 +um + +40:00.920 --> 40:05.160 +I I can get away with this because I have it on my path and it's my recollection + +40:05.240 --> 40:11.480 +I think I tested this and couldn't reproduce the problem. So I didn't document it here, but i've had some problems with running this when + +40:12.040 --> 40:13.160 +uh + +40:13.160 --> 40:15.160 +When nsis wasn't on my path + +40:16.920 --> 40:19.960 +The uh, the the final step here + +40:20.440 --> 40:25.260 +And the last the gpl requirement is to include all the sources + +40:25.780 --> 40:29.640 +Except when i'm doing a release build I always do this + +40:30.200 --> 40:35.800 +Um, and that's the new practice when making snapchat binaries is to go ahead and include the sources + +40:36.280 --> 40:38.840 +Even though we might have the specific revision number + +40:39.400 --> 40:43.000 +Um, our thinking is we want absolute clarity + +40:44.120 --> 40:45.480 +that that somebody + +40:45.480 --> 40:51.720 +Uh can say okay this binary did this thing from the source for it i'm gonna go take that into my own open source + +40:53.160 --> 40:57.160 +yeah, maybe they would the jerks them into my own open source project and + +40:57.880 --> 40:59.480 +um + +40:59.480 --> 41:03.340 +Off, you know off they go, uh, and that needs to be possible + +41:04.840 --> 41:06.520 +um + +41:06.520 --> 41:07.960 +so, um + +41:07.960 --> 41:13.640 +Beyond that the rest of this is is really detailed that you find covered in the gnu maintainers manual + +41:14.280 --> 41:20.120 +Um, this is the the current set of windows binaries that um, it's busily working on + +41:20.760 --> 41:22.760 +creating a like for like a + +41:23.400 --> 41:29.320 +Mirror to behind the scenes here is called a 29.1 underscore two + +41:30.280 --> 41:32.280 +um, and I have a lot of + +41:32.900 --> 41:37.720 +Automation available on this site. So at this point i'm just I think i'm only + +41:38.520 --> 41:40.520 +minute 40 seconds over i'm + +41:41.080 --> 41:42.120 +gonna + +41:42.120 --> 41:44.120 +invite my + +41:44.360 --> 41:50.200 +Co-organizers back onto the call or any volunteers that want to jump in and anybody if there's people on the bbb + +41:50.280 --> 41:53.080 +I'd be happy to take questions if there aren't + +41:53.640 --> 41:56.520 +um, I have a screen full of + +41:57.240 --> 42:02.200 +The automation stuff ready to go as a kind of a second ring in my circus today + +42:03.320 --> 42:07.240 +So if you're still with me, thanks a lot for joining me, and I really enjoyed this talk + +42:07.480 --> 42:11.560 +Uh, if this is where we're going to close it out. I don't know where we're at for schedule today + +42:13.080 --> 42:15.180 +Um, thanks a lot for a great talk corwin + +42:16.760 --> 42:21.640 +Um in terms of like schedule, yeah, you went over a little bit for the official like, um + +42:22.120 --> 42:24.120 +schedule or time of your talk, but I think + +42:24.760 --> 42:29.080 +We actually have maybe like six or seven more minutes. Um here on stream + +42:29.800 --> 42:35.400 +For um questions and such if folks have questions or if you want to like quickly maybe show one or two more things + +42:36.200 --> 42:37.000 +um + +42:37.080 --> 42:39.080 +But I think the hard stuff is about like + +42:39.480 --> 42:42.520 +Maybe 10 minutes ish for now and then we'll have to rush over to um + +42:43.320 --> 42:45.320 +for the closing remarks, so + +42:48.120 --> 42:50.120 +Well, that sounds awesome + +42:51.320 --> 42:58.280 +Okay, so i'm looking at the the dev chat, uh, I see a comment on cross compiling the emacs + +42:58.440 --> 43:05.160 +But i'm sorry, i'm looking at irc primarily, but uh, feel free to jump in if you're on bbb with me or + +43:05.320 --> 43:08.840 +Uh, uh, if if you put something on the pad i'm sure + +43:09.400 --> 43:12.520 +I will see it between the two of us + +43:13.160 --> 43:14.840 +Uh over here + +43:14.840 --> 43:21.080 +Okay, so cross compiling emacs for serenity. I haven't tried really any cross compiling. I think that would be very interesting + +43:21.160 --> 43:23.160 +I would most likely focus on + +43:23.720 --> 43:28.760 +Doing exactly what I do on a gnu system completely ditching + +43:29.320 --> 43:30.280 +um + +43:30.280 --> 43:34.600 +So I guess with my my remaining time rather than walking through code + +43:35.160 --> 43:39.560 +Um for my automation which can be another talk if in fact there's an interest in that + +43:40.200 --> 43:41.240 +um + +43:41.240 --> 43:45.560 +I want to I guess say a couple words about the non-free operating system + +43:46.200 --> 43:49.800 +That i'm using here. I did my best to use no + +43:50.660 --> 43:52.760 +non-free software other than + +43:53.640 --> 43:55.400 +the + +43:55.400 --> 43:57.400 +Uh the operating system + +43:57.720 --> 44:01.720 +That is the context for this talk in preparing this talk for you + +44:02.120 --> 44:05.080 +I personally have a lot more + +44:06.520 --> 44:13.560 +Uh time and energy I have to say invested in proprietary tools for doing a lot of the things that + +44:14.920 --> 44:19.480 +That go into this so I really respect the work of people that pull that off. Um + +44:20.200 --> 44:27.400 +I'm, sorry, I didn't get my pre-recorded stuff. Uh kind of in order for everybody, but I just want to stress like + +44:28.280 --> 44:35.480 +Uh, it is all absolutely possible and just hats off to everybody that that used uh entirely free software to get their + +44:36.200 --> 44:38.200 +Get their recordings done in time + +44:38.680 --> 44:40.680 +um, and what you did see + +44:41.640 --> 44:45.560 +Unless it was provided by the operating system in my presentation today was all + +44:46.040 --> 44:51.080 +Uh free software with the debatable exception of nsys which styles itself + +44:51.720 --> 44:53.320 +as open source + +44:53.320 --> 44:56.120 +maybe for uh marketing reasons + +44:57.480 --> 45:00.460 +Uh in any case, uh, certainly we can get out of the source + +45:08.120 --> 45:10.840 +Thanks for the note corinne, it's good to know that uh + +45:11.320 --> 45:18.600 +Building or uh, yeah doing the build of emacs for windows on windows can be done using only free software + +45:19.880 --> 45:21.880 +Yeah, absolutely + +45:23.480 --> 45:25.480 +Probably the right closing note, right? + +45:26.120 --> 45:32.440 +um, I just uh, thanks again to the organizers for bearing with me and like every time I was like you guys i'm + +45:32.520 --> 45:36.760 +Terrible at this. They're just like no you're doing fine. Keep going. You did a great job live last time + +45:37.000 --> 45:43.000 +You can do it live, you know and and saying all the right things to just uh, encourage me to come back + +45:44.840 --> 45:46.840 +This year and everywhere + +45:49.720 --> 45:54.120 +Well, as I said before we were very lucky to have you and the rest of the team of course as well and + +45:54.760 --> 45:59.960 +um goes without saying but all the speakers and all the audience the participants as well, so + +46:08.360 --> 46:09.720 +Um + +46:09.720 --> 46:17.000 +So, uh, are we we're still live over here that you know, you know me i'm the mike hog that I am I can't resist + +46:17.800 --> 46:21.720 +um throwing throwing up another screen here and uh, + +46:22.280 --> 46:27.000 +In fact, let's go ahead and go back to our to our crawler, right? + +46:30.840 --> 46:36.120 +And i'll bring back our build if it finishes and maybe we'll show making the installer as well, um + +46:39.480 --> 46:42.040 +But I have the cpu count turned down a little bit here + +46:44.200 --> 46:46.600 +Note I didn't specify minus j here + +46:47.400 --> 46:49.400 +um, so + +46:49.480 --> 46:52.840 +Over here is my automation, uh in case you do want to take a look + +46:52.920 --> 46:59.480 +I can at least provide the orientation of what you're looking at scrape log is probably my first thing. I want to show off + +46:59.800 --> 47:05.800 +um, it's not beautiful, but this works, uh, pretty well for me to + +47:06.280 --> 47:12.440 +Get a sense if something might have changed in terms of how many warnings or errors are happening + +47:13.080 --> 47:18.620 +When I build emacs, so I have this awful automation going on and I frequently want to answer the question + +47:19.260 --> 47:23.500 +You know, what's the change rate in uh warnings or what have you? + +47:24.140 --> 47:26.140 +So this kind of gives me a count + +47:26.460 --> 47:28.220 +of that + +47:28.220 --> 47:29.820 +um + +47:29.820 --> 47:31.820 +so from there, uh + +47:32.460 --> 47:36.860 +Crude ci is the script. We're we're watching run in the other pane + +47:37.980 --> 47:39.900 +um, you can + +47:39.900 --> 47:41.900 +see it's uh + +47:42.780 --> 47:45.020 +Just starting to do its thing again + +47:48.860 --> 47:50.860 +And uh + +47:51.420 --> 47:58.620 +The make file I mentioned this is a top-down rewrite of everything else that i've done it has some bugs right now + +48:00.300 --> 48:02.460 +um the uh + +48:03.660 --> 48:04.460 +the + +48:04.460 --> 48:09.660 +Build distribution is the main script that I use for my personal builds + +48:10.140 --> 48:13.260 +This is what is run by the crude ci script + +48:13.820 --> 48:16.380 +Uh, it has a fun tie-in to this + +48:16.700 --> 48:18.700 +Uh web interface here + +48:19.340 --> 48:24.380 +Um where we can you don't need the port number when you go to it. That's just if i'm going to post + +48:25.260 --> 48:27.260 +um the + +48:28.380 --> 48:30.380 +Uh + +48:31.100 --> 48:37.980 +Blah blah blah blah this this script is really long and complicated and probably needs some diving into but you can see that + +48:38.540 --> 48:44.540 +Um, one of the complexities I have to deal with is that i'm going to need a something in the format of an emacs dash + +48:44.860 --> 48:46.860 +version for strategic + +48:47.100 --> 48:49.580 +um nsys reasons so + +48:50.140 --> 48:51.900 +uh + +48:51.900 --> 48:56.460 +It takes care of kind of every complexity and stuff that I mentioned today in some respects + +48:57.020 --> 48:59.980 +Um, as does the make file build release + +49:00.780 --> 49:01.660 +is + +49:01.660 --> 49:04.160 +um another fairly useful + +49:05.240 --> 49:11.580 +Incarnation of this this is just focused on the release process and this does work + +49:12.060 --> 49:14.060 +for example to create the + +49:14.380 --> 49:15.420 +the + +49:15.420 --> 49:17.420 +You know like I like well I could + +49:17.980 --> 49:23.760 +Like uh for like files as far as I can tell so what are currently posted for emacs 29.1 + +49:24.860 --> 49:26.860 +and the release candidate + +49:27.660 --> 49:28.860 +um + +49:28.860 --> 49:34.300 +So i'll probably use that next time and if it's still like for like i'll probably post the ones that came from this + +49:35.580 --> 49:37.340 +um + +49:37.340 --> 49:44.940 +Uh building a tree sitter I make some dlls there if you're looking for hints on how to get going or just simply + +49:45.580 --> 49:49.900 +A huge long list of git repositories that make grammars you can use + +49:50.780 --> 49:52.780 +That is here as well + +49:53.580 --> 49:56.620 +um, finally I mentioned I have a + +49:58.300 --> 50:03.980 +Um, I have a a website where I publish my own personal snapshots that I make + +50:04.540 --> 50:07.820 +That folder full of install directories, but all of the usual + +50:08.360 --> 50:13.920 +GNU style binary distributables including the source code and the source code for the dependencies + +50:14.860 --> 50:15.980 +um + +50:15.980 --> 50:17.820 +the + +50:17.820 --> 50:19.820 +uh + +50:20.460 --> 50:23.180 +So this program is another one of those + +50:24.300 --> 50:28.700 +Complicated find commands and therefore potentially the most useful thing in here to take to you + +50:29.340 --> 50:33.340 +Um, and here i'm deleting binaries older than 17 years + +50:34.220 --> 50:36.220 +uh everything except + +50:36.220 --> 50:37.500 +the uh + +50:37.500 --> 50:41.020 +No deps file and the sources of it. You'll find on my website + +50:41.580 --> 50:44.140 +Currently those indefinitely i'll probably roll out + +50:44.760 --> 50:46.760 +120 days or something + +50:47.020 --> 50:49.020 +um for those eventually + +50:53.580 --> 50:57.340 +Oh, uh, I can talk about this one even um the uh + +50:57.740 --> 50:58.700 +The + +50:58.700 --> 51:02.380 +So here you'll see the two branches that i'm tracking the job of this script + +51:02.780 --> 51:07.020 +Is this runs on the website? I call it with a like a remote rsync + +51:07.740 --> 51:08.620 +uh type + +51:08.620 --> 51:11.420 +Uh, or an ssh remote ssh command + +51:12.060 --> 51:13.740 +um + +51:13.740 --> 51:18.220 +And right after the rsync r syncing up any new emacs that I built + +51:19.020 --> 51:20.540 +and + +51:20.540 --> 51:22.540 +uh, it's + +51:23.180 --> 51:29.920 +Uh, its job is to update my fancy directory indexing so let's look at corwin's website + +51:31.580 --> 51:35.040 +Here's my emacs 29 folder + +51:44.780 --> 51:46.780 +We have about two more minutes corwin + +51:47.420 --> 51:52.380 +Yeah, it'll take that entire two minutes to uh, load this directory because I am + +51:52.940 --> 51:56.140 +Because I have not yet ever pruned any of these dang binaries + +51:56.380 --> 52:01.500 +So every version of uh emacs 29 that i've ever made for myself is probably here + +52:02.540 --> 52:03.580 +nice + +52:03.580 --> 52:09.660 +Uh, I strongly recommend that you bookmark this folder if you're using these for something and you always want the latest + +52:09.980 --> 52:17.500 +Um, so here this particular, uh latest 29 emacs 29 latest or simply replace the 29 with 30 to get those + +52:18.220 --> 52:19.080 +uh + +52:19.080 --> 52:20.140 +alas + +52:20.140 --> 52:22.620 +No, no such luck for tree setter + +52:23.180 --> 52:25.180 +but if we look at + +52:25.740 --> 52:27.740 +that + +52:36.380 --> 52:39.100 +Live this long without making a typo now look at me + +52:40.220 --> 52:42.220 +Okay + +52:44.780 --> 52:46.780 +Oh + +52:51.500 --> 52:53.180 +So here, um + +52:53.180 --> 52:57.100 +You know, we can see the iconification and so on even in the tree sitter folder + +52:57.180 --> 53:01.420 +this is all i'm talking about about the fanciness that's set up by that other script that + +53:02.380 --> 53:06.940 +i'm showing over here and run after each time I run the upload it just + +53:07.900 --> 53:12.780 +Looks to see if anything's new and add some lines to the dot htaccess file + +53:15.900 --> 53:17.180 +Um + +53:17.180 --> 53:22.700 +I'm, particularly proud of this one. I'm not going to lie. Um, linking out to each each + +53:23.500 --> 53:27.020 +project that we're using letting us know the commit version and then + +53:28.300 --> 53:33.100 +For the dlls quick link out to the log and the signature file for this dll + +53:34.140 --> 53:36.140 +um + +53:37.020 --> 53:39.020 +I find that a lot just a lot + +53:40.540 --> 53:42.220 +More readable + +53:42.220 --> 53:44.060 +than uh + +53:44.060 --> 53:48.620 +Listing them all out individually and i'd love to do something like that on the new site + +53:51.180 --> 53:52.220 +So i'm + +53:52.220 --> 53:56.540 +I think we've got to be out of time by now. I've just got to say hey, thanks again for having me + +53:56.780 --> 54:01.740 +Uh for those that uh watch the talk either live or after the conference + +54:02.460 --> 54:05.820 +uh appreciate everyone's support to get me to the point where i'm able to + +54:06.540 --> 54:10.220 +Uh to do this this this cool volunteer task + +54:10.380 --> 54:14.220 +Uh, which is fun and easy to do and reach out to me if you're interested in helping with it + +54:19.020 --> 54:25.740 +Well, awesome, thanks a lot for the awesome talk corbin and uh, of course as a fellow core core organizer + +54:26.060 --> 54:33.280 +For our for all that you do, um in and around emacs conf and of course for uh, can we max as well? It's much appreciated + +54:36.140 --> 54:39.100 +Big big words from coming from you my friend + +54:41.740 --> 54:43.740 +Um, thanks for the kind words + +54:45.020 --> 54:51.660 +Cheers my pleasure. All right, and with that I think we're gonna uh wrap up the dev track here and we'll be + +54:52.300 --> 54:58.140 +With you again shortly in a few minutes on the gen stream the gen track for the closing remarks for today + +54:58.620 --> 55:01.900 +Um only for today because we're gonna be back tomorrow again as well + +55:02.460 --> 55:05.760 +So don't go anywhere and uh, see you on the gen track in a bit + +55:05.760 --> 55:07.760 +So + +55:28.080 --> 55:31.680 +Oh my god, I did it we got done within the time you're my hero + +55:31.840 --> 55:35.440 +um, and thank you so much for just keeping me honest there and uh + +55:36.720 --> 55:39.300 +Like helping me keep my eye on the time and such + +55:50.880 --> 55:53.680 +You have to look at the recording and see whether you feel like doing it again + +55:56.160 --> 56:01.360 +I'm sorry. I had my sound screwed up and i'm sorry if I talked over somebody I couldn't hear anything on mumble until this very + +56:01.360 --> 56:03.360 +moment + +56:03.520 --> 56:08.960 +Oh, uh because he used your webcam for it, um, like as a like a virtual webcam thingy + +56:09.520 --> 56:12.960 +It was low res especially when things are changing as you were + +56:13.520 --> 56:15.120 +scrolling around + +56:15.120 --> 56:20.720 +So we'll see what kind of recording we can recover from it and then you can decide whether you maybe want to clean it up + +56:20.720 --> 56:22.080 +with like + +56:22.080 --> 56:24.080 +screenshots and + +56:24.240 --> 56:28.960 +I recorded on this end too. We shouldn't have that problem with my recording. Thank you. Thank you. Thank you + +56:29.360 --> 56:31.360 +I think we're still live on the dev stream + +56:34.240 --> 56:37.440 +Someone could uh, thanks. Oh, yes + +56:38.880 --> 56:42.180 +Because uh, i'll set it to rebroadcast + +56:45.520 --> 56:48.480 +Yeah, I I love doing that for the closing remarks that's + +56:49.680 --> 56:51.680 +a fine tradition + +56:52.000 --> 56:55.280 +Or it's a tradition now because i'm pretty sure this means we've done it twice + +56:55.440 --> 56:57.440 +I + +57:02.560 --> 57:05.360 +Once heard that, you know, uh as a fan + +57:05.680 --> 57:11.680 +Meaning like a fannish is a term of endearment for a science fiction fan to another we say we're we're fans or things + +57:11.680 --> 57:17.440 +We do our fannish and a fannish tradition then is if you do it three times, it's tradition + +57:18.000 --> 57:20.000 +But um, we're on a budget here. So + +57:22.880 --> 57:24.880 +Nope + +57:25.920 --> 57:29.840 +All right, I think we should um head over to mumble and talk on mumble + +57:30.080 --> 57:34.640 +Um and decide and see like which big blue button room we're going to be in for closing + +57:35.200 --> 57:37.200 +Okay, so we're clear on bbb here + +57:37.760 --> 57:39.760 +Yep, I think so + diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt new file mode 100644 index 00000000..c510cc30 --- /dev/null +++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt @@ -0,0 +1,314 @@ +WEBVTT + + +00:00:07.120 --> 00:00:07.359 +[Speaker 0]: Okay, folks. Thanks, Anand, + +00:00:11.259 --> 00:00:11.759 +for the great talk. So here is the live Q&A. + +00:00:22.279 --> 00:00:22.420 +Hi. Hello. I see questions being posted on + +00:00:23.920 --> 00:00:24.099 +the pad. Would you like me to read them out + +00:00:25.320 --> 00:00:25.820 +or would you prefer to read them yourself? + +00:00:31.880 --> 00:00:32.220 +[Speaker 1]: Okay. I'll try reading it out. + +00:00:33.340 --> 00:00:33.680 +If there are audio issues, + +00:00:35.420 --> 00:00:35.920 +[Speaker 0]: Sure, thanks. + +00:00:37.360 --> 00:00:37.760 +[Speaker 1]: just let me know. A lot of what you showed + +00:00:39.960 --> 00:00:40.280 +was the type of stuff Emacs didn't do very + +00:00:43.040 --> 00:00:43.200 +well. This stuff looks like it could be + +00:00:45.020 --> 00:00:45.239 +useful for using Emacs with a touch screen + +00:00:46.960 --> 00:00:47.460 +and a tablet. Have you used it for purposes + +00:00:53.160 --> 00:00:53.360 +like this? No right now it's more proof of + +00:00:58.580 --> 00:00:58.780 +concept stage so I don't use it more than you + +00:01:03.420 --> 00:01:03.920 +know just making some demo software. + +00:01:12.100 --> 00:01:12.320 +The next question is, is there a mode for + +00:01:15.080 --> 00:01:15.280 +using FFmpeg through Emacs or did you make it + +00:01:20.160 --> 00:01:20.660 +yourself? Okay so this is something that I + +00:01:26.800 --> 00:01:27.300 +built. So the base of it is XWidget in Emacs, + +00:01:28.160 --> 00:01:28.660 +which is already there. + +00:01:35.080 --> 00:01:35.380 +But then I had to add a few control code for + +00:01:42.240 --> 00:01:42.500 +controlling VLC. So ffmpeg is like a shell + +00:01:46.840 --> 00:01:47.340 +command that finally stitches those bits of + +00:01:51.780 --> 00:01:52.280 +video clips. But what actually plays is VLC, + +00:01:55.860 --> 00:01:56.360 +and it's not FFmpeg. Hope that's clear. + +00:02:03.580 --> 00:02:04.020 +The next question is these demos are always + +00:02:06.020 --> 00:02:06.180 +so impressive. Do you plan to upstream any of + +00:02:07.040 --> 00:02:07.540 +these projects into Emacs? + +00:02:13.940 --> 00:02:14.240 +Right now, okay, let me read the complete + +00:02:16.220 --> 00:02:16.320 +questions. These demos are always so + +00:02:17.960 --> 00:02:18.080 +impressive. Do you plan to upstream any of + +00:02:19.960 --> 00:02:20.280 +these projects into Emacs or to publish them + +00:02:21.780 --> 00:02:22.280 +as, for example, helper packages? + +00:02:26.480 --> 00:02:26.980 +So right now, as it stands, + +00:02:30.720 --> 00:02:30.940 +I personally don't intend to do that because + +00:02:34.900 --> 00:02:35.400 +I don't have that time but I have signed my + +00:02:38.720 --> 00:02:39.220 +signed assignment copyright assignment so + +00:02:41.600 --> 00:02:41.760 +anybody has time and motivation to do it they + +00:02:47.120 --> 00:02:47.620 +can pick up the code and help me with that. + +00:02:53.200 --> 00:02:53.700 +The next is, how did you make that electronic + +00:03:00.600 --> 00:03:00.860 +circuit diagram? Is there a mode with the + +00:03:02.560 --> 00:03:03.060 +symbols already available. + +00:03:08.240 --> 00:03:08.460 +Okay so electronic circuit diagram is you + +00:03:13.340 --> 00:03:13.520 +know the canvas mode but and what you see is + +00:03:19.540 --> 00:03:20.040 +the is an extension of that canvas mode which + +00:03:25.440 --> 00:03:25.940 +uses a symbol library. + +00:03:31.980 --> 00:03:32.300 +And so The only difference is you press + +00:03:34.160 --> 00:03:34.660 +capital L to open up that symbol library. + +00:03:37.700 --> 00:03:37.840 +In this case, this symbol library happens to + +00:03:41.380 --> 00:03:41.720 +be just a library of electronic symbols. + +00:03:44.640 --> 00:03:44.820 +It can be any category of symbols and then + +00:03:47.600 --> 00:03:48.100 +you and use it to draw on your, + +00:03:50.640 --> 00:03:51.140 +in the canvas major mode. + +00:04:02.240 --> 00:04:02.540 +Next question is, I have seen your blog post + +00:04:04.700 --> 00:04:04.960 +with some of these features But can you link + +00:04:06.280 --> 00:04:06.420 +to the repo where you are doing the + +00:04:07.940 --> 00:04:08.440 +development for these packages? + +00:04:18.899 --> 00:04:19.200 +Sure, I can do that Most of these are + +00:04:20.279 --> 00:04:20.779 +available on my blogs. + +00:04:26.200 --> 00:04:26.480 +Typically the Reddit post always has a link + +00:04:31.480 --> 00:04:31.680 +to my blog. But I'll post it in this 1 as + +00:04:31.680 --> 00:04:32.180 +well. + +00:04:48.480 --> 00:04:48.700 +[Speaker 0]: I'll quickly note that we have about 4 more + +00:04:52.540 --> 00:04:52.800 +minutes of live Q&A, but if folks have more + +00:04:55.320 --> 00:04:55.720 +questions, they're welcome to either continue + +00:04:59.060 --> 00:04:59.240 +asking on the pad or come join us here on Big + +00:05:02.080 --> 00:05:02.220 +Blue Button and continue chatting once the + +00:05:03.440 --> 00:05:03.800 +stream moves on to the next talk. + +00:05:03.940 --> 00:05:04.440 +Thank you. + +00:05:13.360 --> 00:05:13.860 +[Speaker 1]: Yes, so here's the link. + +00:05:23.240 --> 00:05:23.560 +And so right now, all of my development goes + +00:05:26.360 --> 00:05:26.600 +into a single development branch in this + +00:05:28.940 --> 00:05:29.140 +repository. But depending on the feature that + +00:05:31.500 --> 00:05:31.680 +you're looking at, you can look at that + +00:05:33.820 --> 00:05:33.960 +particular post and that post will have a + +00:05:37.120 --> 00:05:37.320 +link to the specific files that include the + +00:05:37.320 --> 00:05:37.820 +changes. + +00:06:24.236 --> 00:06:24.304 +Okay, there's a feedback. + +00:06:26.520 --> 00:06:26.740 +Thank you for showing so many new + +00:06:27.500 --> 00:06:28.000 +possibilities with Emacs. + +00:06:30.960 --> 00:06:31.460 +I'm glad you like those possibilities. + +00:06:32.540 --> 00:06:32.760 +And hopefully, you know, + +00:06:34.540 --> 00:06:34.740 +with Emacs, the possibilities are really + +00:06:38.480 --> 00:06:38.980 +endless. So I really encourage more people to + +00:06:41.120 --> 00:06:41.620 +explore it and, you know, + +00:06:49.280 --> 00:06:49.780 +try things that people have so far only been + +00:06:52.160 --> 00:06:52.660 +using other applications for. + +00:06:59.580 --> 00:07:00.080 +The next question is coming up. + +00:07:07.540 --> 00:07:08.040 +Okay, the PDF form filling is especially + +00:07:10.200 --> 00:07:10.400 +interesting. I would love to do my taxes in + +00:07:16.400 --> 00:07:16.620 +Emacs. Yes, In most cases you should be able + +00:07:18.900 --> 00:07:19.400 +to do it unless there are a lot of JavaScript + +00:07:20.500 --> 00:07:21.000 +involved with the PDF. + +00:07:24.800 --> 00:07:24.960 +For a simple form, you should be able to do + +00:07:24.960 --> 00:07:25.460 +it. + +00:08:19.480 --> 00:08:19.640 +[Speaker 0]: Okay, we have about 1 minute remaining on the + +00:08:21.660 --> 00:08:22.000 +live stream. If folks have any other + +00:08:24.960 --> 00:08:25.120 +questions, please do continue posting on the + +00:08:27.540 --> 00:08:27.800 +pad or come and join BigBlueButton with an + +00:08:28.940 --> 00:08:29.140 +ad. And thanks again, Adam, + +00:08:30.880 --> 00:08:31.080 +for a great talk and for the discussions and + +00:08:31.560 --> 00:08:32.059 +questions and answers. + +00:08:36.100 --> 00:08:36.600 +[Speaker 1]: Great, thanks. diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt new file mode 100644 index 00000000..58121436 --- /dev/null +++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt @@ -0,0 +1,56 @@ +WEBVTT + + +00:00:00.780 --> 00:03:46.400 +Draw and scribble in GNU Emacs + +00:03:46.400 --> 00:05:20.139 +SVG Symbols library + +00:05:20.140 --> 00:08:03.367 +GNU Emacs: A multimedia editor + +00:08:03.367 --> 00:09:34.900 +Fill PDF form using GNU Emacs + +00:09:34.900 --> 00:11:10.439 +Desktop and window management in GNU Emacs + +00:11:10.440 --> 00:11:53.033 +Screen mirroring in GNU Emacs + +00:11:53.033 --> 00:12:25.533 +Swipe for Text Input in GNU Emacs + +00:12:25.533 --> 00:12:59.433 +Formula Editor in GNU Emacs + +00:12:59.433 --> 00:13:09.433 +Transliteration in Emacs + +00:13:09.433 --> 00:13:40.000 +Social Media client - Tumblr, Reddit + +00:13:40.000 --> 00:13:49.567 +Comics Builder + +00:13:49.567 --> 00:13:59.567 +Matching game + +00:13:59.567 --> 00:14:10.767 +Interactive XPath Builder in GNU Emacs + +00:14:10.767 --> 00:14:35.233 +Interactive JSON Builder in GNU Emacs + +00:14:35.233 --> 00:15:26.133 +GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter + +00:15:26.133 --> 00:16:11.640 +Generate C header + +00:16:11.640 --> 00:17:07.639 +C Rename symbols + +00:17:07.640 --> 00:20:30.740 +SQL (offline) diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt new file mode 100644 index 00000000..1f27ce57 --- /dev/null +++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt @@ -0,0 +1,649 @@ +WEBVTT captioned by bhavin192, checked by sachac + +NOTE Draw and scribble in GNU Emacs + +00:00:00.780 --> 00:00:02.900 +Hello. In this video, we will look at + +00:00:02.900 --> 00:00:07.167 +drawing and scribbling in Emacs using SVG. + +00:00:07.167 --> 00:00:10.067 +Let's start with `canvas-mode`. + +00:00:10.067 --> 00:00:17.539 +We will define the width and the height. + +00:00:17.540 --> 00:00:19.333 +The default is polyline, + +00:00:19.333 --> 00:00:23.733 +which means you can scribble anything that you want. + +00:00:23.733 --> 00:00:30.299 +Very handy for taking quick notes. + +00:00:30.300 --> 00:00:32.699 +Now we will look at + +00:00:32.700 --> 00:00:46.333 +drawing a triangle using some lines. + +00:00:46.333 --> 00:00:57.267 +Okay. Now let's draw a circle. + +00:00:57.267 --> 00:00:58.900 +You can use the mouse to adjust + +00:00:58.900 --> 00:01:02.859 +the radius of the circle. + +00:01:02.860 --> 00:01:04.333 +There is some problem with ellipse, + +00:01:04.333 --> 00:01:07.939 +we will look at it at the end of the video. + +00:01:07.940 --> 00:01:11.767 +Now let's put up some text, + +00:01:11.767 --> 00:01:15.067 +a typical "Hello World". + +00:01:15.067 --> 00:01:19.879 +Size, let's do a 20 font size, + +00:01:19.880 --> 00:01:32.359 +and we will use the default font family. + +00:01:32.360 --> 00:01:37.433 +Next, we will look at undoing what we have drawn. + +00:01:37.433 --> 00:01:43.067 +Just press u for deleting the last drawn object. + +00:01:43.067 --> 00:01:45.799 +And you can continue pressing + +00:01:45.800 --> 00:01:51.959 +u for consecutive deletions. + +00:01:51.960 --> 00:01:54.533 +You can also make a selection of the objects + +00:01:54.533 --> 00:01:57.700 +on the screen using your mouse and then press u. + +00:01:57.700 --> 00:02:02.599 +This will delete all the objects in one go. + +00:02:02.600 --> 00:02:06.659 +Now we are looking at stroke color. + +00:02:06.660 --> 00:02:08.633 +We will use a brown stroke color + +00:02:08.633 --> 00:02:12.879 +for drawing our objects. + +00:02:12.880 --> 00:02:20.419 +Next, let's look at stroke width. + +00:02:20.420 --> 00:02:27.979 +We will use a width of 5. + +00:02:27.980 --> 00:02:41.619 +Next, let's fill up the objects with a fill color. + +00:02:41.620 --> 00:02:47.159 +Now we will look at zoom. + +00:02:47.160 --> 00:02:50.119 +Use the mouse to select a region and zoom. + +00:02:50.120 --> 00:02:54.359 +You can also use +, - for zooming in and out. + +00:02:54.360 --> 00:03:07.133 +Press 0 for resetting the zoom. + +00:03:07.133 --> 00:03:14.539 +Next, let's save the file, + +00:03:14.540 --> 00:03:19.667 +and q or Enter for exiting the canvas-mode. + +00:03:19.667 --> 00:03:23.760 +Now we will open the file in Emacs itself. + +00:03:25.220 --> 00:03:26.179 +You can see the file, + +00:03:26.180 --> 00:03:32.000 +you can do Control-c Control-c (`C-c C-c`). + +00:03:32.000 --> 00:03:44.419 +Finally, we look at ellipse. + +00:03:44.420 --> 00:03:46.400 +That's all for this video. Thanks! + +NOTE SVG Symbols library + +00:03:46.400 --> 00:03:48.333 +Hello. In this video, we will draw + +00:03:48.333 --> 00:03:52.067 +schematics using symbols from SVG library in Emacs. + +00:03:52.067 --> 00:03:55.000 +Press capital L to activate the symbol library + +00:03:55.000 --> 00:03:57.867 +that you can see on the right hand side, + +00:03:57.867 --> 00:04:01.959 +and place the symbol on the canvas. + +00:04:01.960 --> 00:04:06.639 +Let's add another register to this diagram. + +00:04:06.640 --> 00:04:11.819 +You can press capital R to rotate the symbol. + +00:04:11.820 --> 00:04:17.239 +Let's place it on the canvas. + +00:04:17.240 --> 00:04:31.667 +Now we will add a voltage source to the circuit. + +00:04:31.667 --> 00:04:33.179 +To connect the symbols, + +00:04:33.180 --> 00:04:36.967 +we will have to use some connecting wires. + +00:04:36.967 --> 00:04:39.467 +For that, press capital W + +00:04:39.467 --> 00:04:46.919 +to activate the connection mode. + +00:04:46.920 --> 00:04:48.567 +Click anywhere on the canvas + +00:04:48.567 --> 00:04:53.133 +to draw intermediate points, and press Esc + +00:04:53.133 --> 00:05:00.033 +to exit that particular connection. + +00:05:00.033 --> 00:05:16.633 +Let's connect other symbols too. + +00:05:16.633 --> 00:05:20.139 +That's all for this video. Thanks. + +NOTE GNU Emacs: A multimedia editor + +00:05:20.140 --> 00:05:22.167 +Hello. In this video, we will look at + +00:05:22.167 --> 00:05:24.933 +some basic multimedia editing using Emacs. + +00:05:24.933 --> 00:05:27.459 +Let's start a media-edit session. + +00:05:27.460 --> 00:05:32.000 +Let's open a video file. + +00:05:32.000 --> 00:05:34.100 +The left-hand side is your viewer area, + +00:05:34.100 --> 00:05:36.700 +and the right-hand side is your track area. + +00:05:36.700 --> 00:05:39.667 +In the track area, you can use normal Emacs + +00:05:39.667 --> 00:05:42.039 +text editing movements. + +00:05:42.040 --> 00:05:48.167 +Now press `C-c r` to refresh the viewer mode + +00:05:48.167 --> 00:05:52.767 +with the exact time frame. + +00:05:52.767 --> 00:05:59.433 +Now press SPC to play or pause the video. + +00:05:59.433 --> 00:06:03.233 +This looks like an interesting point in the video, + +00:06:03.233 --> 00:06:11.433 +let's track it and split it. Press Enter to do that. + +00:06:11.433 --> 00:06:20.733 +We will extract some 10 seconds of this video. + +00:06:20.733 --> 00:06:23.233 +Let's use this. + +00:06:23.233 --> 00:06:26.300 +Now go here and delete all these lines. + +00:06:26.300 --> 00:06:44.133 +Let's review our edited clip. + +00:06:44.133 --> 00:06:51.833 +Looks good! Now press e to export the video. + +00:06:51.833 --> 00:06:57.559 +Provide an output file name. + +00:06:57.560 --> 00:07:04.433 +This will use FFmpeg to convert, and you can + +00:07:04.433 --> 00:07:16.967 +output to any file format supported by FFmpeg. + +00:07:16.967 --> 00:07:21.900 +Okay. Let's open up shell and view this + +00:07:21.900 --> 00:07:57.159 +video file in an external video player. + +00:07:57.160 --> 00:08:03.367 +That's all for this video. Thanks. + +NOTE Fill PDF form using GNU Emacs + +00:08:03.367 --> 00:08:05.567 +Hello. In this video, we will look at + +00:08:05.567 --> 00:08:09.760 +editing a PDF form using GNU Emacs. + +00:08:09.760 --> 00:08:13.840 +To start, we have to enable the annotation. + +00:08:13.840 --> 00:08:18.533 +Then we can use Tab to move forward and Shift+Tab + +00:08:18.533 --> 00:08:22.480 +to move backwards through the fields. + +00:08:22.480 --> 00:08:25.967 +To edit a field, we press e. + +00:08:25.967 --> 00:08:33.580 +So let's edit a text box. We'll call it 'city'. + +00:08:33.580 --> 00:08:35.840 +Next, we will edit a drop-down. + +00:08:35.840 --> 00:08:38.680 +Again, press e, and you get a select. + +00:08:38.680 --> 00:08:45.833 +Use the Minibuffer to select one of the values. + +00:08:45.833 --> 00:08:48.500 +Let's select 'France'. + +08:48.500 --> 00:08:52.180 +Now let's edit a radio box. + +08:52.180 --> 00:08:55.899 +A checkbox or a radio box can be toggled using t. + +00:08:55.900 --> 00:08:58.660 +You can disable… + +08:58.660 --> 00:09:05.140 +Now let's save the file, `doc-view-save-form`. + +00:09:05.140 --> 00:09:08.360 +It will ask for a file name. + +00:09:08.360 --> 00:09:13.400 +Let's call it `filled1.pdf`. If the file exists, + +00:09:13.400 --> 00:09:17.260 +it will ask you if you want to overwrite. + +09:17.260 --> 00:09:21.460 +Now let's verify this new file. + +09:21.460 --> 00:09:27.160 +In Firefox, we'll copy this file name, call it filled1. + +00:09:27.160 --> 00:09:29.100 +Let's verify the values. + +09:29.100 --> 00:09:32.620 +You have city, France and Driving License selected. + +09:32.620 --> 00:09:34.900 +That's all for this video. Thanks. + +NOTE Desktop and window management in GNU Emacs + +09:34.900 --> 00:09:37.659 +Hello. In this video, we will look at + +00:09:37.660 --> 00:09:40.460 +desktop and window management in GNU Emacs. + +09:40.460 --> 00:09:47.740 +We'll start with `task-view`. + +09:47.740 --> 00:09:50.467 +Top row shows all the desktops, + +00:09:50.467 --> 00:09:54.400 +and rest of the images are the active windows + +00:09:54.400 --> 00:09:59.300 +in that particular desktop. + +00:09:59.300 --> 00:10:09.159 +You can tap to select + +00:10:09.160 --> 00:10:13.320 +and double tap to activate a particular window. + +00:10:13.320 --> 00:10:16.767 +You can use m to move selected windows + +00:10:16.767 --> 00:10:25.099 +to any of the desktops at the top. + +00:10:25.100 --> 00:10:29.320 +Let's check the third desktop. + +00:10:29.320 --> 00:10:49.980 +Let's bring it back to the second desktop. + +10:49.980 --> 00:10:51.300 +The best part, + +10:51.300 --> 00:10:54.799 +you can select multiple windows + +00:10:54.800 --> 00:10:59.979 +and form a group by pressing g. + +00:10:59.980 --> 00:11:04.867 +Then you can select any of the windows + +00:11:04.867 --> 00:11:07.639 +in this group to activate the complete group. + +00:11:07.640 --> 00:11:10.439 +That's all for this video. Thanks. + +NOTE Screen mirroring in GNU Emacs + +00:11:10.440 --> 00:11:12.433 +Hello. In this video, we will look at + +00:11:12.433 --> 00:11:14.279 +screen mirroring using GNU Emacs. + +00:11:14.280 --> 00:11:18.779 +Run `wfd`. Select an interface. + +00:11:18.780 --> 00:11:20.967 +Now it will scan for all the available devices + +00:11:20.967 --> 00:11:24.800 +for screen mirroring. + +00:11:24.800 --> 00:11:30.399 +I'll select my TV, which is an LG WebOS TV. + +00:11:30.400 --> 00:11:38.720 +If you don't decline, it will start streaming. + +00:11:38.720 --> 00:11:45.140 +Let's change some buffer to check the visuals. + +11:45.140 --> 00:11:50.219 +To terminate the session, just click on quit. + +00:11:50.220 --> 00:11:53.033 +That's all for this video. Thanks. + +NOTE Swipe for Text Input in GNU Emacs + +00:11:53.033 --> 00:12:25.533 +[Using Sweep to swipe and type "as you like it."] + +NOTE Formula Editor in GNU Emacs + +00:12:25.533 --> 00:12:39.900 +[Formula Editor] + +00:12:39.900 --> 00:12:45.033 +[Typing fractions in the formula] + +00:12:45.033 --> 00:12:59.433 +[Adding brackets and an exponent] + +NOTE Transliteration in Emacs + +00:12:59.433 --> 00:13:05.200 +[Hindi (Devanagari script) Phonetic typing] + +00:13:05.200 --> 00:13:09.433 +[Phonetic typing Gujarati, Bangla, Kannada, and Tamil] + +NOTE Social Media client - Tumblr, Reddit + +00:13:09.433 --> 00:13:19.533 +[Browsing Reddit in Emacs] + +00:13:19.533 --> 00:13:29.533 +[Browsing Tumblr in Emacs] + +00:13:29.533 --> 00:13:40.000 +[Browsing X (Twitter) in Emacs] + +NOTE Comics Builder + +00:13:40.000 --> 00:13:49.567 +[Generating comic from a text script] + +NOTE Matching game + +00:13:49.567 --> 00:13:59.567 +[Matching color names with color boxes] + +NOTE Interactive XPath Builder in GNU Emacs + +00:13:59.567 --> 00:14:01.833 +[Running `xpath-builder` on an XML file] + +00:14:01.833 --> 00:14:10.767 +[Filtering `title`, `para`, and `author` from the XML] + +NOTE Interactive JSON Builder in GNU Emacs + +00:14:10.767 --> 00:14:29.200 +[Filtering `father`, `father.name`, `children` + +00:14:29.200 --> 00:14:35.233 +`children[1]` from a JSON using JSON Builder] + +NOTE GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter + +00:14:35.233 --> 00:14:37.633 +Hello. In this video, we will look at + +00:14:37.633 --> 00:14:41.659 +generating getters and setters in Java using Emacs. + +00:14:41.660 --> 00:14:46.233 +We will run `srecode-getset-dialog`. + +00:14:46.233 --> 00:14:48.767 +We will get an option to select particular fields, + +00:14:48.767 --> 00:14:51.833 +you can expand and collapse. + +00:14:51.833 --> 00:14:54.100 +You can select all or deselect all, + +00:14:54.100 --> 00:14:56.386 +or you can choose any particular getter. + +00:14:56.386 --> 00:15:02.633 +So let's do protected version of this. Here you go. + +00:15:02.633 --> 00:15:06.067 +If you want to generate for other fields, + +00:15:06.067 --> 00:15:08.300 +you can re-run it. + +00:15:08.300 --> 00:15:11.267 +You can check the one that you have already + +00:15:11.267 --> 00:15:13.100 +generated is not there. + +00:15:13.100 --> 00:15:22.300 +Now select all, and you can see rest of the + +00:15:22.300 --> 00:15:23.933 +getters and setters have been generated. + +00:15:23.933 --> 00:15:26.133 +That's all for this video. Thanks. + +NOTE Generate C header + +00:15:26.133 --> 00:16:11.640 +[Generating C headers using `srecode-gen-header`] + +NOTE C Rename symbols + +00:16:11.640 --> 00:16:13.833 +Hello. In this video, we will look at + +00:16:13.833 --> 00:16:17.633 +renaming method across multiple files in a project. + +00:16:17.633 --> 00:16:24.639 +Let's start with `semantic-symref-symbol`. + +00:16:24.640 --> 00:16:26.800 +Now we have the references. + +00:16:26.800 --> 00:16:35.399 +Let's use the menu to open all these occurrences. + +00:16:35.400 --> 00:16:38.433 +To rename it, we have to use + +00:16:38.433 --> 00:16:41.919 +"Rename Symbol in Open hits." + +00:16:41.920 --> 00:16:46.439 +Let's rename it to underscore 1 (`_1`). + +00:16:46.440 --> 00:16:57.719 +We will verify it by compiling the project. + +00:16:57.720 --> 00:17:00.300 +Let's open the `*Messages*` buffer to see the results + +00:17:00.300 --> 00:17:04.167 +more clearly. No errors. + +00:17:04.167 --> 00:17:07.639 +That's all for this video. Thanks. + +NOTE SQL (offline) + +00:17:07.640 --> 00:17:09.733 +Hello. In this video, we will look at + +00:17:09.733 --> 00:17:12.439 +SQL editing with Semantic. + +00:17:12.440 --> 00:17:16.619 +We will define a schema in this SQL document. + +00:17:16.620 --> 00:17:27.000 +Let's create a table. + +00:17:27.000 --> 00:17:30.267 +We get already existing tables + +00:17:30.267 --> 00:17:38.533 +in the current document. + +00:17:38.533 --> 00:17:57.033 +It also supports auto-completion of some keywords. + +00:17:57.033 --> 00:18:00.900 +Now we can do some queries on the tables. + +00:18:00.900 --> 00:18:03.333 +We have `SELECT` as the keyword or the SQL, + +00:18:03.333 --> 00:18:06.833 +so we will select the SQL. + +00:18:06.833 --> 00:18:13.559 +Here we have all the tables existing in this schema. + +00:18:13.560 --> 00:18:25.633 +We can also use an alias for completions. + +00:18:25.633 --> 00:18:31.267 +Now let's look at a more complex example. + +00:18:31.267 --> 00:18:43.367 +We will try to do a join on two tables. + +00:18:43.367 --> 00:19:06.600 +Let's add a `WHERE` clause. + +00:19:06.600 --> 00:19:23.333 +Next, let's do insert. + +00:19:23.333 --> 00:19:27.967 +You can just click on Tab to go to the next field. + +00:19:27.967 --> 00:19:30.700 +Let's fill in the columns. + +00:19:30.700 --> 00:19:32.667 +And do a Tab to go to the values + +00:19:32.667 --> 00:19:37.000 +and add the corresponding values. + +00:19:37.000 --> 00:19:48.033 +Finally, an update. + +00:19:48.033 --> 00:20:00.700 +Now we will try to delete this + +00:20:00.700 --> 00:20:07.333 +with a `WHERE col11 = 4`. + +00:20:07.333 --> 00:20:16.267 +Lastly, let's try dropping the table. + +00:20:16.267 --> 00:20:21.867 +That's all for this video. Thanks. + +00:20:21.867 --> 00:20:30.740 +Slide with the text "Let's Make Computing Personal." diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt new file mode 100644 index 00000000..44f645f9 --- /dev/null +++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt @@ -0,0 +1,893 @@ +WEBVTT + + +00:00:00.060 --> 00:00:01.400 +[Speaker 0]: All right, I've started the recording, + +00:00:01.400 --> 00:00:03.240 +so Sasha, you don't need to worry about this. + +00:00:03.240 --> 00:00:04.500 +Hi Jeremy, how are you doing? + +00:00:04.779 --> 00:00:07.160 +[Speaker 1]: I'm doing great, how about you? + +00:00:08.039 --> 00:00:09.380 +[Speaker 0]: I am also doing great, + +00:00:09.380 --> 00:00:11.780 +I am feeling replenished after this lunch + +00:00:11.780 --> 00:00:14.179 +break and I am happy to go back for 4 more + +00:00:15.900 --> 00:00:16.940 +[Speaker 1]: Me too. Let me + +00:00:14.179 --> 00:00:17.303 +[Speaker 0]: hours of conferences. just, + +00:00:17.303 --> 00:00:20.200 +yeah great, Let me just put up the questions. + +00:00:20.660 --> 00:00:22.440 +So Jeremy is going to read the questions and + +00:00:22.440 --> 00:00:24.380 +answer them and I will be doing jazz hands in + +00:00:24.380 --> 00:00:26.599 +the background or provide any bits of + +00:00:26.599 --> 00:00:28.860 +information I may, considering that Orgrim + +00:00:28.860 --> 00:00:30.080 +has been mentioned during the presentation + +00:00:30.080 --> 00:00:31.980 +and everyone's going to want to ask me. + +00:00:35.640 --> 00:00:37.940 +at... Show me? Yeah, go. + +00:00:35.080 --> 00:00:39.280 +[Speaker 1]: So I'm looking I'm looking at the, + +00:00:39.280 --> 00:00:41.160 +do you think the line numbers for writing + +00:00:41.160 --> 00:00:43.220 +documents is kind of a distraction, + +00:00:43.260 --> 00:00:47.280 +especially for notes? No, + +00:00:47.860 --> 00:00:50.300 +I do software development and that left + +00:00:51.180 --> 00:00:53.160 +fringe is kind of invisible, + +00:00:53.680 --> 00:00:56.260 +but I do like to use jump to line. + +00:00:56.320 --> 00:00:59.580 +So I just bind that to control L and it's + +00:00:59.580 --> 00:01:01.200 +helpful to just see that. + +00:01:02.980 --> 00:01:04.900 +So no, I haven't noticed that. + +00:01:05.500 --> 00:01:07.540 +There are other ways to jump around in Emacs, + +00:01:07.540 --> 00:01:10.140 +but I like to have many different ways. + +00:01:11.000 --> 00:01:17.120 +So, yeah. Then how do you manage private and + +00:01:17.120 --> 00:01:18.840 +public data with your Zettelkasten? + +00:01:20.820 --> 00:01:23.440 +1 of my blockers on putting my Zettelkasten + +00:01:23.600 --> 00:01:26.240 +on the web is I don't want everything to be + +00:01:26.240 --> 00:01:28.860 +public, especially fleeting notes. + +00:01:31.360 --> 00:01:36.500 +So 1 thing is I only explicitly export a file + +00:01:36.560 --> 00:01:39.380 +to Hugo and I have that, + +00:01:39.380 --> 00:01:41.500 +I can like, I can export this. + +00:01:41.520 --> 00:01:43.380 +That doesn't show up very well. + +00:01:44.540 --> 00:01:50.280 +So it's export probably export org to take on + +00:01:50.280 --> 00:01:52.860 +rules and we'll export the buffer. + +00:01:53.760 --> 00:01:57.040 +And then any that I referenced, + +00:01:57.080 --> 00:01:58.300 +like these are all links, + +00:01:58.660 --> 00:02:04.380 +any notes that are not public will be + +00:02:04.380 --> 00:02:06.480 +exported as the text, but there won't be a + +00:02:06.480 --> 00:02:10.160 +link to it. So it's having the very + +00:02:10.160 --> 00:02:12.140 +deliberate, this is going up. + +00:02:13.040 --> 00:02:15.080 +And so I send it over into Hugo, + +00:02:15.900 --> 00:02:17.200 +which is its own repository, + +00:02:18.700 --> 00:02:21.300 +and either massage it there or whatnot. + +00:02:22.800 --> 00:02:25.760 +Is that any further questions on that 1? + +00:02:27.980 --> 00:02:30.200 +[Speaker 0]: I don't think so. + +00:02:33.940 --> 00:02:36.940 +[Speaker 1]: Is there anything special you're using from + +00:02:36.940 --> 00:02:38.960 +org to Hugo markdown? This looks like a + +00:02:38.960 --> 00:02:41.520 +really nice setup. I like to give it a try. + +00:02:43.840 --> 00:02:47.420 +Yes, there I have a bespoke build process. + +00:02:48.900 --> 00:02:50.100 +Having started in WordPress, + +00:02:50.280 --> 00:02:51.320 +working through Jekyll, + +00:02:51.460 --> 00:02:54.200 +going to Hugo, and then switching from + +00:02:54.200 --> 00:02:57.740 +Markdown to org mode, I've backed into this + +00:02:57.740 --> 00:02:59.180 +private public Zettelkasten, + +00:03:00.140 --> 00:03:04.840 +which is really nice. And I have added quite + +00:03:04.840 --> 00:03:08.000 +a bit of code. There's my dog. + +00:03:15.520 --> 00:03:16.020 +[Speaker 0]: blogging. + +00:03:10.640 --> 00:03:20.720 +[Speaker 1]: In my So I have, how do I export like side + +00:03:20.720 --> 00:03:22.800 +notes because I want I have marginalia + +00:03:23.200 --> 00:03:24.780 +instead of like the footnotes, + +00:03:24.940 --> 00:03:27.080 +but I still use org mode footnotes. + +00:03:27.520 --> 00:03:29.700 +And so I've got a bunch of these things and + +00:03:29.700 --> 00:03:32.800 +this is all available up on GitHub And I'll + +00:03:32.800 --> 00:03:34.700 +provide a link in the document. + +00:03:36.740 --> 00:03:42.280 +Yeah, so there's quite a bit of making the + +00:03:42.280 --> 00:03:44.440 +export work how I want it. + +00:03:45.040 --> 00:03:48.840 +And I've been kind of fiddling with also + +00:03:48.840 --> 00:03:51.560 +improving like LaTeX or PDF export. + +00:03:54.720 --> 00:03:59.080 +So yeah, I have a long running to do item to + +00:03:59.480 --> 00:04:02.880 +fully lay out my bespoke build process. + +00:04:02.920 --> 00:04:04.680 +Because once it gets to Hugo, + +00:04:04.960 --> 00:04:07.440 +there's also additional work that I do to + +00:04:07.440 --> 00:04:11.820 +compile what is kind of a personal, + +00:04:12.340 --> 00:04:13.620 +like a digital garden-ish, + +00:04:15.160 --> 00:04:16.940 +it's really a blog focused 1. + +00:04:18.160 --> 00:04:28.080 +So yeah, it's at Jeremy F on GitHub at dot + +00:04:28.080 --> 00:04:33.060 +Emacs. And you'll be looking for JF + +00:04:33.200 --> 00:04:36.300 +blogging.l that has some of this. + +00:04:37.360 --> 00:04:42.580 +Also jforgmode.l will have some of that. + +00:04:45.400 --> 00:04:49.540 +Yeah, I wanna circle back to that, + +00:04:49.540 --> 00:04:51.560 +anything to prevent private links from + +00:04:51.560 --> 00:04:54.220 +getting accidentally being made publicly + +00:04:54.560 --> 00:05:02.440 +accessible. Yes. So previous to using denote, + +00:05:02.440 --> 00:05:06.480 +I also used org-roam. So I have this idea of + +00:05:06.480 --> 00:05:12.560 +a node in org-roam has roam refs. + +00:05:13.360 --> 00:05:15.660 +And org-roam is much more robust about that. + +00:05:15.660 --> 00:05:17.880 +So anytime you mention a ref, + +00:05:18.740 --> 00:05:20.300 +it will count it as a backlink. + +00:05:20.820 --> 00:05:23.700 +So for example, if my node was my blog, + +00:05:23.860 --> 00:05:25.700 +take on rules, anytime, + +00:05:26.000 --> 00:05:30.420 +anywhere in my org Rome repository, + +00:05:30.700 --> 00:05:32.120 +I mentioned takeonrules.com, + +00:05:33.280 --> 00:05:34.980 +it would treat it as a backlink. + +00:05:35.740 --> 00:05:37.980 +So from that Rome refs, + +00:05:39.780 --> 00:05:45.640 +I have a, I will interrogate, + +00:05:45.720 --> 00:05:47.800 +and this is not the function for I will look + +00:05:47.800 --> 00:05:50.940 +at the node to see does it have a Rome ref + +00:05:51.040 --> 00:05:53.760 +and if it does I will treat it as a public + +00:05:53.760 --> 00:05:58.180 +link. So I don't I haven't bled out any + +00:05:59.060 --> 00:06:01.620 +private information because again going back + +00:06:01.620 --> 00:06:06.000 +to I only publish a document and the document + +00:06:06.340 --> 00:06:09.060 +I'm explicitly doing so and then my process + +00:06:09.220 --> 00:06:12.720 +filters out any links that do not have public + +00:06:12.720 --> 00:06:17.140 +URLs. It will just dump it in there as maybe + +00:06:17.140 --> 00:06:20.640 +a span with a ref class of it so that I can + +00:06:20.640 --> 00:06:22.840 +kind of know that that came from there. + +00:06:29.600 --> 00:06:33.740 +Yes, So the font I am using is, + +00:06:36.820 --> 00:06:38.460 +so this is another font. + +00:06:38.620 --> 00:06:41.140 +What font were you using in EWW? + +00:06:42.940 --> 00:06:50.420 +I think I'm using IOS Becca and ET Bembo. + +00:06:51.700 --> 00:06:53.180 +[Speaker 0]: Okay, show me your EWW. + +00:06:53.560 --> 00:06:55.360 +If we are doing full ricing setup, + +00:06:55.440 --> 00:06:58.440 +I can recognize Yosefka just by looking at + +00:06:58.440 --> 00:06:58.940 +it. + +00:06:50.640 --> 00:07:01.300 +[Speaker 1]: So let's... Yeah, so yeah, + +00:07:01.300 --> 00:07:06.240 +ET Bembo, I'm using these 2 fonts as kind of + +00:07:06.240 --> 00:07:09.260 +my anchor. So the variable pitch is ETBembo. + +00:07:10.240 --> 00:07:13.640 +My blog started off with a Tufta style CSS + +00:07:14.100 --> 00:07:16.360 +and I really pared it down and got rid of any + +00:07:16.360 --> 00:07:19.940 +of the additional fonts because they can be + +00:07:19.940 --> 00:07:21.580 +used as trackers. And I'm like, + +00:07:21.580 --> 00:07:24.020 +nope, you decide what font you want for your + +00:07:24.020 --> 00:07:26.420 +browser. I don't need to tell you what looks + +00:07:26.420 --> 00:07:33.680 +good for you. Yeah, so the story of Take On + +00:07:33.680 --> 00:07:37.480 +Rules, I have to thank my partner and lovely + +00:07:37.480 --> 00:07:41.180 +wife for that. She kind of nudged me to do + +00:07:41.180 --> 00:07:43.080 +some blogging, and we spent some time + +00:07:43.080 --> 00:07:45.160 +thinking about it. And originally, + +00:07:45.160 --> 00:07:48.220 +it started off as writing about rules for + +00:07:48.700 --> 00:07:51.060 +role-playing games or tabletop games. + +00:07:51.820 --> 00:07:54.860 +And it has extended far beyond that. + +00:07:54.960 --> 00:07:56.760 +The blog, as I've shifted, + +00:07:56.920 --> 00:07:58.660 +as I think I mentioned in the presentation, + +00:07:59.060 --> 00:08:01.640 +as I've shifted towards an everything and + +00:08:01.640 --> 00:08:05.180 +nothing approach, the blog is anything I want + +00:08:05.180 --> 00:08:06.240 +to write about anymore. + +00:08:06.980 --> 00:08:09.440 +There's haikus up there with some regularity. + +00:08:10.080 --> 00:08:17.280 +So the name is now a relic of a past. + +00:08:18.340 --> 00:08:21.680 +So yeah, the thing and nothing is, + +00:08:22.360 --> 00:08:24.640 +and I put that in the about on my blog. + +00:08:25.640 --> 00:08:29.440 +So it's, I highly encourage like, + +00:08:29.440 --> 00:08:34.440 +I feel great. Once I like said, + +00:08:34.440 --> 00:08:36.740 +oh, I don't have to write this towards a + +00:08:36.740 --> 00:08:40.100 +topical blog post or like what the topic is, + +00:08:40.380 --> 00:08:44.120 +it freed it up. And I know that it comes at a + +00:08:44.800 --> 00:08:47.500 +potential compromise because it's very much + +00:08:47.500 --> 00:08:51.960 +me being a voice up there instead of + +00:08:51.960 --> 00:08:53.760 +something that is curated and filtered + +00:08:53.760 --> 00:08:56.060 +through a specific channel like I could have + +00:08:56.060 --> 00:08:59.340 +a technical blog but I decided I'm just gonna + +00:08:59.340 --> 00:09:02.420 +tag it as programming or emacs and let you + +00:09:02.420 --> 00:09:04.840 +find it and you can subscribe to the rss + +00:09:04.920 --> 00:09:07.360 +feeds of each tag that you find applicable + +00:09:10.120 --> 00:09:13.840 +[Speaker 0]: right thank you so we are we are at the last + +00:09:13.840 --> 00:09:16.100 +question on the pad but I see that some + +00:09:16.100 --> 00:09:18.480 +people have joined us on the blue button. + +00:09:18.480 --> 00:09:22.420 +So, hi everyone! We have about 6 minutes + +00:09:22.420 --> 00:09:24.220 +until we need to go to the next talk, + +00:09:24.220 --> 00:09:26.460 +but if anyone has a question on the blue + +00:09:26.460 --> 00:09:28.780 +button, I'm thinking about James who's joined + +00:09:28.780 --> 00:09:32.780 +us and who was kind enough to drop a thank + +00:09:32.780 --> 00:09:33.940 +you line on the blue button. + +00:09:33.940 --> 00:09:35.460 +Do you want to unmute yourself and ask a + +00:09:35.460 --> 00:09:39.520 +question maybe? I'm not putting pressure by + +00:09:39.520 --> 00:09:41.680 +the way, I don't feel like you need to but it + +00:09:41.870 --> 00:09:44.060 +just... I speak all the time otherwise I'm + +00:09:44.060 --> 00:09:45.720 +very happy to spend time with our speakers + +00:09:45.720 --> 00:09:48.700 +you know but you know EmacsConf it's about, + +00:09:49.400 --> 00:09:51.300 +as Sasha told you during the intro, + +00:09:51.540 --> 00:09:54.180 +it's about making people take things, + +00:09:54.240 --> 00:09:56.100 +brilliant things out of their mind and put + +00:09:56.100 --> 00:09:57.840 +them outside in the public. + +00:09:57.940 --> 00:10:00.660 +And for us, you know, we get to see the talk + +00:10:00.660 --> 00:10:01.720 +evolve, we talk with people. + +00:10:01.720 --> 00:10:03.840 +So for us we are already quite cognizant of + +00:10:03.840 --> 00:10:06.260 +the topic and the point is not for us hosts + +00:10:06.360 --> 00:10:09.780 +to ask questions, it's mostly for you to ask + +00:10:09.780 --> 00:10:11.580 +questions and then we worry about all the + +00:10:11.580 --> 00:10:12.940 +fancy stuff in the background. + +00:10:13.900 --> 00:10:16.080 +Otherwise you damn well know I will ask + +00:10:16.080 --> 00:10:18.660 +questions about org-roam, + +00:10:18.900 --> 00:10:20.460 +about links, and nodes in general, + +00:10:20.460 --> 00:10:22.100 +because that's my bread and butter. + +00:10:24.720 --> 00:10:27.440 +[Speaker 1]: Yeah, I should add, like, + +00:10:27.440 --> 00:10:31.820 +the process of migrating the data from a + +00:10:31.820 --> 00:10:35.220 +WordPress export to markdown to org mode by + +00:10:35.220 --> 00:10:39.680 +way of Pandoc was, it was really insightful + +00:10:39.720 --> 00:10:42.900 +to help me understand how I want the data to + +00:10:42.900 --> 00:10:47.580 +flow and how I could create a repository for + +00:10:47.580 --> 00:10:50.940 +me of information and 1 that I could then + +00:10:50.940 --> 00:10:52.540 +send out into the world, + +00:10:52.540 --> 00:10:53.600 +the public information, + +00:10:54.240 --> 00:10:58.160 +while not having to worry about the private + +00:10:58.460 --> 00:11:00.280 +things that I might want to keep. + +00:11:01.620 --> 00:11:04.240 +So it was that process of just working + +00:11:04.240 --> 00:11:08.940 +through it to reflect on how I'm writing and + +00:11:08.940 --> 00:11:11.360 +what I started using writing for. + +00:11:12.040 --> 00:11:14.040 +I think Richard Feynman said, + +00:11:14.040 --> 00:11:15.680 +no, writing is my thinking. + +00:11:15.680 --> 00:11:17.740 +What I wrote is thinking. + +00:11:18.240 --> 00:11:21.480 +So it has helped to really frame that. + +00:11:22.800 --> 00:11:24.440 +[Speaker 0]: Yeah, I mean, there's an interesting + +00:11:27.200 --> 00:11:29.220 +ambivalent relationship because it feels like + +00:11:29.220 --> 00:11:31.800 +writing helps thinking and thinking helps + +00:11:31.800 --> 00:11:35.340 +writing in a way and nowhere have I + +00:11:35.340 --> 00:11:37.920 +personally been more aware of this than when + +00:11:38.000 --> 00:11:41.000 +coming up with networks of notes because it + +00:11:41.000 --> 00:11:43.860 +really I mean you use whichever word you want + +00:11:43.860 --> 00:11:45.900 +you know a second brain a collection of notes + +00:11:45.900 --> 00:11:48.860 +a slip box a repository of notes whichever + +00:11:48.860 --> 00:11:52.080 +the tool you use the point at the end is to + +00:11:52.080 --> 00:11:54.000 +resonate with you. It's kind of like + +00:11:54.000 --> 00:11:57.280 +extending those moments of consciousness that + +00:11:57.280 --> 00:11:58.880 +you have when you take your notes, + +00:11:59.440 --> 00:12:02.780 +and you make the entire gradient available. + +00:12:04.260 --> 00:12:06.380 +Sorry, I heard Sasha whispering in my ear + +00:12:06.380 --> 00:12:08.360 +sometimes. It's pretty pleasant. + +00:12:09.520 --> 00:12:10.500 +It's really shocking. + +00:12:12.660 --> 00:12:15.040 +[Speaker 1]: Yeah, Aaron, you had a question. + +00:12:15.040 --> 00:12:17.440 +Do I use denote just for my blogs or do I use + +00:12:17.440 --> 00:12:18.660 +it for other purposes? + +00:12:19.940 --> 00:12:25.120 +I use denote for all of my note taking and + +00:12:25.520 --> 00:12:28.660 +almost, I think it's exclusively org mode + +00:12:28.920 --> 00:12:30.560 +that I, that I use it in. + +00:12:30.600 --> 00:12:33.400 +But what I really appreciated in the + +00:12:33.400 --> 00:12:37.500 +consideration that Proc put forward was the + +00:12:37.500 --> 00:12:40.940 +file name encodes the information that's + +00:12:40.940 --> 00:12:45.980 +relevant. So it has helped me be able to + +00:12:46.080 --> 00:12:48.580 +query by using things like ripgrep, + +00:12:49.220 --> 00:12:54.480 +well not ripgrep, tree or I forget any more + +00:12:54.480 --> 00:13:00.140 +what I use. But having that the file encodes + +00:13:00.300 --> 00:13:03.820 +useful information. And it's so much more + +00:13:03.820 --> 00:13:06.960 +relevant when I look at having worked at a + +00:13:06.960 --> 00:13:10.520 +university that rolled out Google Drive to + +00:13:10.520 --> 00:13:12.840 +everyone without any guidance on how to + +00:13:12.840 --> 00:13:16.120 +organize stuff. And I worked at a library and + +00:13:16.120 --> 00:13:19.540 +it was just a nightmare watching things show + +00:13:19.540 --> 00:13:22.840 +up where you could never find it again. + +00:13:23.240 --> 00:13:28.060 +So, file name, the file name having the date, + +00:13:28.380 --> 00:13:33.280 +having the title and having tags just made so + +00:13:33.280 --> 00:13:34.780 +much sense to be findable. + +00:13:36.820 --> 00:13:41.420 +And yeah, I really do just use org. + +00:13:41.740 --> 00:13:47.220 +But if I am going to make txt files or other + +00:13:47.220 --> 00:13:52.040 +files, I have started adopting that structure + +00:13:52.120 --> 00:13:52.840 +and format. + +00:13:56.840 --> 00:14:00.900 +[Speaker 0]: Right. Well, Jeremy, we have about 1 minute + +00:14:00.900 --> 00:14:03.080 +and 30 seconds left until we go on to the + +00:14:03.080 --> 00:14:05.140 +next talk. Do you have any final words + +00:14:05.140 --> 00:14:06.740 +regarding your presentation or maybe where + +00:14:06.740 --> 00:14:08.400 +people can find you? I know you've already + +00:14:08.400 --> 00:14:09.240 +mentioned this but... + +00:14:09.240 --> 00:14:13.160 +[Speaker 1]: Yeah, take on rules. I'm also on dice camp + +00:14:13.440 --> 00:14:18.080 +dice.campmastodon at take on rules and I've + +00:14:18.080 --> 00:14:22.080 +thought about emacs.h but we federate well So + +00:14:22.340 --> 00:14:27.560 +I appreciate that. And I can stay on and + +00:14:27.560 --> 00:14:29.680 +answer any further questions if folks have + +00:14:29.680 --> 00:14:30.180 +it. + +00:14:31.420 --> 00:14:34.860 +[Speaker 0]: Sure. So sorry. Sorry, + +00:14:34.860 --> 00:14:36.820 +I confused myself with the buttons talking to + +00:14:36.820 --> 00:14:38.960 +production and all. Well then, + +00:14:38.960 --> 00:14:41.260 +what I'm going to do is that the stream is + +00:14:41.260 --> 00:14:43.740 +going to move on to the next talk in about 50 + +00:14:43.740 --> 00:14:46.160 +seconds. If people want to join and ask any + +00:14:46.160 --> 00:14:49.160 +questions, feel free to join on the blue + +00:14:49.160 --> 00:14:51.380 +button. The link is on the talk page or on + +00:14:51.380 --> 00:14:54.480 +IRC. And feel free to hang out as long as you + +00:14:54.480 --> 00:14:56.160 +want to ask as many questions as you want to + +00:14:56.160 --> 00:14:58.180 +Jeremy. We are recording all of this and + +00:14:58.180 --> 00:15:00.540 +we'll be publishing this later on once again. + +00:15:01.120 --> 00:15:03.080 +And all that's left for me to do is to thank + +00:15:03.080 --> 00:15:05.580 +you so much, Jeremy, for your presentation + +00:15:05.740 --> 00:15:08.200 +and your answers. And I will see you another + +00:15:08.200 --> 00:15:08.700 +time. + +00:15:12.700 --> 00:15:14.840 +[Speaker 1]: So yeah, plasma strike. + +00:15:15.560 --> 00:15:18.500 +I'm not able to grant speaking powers. + +00:15:20.340 --> 00:15:22.160 +So if you wanted to type up something + +00:15:22.160 --> 00:15:22.660 +question-wise. + +00:15:24.000 --> 00:15:26.000 +[Speaker 0]: Oh, okay. I'll manage this in the background. + +00:15:26.000 --> 00:15:28.220 +So we're moving on to the next talk. + +00:15:28.500 --> 00:15:30.240 +We'll figure out the things about VBB, + +00:15:30.240 --> 00:15:32.940 +But in the meantime, enjoy the next talk. + +00:15:34.140 --> 00:15:35.460 +Bye. All right, Jeremy. + +00:15:35.460 --> 00:15:37.080 +We are now on the next talk. + +00:15:37.080 --> 00:15:39.240 +Sorry about having to mention multiple things + +00:15:39.240 --> 00:15:42.500 +at the same time. Speaking rights. + +00:15:42.500 --> 00:15:44.440 +I will try fixing this in the background. + +00:15:44.440 --> 00:15:46.120 +I need to get moving for the next talk, + +00:15:46.120 --> 00:15:48.040 +but I'll do it in the background and we'll + +00:15:48.040 --> 00:15:49.660 +let you know as soon as it's ready. + +00:15:40.440 --> 00:15:50.360 +[Speaker 1]: We're doing great. Okay. + +00:15:51.220 --> 00:15:52.320 +[Speaker 0]: Alright, bye bye Jeremy. diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt new file mode 100644 index 00000000..4c1fd05f --- /dev/null +++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt @@ -0,0 +1,26 @@ +WEBVTT + + +00:00:00.000 --> 00:00:57.119 +Intro + +00:00:57.120 --> 00:01:18.399 +How I got here + +00:01:18.400 --> 00:01:45.959 +Friction + +00:01:45.960 --> 00:02:15.919 +Domains for notes + +00:02:15.920 --> 00:02:55.439 +Demo + +00:02:55.440 --> 00:03:32.839 +Dabbrev and hippie-expand + +00:03:32.840 --> 00:07:49.159 +Links + +00:07:49.160 --> 00:08:53.160 +Conclusion diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt new file mode 100644 index 00000000..59b67e77 --- /dev/null +++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt @@ -0,0 +1,557 @@ +WEBVTT captioned by bala, checked by sachac + +NOTE Intro + +00:00:00.000 --> 00:00:04.559 +Hello everyone, I'm Jeremy Friesen, pronouns he/him, + +00:00:04.560 --> 00:00:05.879 +and today I'll be talking about + +00:00:05.880 --> 00:00:08.599 +how Emacs turbocharges my writing. + +00:00:08.600 --> 00:00:11.799 +Quick intro: I've been programming since 1998 + +00:00:11.800 --> 00:00:14.079 +and blogging since 2011. + +00:00:14.080 --> 00:00:16.639 +In May of 2020 I switched to Emacs, + +00:00:16.640 --> 00:00:19.919 +having previously used a long list of different editors. + +00:00:19.920 --> 00:00:23.039 +Curious about how Emacs impacted my writing, + +00:00:23.040 --> 00:00:25.559 +I wrote some stuff on my personal site and + +00:00:25.560 --> 00:00:30.399 +found that I blogged about 95 words per day prior to Emacs, + +00:00:30.400 --> 00:00:33.719 +and with Emacs I'm blogging about 340. + +00:00:33.720 --> 00:00:37.959 +Now, this is not a fair comparison, many things changed. + +00:00:37.960 --> 00:00:40.919 +A pandemic removed 2 hours of commute every day + +00:00:40.920 --> 00:00:44.199 +as a big contributor. + +00:00:44.200 --> 00:00:46.999 +Ultimately though, I've used Emacs and extended it + +00:00:47.000 --> 00:00:50.319 +to reduce barriers to capturing and writing and thinking, + +00:00:50.320 --> 00:00:53.319 +and I'm always on the lookout for minor refinements + +00:00:53.320 --> 00:00:57.119 +that help me stay in my thinking. + +NOTE How I got here + +00:00:57.120 --> 00:00:59.239 +How I got here was I started in WordPress, + +00:00:59.240 --> 00:01:02.599 +then I moved to Jekyll, and then to Hugo, + +00:01:02.600 --> 00:01:05.439 +and through that process I started writing in Markdown. + +00:01:05.440 --> 00:01:07.119 +And when I was learning Emacs, + +00:01:07.120 --> 00:01:09.359 +I also didn't want to learn Org Mode, + +00:01:09.360 --> 00:01:12.399 +it felt intimidating because it could do so many things. + +00:01:12.400 --> 00:01:15.519 +I later learned Org Mode grows with you, + +00:01:15.520 --> 00:01:18.399 +and that's where I'm at now. + +NOTE Friction + +00:01:18.400 --> 00:01:19.999 +But I didn't realize that friction + +00:01:20.000 --> 00:01:23.359 +between writing Markdown for my public blog + +00:01:23.360 --> 00:01:25.479 +and then adopting Org Mode locally + +00:01:25.480 --> 00:01:28.519 +for writing and time tracking and things like that. + +00:01:28.520 --> 00:01:31.119 +And also, where did I put things, + +00:01:31.120 --> 00:01:35.159 +because migrating the formats was just a little clunky. + +00:01:35.160 --> 00:01:38.199 +So ultimately I spent some time thinking about the data flow + +00:01:38.200 --> 00:01:39.519 +and where I would put things, + +00:01:39.520 --> 00:01:41.039 +this kind of pre-thinking, + +00:01:41.040 --> 00:01:45.959 +where does stuff go when it comes into and out of my brain. + +NOTE Domains for notes + +00:01:45.960 --> 00:01:49.399 +So I have many domains where I'll write towards. + +00:01:49.400 --> 00:01:51.119 +The ones for this presentation are going to be + +00:01:51.120 --> 00:01:54.159 +blog posts, epigraphs, glossary, and melange. + +00:01:54.160 --> 00:01:56.319 +Melange is, I don't know where it goes, + +00:01:56.320 --> 00:02:00.999 +but now I do, I just throw it in melange. + +00:02:01.000 --> 00:02:04.479 +So I began exploring Org Mode via Org Roam, + +00:02:04.480 --> 00:02:07.559 +but I've ultimately switched from Org Roam + +00:02:07.560 --> 00:02:10.639 +to the simplified Denote package. + +00:02:10.640 --> 00:02:13.199 +I didn't use a lot of the functionality + +00:02:13.200 --> 00:02:15.919 +and I appreciate the plain text reality of Denote. + +NOTE Demo + +00:02:15.920 --> 00:02:18.799 +So let's hop into the demo. + +00:02:18.800 --> 00:02:19.919 +I'm going to split my screen. + +00:02:19.920 --> 00:02:21.959 +Over on the right is going to be + +00:02:21.960 --> 00:02:24.199 +where I'm going to be live typing stuff. + +00:02:24.200 --> 00:02:27.319 +So let's get going. + +00:02:27.320 --> 00:02:29.799 +You'll notice I don't do a lot of screen splitting. + +00:02:29.800 --> 00:02:32.239 +It just makes it easier to focus. + +00:02:32.240 --> 00:02:34.039 +So let's create a note. + +00:02:34.040 --> 00:02:41.279 +All right, I have bound hyper to my command key, + +00:02:41.280 --> 00:02:42.519 +my right command key. + +00:02:42.520 --> 00:02:43.679 +This opens up a whole world. + +00:02:43.680 --> 00:02:45.559 +I'm going to create a blog post + +00:02:45.560 --> 00:02:49.799 +and we're going to name it the ever popular "hello world". + +00:02:49.800 --> 00:02:50.799 +It's Emacs. + +00:02:50.800 --> 00:02:51.519 +Great. + +00:02:51.520 --> 00:02:55.439 +We've saved it. + +NOTE Dabbrev and hippie-expand + +00:02:55.440 --> 00:02:57.399 +One of the things I encourage everybody to do + +00:02:57.400 --> 00:03:02.039 +is to watch Jay Dixit's presentation, Emacs for Writers. + +00:03:02.040 --> 00:03:08.079 +It showed me the utility of Dabbrev for quick auto correction. + +00:03:08.080 --> 00:03:11.479 +And I also love using hippie-expand. + +00:03:11.480 --> 00:03:14.639 +When I watch VS coders code, it's always a little sad pants + +00:03:14.640 --> 00:03:17.319 +because they're thinking about coding or writing + +00:03:17.320 --> 00:03:19.159 +in terms of their code. + +00:03:19.160 --> 00:03:24.239 +But I have found as a programmer, I tend to write more tech, + +00:03:24.240 --> 00:03:27.799 +more like English instead of programming code. + +00:03:27.800 --> 00:03:30.719 +So I think it's important to understand these tools + +00:03:30.720 --> 00:03:32.839 +that help me write better. + +NOTE Links + +00:03:32.840 --> 00:03:34.879 +All right, we're going to go with links. + +00:03:34.880 --> 00:03:36.999 +Links are foundational for the web. + +00:03:37.000 --> 00:03:41.159 +I'm going to insert a public link, + +00:03:41.160 --> 00:03:43.439 +which is a role playing game that I love, + +00:03:43.440 --> 00:03:45.159 +Worlds Without Number. + +00:03:45.160 --> 00:03:48.399 +And I'm going to go ahead and describe it. + +00:03:48.400 --> 00:03:49.239 +A role playing game. + +00:03:49.240 --> 00:03:53.479 +But I don't want to always say role playing game. + +00:03:53.480 --> 00:03:54.599 +I'm going to abbreviate it. + +00:03:54.600 --> 00:03:57.079 +So I wrote a function that will transform it. + +00:03:57.080 --> 00:04:00.239 +And let's take a look at what that looks like on the inside. + +00:04:00.240 --> 00:04:06.279 +When I do this real quick, it's toggling it back and forth. + +00:04:06.280 --> 00:04:10.119 +And I'll just keep doing that. + +00:04:10.120 --> 00:04:12.999 +I also have the idea of public notes and private notes. + +00:04:13.000 --> 00:04:15.399 +Public is things that's going to have a URL. + +00:04:15.400 --> 00:04:16.879 +I met a person at a conference. + +00:04:16.880 --> 00:04:19.639 +He gave a talk on something that I thought was very useful. + +00:04:19.640 --> 00:04:23.159 +I didn't write down what he talked about on his note. + +00:04:23.160 --> 00:04:26.279 +I wrote it where it was more relevant to the topic. + +00:04:26.280 --> 00:04:31.159 +And I can use a backlink to go find that. + +00:04:31.160 --> 00:04:34.119 +Next up, I demonstrate the abbreviation. + +00:04:34.120 --> 00:04:35.839 +I also have dates. + +00:04:35.840 --> 00:04:37.999 +This is a semantic date in HTML5. + +00:04:38.000 --> 00:04:41.839 +I can just have the year. + +00:04:41.840 --> 00:04:48.359 +I can also just have something like that date is today. + +00:04:48.360 --> 00:04:52.239 +And we have date links. + +00:04:52.240 --> 00:04:54.199 +I don't have backlinks built up for that, + +00:04:54.200 --> 00:04:56.959 +but I have ideas of how I go about doing it. + +00:04:56.960 --> 00:04:58.759 +And last up, thank you Frank Herbert, + +00:04:58.760 --> 00:05:00.799 +I want to introduce epigraphs. + +00:05:00.800 --> 00:05:04.359 +So this is epigraph. + +00:05:04.360 --> 00:05:08.719 +I just have that, any sufficiently, dot, dot, dot. + +00:05:08.720 --> 00:05:10.359 +And that's my epigraph. + +00:05:10.360 --> 00:05:16.719 +Backlinks, I mentioned that. + +00:05:16.720 --> 00:05:18.999 +Let's go take a look at Jonathan, right? + +00:05:19.000 --> 00:05:23.119 +He's a Rubyist, but importantly is the backlinks. + +00:05:23.120 --> 00:05:27.319 +He gave a talk on, that's right, PDFs. + +00:05:27.320 --> 00:05:28.959 +I can go look at what he spoke to + +00:05:28.960 --> 00:05:31.879 +and I can reference that because I will remember + +00:05:31.880 --> 00:05:36.679 +that talk or I will remember, oh, I need to look up PDFs. + +00:05:36.680 --> 00:05:39.799 +Oh, I have something in PDFs. + +00:05:39.800 --> 00:05:43.239 +Again, it's about stumbling upon data in a good way. + +00:05:43.240 --> 00:05:48.319 +So thinking of making linking easy helps me + +00:05:48.320 --> 00:05:52.159 +create more and more ways to find things, + +00:05:52.160 --> 00:05:57.119 +both by links, backlinks, indices, file searches, and so forth. + +00:05:57.120 --> 00:05:59.239 +It's all about information organization. + +00:05:59.240 --> 00:06:04.879 +Next up is a really cool function of org capture. + +00:06:04.880 --> 00:06:06.679 +So let's take a look here. + +00:06:06.680 --> 00:06:08.039 +I'm going to start a clock. + +00:06:08.040 --> 00:06:09.159 +It's running. + +00:06:09.160 --> 00:06:11.479 +And I'm going to bring up my browser. + +00:06:11.480 --> 00:06:19.679 +And I'm going to go ahead and capture to the content to clock. + +00:06:19.680 --> 00:06:23.159 +And it brings up this block quote, which is lovely. + +00:06:23.160 --> 00:06:25.719 +And boom, I'm going to save it. + +00:06:25.720 --> 00:06:28.199 +I'm going to close this. + +00:06:28.200 --> 00:06:30.959 +We're back here to my "hello world". + +00:06:30.960 --> 00:06:33.519 +And it has grabbed a block quote for this. + +00:06:33.520 --> 00:06:38.039 +Again, it helps me gather stuff up quickly. + +00:06:38.040 --> 00:06:41.119 +I've bound that also in my RSS feed. + +00:06:41.120 --> 00:06:44.199 +We're going to skip over macros, blocks, and the abstract. + +00:06:44.200 --> 00:06:45.479 +And we're going to get into the export + +00:06:45.480 --> 00:06:47.519 +because this is where we can see the magic + +00:06:47.520 --> 00:06:49.599 +that happens because I want to take things + +00:06:49.600 --> 00:06:51.079 +from private to public. + +00:06:51.080 --> 00:06:53.199 +So I have bound a key. + +00:06:53.200 --> 00:06:55.559 +These are my menu of things I don't want to forget. + +00:06:55.560 --> 00:06:56.759 +I will export. + +00:06:56.760 --> 00:06:57.839 +And here we go. + +00:06:57.840 --> 00:07:04.959 +Here is my blog post in markdown format with Hugo shortcodes. + +00:07:04.960 --> 00:07:07.399 +So let's go take a look at what that looks like. + +00:07:07.400 --> 00:07:09.359 +Localhost. + +00:07:09.360 --> 00:07:12.359 +I'm not writing in Rails. + +00:07:12.360 --> 00:07:14.919 +"Hello world" right there. + +00:07:14.920 --> 00:07:17.159 +This is the epigraph. + +00:07:17.160 --> 00:07:22.279 +And I have a mention of Worlds without Number. + +00:07:22.280 --> 00:07:24.799 +And I have mentioned this as a abbreviation. + +00:07:24.800 --> 00:07:27.519 +So I include the first time this text. + +00:07:27.520 --> 00:07:30.199 +Here's also Jonathan. + +00:07:30.200 --> 00:07:33.399 +He is not a public reference thing. + +00:07:33.400 --> 00:07:37.519 +Also, I have these things here. + +00:07:37.520 --> 00:07:39.399 +And here's my captured information + +00:07:39.400 --> 00:07:42.599 +along with the citation link to it. + +00:07:42.600 --> 00:07:49.159 +Again, helpful to be consistent. + +NOTE Conclusion + +00:07:49.160 --> 00:07:52.279 +In conclusion, when I started learning Emacs, + +00:07:52.280 --> 00:07:55.879 +I quickly shifted to vanilla Emacs and just started writing. + +00:07:55.880 --> 00:07:59.519 +As I wrote, when I needed to do something that I'd previously + +00:07:59.520 --> 00:08:02.999 +done in a text editor, I'd find an experiment with a package. + +00:08:03.000 --> 00:08:04.679 +I continue that mindset. + +00:08:04.680 --> 00:08:06.839 +As I write, I'm attending to what I'm doing. + +00:08:06.840 --> 00:08:08.879 +And eventually, I realize if I were to just write + +00:08:08.880 --> 00:08:11.639 +a function that does this one thing, + +00:08:11.640 --> 00:08:13.559 +I'd have a smoother writing experience. + +00:08:13.560 --> 00:08:16.359 +This helps me practice my craft, extend my editor, + +00:08:16.360 --> 00:08:19.999 +understand its capabilities, and begin exploring other things. + +00:08:20.000 --> 00:08:23.159 +The goal of this is all to minimize the distractions. + +00:08:23.160 --> 00:08:25.759 +As I'm thinking about it, I wanted to quickly add it + +00:08:25.760 --> 00:08:27.159 +and then move along, + +00:08:27.160 --> 00:08:29.559 +basically creating breadcrumbs for me + +00:08:29.560 --> 00:08:31.239 +to follow my thoughts in the future. + +00:08:31.240 --> 00:08:33.159 +And one of those functions is + +00:08:33.160 --> 00:08:36.479 +I'd like to write an extender for my abbr, + +00:08:36.480 --> 00:08:38.679 +abbreviation export to work in Latex. + +00:08:38.680 --> 00:08:40.279 +It's like halfway there. + +00:08:40.280 --> 00:08:42.239 +So I'm looking forward to getting that done + +00:08:42.240 --> 00:08:45.439 +when I have some time and can prioritize it. + +00:08:45.440 --> 00:08:47.799 +But for now, thank you. + +00:08:47.800 --> 00:08:53.160 +And I look forward to your questions. |